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.getGroupName(),
87 schedulerRequest.getCronText(),
88 schedulerRequest.getStartDate(),
89 schedulerRequest.getEndDate(),
90 schedulerRequest.getDescription(),
91 schedulerRequest.getDestination(),
92 schedulerRequest.getMessageBody());
93 }
94 else if (triggerType.equals(TriggerType.SIMPLE)) {
95 _schedulerEngine.schedule(
96 schedulerRequest.getGroupName(),
97 schedulerRequest.getInterval(),
98 schedulerRequest.getStartDate(),
99 schedulerRequest.getEndDate(),
100 schedulerRequest.getDescription(),
101 schedulerRequest.getDestination(),
102 schedulerRequest.getMessageBody());
103 }
104 }
105 else if (command.equals(SchedulerRequest.COMMAND_RETRIEVE)) {
106 doCommandRetrieve(message, schedulerRequest);
107 }
108 else if (command.equals(SchedulerRequest.COMMAND_SHUTDOWN)) {
109 _schedulerEngine.shutdown();
110 }
111 else if (command.equals(SchedulerRequest.COMMAND_STARTUP)) {
112 _schedulerEngine.start();
113 }
114 else if (command.equals(SchedulerRequest.COMMAND_UNREGISTER)) {
115 _schedulerEngine.unschedule(
116 schedulerRequest.getJobName(), schedulerRequest.getGroupName());
117 }
118 }
119
120 protected void doCommandRetrieve(
121 Message message, SchedulerRequest schedulerRequest)
122 throws Exception {
123
124 List<SchedulerRequest> schedulerRequests =
125 _schedulerEngine.getScheduledJobs(schedulerRequest.getGroupName());
126
127 Message responseMessage = MessageBusUtil.createResponseMessage(
128 message, schedulerRequests);
129
130 _messageSender.send(
131 responseMessage.getDestinationName(), responseMessage);
132 }
133
134 private static Log _log =
135 LogFactoryUtil.getLog(SchedulerMessageListener.class);
136
137 private MessageSender _messageSender;
138 private SchedulerEngine _schedulerEngine;
139
140 }