2012-05-10 12 views
5

Implemento un'applicazione Web (JEE6, EJB WebProfile) che utilizza un DB Oracle. Il mio problema è che ho bisogno di cambiare lo schema del database usato (nome) senza ricompilare/riconfezionare l'applicazione. Quindi quello che voglio (questa è solo un'idea, forse qualcuno ne ha una migliore), è avere una configurazione (JNDI) all'interno del Server, che specifica il nome dello Schema. Ma come configurare Eclipse Link per utilizzare un altro nome di schema in fase di runtime?JPA - EclipseLink - Come configurare il nome dello schema del database in fase di esecuzione

Dettagli:

Al momento io uso il file orm.xml per specificare il nome dello schema. Ma l'applicazione utilizza tre diversi nomi di schema (uno per lo sviluppo, uno per il test di integrazione e uno per la produzione), quindi ho bisogno di compilare e pacchettizzare (maven) l'applicazione 3 volte.

Possiedo un'applicazione WebProfile EJB JEE6 in esecuzione su un Glassfish con l'utilizzo di un DB Oracle e la Connessione database viene gestita dal server applicazioni e provata per l'applicazione tramite JNDI.

Qualcuno ha un'idea su come configurare il nome dello schema del database in fase di esecuzione.

+0

È possibile creare script che sarebbe uscita 3 artefatti per ogni ambiente con lo stesso codice sorgente, ma diverso orm.xml in modo non avrete bisogno di cambiare nome dello schema in fase di esecuzione – DaTroop

+0

Fare riferimento http://stackoverflow.com/ q/5104185/366964 e http://stackoverflow.com/q/9315593/366964 potrebbe essere d'aiuto. –

risposta

8

è possibile utilizzare un 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); 
    } 
} 
Problemi correlati