2010-11-24 14 views
4

別のEJBの中で@EJBを使用することはできますか?私は今これをしようとしています、そして、私のEJBはnullに終わっています。私は例で私の問題の概要を説明します。EJB 3.1 - EJB内で@EJBを使用することは可能ですか?

@Stateless 
@LocalBean 
@Local(LoginServiceLocal.class) 
public class LoginService implements LoginServiceLocal {  

    public void createLogin(String email, String password) { ... } 
} 

@Stateless 
@LocalBean 
@Local(AccountServiceLocal.class) 
public class AccountService implements AccountServiceLocal { 

    @PersistenceContext(unitName = "accounts") 
    private EntityManager accountEntityManager; 

    @EJB 
    private LoginServiceLocal loginService; 

    public void createAccount(Account account, String email, String password) { 
     accountEntityManager.persist(account); 
     loginService.createLogin(email, password); 
    } 
} 

このタイプのものは可能でしょうか?また、私はEJBContainerを使って埋め込みコンテナを使用していると言いますが、JNDIを使ってAccountServiceを探していますが、loginService.createLoginをAccountServiceで呼び出すと、loginServiceはnullになります( @EJB)。

私がしようとしていることは可能ですか?

ありがとうございました。

+0

このコードは間違いなく互換性があります。無関係な配備の問題が発生している可能性がありますので、LoginServiceが正常に配備されていることを確認してください。 @EJB経由でEJBを参照するEJBの実例を見たい場合は、http://openejb.apache.org/3.0/injection-of-other-ejbs-example.html –

答えて

2

はい、可能です。

@LocalBeanアノテーションは、EJBがインタフェースなしのクライアントビューを公開できるようにするため、ローカルインタフェースを定義する必要はありません。

一方、@Localアノテーションは、Beanのローカルクライアントインタフェースを定義します。

上記のいずれかの設定オプションのいずれかを選択してください。

@LocalBeanアノテーションを使用する場合は、@Localアノテーションを削除し、implementsキーワードを削除し、Beanクラス名に@EJBアノテーションを挿入します。

@Localアノテーションを使用する場合は、@ Localおよび@ LocalBeanアノテーションを両方ともドロップし、インタフェース名を使用して@EJBアノテーションをBeanに挿入します。

+1

を参照してください。両方を使用しても問題ありません。それが何かに影響するならば、間違いなくバグです。 –

1

はい、私はちょうどそれをする私のコードのいくつかに取り組んでいました。これは、EJBの作成方法に問題がある可能性があります。私は注射とjndiルックアップを使用していませんでした。

0

EJB3.1を使用している場合は、CDIの@Injectを使用することもできます。

関連する問題