Cosminexus V9 アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)

[目次][用語][索引][前へ][次へ]

5.11.2 永続化ユニット名の参照スコープ

アプリケーションに含まれるEJBやサーブレットなどのコンポーネントは,@PersistenceUnitや@PersistenceContextのunitName属性,DDに定義した<persistence-context-ref>タグ下または<persistence-unit-ref>タグ下の<persistence-unit-name>タグで永続化ユニット名を指定して,使用する永続化ユニットを参照します。ただし,各コンポーネントから参照できる永続化ユニットのスコープは,次のとおりになります。

EARで定義した永続化ユニットの名前と,EJB-JARまたはWARで定義した永続化ユニットの名前が重複している場合,EJB-JARまたはWAR内のコンポーネントからは,より狭い範囲で定義された永続化ユニットが優先されます。例えば,EARとWAR内に同じ名前の永続化ユニットが定義されている場合,WARに含まれているコンポーネントからは,WARで定義した永続化ユニットが優先して見えます。EARの中にある永続化ユニットは見えません。

<この項の構成>
(1) 永続化ユニット名を省略した場合に使用される永続化ユニット
(2) 「#」文法を使用したEARレベル永続化ユニットの明示的な参照

(1) 永続化ユニット名を省略した場合に使用される永続化ユニット

アプリケーションサーバでJPAを使用する場合,コンポーネントが参照する永続化ユニット名を省略すると,次に示すルールで使用する永続化ユニットが決定されます。

なお,次の条件に該当する場合は,使用する永続化ユニットを一つに特定できないため,永続化ユニット名は省略できません。

(2) 「#」文法を使用したEARレベル永続化ユニットの明示的な参照

EARで定義した永続化ユニットの名前と,EJB-JARまたはWARで定義した永続化ユニットの名前が重複している場合,EJB-JARまたはWAR内のコンポーネントからは,より狭い範囲で定義された永続化ユニットが優先して見えます。ただし,永続化ユニットの参照名に「#」文法を使用することで,EARに定義した永続化ユニットを明示的に参照することもできます。「#」文法を使用する場合,永続化ユニット名は次のとおり指定します。

 

「コンポーネントが含まれるEJB-JARやWARから永続化ユニットルートへの相対パス」#「永続化ユニット名」

 

例えば,EARのejbs/myEjbs.jarに含まれたEJBから,EARのlib/persistenceUnitRoot.jarに含まれた永続化ユニット「myPersistenceUnit」を参照する場合,参照する永続化ユニット名は「../lib/persistenceUnitRoot.jar#myPersistenceUnit」になります。