Foros del Web » Programación para mayores de 30 ;) » Java »

Configuracion de JPA EclipseLink

Estas en el tema de Configuracion de JPA EclipseLink en el foro de Java en Foros del Web. Hola, necesito que por favor me ayuden, desarrollé un programa con persistencia EclipseLink y me crea el archivo persistence.xml, el cual a mas de tener ...
  #1 (permalink)  
Antiguo 04/01/2012, 20:43
 
Fecha de Ingreso: enero-2012
Ubicación: Guayaquil
Mensajes: 3
Antigüedad: 12 años, 11 meses
Puntos: 1
Pregunta Configuracion de JPA EclipseLink

Hola, necesito que por favor me ayuden, desarrollé un programa con persistencia EclipseLink y me crea el archivo persistence.xml, el cual a mas de tener registrada las clases entidades que utilizo, también registra los datos de conexion como la url, usuario y contraseña del servidor de base de datos. El problema es que este archivo persistence.xml se queda dentro del archivo.jar que genero, y esto hace que no sea dinamico el cambiarle los parametros de conexion, la aplicacion es de escritorio(swing) y quisiera saber si existe una forma de obtener estos parametros de conexion de alguna otra manera para no tener que generar un jar diferente cada vez que quiera cambiar los valores de los mismos.
  #2 (permalink)  
Antiguo 05/01/2012, 04:46
Avatar de FiruzzZ  
Fecha de Ingreso: diciembre-2007
Ubicación: en casa
Mensajes: 470
Antigüedad: 17 años
Puntos: 41
Respuesta: Configuracion de JPA EclipseLink

no se puede, persistence.xml DEBE ser compilado e includo en META-INF.
Lo que podés hacer es crear diferentes Persistence Unit y switchear cuando creás el EntityManagerFactory (si estás usando injection desde algún application server ya no sabría guiarte).


Código Java:
Ver original
  1. emf = Persistence.createEntityManagerFactory("config1");
  2.  emf = Persistence.createEntityManagerFactory("config2");
  3.  emf = Persistence.createEntityManagerFactory("config3");
Código XML:
Ver original
  1. <persistence>
  2.  
  3.     <persistence-unit name="config1">
  4. <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
  5.       <jta-data-source>java:/DefaultDS</jta-data-source>
  6.       <properties>
  7.          ... ...
  8.       </properties>
  9.    </persistence-unit>
  10.    <persistence-unit name="config2">
  11.           ......
  12.    </persistence-unit>
  13.    <persistence-unit name="config3">
  14.           ......
  15.    </persistence-unit>
  16.  </persistence>


Nota: realmente no se si existe una mejor práctica para esto, nunca me interesé en buscar otra alternativa, si la encontrás, estaría bueno que la publiques




Bue.. 10 minutos después de investigación
Una alternativa para @override algunas propiedades del persistence.xml justamente usando un Map de properties
Código Java:
Ver original
  1. Persistence.createEntityManagerFactory("unit-name", properties);
__________________
BadProgrammerException!

Última edición por FiruzzZ; 05/01/2012 a las 05:08 Razón: post topic research!
  #3 (permalink)  
Antiguo 05/01/2012, 10:21
 
Fecha de Ingreso: enero-2012
Ubicación: Guayaquil
Mensajes: 3
Antigüedad: 12 años, 11 meses
Puntos: 1
Información Respuesta: Configuracion de JPA EclipseLink

Gracias FiruzzZ, justo eso es lo que estaba buscando, al final pude hacer algo como esto:
Código Java:
Ver original
  1. Map prop = new HashMap();
  2.         prop.put("javax.persistence.jdbc.url", "jdbc:mysql://localhost:3306/comunicacion_sms");
  3.         prop.put("javax.persistence.jdbc.password", "admin");
  4.         prop.put("javax.persistence.jdbc.user", "root");
  5.         EntityManagerFactory emf = Persistence.createEntityManagerFactory(PU,prop);
  6.         EntityManager em = emf.createEntityManager();

Ya con esto puedo crear un archivo propiedades y con esto hacer que la configuracion se pueda realizar dinamicamente.

Muchas gracias por tu ayuda!!
  #4 (permalink)  
Antiguo 25/03/2012, 10:02
 
Fecha de Ingreso: mayo-2010
Mensajes: 4
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Configuracion de JPA EclipseLink

viejo te agradezco publiques como realmente hicistes que el
jta-data-source jdbc/default te funcionara estoy en las misma que estuvistes.

mi correo es [email protected]
  #5 (permalink)  
Antiguo 25/03/2012, 18:54
 
Fecha de Ingreso: enero-2012
Ubicación: Guayaquil
Mensajes: 3
Antigüedad: 12 años, 11 meses
Puntos: 1
Mensaje Respuesta: Configuracion de JPA EclipseLink

