2009-06-13 14 views
3

openJPAを初めて使用しています。実行時にpersistence.xmlを変更する方法

私はアプリケーションが動作しているサーバーによっては、設定をpersistance.xmlに変更する必要があるというシナリオがあります。 たとえば、サーバーAで実行されている場合は、別のデータベース(別のURL)、異なるパスワードなどを使用する必要があります。アプリケーションがサーバーBで実行されている場合は、別の情報を使用する必要があります。

また、データソースを使用するか、単にpersistence-unitの下にプロパティを置くことで、どのようにすればよいか教えてください。

私はWSアプリを使用しています。サーバー7およびRAD 7.5

どのようなタイプのヘルプも高く評価されます。

答えて

4

アプリケーションサーバーを使用しているため、persistence.xmlファイルでデータベース接続の設定を行う必要はありません。あなたのアプリケーションサーバーにJNDIデータソースを作成し、それを使用できるはずです。 EAchサーバーは、同じJNDI名を持つデータソースを持つことができ、次にpersistence.xmlの違いは必要ありません。

Workshop, JPA, and DataSourcesはあなたと特に関連があります。 Setting up a JNDI data source in WebSphere 6.0/6.1WebSphere + JNDI + Spring Framework + Hibernateのように。

Springを使用していますか?その場合、問題は簡単に解決できます。データソース情報を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 

実行時に.xmlが問題になるのは、JPAがどのように設計されているかではないからです。

もちろん、SpringでJNDIデータソースを使用することもできます。

+0

回答ありがとうございました 私は実際にIBM RADのopenJPAでJSFを使用しています。 私の問題を解決する方法についてもっと詳しく説明できますか。つまり、各サーバーに同じ名前のデータソースを作成し、persistence.xmlの下にデータソース名が必要な場合は、 もしそうなら、いくつかの例を私に助けてください。 – user122591

+0

Websphere JNDIデータソースの例にリンクが追加されました。 – cletus

+0

このアプローチの詳細については、http://stackoverflow.com/questions/2061410/spring-hibernate-jpaを参照してください。 – Vedran

関連する問題