bloggers bloggers

Jader Jed Francia
Messaggi: 63
Stelle: 0
Data: 18/02/21
Marco Napolitano
Messaggi: 78
Stelle: 0
Data: 12/06/20
Paolo Gambetti
Messaggi: 2
Stelle: 0
Data: 11/11/19
Katia Pazzi
Messaggi: 1
Stelle: 0
Data: 27/06/19
Ezio Lombardi
Messaggi: 11
Stelle: 0
Data: 10/04/18
Chiara Mambretti
Messaggi: 25
Stelle: 0
Data: 27/02/17
Serena Traversi
Messaggi: 3
Stelle: 0
Data: 21/07/16
Francesco Falanga
Messaggi: 8
Stelle: 0
Data: 14/06/16
Antonio Musarra
Messaggi: 2
Stelle: 0
Data: 18/11/13
Simone Celli Marchi
Messaggi: 6
Stelle: 0
Data: 09/07/13
Indietro

Configurare Quartz service in JBoss

A partire dalla versione 4.0 GA, JBoss Application Server fornisce out of the box un'integrazione di Quartz.
Quartz Resource Adapter offre un'implementazione del servizio come JCA Message-Inflow RA e consente di schedulare cron jobs (allo stato attuale è un limite di questa implementazione) utilizzando un Message Driven Bean su uno scheduler non persistente.
La necessità di uno scheduler persistente su database e/o il limite dell'utilizzo dei soli cron jobs, possono essere in alucni casi motivazioni sufficienti per decidere di utilizzare la versione completa dello scheduler al posto di quella fornita con JBoss.
Il procedimento consiste in pochi e semplici step:

Rimozione di quartz-ra

- rimuovere ${jboss.server}/deploy/quartz-ra.rar
- rimuovere ${jboss.server}/lib/quartz.jar

Integrazione di Quartz

- copiare dalla distribuzione di Quartz che si intende utilizzare (http://www.quartz-scheduler.org/download/index.html) quartz-<version>.jar e quartz-jboss-<version>.jar in server/all/lib

Configurazione di Quartz

La configurazione dello scheduler avviene mediante il file quartz-service.xml. Chi ha già utilizzato e configurato lo scheduler, si renderà conto che si tratta di un descrittore che integra il classico file quartz.properties: è quindi possibile riutilizzare la propria customizzazione o consultare la documentazione online per una descrizione dei parametri (paragrafo 'risorse').

- copiare quartz-service.xml in server\all\deploy

A titolo di esempio, una versione di quartz-service.xml:

<server>
<mbean code="org.quartz.ee.jmx.jboss.QuartzService" name="user:service=QuartzService,name=QuartzService">
<depends>jboss.jca:service=DataSourceBinding,name=MyDataSource</depends>
<attribute name="Properties">
# Default Properties file for use by StdSchedulerFactory
# to create a Quartz Scheduler Instance, if a different
# properties file is not explicitly specified.
#

# org.quartz.scheduler.classLoadHelper.class =

org.quartz.scheduler.instanceName = MyQuartzScheduler
org.quartz.scheduler.instanceId = AUTO
org.quartz.scheduler.rmi.export = false
org.quartz.scheduler.rmi.registryHost = 127.0.0.1
org.quartz.scheduler.rmi.registryPort = 1098
org.quartz.scheduler.rmi.proxy = 127.0.0.1
org.quartz.scheduler.xaTransacted = false

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 5
org.quartz.threadPool.threadPriority = 4

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreCMT
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.dataSource = QUARTZ
org.quartz.jobStore.nonManagedTXDataSource = QUARTZ_NO_TX
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.isClustered = true
org.quartz.dataSource.QUARTZ.jndiURL = java:/MyDataSource
org.quartz.dataSource.QUARTZ_NO_TX.jndiURL = java:/MyDataSource

</attribute>
</mbean>
</server>


La configurazione è completa.
Avviando JBoss, i log indicheranno l'avvio dell'MBean service:

2010-04-15 10:31:57,453 INFO [org.quartz.ee.jmx.jboss.QuartzService] (main) Create QuartzService(Quartz)...
2010-04-15 10:31:57,500 INFO [org.quartz.ee.jmx.jboss.QuartzService] (main) QuartzService(Quartz) created.
...
2010-04-15 10:31:57,531 INFO [org.quartz.ee.jmx.jboss.QuartzService] (main) Start QuartzService(Quartz)...
...
2010-04-15 10:31:57,734 INFO [org.quartz.impl.jdbcjobstore.JobStoreCMT] (main) Using db table-based data access locking (synchronization).
2010-04-15 10:31:57,750 INFO [org.quartz.impl.jdbcjobstore.JobStoreCMT] (main) JobStoreCMT initialized.
2010-04-15 10:31:57,750 INFO [org.quartz.impl.StdSchedulerFactory] (main) Quartz scheduler 'MyQuartzScheduler' initialized from an externally provided properties instance.
...
2010-04-15 10:31:57,750 INFO [org.quartz.impl.StdSchedulerFactory] (main) Quartz scheduler version: <version>
...
2010-04-15 10:32:04,203 INFO [org.quartz.ee.jmx.jboss.QuartzService] (main) QuartzService(Quartz) started.

Per recuperare un'instanza dello scheduler, utilizziamo JNDI:

InitialContext ctx = new InitialContext();
Scheduler scheduler = (Scheduler) ctx.lookup("Quartz");


"Quartz" è il JNDI name di default; è possibile modificarlo intervenendo su un attributo di quartz-service.xml:

<attribute name="JndiName">Quartz</attribute>

Buon lavoro.

Risorse:

Utilizzo e schedulazione dei job
http://blog.d-vel.com/web/blog/home/-/blogs/breve-introduzione-a-quartz

Configurazione di Quartz
http://www.quartz-scheduler.org/docs/quick_start_guide.html

L'articolo che mi ha aiutato nella mia integrazione:
http://community.jboss.org/wiki/HowtoconfigureaQuartzservice

Utilizzo di quartz-ra integrato in JBoss
http://www.jboss.org/ejb3/docs/tutorial/jca/inflow/quartz/quartz.html


Precedente
Commenti
Nessun commento. Vuoi essere il primo.