3

実行時に注入する複数のEJBから選択する方法を見つけようとしています。

シナリオは次のようになります。つまり、すべて同じインターフェース(ejbInterface)を実装する2つのBean(ejbA、ejbB)があります。いくつかのインジェクションポイント(他のマネージドBean、つまりejbCaller Bean)で、ejbInterfaceの実装をインジェクトしたいと思います。実行時にどれが必要かがわかります(つまり、DB値に基づいて)。

これを行うための1つの実用的な方法は、@ Alternativeアノテーションとデプロイメント記述子を介してデプロイメントで選択を行うことですが、実行時に選択したいと思います。

私はすでに@Producerアプローチを試しましたが、この方法では、管理されていないオブジェクト(プロデューサーでインスタンス化するオブジェクトで、コンテナー管理されていないか、それ自体が注入ポイントになる可能性があります)のみを注入できます。私はプロデューサーの2つの回避策/エクスプロイトを見つけました:

  • アンマネージドオブジェクトを生成し、ejbInterfaceのメソッドを介してマネージドオブジェクト(つまり、他のBean、エンティティマネージャー)をsetup渡します(ejbCallerはこれらを渡す必要があります)
  • プロデューサーでJNDIルックアップを使用して、管理対象オブジェクトを返します

どちらの回避策もエラーが発生しやすく、エレガントではありません。これに対するより良い解決策はありますか?

4

1 に答える 1

1

BeanManagerを注入して使用するだけです

javax.enterprise.inject.spi.BeanManager.getBeans(Type, Annotation...)

実行時

于 2014-02-15T07:28:55.473 に答える