[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 メーリングリストの案内