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 @Override
044 public void receive(Message message) {
045 MessageStatus messageStatus = new MessageStatus();
046
047 messageStatus.startTimer();
048
049 try {
050 doReceive(message, messageStatus);
051 }
052 catch (Exception e) {
053 _log.error(
054 "Unable to process request " + message.getDestinationName(), e);
055
056 messageStatus.setException(e);
057 }
058 finally {
059 messageStatus.stopTimer();
060
061 _statusSender.send(messageStatus);
062 }
063 }
064
065 public void setResponseSender(MessageSender responseSender) {
066 _responseSender = responseSender;
067 }
068
069 public void setStatusSender(SingleDestinationMessageSender statusSender) {
070 _statusSender = statusSender;
071 }
072
073 protected abstract void doReceive(
074 Message message, MessageStatus messageStatus)
075 throws Exception;
076
077 protected MessageSender getResponseSender() {
078 return _responseSender;
079 }
080
081 private static Log _log = LogFactoryUtil.getLog(
082 BaseMessageStatusMessageListener.class);
083
084 private MessageSender _responseSender;
085 private SingleDestinationMessageSender _statusSender;
086
087 }