[Seasar-user:6993] Re: [Seasar]HOT DEPLOY 時にsingletonって

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2007年 4月 1日 (日) 01:00:07 JST


小林 (koichik) です.

Date:    Sat, 31 Mar 2007 21:19:59 +0900
From:    原田 <[E-MAIL ADDRESS DELETED]>
To:      seasar-ML <[E-MAIL ADDRESS DELETED]>
Subject: [Seasar-user:6991] [Seasar]HOT DEPLOY 時にsingletonって

> HOT DEPLOY時に、instance指定をsingletonにしたコンポーネントは、どのような扱いになるのですか?

HOT deploy では,リクエスト毎に新しいクラスローダが
作成され,クラスがロードされ,インスタンスが作成されます.
singleton のコンポーネントはそのリクエストの中では
唯一のインスタンスが作成されますが,異なったリクエストに
またがると別のインスタンスが作成されます.

> 無理も無いような気がしますが、毎回初期化され、requestのように動きます。

イメージとしては,リクエストの度に Web コンテナなり
AP サーバなりを再起動してアクセスするようなものだと
考えてください.
initMethod で指定したメソッドだけでなく,static
イニシャライザもそのたびに実行されます.

> 毎回初期化されてしまうので、INIT_METHODで指定したメソッドも毎回呼ばれてしまい、困っています。
> 
> 何かよい回避方法は無いでしょうか。

initMethod を実行したことを HOT deploy 非対象の
コンポーネントにフラグとして持てば回避できるかと
思います.
コンポーネントというほど大げさにしなくても,
適当なクラスの static なフィールドで状態を
管理すれば十分かと.

ただ,その initMethod で呼ばれるメソッドを変更しても
Web コンテナの再起動なり Web アプリの再デプロイなど
しないと確認できなくなってしまいますが.


-- 
<component name="koichik">
    <property name="fullName">"Koichi Kobayashi"</property>
    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>




Seasar-user メーリングリストの案内