001    /**
002     * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
003     *
004     * The contents of this file are subject to the terms of the Liferay Enterprise
005     * Subscription License ("License"). You may not use this file except in
006     * compliance with the License. You can obtain a copy of the License by
007     * contacting Liferay, Inc. See the License for the specific language governing
008     * permissions and limitations under the License, including but not limited to
009     * distribution rights of the Software.
010     *
011     *
012     *
013     */
014    
015    package com.liferay.portal.kernel.scheduler;
016    
017    import com.liferay.portal.kernel.bean.ClassLoaderBeanHandler;
018    import com.liferay.portal.kernel.messaging.DestinationNames;
019    import com.liferay.portal.kernel.messaging.Message;
020    import com.liferay.portal.kernel.messaging.MessageBusUtil;
021    import com.liferay.portal.kernel.messaging.MessageListener;
022    import com.liferay.portal.kernel.scheduler.messaging.SchedulerEventMessageListenerWrapper;
023    import com.liferay.portal.kernel.scheduler.messaging.SchedulerRequest;
024    
025    import java.lang.reflect.Proxy;
026    
027    import java.util.List;
028    
029    /**
030     * @author Bruno Farache
031     * @author Shuyang Zhou
032     */
033    public class SchedulerEngineUtil {
034    
035            public static List<SchedulerRequest> getScheduledJobs(String groupName)
036                    throws SchedulerException {
037    
038                    return _instance._getScheduledJobs(groupName);
039            }
040    
041            public static void init(SchedulerEngine defaultScheduler) {
042                    _instance._init(defaultScheduler);
043            }
044    
045            public static void schedule(
046                            SchedulerEntry schedulerEntry, ClassLoader classLoader)
047                    throws SchedulerException {
048    
049                    MessageListener schedulerEventListener = null;
050    
051                    try {
052                            schedulerEventListener = (MessageListener)classLoader.loadClass(
053                                    schedulerEntry.getEventListenerClass()).newInstance();
054    
055                            schedulerEventListener = (MessageListener)Proxy.newProxyInstance(
056                                    classLoader, new Class[] {MessageListener.class},
057                                    new ClassLoaderBeanHandler(
058                                            schedulerEventListener, classLoader));
059                    }
060                    catch (Exception e) {
061                            throw new SchedulerException(e);
062                    }
063    
064                    schedulerEventListener = new SchedulerEventMessageListenerWrapper(
065                            schedulerEventListener, schedulerEntry.getEventListenerClass());
066    
067                    schedulerEntry.setEventListener(schedulerEventListener);
068    
069                    MessageBusUtil.registerMessageListener(
070                            DestinationNames.SCHEDULER_DISPATCH, schedulerEventListener);
071    
072                    schedule(
073                            schedulerEntry.getTrigger(), schedulerEntry.getDescription(),
074                            DestinationNames.SCHEDULER_DISPATCH, null);
075            }
076    
077            public static void schedule(
078                            Trigger trigger, String description, String destinationName,
079                            Message message)
080                    throws SchedulerException {
081    
082                    _instance._schedule(trigger, description, destinationName, message);
083            }
084    
085            public static void schedule(
086                            Trigger trigger, String description, String destinationName,
087                            Object payload)
088                    throws SchedulerException {
089    
090                    Message message = new Message();
091    
092                    message.setPayload(payload);
093    
094                    _instance._schedule(trigger, description, destinationName, message);
095            }
096    
097            public static void shutdown() throws SchedulerException {
098                    _instance._shutdown();
099            }
100    
101            public static void start() throws SchedulerException {
102                    _instance._start();
103            }
104    
105            public static void unschedule(SchedulerEntry schedulerEntry)
106                    throws SchedulerException {
107    
108                    MessageListener schedulerEventListener =
109                            schedulerEntry.getEventListener();
110    
111                    MessageBusUtil.unregisterMessageListener(
112                            DestinationNames.SCHEDULER_DISPATCH, schedulerEventListener);
113    
114                    unschedule(schedulerEntry.getTrigger());
115            }
116    
117            public static void unschedule(Trigger trigger) throws SchedulerException {
118                    _instance._unschedule(trigger);
119            }
120    
121            private List<SchedulerRequest> _getScheduledJobs(String groupName)
122                    throws SchedulerException {
123    
124                    return _schedulerEngine.getScheduledJobs(groupName);
125            }
126    
127            private void _init(SchedulerEngine schedulerEngine) {
128                    _schedulerEngine = schedulerEngine;
129            }
130    
131            private void _schedule(
132                            Trigger trigger, String description, String destinationName,
133                            Message message)
134                    throws SchedulerException {
135    
136                    _schedulerEngine.schedule(
137                            trigger, description, destinationName, message);
138            }
139    
140            private void _shutdown() throws SchedulerException {
141                    _schedulerEngine.shutdown();
142            }
143    
144            private void _start() throws SchedulerException {
145                    _schedulerEngine.start();
146            }
147    
148            private void _unschedule(Trigger trigger) throws SchedulerException {
149                    _schedulerEngine.unschedule(trigger);
150            }
151    
152            private static SchedulerEngineUtil _instance = new SchedulerEngineUtil();
153    
154            private SchedulerEngine _schedulerEngine;
155    
156    }