[Seasar-user:19454] HOT deploy が有効なとき、新規に起動したスレッドから Dao 操作を行うと例外が発生
fjt ykhs
[E-MAIL ADDRESS DELETED]
2010年 3月 5日 (金) 16:49:24 JST
お世話になっております、藤田と申します。
以下のような現象が起こっているのですが、うまく問題の切り分けができず困っています。
何か調査のヒントがありましたら、ご教示いただけると幸いです。
■ 概要
HOT deploy が有効なとき、新規に起動したスレッドから
2 回以上 Dao 操作を行うと、 2 回に 1 回例外が発生します。
Web 画面 (Teeda 使用) のボタンから、 (できれば避けたいですが) Thread を起動し、
その新規 Thread 内で Dao を呼び出しています。
1回目の呼び出しは成功するのですが、2回目の呼び出しで失敗し、以後、
ボタンを押すたびに「成功→例外→成功→例外→成功→……」を繰り返します。
■ 環境
jdk 1.6.0_16
apache-tomcat 6.0.20
s2-framework 2.4.39
s2-extension 2.4.39
s2-tiger 2.4.39
s2-dao 1.0.49.
Teeda 1.0.13-sp7
※ ログは上記で取得しましたが、 S2framework, S2Dao, Teeda を最新バージョンに
アップデートして試しても同じ現象が発生しました。
■ 発生する例外
以下の例外が 2 回に 1 回 (正確に交互に) 発生します。
Exception in thread "Thread-18"
org.seasar.framework.beans.IllegalPropertyRuntimeException:
[ESSR0059]クラス(xxxproject.yyyyproject_core.entity.SampleOnbatchExecHist)のプロパティ(jobnetName)の設定に失敗しました。理由はjava.lang.IllegalArgumentException:
Can not set java.lang.String field
xxxproject.yyyyproject_core.entity.SampleOnbatchExecHist.jobnetName to
xxxproject.yyyyproject_core.entity.SampleOnbatchExecHist
■ 問題発生部分のコードイメージ
□ Web 画面 (Teeda 使用) のボタンから呼ばれるコード
Thread t = new Thread(new OnBatchThread());
t.start();
□ OnBatchThread 内のコード
OnBatchService onBatchService =
SingletonS2Container.getComponent(OnBatchService.class);
// 内部で Dao 呼び出し
onBatchService.sampleMethod();
□ OnBatchServiceImpl.sampleMethod() 内の処理
// 新規 insert
MtsysOnbatchExecHist mtsysOnbatchExecHist = new MtsysOnbatchExecHist();
mtsysOnbatchExecHistDao.insert(mtsysOnbatchExecHist); //
(*1) ← ここで例外発生
// insert したレコードを update
mtsysOnbatchExecHist.status = 1; //
(*2) 以下の「試したこと」で参照
mtsysOnbatchExecHistDao.update(mtsysOnbatchExecHist); //
(*2) 以下の「試したこと」で参照
サンプル用に、 insert してすぐに update するようにコードに簡略化
しても問題が発生しています。詳細を「試したこと」に記述します。
■ 試したこと
- 最新バージョンの Seasar, S2Dao, Teeda
→ ×: 結果、変わらずでした。
- HOT deploy をやめて COOL deploy に変更
→ ○: 正常に完了しました。 (Seasar の使い方・規約を間違っている???)
- スレッドの起動をやめて、 OnBatchServiceImpl.sampleMethod() を普通に呼び出し
→ ○: 正常に完了しました。 (スレッドを使うことは許されていない???)
- 例外が発生する部分 (*1) に Eclipse でブレークポイントを設定
→ ○: 正常に完了しました。 (ブレークポイントの有無だけで結果が変わる???)
- (*2) 部分のコードを削除
→ ○: 正常に完了しました。 (例外が発生する部分とより後のコードが何か影響している???)
■ 添付ログ
- Tomcat 起動ログ (起動ログ.txt)
- 成功時ログ (good.txt)
- 失敗時ログ (bad.txt)
上記のような内容を試してみたのですが、何か勘違いしていそうなポイントが
あれば、ヒントをいただけると助かります。
以上、よろしくお願いいたします。
--
FUJITA Yukihisa
mailto:[E-MAIL ADDRESS DELETED]
-------------- next part --------------
A non-text attachment was scrubbed...
Name: log.zip
Type: application/zip
Size: 8584 bytes
Desc: $BL5$7(B
URL: <http://ml.seasar.org/archives/seasar-user/attachments/20100305/d2ceaeb5/attachment.zip>
Seasar-user メーリングリストの案内