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 }
47
48
51 public SchedulerMessageListener(
52 MessageSender messageSender, SchedulerEngine schedulerEngine) {
53
54 _messageSender = messageSender;
55 _schedulerEngine = schedulerEngine;
56 }
57
58 public void receive(Message message) {
59 try {
60 doReceive(message);
61 }
62 catch (Exception e) {
63 _log.error("Unable to process message " + message, e);
64 }
65 }
66
67 public void setMessageSender(MessageSender messageSender) {
68 _messageSender = messageSender;
69 }
70
71 public void setSchedulerEngine(SchedulerEngine schedulerEngine) {
72 _schedulerEngine = schedulerEngine;
73 }
74
75 protected void doReceive(Message message) throws Exception {
76 SchedulerRequest schedulerRequest =
77 (SchedulerRequest)message.getPayload();
78
79 String command = schedulerRequest.getCommand();
80
81 if (command.equals(SchedulerRequest.COMMAND_REGISTER)) {
82 TriggerType triggerType = schedulerRequest.getTriggerType();
83
84 if (triggerType.equals(TriggerType.CRON)) {
85 _schedulerEngine.schedule(
86 schedulerRequest.getJobName(),
87 schedulerRequest.getGroupName(),
88 schedulerRequest.getCronText(),
89 schedulerRequest.getStartDate(),
90 schedulerRequest.getEndDate(),
91 schedulerRequest.getDescription(),
92 schedulerRequest.getDestination(),
93 schedulerRequest.getMessageBody());
94 }
95 else if (triggerType.equals(TriggerType.SIMPLE)) {
96 _schedulerEngine.schedule(
97 schedulerRequest.getJobName(),
98 schedulerRequest.getGroupName(),
99 schedulerRequest.getInterval(),
100 schedulerRequest.getStartDate(),
101 schedulerRequest.getEndDate(),
102 schedulerRequest.getDescription(),
103 schedulerRequest.getDestination(),
104 schedulerRequest.getMessageBody());
105 }
106 }
107 else if (command.equals(SchedulerRequest.COMMAND_RETRIEVE)) {
108 doCommandRetrieve(message, schedulerRequest);
109 }
110 else if (command.equals(SchedulerRequest.COMMAND_SHUTDOWN)) {
111 _schedulerEngine.shutdown();
112 }
113 else if (command.equals(SchedulerRequest.COMMAND_STARTUP)) {
114 _schedulerEngine.start();
115 }
116 else if (command.equals(SchedulerRequest.COMMAND_UNREGISTER)) {
117 _schedulerEngine.unschedule(
118 schedulerRequest.getJobName(), schedulerRequest.getGroupName());
119 }
120 }
121
122 protected void doCommandRetrieve(
123 Message message, SchedulerRequest schedulerRequest)
124 throws Exception {
125
126 List<SchedulerRequest> schedulerRequests =
127 _schedulerEngine.getScheduledJobs(schedulerRequest.getGroupName());
128
129 Message responseMessage = MessageBusUtil.createResponseMessage(
130 message, schedulerRequests);
131
132 _messageSender.send(
133 responseMessage.getDestinationName(), responseMessage);
134 }
135
136 private static Log _log =
137 LogFactoryUtil.getLog(SchedulerMessageListener.class);
138
139 private MessageSender _messageSender;
140 private SchedulerEngine _schedulerEngine;
141
142 }