2009-03-20 3 views
2

デプロイされたエンティティ/ステートレスセッションBeanを持つJBoss 4.0.4 GAアプリケーションサーバーで実行されているEJB 2 CMPレガシーアプリケーションが必要です。すべてのEJBボイラープレートコードは、EntityEJB/EntityEJBManagerアノテーションからXDocletを介して生成されます。EJB 2.xの「リエントラントメソッド呼び出しが検出されました」例外の原因は何ですか?どのようにそれらを解決するには?

GUIクライアントがFacade createメソッドを呼び出すと、トランザクションをロールバックする「Reentrantメソッド呼び出しが検出されました」というメッセージが表示され、サーバーログにEJBExceptionのケースがたくさんあることに気付きました。

この例外は何を意味しますか? Found this link that explains what is meant by reentrancy、しかし、それは私のアプリを同時にaccesedすることができないと言うように私には思える:どのように私は


更新は(残念ながら、私はまだ再現することができませんでした)このようなエラーを避けることができますか?

答えて

0

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

1

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

EJB1をリエントラントとマークすることで、同じトランザクションで複数回アクセスできるようにするには、コンテナに許可するように指示することができます。

これは、次のタグで配備記述子で行われます。

<reentrant>True</reentrant> 

のXDocletはあなたのためにこれを生成するために使用することができ、対応するEntityEJB注釈があるはずです。

1

私たちは同じ問題を抱えており、私たちの解決策は2つありました。まず、ejbのどれも、ejb-jar.xml内にNotSupportedのトランザクション属性を持たないようにします。次に、「トランザクションごとのインスタンス」を楽観的なロック戦略として使用しました。これはベルトとブレースのアプローチのビットですが、それは動作します

関連する問題