Comment utiliser JPA2 sur JBoss 5.x ? (ou Comment éliminer de chargement de classe d'isolement numéro?)
Je voudrais JBoss pour utiliser uniquement les dépendances situées dans mon fichier war.
Chaque fois que je le déploiement de cette guerre de fichier, JBoss utilise toujours ses propres pots.
Ici est la jboss-web.xml
j'utilise :
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
<class-loading java2ClassLoadingCompliance="false">
<loader-repository>
my.package:loader=my-app.war
<loader-repository-config>
java2ParentDelegation=false
</loader-repository-config>
</loader-repository>
</class-loading>
</jboss-web>
et la jboss-classloading.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<classloading
xmlns="urn:jboss:classloading:1.0"
export-all="NON_EMPTY"
import-all="true"
parent-first="false"/>
JBoss 5.1.0.GA
Comment savez-vous qu'il est en utilisant ses propres pots?
Quand mon application de fonctionner , j'ai eu un
Est-ce la GUERRE déployé sur son propre ou fait-il partie de l'OREILLE?
la GUERRE est déployé sur sa propre
Cette lien devrait être utile si vous essayez d'utiliser JPA2 avec JBoss 5.x.
Quand mon application de fonctionner , j'ai eu un
NoSuchMethod
exception.Est-ce la GUERRE déployé sur son propre ou fait-il partie de l'OREILLE?
la GUERRE est déployé sur sa propre
Cette lien devrait être utile si vous essayez d'utiliser JPA2 avec JBoss 5.x.
OriginalL'auteur Stephan | 2011-12-12
Vous devez vous connecter pour publier un commentaire.
1> RÉSUMÉ
D'abord, j'ai essayé de chargement de classe d'isolement pour le chargement Hibernate 3.6.4 pots avec JBoss 5.1.0.GA.
C'est définitivement PAS possible. Il y a un peu de magie sous le capot qui vous empêche d'utiliser une version d'Hibernate avec JPA2 soutien.
Je suis vraiment déçu que JBoss projet n'a pas de fournir une certaine forme de patch ou un service pack pour soutenir JPA2 sur 5.1.0.GA.
2> solution de CONTOURNEMENT : "Le Noyau de la solution"
J'ai réussi à utiliser JPA2 avec JBoss 5.1.0.GA
Je décris ici ma recette. C'est plus une preuve de concept que vous pouvez utiliser pour faire votre propre solution.
Ingrédients :
Recette :
Étape 1: Construire la version autonome de l'application (APP)
Cette application va recevoir des instructions de la servlet pour l'utilisation d'Hibernate.
Je vous laisse le choix de la méthode de communication.
Comme l'APPLICATION utilise JPA2, il aura besoin d'un
persistence.xml
fichier situé dans unMETA-INF
dossier.Depuis JBoss 5.x, lorsque vous déployez une GUERRE, JBoss analyse la GUERRE et de ses sous-déploiements pour la recherche et le déploiement de aveuglément
persistence.xml
fichiers. Renommer votrepersistence.xml
fichier dansmy-persistence.xml
par exemple. Utilisez le code ci-dessous lorsque vous générez votreEntityManagerFactory
(Prévenir JBoss de déploiement persistence.xml).Mise à JOUR:
Cette méthode ne fonctionne pas mais une étrange avertissements sont générés par Hibernate. Afin de faire cesser ces mises en garde, j'ai décidé de mettre la
META-INF
dossier et de la persistance de fichier (renommé enpersistence.xml
maintenant) à l'extérieur de la GUERRE. Dans mon cas, j'ai choisi un spécial dossier config sur le disque dur et l'a ajouté au classpath. Pas plus étrange mises en garde et pas de classloader personnalisé requis pour le chargement de la persistance de fichier.Je m'en remets à vous de choisir entre l'utilisation d'une classe personnalisée chargeur ou la modification de la persistance de l'emplacement du fichier. Dans les deux cas, JBoss ne trouverez pas la persistance de fichier.
Étape 2: Construire la servlet
Lorsque la servlet doit accéder à la base de données, il lance l'APPLICATION et raconte ce qu'il a à faire.
Pour le lancement de l'APPLICATION, la servlet est chargée de pondre une nouvelle JVM et construire le classpath de l'APPLICATION. Lire le code ci-dessous (Frai une JVM). Le classpath est facilement constructible depuis tous les pots seront dans le
/lib
répertoire de la GUERRE d'archives...Étape 3: Construire la GUERRE archive
Construire une GUERRE de l'archive à l'endroit où vous mettez le servlet et l'application autonome emballé comme un POT. L'APPLICATION sera d'une dépendance de la GUERRE.
Empêcher JBoss de déploiement persistence.xml
De frai d'une JVM
OriginalL'auteur Stephan
La configuration d'origine que vous aviez posté, (jboss-web.xml et jboss-classloading.xml) fonctionne pour moi sur le protocole EAP-5.12.
Apparemment l'jboss-web.xml's
et/ou
sont ignorés par Jboss. Voir http://docs.jboss.org/jbossesb/docs/4.10/manuals/html/Getting_Started_Guide/index.html#sect-scoped_deploy où cela est mentionné (community edition, mais apparemment aussi valable pour la sainte édition de jboss)
J'avais été aux prises avec ce pour un long moment. Alors abandonné. Puis, récemment revu et suis tombé sur le jboss-classloading.xml solution.
Sans elle, je voudrais obtenir ClassCastException:
java.lang.ClassCastException: org.mise en veille prolongée.ejb.HibernatePersistence ne peut pas être lancé à javax.la persistance.le spi.PersistenceProvider
J'ai une version ultérieure (version 3.6.0.Final) de mise en veille prolongée-entitymanager dans la guerre que ce qui est utilisé par Jboss.
Ce qui est formidable à propos de ce sujet, maintenant que ça fonctionne, je peux déployer la guerre sur tomcat et jboss. (tomcat dans le cloud pour une solution de sauvegarde et de jboss sur le "terrain".)
OriginalL'auteur user1559906
Convenu. Nous avons pris les mesures suivantes:
Les fichiers JAR suivants doivent être retirées de la jboss_home/common/lib:
Ajouter les éléments suivants à niveau des Pots de jboss_home/common/lib:
Ajouter un fichier (par exemple)
my-war\src\main\webapp\WEB-INF\jboss-classloading.xml
Remplacer la valeur par défaut de la classe politique de chargement pour assurer la mise en veille prolongée sont classes dans votre guerre sont utilisés en lieu et place de toute JBoss bibliothèques clientes. Cela peut être fait par l'ajout d'un jboss-classloading.xml fichier "mes-guerre/src/main/webapp/WEB-INF' annuaire. La ligne d'importation à noter est le réglage de la mère-premier attribut de faux.
Renommer (par exemple) '/src/main/resources/META-INF/persistence.xml'
JBoss va tenter de aveuglément charge de tout persistence.xml fichier qui existe dans un répertoire META-INF dans le classpath. Depuis l'unité de persistance des métadonnées deployer livré avec JBoss prend uniquement en charge JPA 1.0, nous avons besoin de désactiver ce comportement, et de déléguer au Printemps. Ceci peut être facilement fait en renommant le persistence.xml pour (par exemple) /src/main/resources/META-INF/my-persistence.xml
La mise à jour "/src/main/resources/spring-jpaaccess.xml'
Mise à jour le Printemps de contexte de l'application de configuration (par exemple) '/src/main/resources/spring-jpaaccess.xml "et d'ajouter" persistenceXmlLocation comme suit.
OriginalL'auteur Hank Ratzesberger