掲示板

Quartz job in liferay 5.1.2

thumbnail
14年前 に Raffaello Ursino によって更新されました。

Quartz job in liferay 5.1.2

New Member 投稿: 1 参加年月日: 09/07/09 最新の投稿
Ci sono vari modi di schedulare un job ma ci soffermeremo essenzialmente sui due principali:

1. il job viene schedulato per essere eseguito in un istante preciso anche lontano nel tempo (Es. 20 luglio 2015 alle ore 23:41). In questo caso verrà usato un oggetto Trigger per stabilire l’instante di esecuzione del job.

2. il job viene schedulato per essere eseguito dopo un certo numero di millisecondi, questi verranno settati in una opposita variabile di tipo Long.



Schedulazione tramite Trigger (primo caso)


Creazione della classe Job


1. La classe deve implementare l’interfaccia org.quartz.Job, da notare che in questo caso l’interfaccia è proprietaria di quartz e non di liferay.
2. La classe deve implementare il metodo execute(org.quartz.JobExecutionContext arg0) che riporterà la business logic del job. Nel seguito i dettagli.


Creazione della classe Scheduler

1. La classe deve implementare l’interfaccia com.liferay.portal.kernel.job.Scheduler, da notare che in questo caso l’interfaccia è proprietaria di libera e non di quartz Di seguito un esempio di questa classe.
2. La classe deve implementare il metodo schedule() che conterrà il job da schedulare. Nel nostro caso chiamerà semplicemente il metodo NewSchedule() che si occuperà di creare uno scheduler di quartz, associargli un job, associargli un trigger, ed infine farlo partire.



Schedulazione tramite intervallo di millisecondi (secondo caso)


Creazione della classe Job

Per la classe Job è necessario conoscere quanto segue:

1. La classe deve implementare l’interfaccia com.liferay.portal.kernel.job.IntervalJob, da notare che in questo caso l’interfaccia è di libera e non di quartz.
2. Il metodo getInterval() deve restituire un Long contenente il tempo, in millisecondi, passato il quale il job deve essere eseguito.
3. La classe deve implementare il metodo execute(JobExecutionContext context) che riporterà la business logic del job. Nel seguito i dettagli.

Creazione della classe Scheduler

1. La classe deve implementare l’interfaccia com.liferay.portal.kernel.job.Scheduler, da notare che in questo caso l’interfaccia è proprietaria di libera e non di quartz
2. La classe deve implementare il metodo schedule() che conterrà il job da schedulare, ovvero, JobSchedulerUtil.schedule(testIntervalJob);. Nel seguito i dettagli.




Settaggio della classe di Scheduler nell’xml.


I job da schedulare vengono letti dal file liferay-portlet.xml, più precisamente in questo file, per la portlet desiderata, verrà aggiunta la classe scheduler contenente il job da eseguire. Allo startup di liferay all’atto di registrazione dell portlet verranno “registrati” anche i job e da li partirà il tempo, per l’esecuzione del job, nel caso si faccia uso dello scheduler in millisecondi. Nel seguito come sempre i dettagli implementativi.


<scheduler-class>it.test.project.amministrazione.amministrazioneUtente.trovaInstanzeServizi.quartz.TestSchedulerInterfaceMillisecondi</scheduler-class>





Problema del timezone.


Da notare che spesso sia Tomcat che Jboss non fanno uso del nostro TimeZone, questo implica che l’orario del server Tomcat/JBOSS sia ad esempio due ore in anticipo rispetto al nostro, questo implica che la schedulazione dei job non avverrà correttamente. Per ovviare a ciò è necessario settare il Timezone correttamente.

Per Tomcat modificare il file catalina.bat/sh

@echo off
set CATALINA_OPTS=-Duser.timezone=Europe/Paris
if "%OS%" == "Windows_NT" setlocal


Per JBOSS modificare il file run.bat/sh

set JAVA_OPTS=%JAVA_OPTS% -Xms128m -Xmx1024m -XX:MaxPermSize=128m -Dfile.encoding=UTF-8 -Duser.timezone=GMT -Duser.timezone=Europe/Paris

Qui troverete l'esempio completo
14年前 に Pepito Sbarzeguti によって更新されました。

RE: Quartz job in liferay 5.1.2

New Member 投稿: 1 参加年月日: 08/01/16 最新の投稿
La spiegazione è chiara aspetto l'esempio :-)
10年前 に Riccardo Noviello によって更新されました。

RE: Quartz job in liferay 5.1.2

New Member 投稿: 6 参加年月日: 13/11/29 最新の投稿
Usando Liferay 6.1 ho notato che Scheduler e' cambiato completamente.
C'e' qualcuno che potrebbe spiegare come schedulare un job a RuntIme?

Io ho provato:

SchedulerEntry entry = new SchedulerEntryImpl();
entry.setEventListenerClass(com.test.newscheduler.CronJob.class.getName());
entry.setTriggerType(TriggerType.SIMPLE);
entry.setTimeUnit(TimeUnit.SECOND);
entry.setTriggerValue(18);
entry.setDescription("portlet_newscheduler_WAR_schedulerportlet");
Thread thread = Thread.currentThread();
entry.setContextPath(thread.getContextClassLoader().toString());


SchedulerEngineHelperUtil.schedule(entry, StorageType.MEMORY,entry.getDescription(), 0);


Che purtroppo non funziona.