Je veux utiliser hibernate 4.3 pour ses fonctionnalités multi-utilisateurs dans JBoss 7.1.
J'ai réussi à l'inclure dans ma guerre en ajoutant les lignes suivantes dans la structure de jboss-deployment
<exclusions>
<module name="org.hibernate" />
</exclusions>
et ajout d'une dépendance pour hiberner le gestionnaire principal et le gestionnaire d'entités dans mon pom.xml
Cela a rendu hibernate 4.3 charger, mais malheureusement, une erreur est survenue.
Java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;
ce qui est dû au chargement de JPA 2.0 lorsque hibernate 4.3 utilise JPA 2.1
J'ai vu ces discussions et essayé ce qu'elles suggèrent Exclure le sous-système JPA de JBoss EAP 6.1 - Essayer d'utiliser JPA 2.1 dans JBoss EAP 6.1 , JBoss AS7 Chargement automatique de JPA , Hibernate 4.3. 0.Final & Spring Data JPA 1.4.3.RELEASE .
J'ai ajouté un fichier persistence.xml avec
<property name="jboss.as.jpa.managed" value="false" />
hibernate jpa 2.0 exclu 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>
Suppression complète du sous-système JPA de JBoss standalone.xml, sans succès.
La seule chose qui a fait l'astuce a été d'exclure tout le javaee.api dans la structure de jboss-deployment, comme suggéré dans un autre fil
<exclusions>
<module name="javax.persistence.api"/>
<module name="javaee.api"/>
</exclusions>
mais cela cause beaucoup de problèmes au reste de mon code.
UPDATE: mon jboss-deployment-structure.xml est maintenant comme ça
<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>
Comme vous le voyez, j'ai essayé beaucoup de choses sans chance, alors si quelqu'un a une autre idée, c'est la bienvenue.
Je diviserais ce problème en deux plus petites:
1) Assurez-vous de ne pas dépendre de manière transitoire de JPA 2.0.
Pour cela, vous pouvez utiliser l'outil de visualisation des graphes de dépendance (NetBeans en a un intégré, ou vous pouvez utiliser un plugin maven dependency tree) . Une autre solution consisterait simplement à parcourir les bibliothèques incluses dans votre artefact avant le déploiement sur JBoss.
2) Vérifier la configuration correcte de JBoss AS 7.1
JBoss AS 7.1 est fourni avec les fichiers jar de Hibernate 4.0.x. Pour les mettre à jour, essayez cette procédure comme décrit dans le document official doc .
mettre à jour le dossier as7/modules/org/hibernate/main
actuel pour qu'il contienne la version la plus récente
Supprimer les fichiers * .index dans les dossiers as7/modules/org/hibernate/main
et as7/modules/org/hibernate/envers/main
Sauvegardez le contenu actuel de as7/modules/org/hibernate
en cas d'erreur.
Retirez les anciens pots et copiez les nouveaux pots Hibernate dans as7/modules/org/hibernate/main
+ as7/modules/org/hibernate/envers/main
Mettez à jour le as7/modules/org/hibernate/main/module.xml
+ as7/modules/org/hibernate/envers/main/module.xml
pour nommer les fichiers jar que vous avez copiés.
as7/modules/org/hibernate/main/module.xml
mis à jour ressemblera à ceci (notez que les dépendances ne changeront pas):
<?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>
Essayez de ne supprimer que le module javax.persistence.api
avec org.hibernate
.
De même, si vous souhaitez passer à Hibernate 4.3 pour toutes les applications Web (qui doivent être rétrocompatibles), passez à une version plus récente d’Hibernate comme décrit ici .
Quelques conseils de débogage: après avoir généré vos fichiers JAR, vérifiez explicitement les bibliothèques JPA/Hibernate qu’ils contiennent (en les décompressant). Aussi, afin de vérifier la version d'Hibernate, vous pouvez le faire comme c'est décrit ici .
Vérifiez également la structure du fichier jboss-deployment-structure , car il semble que l'élément <exclusions>
ne se trouve ni dans un <deployment>
, ni dans un élément <sub-deployment>
.
pour nous, les éléments suivants ont aidé (fonctionne uniquement avec les scénarios JPA non gérés par conteneur!):
Côté IDE: _ (Eclipse Kepler) supprimant (ajouté au cours des tests et oublié de supprimer) le (installé localement)) JBoss 7.1.1.Final Library projet Chemin de construction dépendance
(Côté Maven:} _ (mvn 3.0.4 et 3.3.3) dépassé le hibernate JPA 2.0, y compris} section dans notre global /pom.xml
(c'est un projet audio avec /pom.xml
, ear/pom.xml
, ejb/pom.xml
et 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>
...
Maven-side:} _ ajoutant uniquement hibernate-entitymanager 4.3.8.Final et notre pilote de base de données (postgres) en tant que dépendances liées à DB/ORM (qui charge tous les autres les bibliothèques aussi) dans notre /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>
côté serveur: _ {désactivation de JPA 2.0 dans notre JBoss 7.1.1.Final globalement} _ (pour toutes les applications Web/libs, si vous en avez plusieurs) paramétrant <module name="javax.persistence.api" export="false"/>
_
jboss-as/modules/javaee/api/main/module.xml
comme suggéré ici: https://issues.jboss.org/browse/WFCORE-209?_sscc=tastuces:
/ear/src/main/application/META-INF/jboss-deployment-structure.xml
ne peut pas fonctionner avec JBoss 7.1.1.Final puisque la fonctionnalité <exclude-subsystem>
a été ajoutée dans JBoss 7.1.2 plus tard, voir