私はDIには新しいですが、突然私はEJBアプリケーションでそれを使用する必要があるので、私はそれを再作成しようとします。依存性注入とコンテナクラス(java-ee 7)
このアプローチには、2つの実装 - 2つの実装を持つコンテナクラスが含まれます。これは、パラメータに応じて、一方または両方の実装で動作します。コンテナはシングルトンのメソッド呼び出しで作成されますが、他のejb beanによって使用されます。
ここで私は他のCDIマネージドクラス(ejb bean)で正しく動作するようにSecurityContainerクラスを作成する方法、またはCDI自体を管理する方法が必要ですか?
私は古い(非CDI)コードを提供しています。パラメータを読み取り、コンテナをインスタンス化:
public class SecurityContainer implements SecurityHelper {
private SecurityHelper secPrg;
private SecurityHelper secHard;
public SecurityContainer(SecurityHelper secPrg, SecurityHelper secHard){
this.secPrg=secPrg;
this.secHard=secHard;
}
具体的な実装は今DbWorkerとResponseBuilder EJB豆を注入することがあります。ここでは
@Singleton
public class MySingleton {
private static final MySingleton instance = new MySingleton();
private volatile SecurityHelper securityHelper; // container
public void setSecurityHelper(SecurityHelper secHelper){ securityHelper=secHelper; }
public SecurityHelper getSecurityHelper(){ return securityHelper; }
/* now it has some @Inject....*/
public void start(String passwordP, String passwordH)
.....
// application work with one or two implementations of security
if ("P".equals(DbParams.getServerSecurityFlag()))
instance.setSecurityHelper(new SecurityContainer(new SecurityHelperImplP(DbWorkerImpl.getInstance(), ResponseBuilderImpl.getInstance()),
null));
else
instance.setSecurityHelper(new SecurityContainer(new SecurityHelperImplP(DbWorkerImpl.getInstance(), ResponseBuilderImpl.getInstance()),
new SecurityHelperImplH(DbWorkerImpl.getInstance(), ResponseBuilderImpl.getInstance())));
securityHelper.createSecurity(passwordP, passwordH);
は、コンテナクラスです。 SecurityHelperImplHは同じように見えます。私は修飾子、多分プロデューサーが必要と考えていますが、それのルックスではドット
あなたはこのプロデューサーをどこに置くと思いますか? これまでのところ、私はSecurityContainerをそのまま残しました。 MySingletonは現在CDIで管理され、他のマネージドBeanはmySingletonのgetSecurityHelper()からsecurityContainerを使用します。 – Buch
プロデューサが別のCDI Bean内に存在する限り(CDIがそれを見つけることができるように)、問題はありません。 From CDI 1.2 spec - 'プロデューサメソッドは、マネージドBeanクラスまたはセッションBeanクラスのデフォルトアクセス、パブリック、保護、または非抽象メソッドでなければなりません。 「だから私はそれをあなたにとって便利なところに置いて言う。 – Siliarus
SecurityHelperImplPとSecurityHelperImplHを引数としてプロデューサに渡す必要がありますか?私は修飾子でそれらを渡そうとしましたが、コンパイルエラーを受け取りました – Buch