2

疑問に思っていました...ejb3.1にステートレスBeanが2つあるとしましょう。

  1. @ステートレスクラス1

    @EJB MyUniqueInstanceBean uniqueBean1;

2.2。

@Stateless
Class2

@EJB MyUniqueInstanceBean uniqueBean2;

uniqueBean1とuniqueBean2は、MyUniqueInstanceBeanの一意のインスタンスであることが保証されていますか?

4

1 に答える 1

2

MyUniqueInstanceBeanがステートレスの場合、uniquebean1への呼び出しは手元になく、uniquebean2は実際には同じインスタンスへの呼び出しです。EJB 3.1仕様では、これは次の言葉で伝えられます。

ステートレスセッションBeanのすべてのインスタンスは同等であるため、コンテナはクライアントが呼び出したメソッドを使用可能なインスタンスに委任することを選択できます。これは、たとえば、コンテナが同じトランザクション内の同じクライアントからの要求を異なるインスタンスに委任する場合があり、コンテナが複数のトランザクションからの要求を同じインスタンスにインターリーブする場合があることを意味します。

MyUniqueInstanceBeanがステートフルの場合、uniquebean1とuniquebean2が同じインスタンスを参照しないことが保証されます。再び仕様から:

セッションBeanインスタンスの存続期間は、クライアントが依存性注入またはJNDIルックアップを介してステートフルセッションBeanインスタンスへの参照を取得したとき、またはクライアントがセッションBeanのホームインターフェイスでcreateメソッドを呼び出したときに始まります。これにより、コンテナはセッションBeanクラスでnewInstanceを呼び出して、新しいセッションBeanインスタンスを作成します。

シングルトンを使用している場合、インスタンスは1つしかないため、両方が同じインスタンスを参照します。

シングルトンセッションBeanは、アプリケーションごとに1回インスタンス化されるセッションBeanコンポーネントです。コンテナが多数の仮想マシンに分散されている場合、各アプリケーションには、JVMごとにシングルトンのBeanインスタンスが1つあります。

于 2012-05-10T18:59:43.320 に答える