2012-05-10 25 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); 
    } 
} 
相關問題