2011-11-10 10 views
6

Tenemos que renombrar persistence.xml para engañar a WebSphere 7 para que no use su OpenJPA incorporado.configure Hibernate para usar un persistence.xml renombrado

Es bastante fácil de hacer cuando se utiliza la primavera, que acaba de encargar a la fábrica de gestor de la entidad a utilizar otra ubicación para persistence.xml:

<property name="persistenceXmlLocation" value="META-INF/persistence-xxx.xml"/> 

Pero ahora queremos utilizar llanura Hibernate/JPA sin primavera y no se pudo encontrar ninguna forma de especificar la ubicación alternativa persistence.xml.

JPA2 especificación no dice nada al respecto ...

Alguna pista? ¿Es posible indicarle a Hibernate que use un persistence.xml renombrado?

======

Parece que no es posible hacer Hibernate leyó un renombró persistence.xml archivo. Y no es necesario en mi caso.

Respuesta

3

Por lo que yo sé, no es posible cambiar la ubicación del archivo persistence.xml.

También vea este documento: Alternate JPA Providers in WebSphere Application Server, parece que debería poder usar Hibernate como proveedor JPA al especificarlo en el archivo persistence.xml, e incorporar los archivos jar requeridos en su aplicación.

Asegúrese de que su persistence.xml está especificando Hibernate como proveedor JPA:

<persistence> 
    <persistence-unit name="myapp"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 

También debe ser capaz de lograr esto mediante la creación de una biblioteca compartida y utilizarlo para configurar WebSphere para utilizar un proveedor de persistencia alternativa. Aquí puede encontrar cómo hacerlo: Configuring the Java Persistence API (JPA) default persistence provider

EDITAR Dada la información en los comentarios en esta respuesta, parece que el problema puede ser resuelto mediante la adición de estas propiedades en persistence.xml, tal como se indica en este post Websphere EntityManagerFactory creation problem:

<property name="hibernate.transaction.manager_lookup_class" 
value="org.hibernate.transaction.WebSphereExtendedJTATransactionLookup" /> 

<property name="hibernate.transaction.factory_class" 
value="org.hibernate.transaction.CMTTransactionFactory" /> 

Esta misma información también se proporciona en los Proveedores de la APP alternativas en el documento WebSphere Application Server.

+0

Gracias! Esto implicará procedimientos de instalación adicionales cada vez que instalemos la aplicación, redactando una instrucción, etc. Pero si no encontramos otra opción y esta es la única opción, tendremos que hacer eso ... –

+0

Además, tome una mire este documento: [Proveedores alternativos de JPA en WebSphere Application Server] (http: ///www.ibm.com/developerworks/mydeveloperworks/wikis/form/anonymous/api/library/53181ccd-bcd4-431f-b968-0b5f6d46d652/ document/192a432b-28bb-4080-b037-345e5d83da76/attachment/61e74f67-1d60-4120-ba25-ad7264c9f4f6/media/AlternateJPAProviders_TestReport.pdf). Parece que deberías poder usar hibernate especificando 'provider' en persistence.xml e insertando los jar requeridos en tu aplicación.Ver mi edición en la respuesta. –

+0

Xavi, especificamos el proveedor ... pero solo dio como resultado 'El servidor no puede crear una fábrica EntityManagerFactory para la unidad persistente xxx del proveedor org.hibernate.ejb.HibernatePersistence en jar: file:/C:/IBM/WebSphere /wp_profile/installedApps/XXX/xxx-ear.ear/xxx-ejb.jar!/ module'. Podría ser un problema aparte, por supuesto ... –

0

persistence.xml debe existir en un directorio META-INF, normalmente empaquetado junto con un archivo jar que contiene las clases de entidad. Lo que hago es tener las clases de entidad en un proyecto separado en eclipse, con un directorio META-INF que contiene el archivo persistence.xml, empacar este archivo jar e incluirlo en las dependencias del proyecto de las aplicaciones (es decir, WEB-INF/lib), o, implementarlo directamente en el servidor de la aplicación.

Cuestiones relacionadas