Archives de Catégorie: Quartz

JBoss AS 7 : Quartz 1.x et JMX

Lors d’une migration de JBoss 5.1.0.GA vers JBoss 7.1.1.Final le scheduler Quartz était en version 1.6.6 et se chargeait via le plugin Quartz JBoss/JMX c’est à dire via un service JMX configuré dans un fichier jboss-service.xml packagé dans un .SAR

	<mbean code="org.quartz.ee.jmx.jboss.QuartzService"
		name="scheduler:service=QuartzService,name=QuartzService">

		<attribute name="StartScheduler">true</attribute>

		<attribute name="Properties">
			...
			org.quartz.plugin.jobInitializer.fileNames=quartz-jobs.xml
			...
		</attribute>
	</mbean>

La classe org.quartz.ee.jmx.jboss.QuartzService est livré par le scheduler Quartz (via une librairie quartz-jboss-1.6.6.jar).

Cependant ce mode de fonctionnement n’est plus compatible avec JBoss AS 7 car la classe QuartzService exploite des « services » JMX qui ne semblent plus disponible avec JBoss AS 7 comme par exemple des opérations JNDI (rebind() dans la classe QuartzService).

Pour migrer Quartz dans JBoss AS 7 la version a été mise à jour (tant qu’à faire) : Quartz 2.1.5. La configuration XML de Quartz via le fichier « quartz-jobs.xml » a été légèrement modifié (voir ci-dessous) et le scheduler est lancé via un EJB de type @Singleton marqué avec @Startup. Le singleton s’occupe d’enregistrer les différents MBean JMX par l’obtention d’un MBeanServer via le code suivant :

	MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer();

Concernant la migration de Quartz 1.x vers Quartz 2.x voici les changements au sein du fichier de configuration des jobs (du moins pour l’application concernée) :

  • L’élément racine est modifié,
    <quartz xmlns="http://www.opensymphony.com/quartz/JobSchedulingData"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://www.quartzscheduler.org/ns/quartz
    	http://www.opensymphony.com/quartz/xml/job_scheduling_data_1_5.xsd"
    	version="1.5">

    devient

    <job-scheduling-data version="2.0" 
    	xmlns="http://www.quartz-scheduler.org/xml/JobSchedulingData" 
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://www.quartz-scheduler.org/xml/JobSchedulingData 
    	http://www.quartz-scheduler.org/xml/job_scheduling_data_2_0.xsd">
  • <job> est remplacé par <schedule> (et donc </job> par </schedule>)
  • <job-detail> est remplacé par <job> (et donc </job-detail> par </job>)
  • <volatility>…</volatility> est supprimé
  • l’attribut allows-transient-data de l’élément <job-data-map> est supprimé