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.

29
demandé sur Community 2014-04-25 17:24:52

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 et as7/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>
8
répondu hovanessyan 2015-01-08 10:15:10

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> .

3
répondu Andrei I 2017-05-23 12:10:34

pour nous, ce qui suit a aidé ( ne fonctionne que pour les scénarios JPA Non-container-managed! ):

  1. 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

  2. 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 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>
    
        ...
    
  3. 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>
    
  4. 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"/>

conseils:

0
répondu Andreas Dietrich 2017-05-23 12:34:35

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.

-1
répondu user1419261 2015-12-19 18:22:56