1
22
23 package com.liferay.portal.scheduler.messaging;
24
25 import com.liferay.portal.kernel.log.Log;
26 import com.liferay.portal.kernel.log.LogFactoryUtil;
27 import com.liferay.portal.kernel.messaging.Message;
28 import com.liferay.portal.kernel.messaging.MessageBusUtil;
29 import com.liferay.portal.kernel.messaging.MessageListener;
30 import com.liferay.portal.kernel.messaging.sender.MessageSender;
31 import com.liferay.portal.kernel.scheduler.SchedulerEngine;
32 import com.liferay.portal.kernel.scheduler.TriggerType;
33 import com.liferay.portal.kernel.scheduler.messaging.SchedulerRequest;
34
35 import java.util.List;
36
37
43 public class SchedulerMessageListener implements MessageListener {
44
45 public SchedulerMessageListener(
46 MessageSender messageSender, SchedulerEngine schedulerEngine) {
47
48 _messageSender = messageSender;
49 _schedulerEngine = schedulerEngine;
50 }
51
52 public void receive(Message message) {
53 try {
54 doReceive(message);
55 }
56 catch (Exception e) {
57 _log.error("Unable to process message " + message, e);
58 }
59 }
60
61 protected void doReceive(Message message) throws Exception {
62 SchedulerRequest schedulerRequest =
63 (SchedulerRequest)message.getPayload();
64
65 String command = schedulerRequest.getCommand();
66
67 if (command.equals(SchedulerRequest.COMMAND_REGISTER)) {
68 TriggerType triggerType = schedulerRequest.getTriggerType();
69
70 if (triggerType.equals(TriggerType.CRON)) {
71 _schedulerEngine.schedule(
72 schedulerRequest.getGroupName(),
73 schedulerRequest.getCronText(),
74 schedulerRequest.getStartDate(),
75 schedulerRequest.getEndDate(),
76 schedulerRequest.getDescription(),
77 schedulerRequest.getDestination(),
78 schedulerRequest.getMessageBody());
79 }
80 else if (triggerType.equals(TriggerType.SIMPLE)) {
81 _schedulerEngine.schedule(
82 schedulerRequest.getGroupName(),
83 schedulerRequest.getInterval(),
84 schedulerRequest.getStartDate(),
85 schedulerRequest.getEndDate(),
86 schedulerRequest.getDescription(),
87 schedulerRequest.getDestination(),
88 schedulerRequest.getMessageBody());
89 }
90 }
91 else if (command.equals(SchedulerRequest.COMMAND_RETRIEVE)) {
92 doCommandRetrieve(message, schedulerRequest);
93 }
94 else if (command.equals(SchedulerRequest.COMMAND_SHUTDOWN)) {
95 _schedulerEngine.shutdown();
96 }
97 else if (command.equals(SchedulerRequest.COMMAND_STARTUP)) {
98 _schedulerEngine.start();
99 }
100 else if (command.equals(SchedulerRequest.COMMAND_UNREGISTER)) {
101 _schedulerEngine.unschedule(
102 schedulerRequest.getJobName(), schedulerRequest.getGroupName());
103 }
104 }
105
106 protected void doCommandRetrieve(
107 Message message, SchedulerRequest schedulerRequest)
108 throws Exception {
109
110 List<SchedulerRequest> schedulerRequests =
111 _schedulerEngine.getScheduledJobs(schedulerRequest.getGroupName());
112
113 Message responseMessage = MessageBusUtil.createResponseMessage(
114 message, schedulerRequests);
115
116 _messageSender.send(
117 responseMessage.getDestinationName(), responseMessage);
118 }
119
120 private static Log _log =
121 LogFactoryUtil.getLog(SchedulerMessageListener.class);
122
123 private MessageSender _messageSender;
124 private SchedulerEngine _schedulerEngine;
125
126 }