2

デプロイされたエンティティ/ステートレス セッション Bean を使用して、JBoss 4.0.4 GA アプリケーション サーバー上で実行される EJB 2 CMP レガシー アプリを管理しています。すべての EJB ボイラープレート コードは、EntityEJB/EntityEJBManager アノテーションから XDoclet を介して生成されます。

GUI クライアントがファサードcreateメソッドを呼び出すと、サーバー ログに「再入可能メソッド呼び出しが検出されました」というメッセージとともに EJBException が多数発生し、トランザクションがロールバックされることに気付きました。

この例外は何を意味しますか? このようなエラーを回避するにはどうすればよいですか (残念ながら、まだ再現できませんでした)。


更新: reentrancy の意味を説明するこのリンクを見つけましたが、私のアプリには同時にアクセスできないと言っているようです?

4

3 に答える 3

1

同じ問題に遭遇したばかりで、解決策は 2 つあります。まず、ejb-jar.xml 内でどの ejb にも NotSupported のトランザクション属性がないことを確認します。次に、楽観的ロック戦略として「トランザクションごとのインスタンス」を使用しました。少しベルトとブレースのアプローチですが、うまくいきます

于 2010-11-09T12:57:18.860 に答える
1

これは以前、EJB1 が EJB2 を呼び出し、EJB2 が同じトランザクションの一部としてコンテナー内で EJB1 にコールバックするのを見たことがあります。

EJB1 を再入可能としてマークすることで、コンテナーにこれを許可するように指示できます。これにより、同じトランザクションで複数回アクセスできるようになります。

これは、次のタグを使用してデプロイメント記述子で行われます。

<reentrant>True</reentrant>

XDoclet がこれを生成するために使用できる、対応する EntityEJB アノテーションがあるはずです。

于 2009-04-05T07:53:33.867 に答える
0

これは、問題の Entity Bean に同時にアクセスできないことを意味します。データが破損する可能性があるため、これは理にかなっています。

于 2009-03-20T17:00:25.330 に答える