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 nuevaEliminar * archivos .index en
as7/modules/org/hibernate/main
yas7/modules/org/hibernate/envers/main
foldersas7/modules/org/hibernate
copia de seguridad de los contenidos actuales deas7/modules/org/hibernate
en caso de que se equivoqueElimine 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 losas7/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! ):
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
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
yweb/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> ...
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>
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"/>
- en
jboss-as/modules/javaee/api/main/module.xml
como se sugiere aquí: https://issues.jboss.org/browse/WFCORE-209?_sscc=t
- en
pistas:
- la solución portátil (también probada)
/ear/src/main/application/META-INF/jboss-deployment-structure.xml
no puede funcionar con JBoss 7.1.1.Final ya que la característica<exclude-subsystem>
se agregó en JBoss 7.1. 2 más tarde, ver- sugerencia para hacer esto: https://issues.jboss.org/browse/WFCORE-209?_sscc=t
- La solución 2 generará XML Parse / Namespace Exceptions:
- https://developer.jboss.org/message/784133?_sscc=t#784133
- https://docs.jboss.org/author/display/AS71/Class+Loading+in+AS7?focusedCommentId=53379592&_sscc=t#comment-53379592
- Jboss AS7 - error de despliegue jboss-deployment-structure.xml
- https://access.redhat.com/solutions/258543
- https://bugzilla.redhat.com/show_bug.cgi?id=953328