2

私はEJBが初めてです。一部の情報 (構成など) をステートレス Bean に格納しても問題ない場合があると聞きました。私が理解しているように、ステートレス Bean のライフサイクルは Bean のメソッド呼び出しで始まり、メソッドの結論で終わります。メソッドが終了すると、ステートレス Bean がプールに返されます。

  1. Bean のメソッドが呼び出されるたびに、または Bean の作成時にのみ、構成フィールドが再初期化されるどうかを知りたいです。
  2. また、ステートレス Bean のプライベート フィールドに格納できるその他の情報を知りたいです。
@Stateless
public class MyBean {

    private String config = ....;

    //.....
}

前もって感謝します。

4

1 に答える 1

2
  1. は、Bean の作成時にインスタンスprivate String config = ...ごとに 1 回だけ初期化されます (通常はアプリケーションの起動時ですが、増加するトラフィックを処理するためにさらに Bean が必要であるとアプリケーション サーバーが判断した場合にも可能です)。

  2. 基本的に、パブリック Bean のメソッドを実行すると、その Bean インスタンスの唯一の実行者であることが保証されます。その間、プライベート変数に何でも格納できます。ただし、Bean を呼び出したコードに戻ると、後続の呼び出しが同じインスタンスに送信されるという保証はありません。

例:

@Stateless
public class MyBean implements MyBeanIntf {

    private Object state;

    @Override 
    public void beanMethod() {
        state = new Object();
        privateMethod();
    }

    private void privateMethod() {
        // it's safe to access 'state' here, will be the one set in
        // beanMethod()
    }

    @Override
    public void otherMethod() {

    }
}

@Stateless
public void MyBeanClient {
    @EJB
    private MyBean myBean;

    someMethod() {
        myBean.beanMethod();
        // Not necessarily the same instance that executed beanMethod
        // will execute otherMethod
        myBean.otherMethod(); 
    }
}

それが理論です。実際には、ステートレス EJB で内部の一時的な状態を維持することに依存するコードは避けます。このスタイルは、一般的に SLSB の状態を保持しても問題ないことを他のプログラマーに示しており、コードが混乱し、潜在的なエラーが発生する可能性があるためです (特に、以前の実行の状態が誤って現在の状態として取得された場合)。

于 2013-06-23T21:26:50.253 に答える