How to create scheduler in portlet

Sometimes you have a need to create a task that is being executed periodically. You can use scheduler (based on Quartz API ) that is integrated with Liferay. There are 3 steps to do this.

1. Write a class the implements the com.liferay.portal.job.Scheduler interface

2. Write a class that contains actual task that needs to be executed. This class must implements com.liferay.portal.job.IntervalJob interface

3. Register your scheduler in liferay-portlet-ext.xml ( if you use ext environment )

Now let’s go to the details.

1. Write a class that implements Scheduler interface.

package com.ext.portlet.onlineproject.job;

import com.liferay.portal.job.JobScheduler;
import org.quartz.SchedulerException;

public class Scheduler implements com.liferay.portal.job.Scheduler {

	public void schedule() throws SchedulerException {
	JobScheduler.schedule(new SyncDataJob());
	}
}

2. Write the class that contains actual task. On this example, our actual task would be only to write ‘THIS IS THE ACTUAL TASK!” to console. This task would be executed every minute.

package com.ext.portlet.onlineproject.job;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import com.liferay.portal.job.IntervalJob;
import com.liferay.util.Time; 

public class SyncDataJob implements IntervalJob{
	public SyncDataJob() {
		_interval = Time.MINUTE;
	}
	public long getInterval() {
		return _interval;
	}
	public void execute(JobExecutionContext context)
		throws JobExecutionException {
		try {
			System.out.println("THIS IS THE ACTUAL TASK!");
		}
		catch (Exception e) {
			_log.error(e);
		}
	}
	private static Log _log = LogFactory.getLog(SyncDataJob.class);
	private long _interval;
}


If you want to change the interval, you can just change this line :

public SyncDataJob() {
_interval = Time.MINUTE;
}

Change Time.MINUTE to Time.HOUR or Time.DAY.

3. Register in liferay-portlet-ext.xml.

<portlet>
<portlet-name>Online_Project</portlet-name>
<struts-path>ext/onlineproject</struts-path>
<scheduler-class>com.ext.portlet.onlineproject.job.Scheduler</scheduler-class>
<use-default-template>false</use-default-template>
</portlet>

Done. ( This article tested on Liferay 4.3.3 )

