3

我是 openJPA 的新手。

我有一个场景,根据我的应用程序运行的服务器,我需要将设置更改为persistance.xml。例如。如果它在服务器 A 上运行,那么它应该使用不同的数据库(不同的 url)、不同的密码等,如果应用程序在服务器 B 上运行,那么它应该使用不同的信息。

您能否告诉我,应该采用哪种方式,使用数据源或简单地将属性放在持久性单元下。

仅供参考,我正在使用 WS 应用程序。服务器 7 和 RAD 7.5

任何类型的帮助将不胜感激。

4

1 回答 1

4

您正在使用应用程序服务器,因此无需在 persistence.xml 文件中设置数据库连接设置。您应该能够在您的应用服务器中创建一个 JNDI 数据源,然后使用它。每个服务器都可以让数据源具有相同的 JNDI 名称,这样就不需要任何 persistence.xml 差异。

Workshop、JPA 和 DataSources似乎与您特别相关。与在 WebSphere 6.0/6.1和WebSphere + JNDI + Spring Framework + Hibernate中设置 JNDI 数据源一样。

你用的是弹簧吗?如果是这样,那么问题很容易解决:您不要将数据源信息放在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 数据源。

于 2009-06-13T23:23:38.357 回答