2016-05-05 10 views
1

Ich versuche, Liferay Trigger auf stündlicher Basis zu rufen und es arbeitet erfolgreich diese linkRun Liferay Dynamische Scheduler auf bestimmten Datum und Uhrzeit

mit Aber jetzt ich dynamische wollen Execute Trigger nur auf Start & End Datetime-Set durch den Benutzer in der Datenbank

Scheduler Tabelle

schedulerId schedulerStartDateTime schedulerEndDateTime blockId 
1    05/11/2016 01:00   05/13/2016 02:00  11011 
2    05/12/2016 13:00   05/16/2016 16:30  11012 
3    05/11/2016 20:15   05/20/2016 22:00  11013 

Jede Hilfe würde geschätzt werden.

Ich habe gelesen von this Post, dass es mit SchedulerEntry funktioniert, aber nicht weiß, wie und wo diese Klasse zu verwenden.

Antwort

0

Ein Ansatz, den ich in meiner Arbeit verwenden ist wie unten:

erste konfiguriere ich in liferay-portlet.xml der Planer wie unten:

<?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>your-portelt</portlet-name> 
     <icon>/icon.png</icon> 
     <scheduler-entry> 
      <scheduler-event-listener-class>your.class.that.implements.messagelistener</scheduler-event-listener-class> 
      <trigger> 
       <cron> 
        <cron-trigger-value>.... your cron</cron-trigger-value> 
       </cron> 
      </trigger> 
     </scheduler-entry> 
    ... 
    </portlet> 
    ... 
</liferay-portlet-app> 

dann die Logik meiner Busines I implementieren sheduler in einer Klasse, die ich im Scheduler-Event-Listener-Class-Tag referenziere.

public class YourManageScheduler implements MessageListener { 

     @Override 
     public void receive(Message message) throws MessageListenerException { 
      User user = .... 
      PermissionChecker permissionChecker = PermissionCheckerFactoryUtil.getPermissionCheckerFactory().create(user); 
      PermissionThreadLocal.setPermissionChecker(permissionChecker); 
      // your logic 
      ...  
// your logic 
      .... 
     } 

... 
    } 

Eine wichtige Sache, wenn Sie einige api verwenden, die PermissionCheker Vorform haben Sie die permision cheker in Ihrem Thread konfigurieren lokalen oder versuchen api zu verwenden, die nicht über die Berechtigung cheker requred. Der entscheidende Punkt ist, dass in diesem Fall der Job asynchron gestartet wird und keine Benutzer protokolliert werden, da kein Berechtigungs-Cheker im MessageListener-Thread konfiguriert ist.

Ich hoffe, dass dies Ihnen helfen kann