001
014
015 package com.liferay.portal.scheduler.messaging;
016
017 import com.liferay.portal.kernel.log.Log;
018 import com.liferay.portal.kernel.log.LogFactoryUtil;
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.messaging.sender.MessageSender;
023 import com.liferay.portal.kernel.scheduler.SchedulerEngine;
024 import com.liferay.portal.kernel.scheduler.messaging.SchedulerRequest;
025
026 import java.util.List;
027
028
033 public class SchedulerMessageListener implements MessageListener {
034
035 public SchedulerMessageListener() {
036 }
037
038
041 public SchedulerMessageListener(
042 MessageSender messageSender, SchedulerEngine schedulerEngine) {
043
044 _messageSender = messageSender;
045 _schedulerEngine = schedulerEngine;
046 }
047
048 public void receive(Message message) {
049 try {
050 doReceive(message);
051 }
052 catch (Exception e) {
053 _log.error("Unable to process message " + message, e);
054 }
055 }
056
057 public void setMessageSender(MessageSender messageSender) {
058 _messageSender = messageSender;
059 }
060
061 public void setSchedulerEngine(SchedulerEngine schedulerEngine) {
062 _schedulerEngine = schedulerEngine;
063 }
064
065 protected void doReceive(Message message) throws Exception {
066 SchedulerRequest schedulerRequest =
067 (SchedulerRequest)message.getPayload();
068
069 String command = schedulerRequest.getCommand();
070
071 if (command.equals(SchedulerRequest.COMMAND_REGISTER)) {
072 _schedulerEngine.schedule(
073 schedulerRequest.getTrigger(),
074 schedulerRequest.getDescription(),
075 schedulerRequest.getDestination(),
076 schedulerRequest.getMessage());
077 }
078 else if (command.equals(SchedulerRequest.COMMAND_RETRIEVE)) {
079 doCommandRetrieve(message, schedulerRequest);
080 }
081 else if (command.equals(SchedulerRequest.COMMAND_SHUTDOWN)) {
082 _schedulerEngine.shutdown();
083 }
084 else if (command.equals(SchedulerRequest.COMMAND_STARTUP)) {
085 _schedulerEngine.start();
086 }
087 else if (command.equals(SchedulerRequest.COMMAND_UNREGISTER)) {
088 _schedulerEngine.unschedule(schedulerRequest.getTrigger());
089 }
090 }
091
092 protected void doCommandRetrieve(
093 Message message, SchedulerRequest schedulerRequest)
094 throws Exception {
095
096 List<SchedulerRequest> schedulerRequests =
097 _schedulerEngine.getScheduledJobs(
098 schedulerRequest.getTrigger().getGroupName());
099
100 Message responseMessage = MessageBusUtil.createResponseMessage(
101 message, schedulerRequests);
102
103 _messageSender.send(
104 responseMessage.getDestinationName(), responseMessage);
105 }
106
107 private static Log _log = LogFactoryUtil.getLog(
108 SchedulerMessageListener.class);
109
110 private MessageSender _messageSender;
111 private SchedulerEngine _schedulerEngine;
112
113 }