2016-07-26 6 views
0

私は自分のデータベースを設計しており、エンティティ自体がデータベースにアクセスする必要があるという状況に達しました。EntityListenerでEJBを使用するにはどうすればよいですか?

私はWhy sometimes a reference to an EntityManager inside JPA entities is neededを読んでいます。

そして、私はEntityListenerでEJBにアクセスする可能性について興味があります。

public class MyEntityListener { 

    @PrePersist 
    private void onPrePersist(final Object object) { 
     // find an EJB 
     // and set those required values 
     // which each resides in a specific table. 
    } 
} 

これは可能ですか?

+1

エンティティリスナーでのEJBの注入は、Weld + Hibernate(WildFly 8〜10まで)のCDI '@ Inject'を使用して、いつも私のために働いています。私は実際には、実際に使用している環境の正確なバージョンを報告していないので、なぜこれがうまくいかないのかを知らせるユーザーを見てきました。少なくとも、これは特定のGlassFishバージョン(Hibernateの代わりにEclipseLinkを使用する)で失敗することがわかっています。 – BalusC

+0

@BalusCクラスパスにあるクラスのインスタンスではなく、EJBを注入してもよろしいですか? –

答えて

0

回答が見つかりました。

それはJSR 338: JavaTM Persistence 2.1によると、可能と思われます。

のJava EEで

3.5.1エンティティリスナー

エンティティリスナクラスコンテキストと依存性注入のAPI(CDI)を介して支持依存性注入を環境[10] CDIが有効になっている[43]。 CDIインジェクションを利用するエンティティリスナクラスは、PostConstructPreDestroy注釈で注釈付けされたライフサイクルコールバックメソッドを定義することもできます。これらのメソッドは、注入が行われた後、エンティティリスナインスタンスがそれぞれ破棄される前に呼び出されます。

持続性プロバイダは、CDI SPIを使用してエンティティリスナークラスのインスタンスを作成します。そのような場合に注射を行う。存在する場合、PostConstructおよびPreDestroyメソッドを呼び出します。エンティティ・リスナー・インスタンスを破棄することができます。

関連する問題