今まで見てきたように、JARファイル内のpersistence.xml
ファイルは異なる名前を持つ複数の永続コンテキストを定義することができます。名前の付いた永続コンテキストからEntityManager
を取得するには、@PersistenceContext
アノテーションのunitName
属性に名前を指定する必要があります。次の例はejb3trail
永続コンテキストをEntityManager
へ注入します。
@PersistenceContext(unitName="ejb3trail")
EntityManager em;
次の条件を満たせば、unitName
属性を省略することが可能です:
- アプリケーション全体で
persistence.xml
ファイルを一つだけ持つ。
- アプリケーションでスコープ付きクラスローダを使用中である。
二番目の項目はおそらくもっと説明が必要でしょう。EARファイルにデプロイされたWebアプリケーションでは、それはEARファイルのMETA-INF
ディレクトリでjboss-app.xml
ファイルが必要であるということを意味します。そのファイルはクラスローダ用の任意の名前を指定することが可能です。これはその例です:
<jboss-app>
<loader-repository>
trailblazer:app=ejb3
</loader-repository>
</jboss-app>
もしアプリケーションがスコープ付きクラスローダを持たなければ、アプリケーションで定義されたすべての永続コンテキストはサーバ全体で利用可能で、@PersistenceContext
注入は同様にグローバルコンテキストからEntityManager
を探します。それはアプリケーション自身の外部で定義された永続コンテキストの使用を可能にします。しかし、一方で、unitName
属性を介して永続コンテキスト名を明示的に指定しなければなりません。