1

私はCDIとEJBの両方を学んでいます。WELD の CDI の説明 ( http://docs.jboss.org/weld/reference/latest/en-US/html/beanscdi.html ) を見ると、次のように述べられています。

セッション Bean の無制限の Bean タイプのセットには、Bean のすべてのローカル インターフェースとそのスーパーインターフェースが含まれます。セッション Bean に Bean クラスのローカル ビューがある場合、無制限の Bean タイプのセットには、Bean クラスとすべてのスーパークラスが含まれます。また、java.lang.Object はすべてのセッション Bean の Bean タイプです。ただし、リモート インターフェイスは一連の Bean タイプに含まれていません。

この特定の部分をテストしようとしています

Bean タイプの無制限のセットには、Bean クラスとすべてのスーパークラスが含まれます

したがって、2 つの EJB を作成しました。DummyParent を拡張する ReferencedEJB と、EJB への参照を持つ MainEJB です。

DummyParent.java

package com.etm.ejbtest;

public abstract class DummyParent {
    public DummyParent() {
    }

    public void sayHi() {
        System.out.println("Hi!");
    }
}

参照される EJB.java

package com.etm.ejbtest;

import javax.annotation.PostConstruct;
import javax.ejb.Singleton;
import javax.ejb.Startup;


@Singleton
@Startup
public class ReferencedEJB extends DummyParent  {
    public ReferencedEJB() {
    }

    @PostConstruct
    protected void init() {
        System.out.println("init of ReferencedEJB");
    }
}

MainEJB.java

package com.etm.ejbtest;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.ejb.Singleton;
import javax.ejb.Startup;

@Singleton
@Startup
public class MainEJB {
    @EJB
    private DummyParent dummyParent;

    public MainEJB() {
    }

    @PostConstruct
    protected void init() {
        System.out.println("init of MainEJB");
        dummyParent.sayHi();
    }
}

これを JBoss 7 で実行していますが、次のエラーが表示されます。

com.etm.ejbtest.MainEJB/dummyParent をバインドするためのタイプ 'com.etm.ejbtest.DummyParent' のインターフェースを持つ EJB が見つかりません

なぜそれが機能しないのですか?

4

2 に答える 2

2

@EJBCDI と注釈を混同しないでください。@EJBインジェクションは CDI ではなく EJB コンテナによって管理されますEJB を注入しますが、EJB でDummyParentはありません

これは、現場の新しい人にとって直感に反するように聞こえます。EJB は、Java EE が CDI を公式にサポートするよりもかなり前に登場しました。

CDI を介して EJB を注入するための Google 検索は、これに光を当てるかもしれません。

于 2013-07-10T19:46:21.343 に答える
1

次のルックアップ パラメータを使用すると、この方法で EJB を注入できます。

 @EJB(lookup="{moduleName}/ReferencedEJB")
 private DummyParent parent;
于 2013-07-11T17:25:44.370 に答える