J'ai trouvé un problème assez complexe lorsque je travaillais sur un projet avec plusieurs déployables EE. Le problème semble être une confluence des dépendances Hibernate de TimerService EJB3.1 et une isolation insuffisante du chargeur de classe. À partir d'une version AS 6 CR1 stockée, je déploie un fichier WAR. Ce fichier WAR contient des fichiers Hibernate.Problème de chargeur de classes dans JBoss AS 6 avec EJB et WAR déployés côte à côte
Puis, je déploie un EJB (techniquement un MDB) dans un fichier JAR. Quand je le fais, JBoss démarre alors le TimerService, afin de fournir un support EJB3.1 complet. Le TimerService dépend d'Hibernate. JBoss se met alors en grève, car le chargeur de classe détecte une version déjà chargée d'Hibernate.
J'ai même essayé d'empaqueter chacun d'entre eux dans un fichier EAR distinct et de les déployer. Pas de dé. Quelque chose sur la façon dont le TimerService est chargé semble ignorer totalement l'isolation de la classe.
Ma question est, y at-il quelque chose que je peux faire à ce sujet, à moins de désactiver le TimerService? J'avais l'intention de faire usage de ses fonctionnalités astucieuses plus tard dans le projet. Honnêtement, je ne sais même pas s'il s'agit d'un bug, car la documentation du classloader pour JBoss semble avoir été écrite par des Klingons en colère. Toujours, j'espère pour un work-around.
EDIT - En fait, je n'ai même pas le moyen de désactiver le TimerService, car chacun de mes efforts a été contrecarré d'une manière ou d'une autre. En l'état, je ne vois pas comment n'importe qui peut déployer Hibernate et les EJB sur la même instance JBoss.
EDIT - J'ai éventuellement réussi à déployer en n'incluant pas les fichiers Hibernate dans mon MDB ou mon fichier WAR, mais je me suis basé sur l'implémentation Hibernate de JBoss. C'est insatisfaisant; Je suis laissé avec le sentiment qu'il n'y a pas d'isolement entre le conteneur et mes haricots. Mais au moins c'est une version actuelle d'Hibernate (3.6).
Pour le moment, nous avons arrêté le regroupement dans Hibernate comme solution à ce problème, en nous appuyant plutôt sur l'inclusion de ces JAR par JBoss. Les deux raisons qui me mettent un peu mal à l'aise sont a) si nous décidons à un moment donné de passer à une autre version d'Hibernate et b) que les EJBs/MDBs nus (dans un JAR, pas dans un EAR) ne semblent pas travailler avec ça. Il y a des problèmes de classpath avec la recherche de fichiers XML dans le JAR, je suppose? Merci pour les liens vers les trucs classloader; Je vais certainement regarder ceux-là. –