2012-05-10 32 views
5

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

详情:

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

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

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

+0

您可以创建脚本,将输出3个工件具有相同的源代码,但不同orm.xml中每个环境,所以你不会需要在运行 – DaTroop

+0

更改架构名称,请http://stackoverflow.com/ q/5104185/366964&http://stackoverflow.com/q/9315593/366964可能会有所帮助。 –

回答

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); 
    } 
} 
相关问题