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