2016-08-04 6 views
0

ノンインタフェースビューのステートレスDAO-EJBを持っています。これは、汎用の抽象DAOクラスから追加のメソッドreadAll();を継承していますので、ツリーはFooDAOBean <- extends GenericDAOImpl <- implements GenericDAOInterfaceですclick here to see GenericDAO implementation - リンクでそれは)抽象クラスではありません。@EJBインタフェースビューのないBeanのシングルトンでインジェクションが失敗する

@Stateless 
public class FooDAOBean extends GenericDAOImpl<ENodeFocus, Serializable>{ 

    @Override 
    public List<Foo> readAll() { 
     // do something... 
    } 
} 

と私はいくつかのエントリを使用してアプリケーションを構成する必要があり、初期化豆、持っている:私は取得していますデプロイの

@Singleton 
@Startup 
public class InitializationBean { 

    @EJB 
    FooDAOBean dao; 

    @PostConstruct 
    public void initialize() { 
     // do something 
    } 
} 

をエラー:

WFLYNAM0059:注射のためのリソースのルックアップに失敗しました: ENV/shitstorm.beans.InitializationBean/DAO

WFLYEE0046:私は、リモート・インタフェースを実装してFooDAOBeanに注釈を付けるとき

コンポーネントビューをインスタンス化に失敗しました@Remote(<RemoteInterface>.class)と正しく動作しています。しかし、私はリモートアクセスを許可したくありません。私にとっては、FooDAOBeanのメソッドは同じJVM(ローカル)でしかアクセスできないことが重要です。 FooDAOBeanInitializationBeanは同じEARプロジェクトに含まれているため、作業する必要がありますか、ここで何か不足していますか?それはシングルトンやここで起こっていることと関係がありますか?私はローカルインターフェイスを実装する必要がありますか?私はEJB 3.0以降、これはもう必要ないと思っていました。どうもありがとう! :)

答えて

1

FooDAOBeanがスーパークラスを介してビジネスインターフェイスを実装していることに注意してください。

オラクルのJava EEチュートリアルの状態:

Beanクラスは、単一のインターフェイスを実装している場合、そのインターフェイスは、ビジネス・インターフェースに想定さ です。ビジネスインタフェースは、ローカルの インタフェースです。ただし、javax.ejb.Remoteアノテーションで注釈が付けられている場合を除きます。 この場合、javax.ejb.Localアノテーションはオプションです。

したがって、FooDAOBeanには、期待しているインターフェイスなしのビューではなく、ローカルのインターフェイスビューがあります。

私は、FooDAOBeanImplのようにsthにあなたのBeanの名前を変更することをお勧めします。次にGenericDAOInterfaceを継承するインターフェイスFooDAOBeanを作成します。あなたのセッションBean FooDAOBeanImplは新しいインターフェイスを即座に導入し、クラスを@Local(FooDAOBean.class)と注釈して、明確に定義された@Localインターフェイスビューを得るようにしましょう。今すぐあなたが期待通りにFooDAOBeanを注入することができます。

関連する問題