2012-01-25 6 views
0

私はシングルトンBeanを持っています。私はいくつかの初期化を実行する@PostConstructでアノテーションされたメソッドを持っています。初期化の1つは、DBからいくつかの値を読み込むことです。このメソッドには、DBにアクセスするサービスBeanであるStateless Beanを挿入します。シングルトンBeanは、このメソッド(シングルトンBean内のどこにもありません)でのみ必要なので、シングルトンBeanのフィールドとしてステートレスBeanを注入したくありません。私はシングルトン豆でこれを書いたの行うには:シングルトンBeanにステートレスBeanを注入する

@Singleton 
public class MySingletonBean { 

    @PostConstruct 
    @EJB 
    public void init(SLSBService service) { /* use service to read from DB */ }; 
    ... 
} 

問題はシングルトンBeanがインスタンス化できないということです。何か案が?前もって感謝します。

答えて

1

@PostConstruct注釈付き(コールバック)メソッドは、すべての参照が解決された後(実際にはすべてのBeanが挿入された後)、実際に呼び出されるため、この構造は機能しません。

@PostConstructを削除し、通常のセッター注入を使用することができます。ただし、注入された他のリソースが必ずしもこの時点で解決されているわけではないことに注意してください。

@EJB 
public void setService(SLSBService service){ 
    service.doSmg(); 
} 

@Stateless  
public class SLSBService{ 
    @PersistenceContext 
    private EntityManager em; 

    @TransactionAttribute(TransactionAttributeType.MANDATORY) 
    public void doSmg() { 
     Member member = new Member(); 
     member.setEmail("[email protected]"); 
     member.setName("fubu"); 
     member.setPhoneNumber("453454534535"); 
     em.persist(member); 
    } 
} 

/*編集*/

はちょうどそれを試しためのいくつかの時間を過ごしました。メソッドはトランザクション内で実行され、(SLBService内の)EntityManagerも適切にインジェクトされるため、この構造体はDAOに対して使用可能でなければなりません。他のEJBへの期待された参照はまだ解決されていないので、それに注意してください。

関連する問題