11
votes

À l'exclusion du sous-système JPA de JBoss EAP 6.1 - essayer d'utiliser JPA 2.1 dans JBoss EAP 6.1

J'ai une application de guerre qui contient une API 2,1 JPA 2.1 et Hibernate 4.3.0.Le implémentation (JPA 2.1) (jpa 2.1) emballée et bootsTrappate à l'aide de conteneur à ressort et je souhaite déployer cela dans JBoss EAP 6.1.

Je suis conscient que JBoss EAP 6.1 est compatible JPA 2.0, alors j'ai décidé de forcer JBoss à utiliser la version JPA et la mise en œuvre de mon application

Ce que j'essayais de faire était d'exclure le sous-système JPA à l'aide de jboss-déploiement-Structure.xml, mais ce que j'ai trouvé, c'est que même si je commencez dans l'extension JPA et le sous-système JPA de Standalone.xml et mettez l'exclusion du sous-système JPA dans JBoss. -Deploiement-structure.xml (non exclu ORG.Hibernate Module pour utiliser l'hibernate emballé dans l'application), aucun scanners JPA n'est exécuté ( comme prévu ) mais le moment de la classe de guerre (dans mon cas Conteneur à ressort) fait référence aux classes Javax.Persistence, l'API est chargée à partir de modules JBoss (modules / systèmes / couches / base / javax / persistance / API / MAIN / HIBERNATE-JPA-2.0-1.0.1.FINAL-REDHAT-2 .jar!) Au lieu du bocal API fourni dans la guerre fournie. Donc, évidemment, je reçois une exception d'inadéquation dans l'API fournie JBoss (2.0) et son Mise en œuvre (2.1) dans la demande de guerre. Une exception est pour par exemple, la propriété Index liée à l'annotation Javax.persistence.table n'est pas reconnue car il s'agit d'une addition de JPA 2.1 et non disponible dans JPA 2.0

Je pourrais contourner ce problème en remplaçant l'API JPA 2.0 dans le répertoire des modules avec JPA 2.1 (et Module de pointage.xml au nouveau JAR 2.1 API) et tout a fonctionné bien. Cependant, je pense que ce n'est pas la bonne façon, car c'est comme essayer de modifier le comportement du serveur pour toutes les applications.

est-ce que le comportement de classement de la classe JBoss intentionnel que toutes les classes de l'API de spécification (dont JBoss Mettre en œuvre) primoncera toujours priorité quelle que soit la mise en œuvre utilisée et que nous lui disons d'utiliser une API particulière de l'application de l'application. Je pense que faire un serveur de spécifications spécifique, puis fournir Un moyen de remplacer la version spécifique elle-même est un peu contradictoire, mais y a-t-il une manière dont je peux utiliser à la fois l'API et la mise en œuvre de mon application?

Une autre option serait de passer à Wildfly, qui est la mise en œuvre JPA 2.1, mais ma question est de savoir si cela est propre possible dans JBoss EAP 6.1?


0 commentaires

4 Réponses :


3
votes

a trouvé une solution qui semble fonctionner avec Hibernate-core-4.3.1.

Étape 1: Supprimer le sous-système JPA de standalone.xml: P>

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


2 commentaires

Merci Kees, nous avons réellement déménagé à Wildfly, mais cela pourrait aider quelqu'un.


Pourquoi devez-vous exclure tout le Javaee.api? Cela conduit à de nombreux problèmes de déploiement au cas où plus de choses sont utilisées.



5
votes

Nous avons trouvé une autre solution.
Vous pouvez également exclure le sous-système JPA dans JBoss-Déployment-Structure.xml de la guerre:

<exclude-subsystems>
    <subsystem name="jpa" />
</exclude-subsystems>
<exclusions>
    <module name="javaee.api" />
</exclusions>


1 commentaires

Encore une fois, j'aimerais la même question que ci-dessus, n'est-ce pas trop drastique d'exclure l'ensemble de Javaee.api? Il y a beaucoup de choses qui sont nécessaires.



3
votes

Les réponses ci-dessus sont formidables, mais elles introduisent d'autres problèmes dans de nombreuses applications en excluant toute l'API Java EE.

Si vous ne voulez pas le faire, allez à JBoss_Home \ modules \ Javae \ API \ MAINLE \ MODULE.XML et définissez Exporter sur False pour Javax.Persistence.api , comme ceci: xxx

Notez que cela désactivera l'API de persistance pour chaque application déployée dans le même PAE.

Vous avez encore besoin Pour supprimer le sous-système JPA de standalone.xml , mais vous n'avez pas besoin de modifier jboss-déploiment-structure.xml ou au moins je n'ai pas eu à.


0 commentaires

5
votes

Si vous êtes Maven, cela fait-il le tour pour moi.

<deployment>

    <exclude-subsystems>
        <subsystem name="jpa" />
    </exclude-subsystems>

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

</deployment>


0 commentaires