2012-05-10 13 views
5

Implemento una aplicación web (JEE6, perfil web EJB) que utiliza una base de datos Oracle. Mi problema es que necesito cambiar el esquema de base de datos (nombre) utilizado sin recompilar/volver a empaquetar la aplicación. Entonces, lo que quiero (esta es solo una idea, tal vez alguien tiene una mejor), es tener alguna configuración (JNDI) dentro del Servidor, que especifique el nombre del Esquema. Pero, ¿cómo configurar Eclipse Link para usar otro nombre de esquema en tiempo de ejecución?JPA - EclipseLink - Cómo configurar el nombre del esquema de base de datos en el tiempo de ejecución

Detalles:

En el momento en que utilizan el archivo orm.xml para especificar el nombre de esquema. Pero la Aplicación usa tres nombres de Esquema diferentes (uno para desarrollo, uno para prueba de integración y uno para producción), así que necesito compilar y empaquetar (maven) la aplicación 3 veces.

Tengo una aplicación JEE6 EJB WebProfile que se ejecuta en un Glassfish usando Oracle DB y la conexión de la base de datos es manejada por el servidor de aplicaciones y transferida a la aplicación a través de JNDI.

¿Alguien tiene una idea de cómo configurar el nombre del esquema de la base de datos en el tiempo de ejecución?

+0

Puede crear secuencias de comandos que serían de salida 3 artefactos para cada entorno con el mismo código fuente, pero diferente orm.xml por lo que no tendrá que cambiar el nombre de esquema en tiempo de ejecución – DaTroop

+0

Consulte http://stackoverflow.com/ q/5104185/366964 y http://stackoverflow.com/q/9315593/366964 pueden ayudar. –

Respuesta

8

puede utilizar 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); 
    } 
} 
Cuestiones relacionadas