[Seasar-user:16204] Re: [S2JPA] PersistenceUnitInfoFactoryImplのDEFAULT_DATASOURCE

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2008年 11月 1日 (土) 21:00:01 JST


小林 (koichik) です.

Date:    Sat, 01 Nov 2008 19:45:04 +0900
From:    Akira Asakawa <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:16203] [S2JPA] PersistenceUnitInfoFactoryImplのDEFAULT_DATASOURCE

> 淺川と申します。
> 
> org.seasar.framework.jpa.impl.PersistenceUnitInfoFactoryImplから
> PersistenceUnitInfoを作成すると、persistence.xml中で
> <jta-data-source>と<non-jta-data-source>のどちらかを
> 指定しなかった場合に、指定しなかった方も強制的にデフォルトの
> jdbc/dataSourceを参照するデータソースが返されてしまいます。
(略)
> JSR 220にはデフォルトのデータソースは定義されていないようですし、
> 指定されていないデータソースはnullを返すべきだと思うのですが、

「null を返すべき」と判断する材料がありません.
getNonJtaDataSource() の戻り値については,

The non-JTA-enabled data source to be used by the persistence 
provider for accessing data outside a JTA transaction. 
The data source corresponds to the named <non-jta-data-source> 
element in the persistence.xml file or provided at deployment 
or by the container.

となっていて,S2 では最後の「or by the container」
としてデフォルトのデータソースを設定しています.
デフォルト値は PersistenceUnitInfoFactoryImpl の 
defaultNonJtaDataSource で変更できますが,現状は
null を設定することはできません.

「null を返すべき」なら,上述のところに「or null」
などと書いて欲しいところです.

> Toplink Essentialsでは、transaction-type="JTA"の場合でも
> <non-jta-data-source>を読み込み専用のデータソースとして使うため、
> jdbc/dataSource以外のデータソースをpersistence.xmlで指定した場合に
> 何の関係もないjdbc/dataSourceも使用してしまうことになります。

トランザクション境界外で遅延フェッチされる
場合とかでしょうか?
そうであれば,<non-jta-data-source> をちゃんと
指定するのが筋のような気もしますが (JTA の
トランザクション外でデータソースが使われると
分かっているのだから),それだと何か不都合が
あるのでしょうか?


-- 
<component name="koichik">
    <property name="fullName">"Koichi Kobayashi"</property>
    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>



Seasar-user メーリングリストの案内