実行時にpersistence.xmlを変更するにはどうすればよいですか

StackOverflow https://stackoverflow.com/questions/991750

  •  13-09-2019
  •  | 
  •  

質問

私は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 データ ソースを使用することもできます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top