JBoss AS 7 et MBeanRegistration : attention au preRegister/postRegister

Lors du déploiement d’un service JMX sous JBoss AS 7.1.1.Final si la classe déployée implémente MBeanRegistration (JEE 5) alors cette dernière pourra effectuer une tâche avant son enregistrement JMX (preRegister) et après son enregistrement (postRegister).

Oui mais …

Dans le cas de la migration d’un service JMX Quartz 1.x et de l’installation de Quartz en tant que module dans JBoss AS 7 je me suis rendu compte que dans une méthode preRegister ou postRegister le démarrage du Scheduler Quartz qui a été configuré via un fichier XML il y a une exception ClassNotFoundException pour le chargement des classes des Jobs : Quartz , en tant que module et au moment de preRegister() ou postRegister(), n’a pas encore accès aux classes qui viennent d’être déployées.

Il faut dire que Quartz utilise un classloader spécifique (CascadedClassLoaderHelper exploitant une cascade de ClassLoader) qui n’est peut-être pas compatible avec le class loader spécifique de « JBoss Modules », du moins au déploiement du service JMX. Oui parce qu’une fois le service JMX déployé un nouveau rechargement du fichier XML de Quartz ne provoque plus d’exception ClassNotFoundException …

A noter mon message sur le forum de JBoss AS 7 concernant ce sujet :

https://community.jboss.org/message/752132#752132

Autre point concernant le preRegister/postRegister suite au problème rencontré avec le service JMX de Quartz : si un service JMX appelle un EJB il y aura probablement une erreur du fait que l’EJB n’existe pas encore. Et cela même si le déploiement du service précise qu’il dépend du EAR contenant l’EJB à exploiter. Cela est dû au fait de la parallélisation des déploiements effectuée par JBoss AS 7. Effectivement le service JMX est assuré d’avoir les classes nécessaires à son fonctionnement (par exemple les classes de l’EAR contenant les EJBs) mais il n’est pas assuré que l’EJB ait été initialisé (ce qui n’a jamais été mon cas du moins en déployant le service JMX contenu dans un jar contenu lui même dans un EAR contenant aussi un autre JAR ayant les EJBs).

A noter qu’il est peut être possible de faire dépendre le mbean d’un service JMX lié à l’EJB comme pour exemple :

	<mbean ...>
		<depend>deployment=myapp.ear,singleton-bean=Scheduler,subdeployment=myapp-ejb.jar,subsystem=ejb3</depend>
	<mbean>

Je n’ai pas testé cela mais est-ce que le service JMX ne va pas échouer en précisant qu’il ne trouve pas la dépendance ou bien est-ce qu’il va attendre un peu avant que celle-ci soit disponible (ce qui m’étonnerait).

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s