001
014
015 package com.liferay.portal.kernel.scheduler.messaging;
016
017 import com.liferay.portal.kernel.messaging.DestinationNames;
018 import com.liferay.portal.kernel.messaging.Message;
019 import com.liferay.portal.kernel.messaging.MessageBusUtil;
020 import com.liferay.portal.kernel.messaging.MessageListener;
021 import com.liferay.portal.kernel.messaging.MessageListenerException;
022 import com.liferay.portal.kernel.scheduler.JobState;
023 import com.liferay.portal.kernel.scheduler.SchedulerEngine;
024 import com.liferay.portal.kernel.scheduler.SchedulerEngineUtil;
025 import com.liferay.portal.kernel.scheduler.TriggerState;
026 import com.liferay.portal.kernel.util.GetterUtil;
027 import com.liferay.portal.kernel.util.StringPool;
028 import com.liferay.portal.kernel.uuid.PortalUUIDUtil;
029
030 import java.util.Date;
031
032
035 public class SchedulerEventMessageListenerWrapper implements MessageListener {
036
037 public void afterPropertiesSet() {
038 String jobName = _className;
039
040 if (_className.length() > SchedulerEngine.JOB_NAME_MAX_LENGTH) {
041 jobName = _className.substring(
042 0, SchedulerEngine.JOB_NAME_MAX_LENGTH);
043 }
044
045 String groupName = _className;
046
047 if (_className.length() > SchedulerEngine.GROUP_NAME_MAX_LENGTH) {
048 groupName = _className.substring(
049 0, SchedulerEngine.GROUP_NAME_MAX_LENGTH);
050 }
051
052 _key = jobName.concat(StringPool.PERIOD).concat(groupName);
053
054 if (_messageListenerUUID == null) {
055 _messageListenerUUID = PortalUUIDUtil.generate();
056 }
057 }
058
059 public String getMessageListenerUUID() {
060 return _messageListenerUUID;
061 }
062
063 public void receive(Message message) throws MessageListenerException {
064 String destinationName = GetterUtil.getString(
065 message.getString(SchedulerEngine.DESTINATION_NAME));
066
067 if (destinationName.equals(DestinationNames.SCHEDULER_DISPATCH)) {
068 String receiverKey = GetterUtil.getString(
069 message.getString(SchedulerEngine.RECEIVER_KEY));
070
071 if (!receiverKey.equals(_key)) {
072 return;
073 }
074 }
075
076 try{
077 _messageListener.receive(message);
078 }
079 catch (Exception e) {
080 handleException(message, e);
081
082 if (e instanceof MessageListenerException) {
083 throw (MessageListenerException)e;
084 }
085 else {
086 throw new MessageListenerException(e);
087 }
088 }
089 finally {
090 TriggerState triggerState = null;
091
092 if (message.getBoolean(SchedulerEngine.DISABLE)) {
093 triggerState = TriggerState.COMPLETE;
094
095 if (destinationName.equals(
096 DestinationNames.SCHEDULER_DISPATCH)) {
097
098 MessageBusUtil.unregisterMessageListener(
099 destinationName, this);
100 }
101 }
102 else {
103 triggerState = TriggerState.NORMAL;
104 }
105
106 try {
107 SchedulerEngineUtil.auditSchedulerJobs(message, triggerState);
108 }
109 catch (Exception e) {
110 throw new MessageListenerException(e);
111 }
112 }
113 }
114
115 public void setClassName(String className) {
116 _className = className;
117 }
118
119 public void setMessageListener(MessageListener messageListener) {
120 _messageListener = messageListener;
121 }
122
123 public void setMessageListenerUUID(String messageListenerUUID) {
124 _messageListenerUUID = messageListenerUUID;
125 }
126
127 protected void handleException(Message message, Exception exception) {
128 JobState jobState = (JobState)message.get(SchedulerEngine.JOB_STATE);
129
130 if (jobState != null) {
131 jobState.addException(exception, new Date());
132 }
133 }
134
135 private String _className;
136 private String _key;
137 private MessageListener _messageListener;
138 private String _messageListenerUUID;
139
140 }