hibernate jpa-2.0 jboss7.x jpa-2.1

Excluya JPA 2.0 de JBoss 7.1 para utilizar hibernate 4.3



jpa-2.0 jboss7.x (4)

Quiero utilizar hibernate 4.3 para sus características de multi-propiedad en JBoss 7.1.

Pude incluirlo en mi guerra añadiendo las siguientes líneas en jboss-deployment-structure

<exclusions> <module name="org.hibernate" /> </exclusions>

y agregando una dependencia al núcleo de hibernación y al administrador de entidades en mi pom.xml

Esto hizo que hibernate 4.3 para cargar, pero desafortunadamente recibí un error

java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;

que se debe a que JPA 2.0 se está cargando cuando hibernate 4.3 está usando JPA 2.1

He visto estos hilos e intenté con lo que sugieren Excluyendo el subsistema JPA de JBoss EAP 6.1 - Intentando usar JPA 2.1 en JBoss EAP 6.1 , JBoss AS7 cargando automáticamente JPA , Hibernate 4.3.0.Final y Spring Data JPA 1.4.3.RELEASE .

Agregué un persistence.xml con

<property name="jboss.as.jpa.managed" value="false" />

excluido hibernate jpa 2.0 de Spring Data

<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-jpa</artifactId> <version>${spring-data.version}</version> <exclusions> <exclusion> <groupId>org.hibernate.javax.persistence</groupId> <artifactId>hibernate-jpa-2.0-api</artifactId> </exclusion> </exclusions> </dependency>

Se eliminó completamente el subsistema JPA de JBoss standalone.xml, sin éxito.

Lo único que hizo el truco fue excluir todo javaee.api en jboss-deployment-structure, como se sugiere en otro hilo

<exclusions> <module name="javax.persistence.api"/> <module name="javaee.api"/> </exclusions>

pero esto causa muchos problemas al resto de mi código.

ACTUALIZACIÓN: mi jboss-deployment-structure.xml ahora es así

<jboss-deployment-structure> <deployment> <exclusions> <module name="org.slf4j" /> <module name="org.slf4j.impl" /> <module name="org.apache.log4j" /> <module name="javax.persistence.api" /> <module name="org.hibernate" /> </exclusions> <dependencies> <module name="org.jboss.ironjacamar.jdbcadapters" /> <module name="org.hornetq" /> <module name="org.hornetq.ra" /> <module name="org.jboss.ejb3" /> <module name="org.jboss.ejb-client" /> </dependencies> </deployment> </jboss-deployment-structure>

Como ven, he intentado muchas cosas sin suerte, así que si alguien tiene otra idea, es bienvenido.


Intente eliminar solo el módulo javax.persistence.api junto con org.hibernate .

Además, si desea cambiar a Hibernate 4.3 para todas las aplicaciones web (que deberían ser compatibles con versiones anteriores), cambie a una versión más reciente de Hibernate como se describe aquí .

Algunas sugerencias de depuración: después de generar sus archivos JAR, verifique explícitamente qué bibliotecas JPA / Hibernate contienen (descomprimiéndolas). También para verificar la versión de Hibernate, puede hacerlo como se describe aquí .

También verifique la estructura del archivo jboss-deployment-structure , ya que parece que el elemento <exclusions> no está en un elemento <deployment> ni en un elemento <sub-deployment> .


Yo dividiría este problema en dos más pequeños:

1) Asegúrate de no depender transitoriamente de JPA 2.0

Para esto puede usar la herramienta de visualización de gráficos de dependencia (NetBeans tiene una integrada, o puede usar un plugin de árbol de dependencia Maven). Otra forma sería simplemente hojear las librerías, incluidas en su artefacto antes de implementarlas en JBoss.

2) Asegurar la configuración correcta de JBoss AS 7.1

JBoss AS 7.1 se incluye con los archivos jar de Hibernate 4.0.x, para actualizarlos, pruebe estos pasos como se describe en el documento oficial .

  • actualice la actual as7/modules/org/hibernate/main para que contenga la versión más nueva

  • Eliminar * archivos .index en as7/modules/org/hibernate/main y as7/modules/org/hibernate/envers/main folders

  • as7/modules/org/hibernate copia de seguridad de los contenidos actuales de as7/modules/org/hibernate en caso de que se equivoque

  • Elimine las jarras antiguas y copie las nuevas jarras de Hibernate en as7/modules/org/hibernate/main + as7/modules/org/hibernate/envers/main

  • Actualice as7/modules/org/hibernate/main/module.xml + as7/modules/org/hibernate/envers/main/module.xml para nombrar los as7/modules/org/hibernate/envers/main/module.xml que ha copiado

Se actualizará as7/modules/org/hibernate/main/module.xml (tenga en cuenta que las dependencias no cambiarán):

<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.1" name="org.hibernate"> <resources> <resource-root path="hibernate-core-4.3.5.Final.jar"/> <resource-root path="hibernate-commons-annotations-4.0.4.Final.jar"/> <resource-root path="hibernate-entitymanager-4.3.5.Final.jar"/> <resource-root path="hibernate-infinispan-4.3.5.Final.jar"/> </resources> <dependencies> . . </dependencies> </module>


intente usar una versión inferior del hibernate-entitymanager

<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>3.6.0.Final</version> </dependency>

y jpa 2.0 puede funcionar> Funcionó para mí.


para nosotros, lo siguiente ayudó (¡ funciona solo para escenarios JPA no gestionados por contenedor! ):

  1. IDE-side: (Eclipse Kepler) eliminación (agregado durante las pruebas y se olvidó de eliminar) el (localmente instalado) JBoss 7.1.1.Final Library proyecto Build Path dependency

  2. Lado de Maven: (mvn 3.0.4 y 3.3.3) superado el siguiente hibernate JPA 2.0, incluida la sección en nuestro /pom.xml global (es un proyecto de oreja con /pom.xml , ear/pom.xml , ejb/pom.xml y web/pom.xml :

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> ... <dependencyManagement> <dependencies> ... <!-- outcommented because of JPA 2.1 support --> <!-- <dependency> <groupId>org.jboss.bom</groupId> <artifactId>jboss-javaee-6.0-with-hibernate</artifactId> <version>${version.jboss.bom}</version> <type>pom</type> <scope>import</scope> </dependency> --> </dependencies> </dependencyManagement> ...

  3. Lado Maven: agregar solo hibernate-entitymanager 4.3.8.Final y nuestro controlador db (postgres) como dependencias DB / ORM-related (que cargan todas las demás librerías necesarias) en nuestro /ejb/pom.xml

    <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>9.3-1102-jdbc41</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>4.3.8.Final</version> </dependency>

  4. del lado del servidor: desactivando JPA 2.0 en nuestro JBoss 7.1.1. Final globalmente (para todos los webapps / libs, si tiene varios) configurando <module name="javax.persistence.api" export="false"/>

pistas: