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