Exclure JPA 2.0 de JBoss 7.1 afin d'utiliser hibernate 4.3
je veux utiliser hibernate 4.3 pour ses caractéristiques de multitenance dans JBoss 7.1.
j'ai réussi à l'inclure dans ma guerre en ajoutant les lignes suivantes dans jboss-déploiement de la structure
<exclusions>
<module name="org.hibernate" />
</exclusions>
et l'ajout d'une dépendance à hibernate core et gestionnaire d'entité dans mon pompon.xml
Cela fait hiberner 4.3 à charger mais malheureusement j'ai eu une erreur
java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;
qui est due à JPA 2.0 étant chargé quand hibernate 4.3 utilise JPA 2.1
j'ai vu ces fils et essayé ce qu'ils suggèrent à l'Exclusion de JPA sous-système de JBoss EAP 6.1 - Essayez d'utiliser JPA 2.1 dans JBoss EAP 6.1 , JBoss AS7 Automatiquement le Chargement de JPA , Hibernate 4.3.0.Données finales et de printemps JPA 1.4.3.RELEASE .
j'ai ajouté une persistance.xml avec
<property name="jboss.as.jpa.managed" value="false" />
hibernation exclue jpa 2.0 à partir de Données du Printemps
<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>
a supprimé complètement le sous-système JPA de JBoss.xml, sans succès.
la seule chose qui a fait l'affaire était d'exclure tout javaee.api dans jboss-déploiement de la structure, comme l'a suggéré dans un autre thread
<exclusions>
<module name="javax.persistence.api"/>
<module name="javaee.api"/>
</exclusions>
mais cela pose beaucoup de problèmes au reste de mon code.
mise à JOUR: mon jboss-déploiement de la structure.xml est maintenant comme ceci
<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 succès, donc si quelqu'un a une autre idée, il est le bienvenu.
4 réponses
Je diviserais ce problème en deux plus petits:
1) assurez-vous que vous ne dépendez pas de façon transitoire de JPA 2.0
pour cela, vous pouvez utiliser l'outil de visualisation de graphique de dépendance (NetBeans ont un intégré, ou vous pouvez utiliser un plugin d'arbre de dépendance maven). Une autre façon serait simplement de passer à travers les libs, inclus dans votre artefact avant de déployer à JBoss.
2) assurer la configuration correcte de JBoss comme 7.1
JBoss AS 7.1 est livré avec Hibernate 4.0.x pots, afin de les mettre à jour essayer ces étapes comme décrit dans le doc officiel .
-
mettre à jour le dossier
as7/modules/org/hibernate/main
pour y inclure la nouvelle version -
Supprimer *.fichiers d'index dans les dossiers
as7/modules/org/hibernate/main
etas7/modules/org/hibernate/envers/main
-
Sauvegarde le contenu actuel de
as7/modules/org/hibernate
dans le cas où vous faites une erreur -
retirer les pots plus anciens et copier les nouveaux pots en hibernation dans
as7/modules/org/hibernate/main
+as7/modules/org/hibernate/envers/main
-
mise à Jour
as7/modules/org/hibernate/main/module.xml
+as7/modules/org/hibernate/envers/main/module.xml
pour nommer les pots que vous avez copié dans
mise à Jour as7/modules/org/hibernate/main/module.xml
(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 d'enlever seulement le module javax.persistence.api
avec org.hibernate
.
aussi, si vous voulez passer à Hibernate 4.3 pour toutes les applications web (qui devraient être compatibles avec le passé), passer à une nouvelle version D'Hibernate comme décrit ici .
quelques conseils de débogage: après avoir généré vos fichiers JAR, Vérifiez explicitement quelles bibliothèques JPA / Hibernate ils contiennent (en les déboguant). Aussi, afin de vérifier la Version hibernée vous pouvez le faire comme il est décrit ici .
vérifie également la structure du fichier jboss-deployment-structure , car il semble que l'élément <exclusions>
ne soit ni dans un élément <deployment>
, ni dans un élément <sub-deployment>
.
pour nous, ce qui suit a aidé ( ne fonctionne que pour les scénarios JPA Non-container-managed! ):
-
IDE-side: (Eclipse Kepler) suppression (ajoutée lors des essais et oubliée de supprimer) du (installé localement) JBoss 7.1.1.Finale de la Bibliothèque projet Build Path dépendance
-
Maven-side: (mvn 3.0.4 et 3.3.3) outcomented the following hibernate JPA 2.0 including section in our global
/pom.xml
(c'est un projet de l'AER avec/pom.xml
,ear/pom.xml
,ejb/pom.xml
etweb/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-côté: ajout d' seulement mise en veille prolongée-entitymanager 4.3.8.Final et notre pilote de base de données (postgres) en tant que dépendances liées au DB/ORM (qui chargent tous les autres libs requis ainsi) 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ésactiver JPA 2.0 dans notre JBoss 7.1.1.Final global (pour tous les webapps/libs, si vous en avez plusieurs) paramètre
<module name="javax.persistence.api" export="false"/>
- dans
jboss-as/modules/javaee/api/main/module.xml
comme suggéré ici: https://issues.jboss.org/browse/WFCORE-209?_sscc=t
- dans
conseils:
- (aussi essayé)
/ear/src/main/application/META-INF/jboss-deployment-structure.xml
solution portable ne peut pas travailler avec JBoss 7.1.1.Final depuis l'ajout de la caractéristique<exclude-subsystem>
dans JBoss 7.1.2 plus tard, voir- suggestion pour faire ceci: https://issues.jboss.org/browse/WFCORE-209?_sscc=t
- Workaround 2 causera des Exceptions à la Parse/Namespace XML:
- 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 - jboss-déploiement de la structure.erreur de déploiement xml
- https://access.redhat.com/solutions/258543
- https://bugzilla.redhat.com/show_bug.cgi?id=953328
essayez d'utiliser une version plus basse de l'hibernate-entitymanager
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>3.6.0.Final</version>
</dependency>
et jpa 2.0 peut fonctionner > il a fonctionné pour moi.