2

ステートレスセッションBeanを作成しました。次に、インスタンス変数に残高を合計するビジネスメソッドも含まれます。ステートレスBeanであるため、以前のバランスを維持するべきではありません。

しかし、それはそれを維持しています。

すなわち、

最初にバランスとして100を追加し、再びバランスとして100を追加しました。

理論によれば、状態を維持しないため、結果として100が得られるはずです。しかし、それは200を与えています。

なぜ?

GlassfishServer3.0でNetbeansIDEを使用しています

例えば:


@Stateless
public class CalculatorBean implements CalculatorBeanRemote {
    double bal = 0.0;

    @Override
    public double Deposit(double parameter)
    {
        bal += parameter;
        return bal;
    }

} 

サーブレットでは、次のように追加しました。

@EJB
private CalculatorBeanRemote calculatorBean;

そしてサービスメソッドの内部では、 out.println ("<br/><br/><br/>Deposit : " + calculatorBean.Deposit(100.0));

4

1 に答える 1

4

EJB の別のインスタンスを取得することを期待していますが、常にそうであるとは限りません。

EJB は通常プールされます。つまり、EJB の使用が終了するとプールに戻り、別の呼び出しで同じオブジェクトが取得される可能性があります。

コンテナーはメンバーをクリーンアップしないため、100 ではなく 200 になります。

PostContrsuct と PreDestroy を使用して、取得する EJB をセットアップおよびクリーンアップできます。

一般に、ステートレス Bean ではメンバーを使用しないでください (まさにあなたが見ているもののため)。

于 2012-11-27T11:06:16.663 に答える