Wednesday, May 27, 2015

Multiple Scheduler in Liferay

Sometimes we need to run more than one scheduler (multiple scheduler) in our liferay portlet.
Below are the steps of  how we can achieve this.

Steps

Step 1:
Create one liferay project of portlet plugin type, in our example project name is Scheduler,    (suffix portlet will automatically added after project name) so after creation project complete name will be Scheduler-portlet

Step 2: Create two new java class  FirstScheduler.java and SecondScheduler.java   inside docroot/web-inf/src/com/test

Step 3: Paste below code in FirstScheduler.java 

package com.test;

import com.liferay.portal.kernel.messaging.Message;
import com.liferay.portal.kernel.messaging.MessageListener;
import com.liferay.portal.kernel.messaging.MessageListenerException;

public class FirstScheduler implements MessageListener {

public void receive(Message arg0) throws MessageListenerException {
      
        System.out.println("First scheduler  is running ...");
      
    }
   
}
 

Step 4: Paste below code in SecondScheduler.java

package com.test;

import com.liferay.portal.kernel.messaging.Message;
import com.liferay.portal.kernel.messaging.MessageListener;
import com.liferay.portal.kernel.messaging.MessageListenerException;

public class SecondScheduler implements  MessageListener {

    public void receive(Message arg0) throws MessageListenerException {
      
        System.out.println("Second scheduler  is running ...");
      
    }
}
 

Step 5: Paste below code in liferay-portlet.xml for defining scheduler entry for two scheduler.

<?xml version="1.0"?>
<!DOCTYPE liferay-portlet-app PUBLIC "-//Liferay//DTD Portlet Application 6.2.0//EN" "http://www.liferay.com/dtd/liferay-portlet-app_6_2_0.dtd">

<liferay-portlet-app>
   
    <portlet>
        <portlet-name>schedule</portlet-name>
        <icon>/icon.png</icon>
        <scheduler-entry>
               <scheduler-description>FirstScheduler</scheduler-description>
               <scheduler-event-listener-class>com.test.FirstScheduler</scheduler-event-listener-class>
               <trigger>
                   <simple>
                      <simple-trigger-value>1</simple-trigger-value> 
                      <time-unit>minute</time-unit>  
                   </simple>
               </trigger>
        </scheduler-entry>

        <scheduler-entry>
               <scheduler-description>SecondScheduler</scheduler-description>
               <scheduler-event-listener-class>com.test.SecondScheduler</scheduler-event-listener-class>
               <trigger>
                     <simple>
                      <simple-trigger-value>2</simple-trigger-value> 
                      <time-unit>minute</time-unit>  
                   </simple>
               </trigger>
       </scheduler-entry>
      
        <header-portlet-css>/css/main.css</header-portlet-css>
        <footer-portlet-javascript>
            /js/main.js
        </footer-portlet-javascript>
        <css-class-wrapper>schedule-portlet</css-class-wrapper>
    </portlet>
    <role-mapper>
        <role-name>administrator</role-name>
        <role-link>Administrator</role-link>
    </role-mapper>
    <role-mapper>
        <role-name>guest</role-name>
        <role-link>Guest</role-link>
    </role-mapper>
    <role-mapper>
        <role-name>power-user</role-name>
        <role-link>Power User</role-link>
    </role-mapper>
    <role-mapper>
        <role-name>user</role-name>
        <role-link>User</role-link>
    </role-mapper>
</liferay-portlet-app>


Step 6 : Paste below code in portlet view.jsp 

<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>

<portlet:defineObjects />

<p style="border:1px solid green;">Multiple Scheduler in Liferay</p>
<p>Multiple Scheduler, Two scheduler will trigger, First Scheduler will trigger on every 1 min interval
and Second Scheduler will trigger on every 2 min interval.
</p>

 

Output: 


 

 

0 comments:

Post a Comment