EJBコンポーネント以外でのコンテナ管理EntityManager取得方法

昨日から会社で苦戦していた、EJBコンポーネント以外でコンテナ管理のEntityManagerを取得するってのがやっとできたのでメモ。

①EJBコンポーネントの型に@persistenceContextアノテーションをつける。
(下記ではステートレスセッションbean)
@Stateless(name = “sampleEJB”, mappedName = “sampleEJB”)
@PersistenceContext(name = “sampleCtx”, unitName = “sampleUnit”)
public class StatelessSessionBean implements StatelessSession {
・・・・・・・
}

②persistence.xmlにpersistence-unitを指定
(下記では、データソースからDB接続を取得)

<persistence-unit name=”sampleUnit” transaction-type=”JTA”>

<jta-data-source>データソース名</jta-data-source>

<class>JPAクラスの完全修飾名</class>

</persistence-unit>

 

③使用したいモジュールからJNDIルックアップでEntityManagerを取得
EntityManager em = (EntityManager) context.lookup(“java:comp/env/sampleCtx”);
※java:comp/env/sampleCtxは、①でつけた@PersistenceContextのname属性をENC名で指定

参考URL:
http://download.oracle.com/docs/cd/B31017_01/web.1013/b28221/usclient005.htm#CIHCEHHG

コメントを残す