Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA-EclipseLink-如何在运行时配置数据库模式名称_Java_Eclipse_Oracle_Jpa_Glassfish - Fatal编程技术网

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

Java JPA-EclipseLink-如何在运行时配置数据库模式名称,java,eclipse,oracle,jpa,glassfish,Java,Eclipse,Oracle,Jpa,Glassfish,我实现了一个使用Oracle数据库的Web应用程序(JEE6,EJB WebProfile)。我的问题是,我需要在不重新编译/重新打包应用程序的情况下更改使用的数据库模式(名称)。所以我想要的(这只是一个想法,也许有人有更好的想法),是在服务器中有一些配置(JNDI),它指定了模式名称。但是如何配置Eclipse链接以在运行时使用其他模式名称呢 详情: 目前,我使用orm.xml文件指定模式名称。但是应用程序使用三个不同的模式名称(一个用于开发,一个用于集成测试,一个用于生产),因此我需要编译和

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

详情:

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

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


是否有人知道如何在运行时配置数据库架构名称。

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


或者,您可以通过传递一组属性来创建EntitymanagerFactory:

您可以使用EclipseLink


您可以创建一个脚本,为每个具有相同源代码但不同orm.xml的环境输出3个工件,这样您就不需要在运行时更改架构名称了。参考&可能会有所帮助。
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);
  } 
}