1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * This library is free software; you can redistribute it and/or modify it under
5    * the terms of the GNU Lesser General Public License as published by the Free
6    * Software Foundation; either version 2.1 of the License, or (at your option)
7    * any later version.
8    *
9    * This library is distributed in the hope that it will be useful, but WITHOUT
10   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11   * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
12   * details.
13   */
14  
15  package com.liferay.portal.kernel.scheduler;
16  
17  import com.liferay.portal.kernel.bean.ClassLoaderBeanHandler;
18  import com.liferay.portal.kernel.messaging.DestinationNames;
19  import com.liferay.portal.kernel.messaging.Message;
20  import com.liferay.portal.kernel.messaging.MessageBusUtil;
21  import com.liferay.portal.kernel.messaging.MessageListener;
22  import com.liferay.portal.kernel.scheduler.messaging.SchedulerEventMessageListenerWrapper;
23  import com.liferay.portal.kernel.scheduler.messaging.SchedulerRequest;
24  
25  import java.lang.reflect.Proxy;
26  
27  import java.util.List;
28  
29  /**
30   * <a href="SchedulerEngineUtil.java.html"><b><i>View Source</i></b></a>
31   *
32   * @author Bruno Farache
33   * @author Shuyang Zhou
34   */
35  public class SchedulerEngineUtil {
36  
37      public static List<SchedulerRequest> getScheduledJobs(String groupName)
38          throws SchedulerException {
39  
40          return _instance._getScheduledJobs(groupName);
41      }
42  
43      public static void init(SchedulerEngine defaultScheduler) {
44          _instance._init(defaultScheduler);
45      }
46  
47      public static void schedule(
48              SchedulerEntry schedulerEntry, ClassLoader classLoader)
49          throws SchedulerException {
50  
51          MessageListener schedulerEventListener = null;
52  
53          try {
54              schedulerEventListener = (MessageListener)classLoader.loadClass(
55                  schedulerEntry.getEventListenerClass()).newInstance();
56  
57              schedulerEventListener = (MessageListener)Proxy.newProxyInstance(
58                  classLoader, new Class[] {MessageListener.class},
59                  new ClassLoaderBeanHandler(
60                      schedulerEventListener, classLoader));
61          }
62          catch (Exception e) {
63              throw new SchedulerException(e);
64          }
65  
66          schedulerEventListener = new SchedulerEventMessageListenerWrapper(
67              schedulerEventListener, schedulerEntry.getEventListenerClass());
68  
69          schedulerEntry.setEventListener(schedulerEventListener);
70  
71          MessageBusUtil.registerMessageListener(
72              DestinationNames.SCHEDULER_DISPATCH, schedulerEventListener);
73  
74          schedule(
75              schedulerEntry.getTrigger(), schedulerEntry.getDescription(),
76              DestinationNames.SCHEDULER_DISPATCH, null);
77      }
78  
79      public static void schedule(
80              Trigger trigger, String description, String destinationName,
81              Message message)
82          throws SchedulerException {
83  
84          _instance._schedule(trigger, description, destinationName, message);
85      }
86  
87      public static void schedule(
88              Trigger trigger, String description, String destinationName,
89              Object payload)
90          throws SchedulerException {
91  
92          Message message = new Message();
93  
94          message.setPayload(payload);
95  
96          _instance._schedule(trigger, description, destinationName, message);
97      }
98  
99      public static void shutdown() throws SchedulerException {
100         _instance._shutdown();
101     }
102 
103     public static void start() throws SchedulerException {
104         _instance._start();
105     }
106 
107     public static void unschedule(SchedulerEntry schedulerEntry)
108         throws SchedulerException {
109 
110         MessageListener schedulerEventListener =
111             schedulerEntry.getEventListener();
112 
113         MessageBusUtil.unregisterMessageListener(
114             DestinationNames.SCHEDULER_DISPATCH, schedulerEventListener);
115 
116         unschedule(schedulerEntry.getTrigger());
117     }
118 
119     public static void unschedule(Trigger trigger) throws SchedulerException {
120         _instance._unschedule(trigger);
121     }
122 
123     private List<SchedulerRequest> _getScheduledJobs(String groupName)
124         throws SchedulerException {
125 
126         return _schedulerEngine.getScheduledJobs(groupName);
127     }
128 
129     private void _init(SchedulerEngine schedulerEngine) {
130         _schedulerEngine = schedulerEngine;
131     }
132 
133     private void _schedule(
134             Trigger trigger, String description, String destinationName,
135             Message message)
136         throws SchedulerException {
137 
138         _schedulerEngine.schedule(
139             trigger, description, destinationName, message);
140     }
141 
142     private void _shutdown() throws SchedulerException {
143         _schedulerEngine.shutdown();
144     }
145 
146     private void _start() throws SchedulerException {
147         _schedulerEngine.start();
148     }
149 
150     private void _unschedule(Trigger trigger) throws SchedulerException {
151         _schedulerEngine.unschedule(trigger);
152     }
153 
154     private static SchedulerEngineUtil _instance = new SchedulerEngineUtil();
155 
156     private SchedulerEngine _schedulerEngine;
157 
158 }