2012-05-04 7 views
0

私は実行された呼び出しに応じて、私は別のEJBを注入する必要があるWebサービスを持っています。 @EJB注釈を使用して、Webサービスで使用できるすべてのEJBを指定できます。EJBがいつ注入されるのですか

例:

@EJB 
private EJBType1 ejb1; 
@EJB 
private EJBType1 ejb1; 

@WebMethod 
public String readDataFromType1() { 
    ejb1.call1(); 
} 

@WebMethod 
public String readDataFromType2() { 
    ejb2.call2(); 
} 

は、EJBが注入される私は何を知りたいですか? EJBの使用時にのみ、またはいずれかのWebサービス呼び出しが実行されたときに両方が注入されますか? 多くのEJBを注入するとパフォーマンスに悪影響を及ぼすことになるのではないかと心配しています。

答えて

0

EJBは、Beanの使用準備が整う前に挿入されます。したがって、どちらのメソッドも呼び出されなくても、両方のEJBType1が注入されます。しかし、心配する何らかの理由はありますか?場合によります。

EJBType1がリモートインタフェースを持つEJBである場合、そのようなBeanへの参照を取得するにはコストがかかる可能性があります(特にこのBeanがステートフルコンポーネントの場合)。

EJBType1がローカルインタフェースのEJBである場合、そのようなBeanのインジェクションに関連するオーバーヘッドは特に重要ではありません。アプリケーションサーバーによってプールできるステートレスコンポーネントの場合は特にそうです。

+0

EJBはすべてローカルです。それらが使われなければ、リソースの浪費のように感じるだけです。私は、すべてのアプリケーションのエントリポイントである1つのEJBを作成したい。このインタフェースは、基本的な監査証跡ログとシステム認証を行います。それが成功すると、関連するEJBが呼び出されます。つまり、1つのリクエストにつき1つのEJBしか使用されないかなりの数のEJBを注入する必要があります。しかし、EJBが使用されなくても注入されていることを確認してくれてありがとう。 – likenoother

関連する問題