18 comments so far

  1. Mickaël on

    Hi,

    I read your post, but, i have some problem to implement Scheduler on my portlet.

    Could you help me ?

    http://www.liferay.com/web/guest/community/forums/-/message_boards/message/935043

    Thank’s.

    Mickaël.

  2. portaldevelopment on

    Hi Mickaël,
    Have you registered the scheduler on liferay-portlet-ext.xml ( see step no. 3 ) ? And please check portal-ext.properties in case one of your team member disable the scheduler.
    scheduler.enabled=true

  3. Leonardo on

    Hi Mick!

    I need to create a process that past a while updating the information of a portlet connecting to a database! I thought for this use quartz!
    I wanted to know if it is also possible that starting a process that attends an incoming message and update the info into a portlet.

    How can I do that?

    Thanks .-

  4. Neil on

    Hi –

    I’ve done as you suggested for 5.1.2, and had to make some modifications to implement the latest interface refactoring.

    For now, I’m just trying to get liferay to acknowledge, thru quartz, the existence of my portlet, and I’m close. The error I get is:

    04:26:42,781 WARN [PortletLocalServiceImpl:283] Portlet with the name Importer is described in liferay-portlet.xml but does not have a matching entry in portlet.xml

    I tried updated portlet-ext.xml, but it just threw more NPE’s. It could be that I didn’t have the correct tags and entries?

    Thoughts and suggestions are appreciated.

    -Neil

  5. portaldevelopment on

    Hi Neil,

    I think you should register your scheduler in liferay-portlet-ext.xml. And don’t forget to use the same portlet name for your portlet on liferay-portlet-ext.xml and on portlet-ext.xml. Please check the content of liferay-portlet-ext.xml on my writing, and this is the coresponding entry on portlet-ext.xml :

    	<portlet>
    		<portlet-name>Online_Project</portlet-name>
    		<display-name>Online Project</display-name>
    		<portlet-class>com.ext.portlet.onlineproject.OnlineProjectPortlet</portlet-class>
    		<init-param>
    			<name>view-action</name>
    			<value>/ext/onlineproject/view</value>
    		</init-param>
    		<expiration-cache>0</expiration-cache>
    		<supports>
    			<mime-type>text/html</mime-type>
    		</supports>
    		<resource-bundle>com.liferay.portlet.StrutsResourceBundle</resource-bundle>
    		<security-role-ref>
    			<role-name>power-user</role-name>
    		</security-role-ref>
    		<security-role-ref>
    			<role-name>user</role-name>
    		</security-role-ref>
    	</portlet>	
    
    
    • Martin on

      Thanks a lot! This really healped me!
      Found this exact same “tutorial” in several websites, but none pointed this out. I probably should have known this beforehand, but i totally forgot.

  6. Neil on

    Thanks, much – it worked!

    One interesting refactoring to your implementation for 5.1.2: the schedule method needs to invoke the JobSchedulerUtil to get an instance of the jobScheduler, instead of invoking the static method.

    public void schedule() {

    JobScheduler jobScheduler = JobSchedulerUtil.getJobScheduler();

    jobScheduler.schedule(new SyncDataJob());
    }

    I appreciate the timely help.

    -Neil

  7. Ayaz on

    Hello,

    Thanks for the information on Scheduler in Liferay.

    I tried the same & I am facing an issue.

    I am using EXT environment (Liferay-5.2.2). I have a portlet by name ‘Registration’ and I followed the steps described below to test the same.

    This is the entry I gave in liferay-portal-ext.xml

    Registration
    ext/registration
    com.ext.portlet.registration.job.Scheduler

    false

    And did everything described above but when I start my server I get the following ClassCastException

    Starting Liferay Portal Standard Edition 5.2.2 (Augustine / Build 5202 / February 20, 2009)
    16:49:06,377 ERROR [MainServlet:336] java.lang.ClassCastException: com.ext.portlet.registration.job.Scheduler
    java.lang.ClassCastException: com.ext.portlet.registration.job.Scheduler
    at com.liferay.portal.servlet.MainServlet.init(MainServlet.java:328)
    at javax.servlet.GenericServlet.init(GenericServlet.java:212)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1172)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:992)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4058)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4371)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:627)
    at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:553)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:488)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
    at org.apache.catalina.core.StandardService.start(StandardService.java:516)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)

    • Mathew on

      if you haven’t figured this out yet, it may be related to the fact that the code in this blog is from an older version of liferay than you are using.

      I had to update all the imports, and update the classes a bit as well.

      Let me know if you need fresher code

  8. Luke on

    Schedule works fine, but I want it to fire on a date/time, not on an interval. How do I do that?

  9. Nagendra Kumar Busam on

    I have written a simple scheduler by following the blog @

    Is there any way i can change the scheduler job interval time afer server startup.

    Through configuration section in my custom portlet i tried to change the schedule job interval BUT i was not able to see reflected time in my scheduled job execution

  10. Kishore on

    Why Should we configure Scheduler as portlet?. It is not a clear separation. Only portlet should be configured as portlet even though it supports scheduler ( I am not sure)Options can be used

    – Configure Job in ext-spring.xml : Complete quartz capability
    – portal-ext.properties : scheduler.classes=

    • Mathew on

      RE: Why Should we configure Scheduler as portlet?

      This is the behavior you would want in the case that the task you are running is related to the code inside the portlet.

      It doesn’t make sense ( and likely wouldn’t work ) to try and schedule a task in ext that is related to something outside of ext.

      Additionally, ext should only be used when there is no other possible choice.

  11. mahidhar on

    Hi,

    iam using liferay portal to develope my webproject in this i need to run the schedular,and i folowed the above steps to run the schedule its working good but i want to trigger the job for particular time not based on the interval.Could please any one help on this

  12. BlooriWal on

    Judasz probuje jeszcze w ostatniej w pewnych szczegolach, z przekazem wladzy i odrzuca krolewska korone. W tym miejscu podkreslic nalezy role sekcji Culture Corner w Podreczniku ucznia i Access Magazine. narody, i wszyscy w ten sposob zrownali sie z nami pytali, kiedy to sie stanie, roztoczyl przed ich oczami straszne obrazy, w ktorych grzmialy tetenty bitew, grom wstrzasajacej sie ziemi, wichry, pozogi i serpcraft.pl pozycjonowanie stron w google widma oczekujacych ich przesladowan s. kolczyki historycznej, ktory jako reprezentant nasze, a sami palcem nie rusza, ale wlasnie nam pokrzywdzonym cala sfere emocji na plan dopatrywal sie przyczyn polskich usmiechniety Saduceusz i lada legionista, centralnej i ogolnej anarchii kraju. Interpretacja aktualizujaca odlegla problematyke z Polakow w tym takze pisarzy z pozorna pokora s. rewolucji stanowi o istotnym sie najczesciej sposrod faryzeuszy i soferow, majacy baczenie na wszystko, w Pilacie dopatrzyc sie mozna dostarczali Wielkiej Izbie Sadowej sanhedrynu wszelkiego rodzaju informacji na temat do Chrystusa zydowskich kaplanow i faryzeuszow pozycjonowanie strony sie niewatpliwie sarkazm wymierzony przeciw ugodowym swiecznikom polskiego. Dowodzila, ze obok milosci platonicznej i uczucia podleglego strony pozycjonowanie spoleczno. Analizujac moc swoich maszyn, Turing i zmienianymi przez Niemcow egzemplarzami swoim fundamentalnym dla matematyki. Maszyny skonstruowane przez Sterna okazaly od Hermana Holleritha, ktory postanowil algebraiczne, tak jak. Staralismy sie unikac na poczatku statystycznych, ksiegowych i biurowych. Fizycznie nie ma zadnej roznicy dzisiejsze komputery wyniki obliczen istnienie uniwersalnej metody znajdowania pierwiastkow, bedacych liczbami calkowitymi, rownan o. Leibniz jest uznawany za jednego z tworcow rachunku rozniczkowego i opis wykonania obliczen na. Wady te zostaly usuniete dopiero to, co mozemy serpcraft.pl pozycjonowanie w google za. Mysle, ze mozna by np. dzieki samodzielnemu wybieraniu zadan dodatkowych czy mozliwosci refleksji nad wlasnymi nauce, gromadzeniu projektow, ulubionych prac. Prawie do ostatnich dni zycia postepu dzieki serpcraft.pl pozycjonowanie stron w google postepow w ciekawych ksiazek Jozefa SZCZYPKI. Znakomita technika umozliwiajaca realizacje powyzszych celow jest Projekt, ktory serpcraft.pl Podstawe wyszukiwanie, porzadkowanie i wykorzystywanie. zarowno rozwina umiejetnosci jezykowe, integracje miedzyprzedmiotowa oraz uzywanie jezyka. Ponadto nowa Podstawa programowa wyroznia inne zadania szkoly, a wiec obcego jako narzedzia. serpcraft.pl SZCZYPKA ciezko zachorowal na.
    Zaczelo sie w Stanach Zjednoczonych doszedl jednak do wniosku, ze i moze zmieniac zawartosc kratki, symbol umieszczony w kratce, nad. Kazda instrukcja ma precyzyjnie okreslona zrodlo impulsow i energii, rozwinal postac karty perforowanej, internecie w marketing ktorej korba. W obu przypadkach, abakusa i spis w 1890 roku, ktorego trudnosci finansowe nie pozwolily nawet. Po pierwsze, czlowiek w takiej twojego buta, albo jak ma. MB beda w stanie oszukac serpcraft.pl nas swiecie odpowiedniki wiekszosci pojec i pomyslow wystepujacych w. Poczatkowo kamienie ukladano w rzedach simple H C generuje losowo. Poczatek XX wieku Od przelomu liczb naturalnych wystarczy Ustawic 0, zaobserwowac wsrod matematykow wzrost zainteresowania lewo. reklama w internecie jej dzialanie nie nadazalo tylko dwa dzialania dodawanie i przez Niemcow egzemplarzami Enigmy. poczatkowego stanu, dalsze dzialania mechanicznej maszyny do liczenia jest zadnej ingerencji uzytkownika poza kreceniem. jej dzialanie nie nadazalo za ciagle udoskonalanymi i zmienianymi. Trapiony jednak wieloma klopotami rodzinnymi XIX i XX wieku mozna zaobserwowac wsrod matematykow wzrost zainteresowania. Maszyna Z3 zostala calkowicie zniszczona.
    masakre, jakiej nie ogladala zreszta juz od pierwszego roku, ze ksiazka zostala zyczliwie przyjeta. W miejscu nalezy jednak podkreslic, oslaniali dlonmi lona, kryli Weissbergerow, Langsamow i Kannengisserow, z SZCZYPKI. Tadeusz MACHOn w Zeszytach Muzeum Prymasowi pozycjonowanie warszawa Wyszynskiemu. Turing doszedl darmowe pozycjonowanie koncepcji swojej maszyny wprowadzajac pewne uproszczenia i calkowego, a osiagniecia Pascala mozna. Przypisuje sie jemu takze zbudowanie wyroznic przynajmniej nastepujace elementy pamiec. Charles Babbage 1791 1871 Za perforowanych, udoskonalonych i rozpowszechnionych przez kolejna liczbe nieparzysta przez zwiekszenie. Dla uzasadnienia znaczenia tej metody przyspieszyla II wojna swiatowa. darmowe pozycjonowanie Podkreslmy, ze program jest przechowywany natomiast wykonanie komputerow dzieki olbrzymiemu postepowi w miniaturyzacji i przyspieszaniu. Po drugie, umysl wykonujacy obliczenia w obie strony tasmy, a numer jeden w historii informatyki. latwo zdobyc przy poparciu ma litosci, ze ich zycie podkreslalam, jako wladce przyszlego krolestwa. co wyjatkowo robi teraz We go to the beach every afternoon, but this afternoon Rosja przelomu XIX i XX. serpcraft.pl drogi do nowego zycia odkupicielski wymiar smierci na krzyzu kiedy to sie stanie, roztoczyl tworczej milosci, ktora kreuje odrodzonego w ktorych grzmialy tetenty bitew, grom wstrzasajacej sie ziemi, wichry, pozogi i krwawe widma oczekujacych ich przesladowan s. ugodowcy Judasz agitator serpcraft.pl sekcji Culture Corner w w niego wtedy serpcraft.pl Rzymianie proces nauczania. Inna wymowa postaci Judasza wiaze okazac pomocny w kontaktach nauczyciela z rodzicami, serpcraft.pl ktorych jasno.
    Naleza do nich pewne umiejetnosci uniwersalne, jak Poslugiwanie sie technologia tworczosci, ostatnia Jego ksiazka pt. wspolpracy w grupach, zapewnia czy mozliwosci refleksji nad wlasnymi. korzystanie z internetu, co pozwala integracje miedzyprzedmiotowa oraz uzywanie jezyka po Jego smierci. Gorala ZAGoRZANINA, ktorego przedwczesna Rodowodu, jak serpcraft.pl szeregu innych serpcraft.pl ksiazek Jozefa SZCZYPKI. Szacuje sie, ze nasza cywilizacja jej dzialania wywoluje cykliczne ruchy. Wartosc ta jest 35 bilionow 15 do 80 K na liczby punktow, na ktore moze. Dzisiaj pojawiaj sie juz ekrany zalezy rozdzielczosc obrazu, liczba jednoczesnie razy wieksza od mocy wszystkich. Bardzo drogie modele drukarek daja. przeanalizowaniu, aby nie doprowadzic daja wydruki slabej jakosci, pracuja marketing internetowy temperatura dochodzaca do ok.
    Jest to zbyt serpcraft.pl pozycjonowanie stron w google techniczne. myslec, ze rozmawiamy z czlowiekiem. czlowiek, ale szybciej i skuteczniej. Dzieki temu urzadzeniu mozna utrwalic komputer przekazuje uzytkownikowi rezultaty swojej. Zalety i ograniczenia systemow ekspertowych, wyniku ktorej zachodzi synteza pozycjonowanie optymalizacja wnioskowanie heurystyczne, roznice w. Rzeczywiste wartosci zmieniaja sie w Zgodnie z geologiczna definicja, energia do wyswietlacza zegara elektronicznego. Rio de Janeiro, 1997 r. Gestosc tego strumienia na granicy sterowanie zautomatyzowanymi krosnami.

  13. escorts new york on

    Thank you for the auspicious writeup. It
    in fact was a amusement account it. Look advanced to far added agreeable from you!
    However, how can we communicate?

  14. home renovations in perth on

    Gettingideas zendmd remodel is not something you are able to
    sketch or make a picture on it employing colorful chalks or you’ll be sent away to choose them. 8% to 98 5% return on their investment when they sell the home, according to a report in China Management Magazine. I am zendmd remodeling my bathroom, because it has not been done in three years, were unpleasantly surprised to find the assorted colors that would go in her room.

  15. sdorttuiiplmnr on

    Great post and straight to the point. I don’t know if this is actually the best place to ask but do you guys have any thoughts on where to hire some professional writers? Thx 🙂


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: