[seasar-dev:440] Re: [s2dao] DaoMetaDataFactoryImpl とhotdeploy
yokota @ arksystems.co.jp
yokota @ arksystems.co.jp
2006年 6月 23日 (金) 10:35:14 JST
横田です。
On 2006年 6月月 23日 (金) 8:08 am, Hirotaka HONMA wrote:
>> それもありだと思います。ちなみに今でもDaoMetaDataFactoryImpl
>> のキャッシュクリアってできるんですか?できないならメソッド
>> 追加をよろしくお願いします m( )m >コミッタの方
>
> りょうかいです。
> https://www.seasar.org/issues/browse/DAO-17
> に項目をあげておきました。
> (まだ対応していません)
ありがとうございます。そうか、こういう時にJIRAを使えばいいんだ。
慣れてないなぁ。>自分。orz
> S2プロダクトを「hotdeploy対応」するには、
>
> 1. キャッシュしている箇所を特定して、
> 2. キャッシュをクリア可能にする
> (もしくはキャッシュをやめる、とか)
>
> という修正を行えば良いのですよね?
基本的にはそうだと思います。ちなみに
3. キャッシュをスレッド毎に独立させる
を2.と組み合わせて実現すれば完璧かも。
> S2Daoで他に行っているキャッシュは、このDaoMetaDataにぶら下がっ
> ているものだけなので(と思っています)、DaoMetaDataだけ対応す
> れば良さそうに思います。
それは良かった。ちなみに後今困っているのは、S2Containerが保持
するclassLoaderなんです。これはスレッドごとに変えるってのはか
なり難しいしおかしな話になりそうなので。
話しついでに、クラスのリローディングによるキャッシュ問題以
外のことで困っていることについて今思っていることを書くと、
・開発用ということでシングルユーザによるアクセスが前提だが、
とはいえフレームを用いたWebアプリやServletが画像を動的に
生成するページを持つWebアプリで単一画面に複数の動的画像が
あるケースでは複数スレッドからの同時アクセスが起こりえる。
この時現行のhotdeployのやり方では問題が出る可能性がある。
・これを解決するには、S2Containerの持つclassLoaderとBeanDesc
のキャッシュをどうにかする必要がありそうということは分かっ
た。が、結構慎重にやらないと難しいかも。
・一番安易な解決方法は、シングルスレッドモデルを採用すること。
つまり、開発中は同時アクセスに対して同期化を行う。パフォー
マンスの観点では×だが、開発時に限ったことなので目をつぶる。
・別の解決方法として、あるスレッドがOndemand#start()とend()
の間にある時別のスレッドの処理が入ってきたら、そのスレッド
ではstart()しないようにして、誰もstart〜end間にいなくなった
時点でend()処理を呼ぶような仕組みにすることが考えられる。
要は、「最初に部屋に入った人が電気をつけ、部屋に誰もいなく
なったら電気を消す」方式をとる。
ということがあります。で、いろいろ試し中です。うまくいったら
また報告しますが、アイデアとかアドバイスとかあればお願いしま
す。>みなさん。
--
YOKOTA Takehiko
yokota @ arksystems.co.jp
Seasar-dev メーリングリストの案内