2016-10-12 5 views
0
EJBローカルインタフェースのメソッドを呼び出す

推奨の方法は、ルックアップを実行することです:キャッシュJNDIルックアップ

<code> 
Context ic = new IntialContext(); 
ic.lookup(objectJndiName); 
</code> 

しかし、私は、アプリケーションの起動時に完全なJNDIツリーを参照し、最後に私が作成することができています

<code> 
    Map <String,Object> 
</code> 

(キーObjectNameと必須のインターフェイス実装のオブジェクト)私はキーでオブジェクトを検索し、このようなインタフェースで必要なメソッドを呼び出します:

method.invoke(bean, args); 

この方法は問題ありませんか?または毎回必要なejbのルックアップを実行する必要がありますか?

+0

あなたの方法では、マップを読み込んだ後に発生する変更をキャッチしません。これには何の指摘もありません。ここでは最適化された高価なものはありません。 – EJP

+0

インプリメンテーションは、状態を必要としないメソッドを持つステートレスセッションBeanであるため、implオブジェクトの変更を追跡する必要はありません。 –

+0

私はimplオブジェクトの変更について何も言わなかった。私はちょうど変更を言った。結論にジャンプしないでください。縛られているものが変わる可能性があります。これにはまだポイントがありません。そうしないでください。 – EJP

答えて

1

JNDIルックアップは、EE5以上のステートレスBeanのローカルインタフェースの参照をインスタンス化するための推奨方法ではありません。単に@EJBアノテーションやCDIの@Injectを使ってBeanを注入すると、うまく動作します。

+0

レガシーコードの問題です。注釈を使用することは、現在のシナリオではオプションではありません。既存のコードは、impクラスを解決するためにハードコードされた命名規則を使用しています。これが最初のステップです。次のステップでは当然EJBとInjectアノテーションを起動します。スレッドの安全性に関する問題はありますか? –

+0

申し訳ありませんが、あなたはローカルインタフェースについて言及しました。私は、EJB 2.xにはローカルインターフェースではなくホームインターフェースとリモートインターフェースがあったと思います。以前から使用していなかったので、取得したJNDIリファレンスがシングルトンクラス内にキャッシュされている 'Service Locator' EEパターンの使用を思い出すことができます。 – garfield

+1

EJB 2.1仕様にローカルインターフェイスが導入されました –

関連する問題