【问题标题】:how do I change persistence.xml at run time如何在运行时更改 persistence.xml
【发布时间】:2010-11-02 18:25:33
【问题描述】:

我是 openJPA 的新手。

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

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

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

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

【问题讨论】:

    标签: java jpa openjpa


    【解决方案1】:

    您正在使用应用程序服务器,因此您无需在 persistence.xml 文件中设置数据库连接设置。您应该能够在您的应用服务器中创建一个 JNDI 数据源,然后使用它。每个服务器都可以让数据源具有相同的 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
    

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

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

    【讨论】:

    • 感谢 cletus i AM 的回复,实际上使用 JSF 和 IBM RAD 的 openJPA。您能否详细解释一下如何解决我的问题,即如果我在每台服务器上创建具有相同名称的数据源,那么我需要在 persistence.xml 下的数据源名称对吗?如果是这样,你能帮我举个例子吗?
    • 添加到 Websphere JNDI 数据源示例的链接。
    • 有关此方法的更详细说明,请查看 - stackoverflow.com/questions/2061410/spring-hibernate-jpa
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多