我是openJPA的新手。
我有一个场景,根据运行我的应用程序的服务器,我需要将设置更改为persistance.xml。 例如。如果它在服务器A上运行,那么它应该使用不同的数据库(不同的URL),不同的密码等,如果应用程序在服务器B上运行,那么它应该使用不同的信息。
你能否告诉我,应该采用哪种方式,使用数据源或简单地将属性置于持久性单元下。
仅供参考我正在使用WS应用程序。服务器7和RAD 7.5
任何类型的帮助都将受到高度赞赏。
答案 0 :(得分:4)
您正在使用应用程序服务器,因此您无需在persistence.xml文件中设置数据库连接设置。您应该能够在appserver中创建JNDI数据源,然后使用它。 EAch服务器可以使数据源具有相同的JNDI名称,然后就不需要任何persistence.xml差异。
Workshop, JPA, and DataSources似乎与您特别相关。与Setting up a JNDI data source in WebSphere 6.0/6.1和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数据源。