2017-11-22 1 views
0

ちょうど考えられた実験。私はそれが絶対に使用されるべきではないことを知っていますが、私は知りたいですどのようにシステムが壊れたり、問題を引き起こすか。長命オブジェクトのステートレスEJBへの参照を保持するとどうなりますか?

セッションやアプリケーションスコープ、またはライフスパンが要求よりも長い他の種類のオブジェクトを想像してください。 @Stateless EJBフィールドがコンストラクタまたはセッタによって受け取られ、永続的にその参照を保持します。

そのEJBとコンテナはどうなりますか?

答えて

2

「ステートレスEJBフィールド」は、ステートレスEJBへの参照です。

ただし、EJBインスタンスを直接参照するものではありません。参照されるオブジェクトは、EJBの場合はproxyです。

コンテナは、そのプロキシを介してメソッドを呼び出すたびに、EJBのインスタンスへの参照を作成するか、そうでなければ取得し、それを呼び出します。コンテナにはこれらのEJBインスタンスのプールがあるため、EJBインスタンスを迅速に取得できます。結局のところ、彼らはStatelessであるため、これを行うことができます。

お持ちの場合:

public class Foo { 

    @EJB 
    private Bar myStatelessEJB; 

    public void doSomething() { 
     myStatelessEJB.eat(); 
     myStatelessEJB.something(); 
    } 

} 

その後myStatelessEJBの各呼び出しがBarの完全に異なるインスタンスを呼び出すことができます。

したがって、EJBへの参照をどのくらい保持しても違いはありません。コンテナは呼び出し間で完全に忘れてしまったり、他のクライアントのためにプールに戻したりすることがあります。

+0

興味深い。たとえば、シングルトンのリファレンスを保持することは、私が思ったような恐ろしい練習ではありませんか? – Faerindel

+0

何ですか? [@ javax.ejb.Singleton](https://javaee.github.io/javaee-spec/javadocs/javax/ejb/Singleton.html)?あなたはこれらについて尋ねなかった。 –

+0

いいえ、私は手で書かれた普通のものを意味します。 – Faerindel

関連する問題