JPA - EclipseLink - 如何在运行时配置数据库模式名称

时间:2012-05-10 12:08:02

标签: java eclipse oracle jpa glassfish

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

详细说明:

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

我使用Oracle DB在Glassfish上运行JEE6 EJB WebProfile应用程序,数据库连接由Application Server处理,并通过JNDI提供给应用程序。

是否有任何机构知道如何在运行时配置数据库模式名称。

2 个答案:

答案 0 :(得分:8)

您可以使用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);
  } 
}

答案 1 :(得分:1)

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

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