実行時にpersistence.xmlを変更するにはどうすればよいですか
質問
私はopenJPAを初めて使用します。
アプリケーションが実行されているサーバーによっては、設定をpersistance.xmlに変更する必要があるシナリオがあります。たとえば。サーバー A で実行されている場合は、別のデータベース (別の URL)、別のパスワードなどを使用する必要があります。アプリケーションがサーバー B で実行されている場合は、別の情報を使用する必要があります。
また、データソースを使用するか、単にプロパティをpersistence-unitの下に置くか、どちらの方法で実行する必要があるかも教えていただけますか。
参考までに、私はWSアプリを使用しています。サーバー 7 および RAD 7.5
いかなる種類のご支援も大歓迎です。
解決
アプリケーション サーバーを使用しているため、persistence.xml ファイルでデータベース接続設定を行う必要はありません。アプリサーバーで JNDI データ ソースを作成し、それを使用できるはずです。各サーバーのデータ ソースの JNDI 名が同じであれば、persistence.xml の違いは必要ありません。
ワークショップ、JPA、およびデータソース 特にあなたに関係があるようです。同様に WebSphere 6.0/6.1でのJNDIデータソースのセットアップ そして WebSphere + JNDI + Spring フレームワーク + Hibernate.
スプリングを使っていますか?そうであれば、問題は簡単に解決できます。データ ソース情報をpersistence.xmlに入れるのではなく、アプリケーション コンテキストに入れると、サーバーごとに異なる設定が適用されます。
例えば:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:database.properties"/>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${database.class}"/>
<property name="url" value="${database.url}"/>
<property name="username" value="${database.username}"/>
<property name="password" value="${database.password}"/>
</bean>
また、各サーバーは、各サーバー上に異なる database.properties ファイルを持つことができます (この例では、それぞれがクラスパスのどこかにあります)。
database.username=scratch
database.password=scratch
database.class=oracle.jdbc.OracleDriver
database.url=jdbc:oracle:thin:@localhost:1521:XE
実行時にpersistence.xmlを変更すると、実際にはJPAの設計方法ではないため、問題が発生します。
もちろん、Spring で JNDI データ ソースを使用することもできます。