あなたの例を少し変更しましょう
@Stateless
public class MyBean1 {
@Resource
private SessionContext sessionContext;
pulic void method1() {
// method implementation
// As a side-effect, something is written into a database
// using an XA data source,
// and a message is sent using XA JMS
// (both under control of an XA transaction)
}
pulic int method2(int i) {
return i * i;
}
}
たとえば、セッション コンテキストUserTransaction
はおよびを取得するために使用されますgetCallerPrincipal
。これらは常に同じであるとは限りません (2 つのクライアントがすべて EJB の場合)。については、これは現在のスレッドUserTransaction
にバインドされています( Javadocを参照)。
セッション コンテキストはフィールドに格納されるため (個々のメソッドに引数が渡されないため)、2 つの異なるクライアントから同じ EJB インスタンスにアクセスすることはできません。
したがって、仕様では、コンテナーが同じインスタンスへの呼び出しをシリアル化する必要があります。
method2
副作用のない純粋に機能的な実装であるを見ると、EJB は必要ありません。