001
014
015 package com.liferay.portal.kernel.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.sender.MessageSender;
020 import com.liferay.portal.kernel.messaging.sender.SingleDestinationMessageSender;
021
022
026 public abstract class BaseMessageStatusMessageListener
027 implements MessageListener {
028
029 public BaseMessageStatusMessageListener() {
030 }
031
032
035 public BaseMessageStatusMessageListener(
036 SingleDestinationMessageSender statusSender,
037 MessageSender responseSender) {
038
039 _statusSender = statusSender;
040 _responseSender = responseSender;
041 }
042
043 public void receive(Message message) {
044 MessageStatus messageStatus = new MessageStatus();
045
046 messageStatus.startTimer();
047
048 try {
049 doReceive(message, messageStatus);
050 }
051 catch (Exception e) {
052 _log.error(
053 "Unable to process request " + message.getDestinationName(), e);
054
055 messageStatus.setException(e);
056 }
057 finally {
058 messageStatus.stopTimer();
059
060 _statusSender.send(messageStatus);
061 }
062 }
063
064 public void setResponseSender(MessageSender responseSender) {
065 _responseSender = responseSender;
066 }
067
068 public void setStatusSender(SingleDestinationMessageSender statusSender) {
069 _statusSender = statusSender;
070 }
071
072 protected abstract void doReceive(
073 Message message, MessageStatus messageStatus)
074 throws Exception;
075
076 protected MessageSender getResponseSender() {
077 return _responseSender;
078 }
079
080 private static Log _log = LogFactoryUtil.getLog(BaseMessageListener.class);
081
082 private MessageSender _responseSender;
083 private SingleDestinationMessageSender _statusSender;
084
085 }