[Seasar-user:19457] Re: HOT deploy が有効なとき、新規に起動したスレッドから Dao 操作を行うと例外が発生
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2010年 3月 5日 (金) 18:00:00 JST
小林 (koichik) です.
Date: Fri, 5 Mar 2010 16:49:24 +0900
From: fjt ykhs <[E-MAIL ADDRESS DELETED]>
To: [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:19454] HOT deploy が有効なとき、新規に起動したスレッドから Dao 操作を行うと例外が発生
> ■ 問題発生部分のコードイメージ
> □ Web 画面 (Teeda 使用) のボタンから呼ばれるコード
> Thread t = new Thread(new OnBatchThread());
> t.start();
生成されたスレッドで HOT deploy を有効に
するには,スレッドのコンテキストクラスローダを
HOT deploy 用のものにする必要があります.
また,HOT deploy はマルチスレッドに対応して
いないので,Web 側のスレッドと排他制御する
必要があります.
これらは通常 HotdeployFilter で行われます.
アプリが起動したスレッドでこれらを行うには,
OnBatchThread#run() の現在の内容を doRun()
メソッドに移して,run() を
public void run() {
if (HotdeployUtil.isHotdeploy()) {
synchronized (HotdeployFilter.class) {
HotdeployBehavior ondemand = (HotdeployBehavior)
S2ContainerBehavior.getProvider();
ondemand.start();
try {
doRun();
} finally {
ondemand.stop();
}
}
} else {
doRun();
}
}
のようにしてください.
また,アプリが起動したスレッドでは request や
session スコープのコンポーネントは利用できないので
注意してください.
--
<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 メーリングリストの案内