如何在运行时更改 persistence.xml 文件

3
我刚接触openJPA。
我有一个场景,根据我的应用程序运行的服务器不同,需要更改persistance.xml的设置。例如,如果它在A服务器上运行,则应使用不同的数据库(不同的url)、不同的密码等,如果应用程序在B服务器上运行,则应使用不同的信息。
你能告诉我哪种方式更好,是使用datasource还是简单地将属性放在persistence-unit下面吗?
FYI,我正在使用WS应用程序服务器7和RAD 7.5。
非常感谢您提供任何形式的帮助。
1个回答

4
您正在使用应用服务器,因此不需要在persistence.xml文件中设置数据库连接设置。您应该能够在应用服务器中创建一个JNDI数据源,然后使用它。每个服务器都可以将数据源具有相同的JNDI名称,然后就没有必要进行任何persistence.xml差异。 Workshop, JPA, and DataSources似乎特别适合您。以及在WebSphere 6.0 / 6.1中设置JNDI数据源WebSphere + 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

在运行时更改persistence.xml可能会有问题,因为JPA并不是设计成这样的。

当然,您也可以在Spring中使用JNDI数据源。


谢谢您的回复,Cletus。实际上我正在使用IBM RAD的OpenJPA和JSF。您能否更详细地解释一下如何解决我的问题?如果我在每个服务器上创建相同名称的数据源,则需要在persistence.xml中添加数据源名称,对吗?如果是这样,您能否给我提供一些示例帮助我解决问题? - user122591
Websphere JNDI数据源示例已添加链接。 - cletus
有关此方法的更详细解释,请查看 - https://dev59.com/OHI95IYBdhLWcg3w_zQN - Vedran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接