【问题标题】:JPA - EclipseLink - How to configure Database Schema name at runtimeJPA - EclipseLink - 如何在运行时配置数据库模式名称
【发布时间】:2012-05-19 00:06:37
【问题描述】:

我实现了一个使用 Oracle DB 的 Web 应用程序(JEE6、EJB WebProfile)。我的问题是,我需要更改使用的数据库模式(名称)而不重新编译/重新打包应用程序。所以我想要的(这只是一个想法,也许有人有更好的想法),是在服务器中有一些配置(JNDI),它指定了模式名称。但是如何配置 Eclipse Link 在运行时使用其他模式名称呢?

详情:

目前我使用orm.xml 文件来指定架构名称。但是Application使用了三种不同的Schema名称(一种用于开发,一种用于集成测试,一种用于生产),所以我需要对应用程序进行3次编译和打包(maven)。

我有一个使用 Oracle DB 在 Glassfish 上运行的 JEE6 EJB WebProfile 应用程序,数据库连接由应用程序服务器处理并通过 JNDI 提供给应用程序。

有没有人知道如何在运行时配置数据库模式名称。

【问题讨论】:

标签: java eclipse oracle jpa glassfish


【解决方案1】:

您可以使用 EclipseLink SessionCustomizer

package some.java.package;

import org.eclipse.persistence.config.SessionCustomizer; 
import org.eclipse.persistence.sessions.Session; 
import org.eclipse.persistence.sessions.DatabaseLogin; 

public class MySessionCustomizer implements SessionCustomizer {

  private String schema = "some_schema";
  public MySessionCustomizer() {
      schema = ... // read from property, jndi, etc.
  }

  public void customize(Session session) { 
      session.getLogin().setTableQualifier(schema);
  } 
}

【讨论】:

    【解决方案2】:

    配置 JPA 以使用数据源。然后,您可以为应用服务器中的应用程序配置不同的数据源。

    或者,您可以通过传递一组属性来创建 EntitymanagerFactory:http://docs.oracle.com/javaee/6/api/javax/persistence/EntityManagerFactory.html#createEntityManager%28java.util.Map%29

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-08
      • 2011-02-13
      • 2019-04-10
      • 2013-09-26
      • 1970-01-01
      • 2018-11-10
      • 1970-01-01
      相关资源
      最近更新 更多