2009-07-31 20 views
9

Uso la persistencia JPA para mis modelos de datos con Eclipselink como proveedor de persistencia. Tengo una aplicación modular (OSGi) y uno de los módulos contiene el modelo de datos estándar y una unidad de persistencia que incluye automáticamente todas las entidades del paquete. El proveedor de persistencia está en otro módulo, que funciona bien.¿Cómo puedo fusionar/extender unidades de persistencia desde diferentes JAR?

Ahora quiero un tercer módulo para agregar algunas entidades a la unidad de persistencia. ¿Cómo puedo hacer eso? Encontré this solution, que parece específico de Spring que no estoy usando. El resumen de ese enfoque es escribir un postprocesador que se enganche en el procesamiento de la unidad de persistencia y combina manualmente las entradas <class> de los archivos persistence.xml.

¿Es posible fusionar unidades de persistencia? ¿Alguien puede sugerir una solución alternativa?

+0

¿Se supone que los tres módulos están en un solo .ear? –

+0

No, cada módulo es un JAR que luego se carga en un contenedor OSGi (Apache Felix, en mi caso). Eclipselink está en su propio JAR o en uno de los módulos y escanea paquetes visibles para archivos persistence.xml. Esto funciona bien –

Respuesta

5

En primer lugar, aquí hay un enlace en Dynamic-JPA que ofrecen una forma de actualizar las entidades de forma dinámica. Exploraría esta opción primero.


Aquí hay otro enlace ( PDF) de OSGi hay algunos diagramas de nivel superior que se ocupan de la persistencia y la EntityManagerFactory que puede ser útil.


un enfoque interesante pero pueden no estar relacionado

Aquí hay un enlace en creating persistence units programmaticly sin utilizar un archivo persistence.xml (que realmente no se puede hacer, pero las respuestas ofrecen una idea del problema) philk ofrece una sugerencia sobre cómo eliminar el proveedor del archivo persistence.xml. Si sigue este método, puede combinar sus entidades en una unidad de persistencia específica.

"Bueno, en los buenos tiempos de hibernación tan sólo pudiera crear una sesión y añadir mis clases a él sobre la marcha. Parece que nunca llegó a Soles de la APP especificaciones. Sin embargo, he eliminado por completo el proveedor del persistence.xml y entrégalo a EL utilizando las propiedades de la EMF. Este parece funcionar bien. Lo único que queda en persistence.xml es la especificación de las clases. Supongo que no sería demasiado difícil exponer el método que analiza el nombre de clase en EL y crea el ClassDescriptor para él como un método público del proveedor EL JPA. "


Finalmente, llegamos a la solución hackish, como ya se ha sugerido, simplemente edite sus archivos persistence.xml después del hecho. Creo que esto funcionaría (aunque no lo he intentado) pero definitivamente es una opción.

Cuestiones relacionadas