Que tal Joseprox, te indico los pasos que realizé en mi aplicación Swing con JPA, lo hice en Netbeans:

1. En la pestaña de Servicios, Databases, drivers, cree una nueva conexion usando Mysql (click derecho -- conecting ussing..).
2. Una vez creada la conexion, en mi proyecto, click derecho, new -> persistent unit, ahi escoges la conexion que acabas de crear en la pestaña de servicios.
3. Una vez creada la unidad de persistencia, se crea el archivo persistence.xml con los parametros de conexión, y cada vez que crees una clase entidad se va a agregar la referencia de esa clase en este archivo persistence.xml. Al final mi archivo persistence.xml quedó de la siguiente manera:

Código XML:
Ver original
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
  3.   <persistence-unit name="DefinicionesSmsPU" transaction-type="RESOURCE_LOCAL">
  4.     <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
  5.     <class>Entidad.Usuarios</class>
  6.     <class>Entidad.Alumnos</class>
  7.     <class>Entidad.Nivel</class>
  8.     <class>Entidad.Materias</class>
  9.     <class>Entidad.Paralelos</class>
  10.     <properties>
  11.       <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/comunicacion_sms"/>
  12.       <property name="javax.persistence.jdbc.password" value="admin"/>
  13.       <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
  14.       <property name="javax.persistence.jdbc.user" value="root"/>
  15.     </properties>
  16.   </persistence-unit>
  17. </persistence>

4. Con esto ya puedes utilizar tu aplicación con JPA, invocando la unidad de persistencia desde tu codigo java:
Código Java:
Ver original
  1. public String PU = "Motor_Emai_y_SMSPU";
  2. EntityManagerFactory emf = Persistence.createEntityManagerFactory(PU);
  3. EntityManager em = emf.createEntityManager();

5. De aquí viene la parte para hacer que la conexión sea dinámica, primero cuando inicio la aplicacion, levanto una ventana que me pide los datos de conexion a la base, y estos datos los guardo en un archivo llamado conexion.conf.
Código Java:
Ver original
  1. private Properties prop = new Properties();
  2. OutputStream propOut = null;
  3. try {
  4.             prop.setProperty("servidor", this.jTxtServidor.getText().trim());
  5.             prop.setProperty("puerto", this.jTxtPuerto.getText().trim());
  6.             prop.setProperty("password", this.jTxtPassword.getText().trim());
  7.             prop.setProperty("usuario", this.jTxtUser.getText().trim());
  8.             prop.setProperty("base", this.jTxtBase.getText().trim());
  9.             propOut = new FileOutputStream(new File(System.getProperty("user.dir") + "\\conexion.conf"));
  10.             prop.store(propOut, "Conexion");
  11.             propOut.close();
  12.         } catch (Exception e) {
  13.             System.out.println(e.getMessage());
  14.         }

6. Una vez que ya tenga el archivo creado, inicio mi aplicacion leyendo el archivo conexion.conf, utilizando sus datos para crear el EntityManagerFactory.

Código Java:
Ver original
  1. FileInputStream in = null;
  2.         try {
  3.             Properties prop = new Properties();
  4.             Map con = new HashMap();
  5.             in = new java.io.FileInputStream(System.getProperty("user.dir") + "\\conexion.conf");
  6.             if (in != null) {
  7.                 prop.load(in);
  8.                 if (prop != null) {
  9.                     String server = "jdbc:mysql://" + prop.getProperty("servidor", "").trim()
  10.                             + ":" + prop.getProperty("puerto", "").trim() + "/" + prop.getProperty("base", "").trim();
  11.                     con.put("javax.persistence.jdbc.url", server);
  12.                     con.put("javax.persistence.jdbc.password", prop.getProperty("password", "").trim());
  13.                     con.put("javax.persistence.jdbc.user", prop.getProperty("usuario", "").trim());
  14.                 }
  15.             }
  16.             private EntityManagerFactory emf; = Persistence.createEntityManagerFactory(PU, prop);
  17.             private EntityManager em = emf.createEntityManager();
  18.            
  19.         } catch (Exception e) {            
  20.             System.out.println(e.getMessage());
  21.         }

7. Con eso ya tienes como hacer que la conexion sea dinamica, obviamente la ventana que guarda los datos de conexion en el archivo conexion.conf, solo se va a ejecutar la primera vez que se inicie la aplicacion que estas desarrollando, o cuando los parámetros que estén guardados sean incorrectos, estas validaciones tenlas presentes al desarrollar tu aplicación, aquí solo te expliqué lo que se necesita para que la conexión sea dinámica.

Espero haberte ayudado, si tienes dudas por favor me comunicas.

Etiquetas: conexion, eclipselink, jpa, parametros, persistencia
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 20:13.