2012-01-25 5 views
0

複数の実装がある場合、実行時に使用するEJB実装を決定する方法はありますか?ランタイムまでロジックが分からないため、アノテーションやデプロイメント記述子を使用できません。 MyEJBFooMyEJBBarを、両方のMyEJBビジネスインタフェースを実装しています条件に基づいて実行時までどのEJBを使用するかを知っているだけの場合、EJB 3の実装を挿入するにはどうすればよいですか?

のは、私は、次のEJBの実装を持っているとしましょう。 DEV_MODE = TRUE/FALSEというフラグがリソースバンドルに格納されているとしますが、使用する実装が実行時までわかっている場合は、そのEJBの依存性注入をまだ行うことができます。それが真の場合はMyEJBFooを使用し、 MyEJBBar

私は工場のパターンを考えていましたが、それを行う最良の方法であるかどうかはわかりません。

答えて

2

使用MyEJBを委任:あなたは無条件委任MyEJBの両方に注入されているので、

public class MyEJBDelegatingImpl implements MyEJB { 
    // Inject: can't remember exact annotation 
    private MyEJB myEJBFoo; 

    // Inject: can't remember exact annotation 
    private MyEJB myEJBBar; 

    private getDelegate() { 
     if (condition for myEJBFoo) { 
      return myEJBFoo; 
     } else { 
      return myEJBBar; 
     } 
    } 

    ... 
    //Now implement MyEJB delegating to getDelegate() 
} 

唯一の注意点は、両方のインスタンス(myEJBFooとmyEJBBar)は関係なく、環境条件が何であるかをインスタンス化しないために持っていることです。

+0

+1いい回答です。どうもありがとう。 –

+0

注射後、myEJBFooの正しい実装(MyEJBFoo)でありMyEJBBarではないことをどのように知っていますか? – icvg

+0

ミスした注釈は@EJB(beanName = "MyEJBFoo")と@EJB(beanName = "MyEJBBar")です。 – icvg

2

2つの実装に1つのインタフェースを使用する場合は、注入点の解決に注意してください(hereを参照)。

また、CDIを使用する可能性がある場合は、そのようなことを可能にするため、producer methodsをチェックしてください。

関連する問題