2012-05-02 15 views
0

ステートレスEJBの使用中に問題が発生しました。特定の静的メソッドをそのEJBで使用する必要がありますが、このメソッドは非常に重要で静的な依存性があります。同じ静的メソッドを使用する複数のステートレスBean

ステートレスセッションBeanのインスタンスは、要件(1つまたは複数)ごとに作成されています。だから、どのようにすべてのEJBがその静的メソッドの単一コピーを使用しているかを確かめることができます。私は確信していませんが、私は静的メソッドを使用するすべての異なるクラスがクラスの異なるコピーをロードし、次に静的メソッドの別のコピーを実行すると思います。

シングルトンEJBに依存することはできません。サーバーで複数のJVMが必要な場合に1つのコピーしか残らないことを保証していません。シングルトンEJBの異なるコピーが、異なるJVMに存在することになります。

ありがとうございます。

答えて

1

静的メソッドはクラスごとに1つで、たとえそのクラスのインスタンスが数千も作成されていても、すべて静的メソッドのコピーが1つしか表示されません。

EJBの静的メソッドを持つべきではないので、静的メソッドを静的メソッドにするべきです。

仕様から:

EE.5.2.3注釈及び注入

次のセクションで説明したように、特定の コンテナ管理コンポーネントクラスのフィールドまたはメソッドが注釈を付けることができます がアプリケーションコンポーネントの環境からのエントリをクラス に注入することを要求する。この章で説明されている種類のリソースのいずれかを に注入することができます。これらのリソースタイプのそれぞれに対応する 配備記述子のエントリを使用して、インジェクションを要求することもできます。 フィールドまたはメソッドには、アクセス修飾子(public、private、 など)が含まれている場合があります。アプリケーションクライアントメインクラスを除くすべてのクラスでは、 フィールドまたはメソッドは静的であってはなりません。

+1

なぜ「静的であってはいけません」と言われているのでしょうか?静かな人は誰ですか?標準的なJavaであっても、静的メソッドは黒い羊のようなものです。オブジェクト指向ではなく手続き型であり、どこに置くかは重要ではありません。プログラマは静的メソッドをクラスに編成しますが、オブジェクト状態では動作しないため、選択はいくぶん恣意的です。 – DavidS

+0

私は最近、静的メソッドがコンテナ管理のトランザクション、AOP、セキュリティなどに関与しないため、「静的ではない」と習得しました。私はそれがEJB/CDIがプロキシを使ってどのように仕事をするのかと関係していると思います。プロキシは、静的メソッド([Mockito](https://stackoverflow.com/)に似ています。質問/ 4482315/why-does-mockito-not-mock-static-methods)を参照してください)。 – DavidS

関連する問題