Как создать active-mq ExceptionListener? - PullRequest
1 голос
/ 02 февраля 2012

У меня есть проект, закодированный с использованием Spring-hibernate-activeMq

Что мне хотелось бы знать, так это то, что если я настроил activeMq, как я объяснил ниже, как мне реализовать класс слушателей исключений?Я знаю, что вы не очень хорошо понимаете сейчас, но, пожалуйста, посмотрите мои образцы ниже.

Дайте мне знать, правильно ли я реализовал прослушиватель исключений.Если нет, приведите пример, как это должно быть.Заранее спасибо.

Контекст приложения: (обратите внимание, что я не объявлял ни один компонент для прослушивателя исключений, кроме одного, который является свойством connectionFactory)

<bean id="connectionFactory"
      class="org.springframework.jms.connection.CachingConnectionFactory"
      depends-on="broker">
    <constructor-arg ref="amqConnectionFactory"/>
    <property name="reconnectOnException" value="true"/>
    <property name="exceptionListener" ref="jmsExceptionListener"/> 
    <property name="sessionCacheSize" value="100"/>
</bean>

Класс приемника исключений JMS: (Обратите внимание, что я пытаюсь внедрить ConnectionFactory, я не уверен, возможно ли это или нет .. И последнее, пожалуйста, проверьте аргументы конструктора этого, я также не увереноб этом ..)

@Component("jmsExceptionListener")
public class JMSExceptionListener implements ExceptionListener {

private final static Logger logger = LoggerFactory.getLogger(JMSExceptionListener.class); 

@Autowired
private CachingConnectionFactory connection;

//    private Connection connection = null;

private ExceptionListener exceptionListener = null; 

public JMSExceptionListener() {
}

public JMSExceptionListener(CachingConnectionFactory connection, ExceptionListener exceptionListener) {
    super();
    this.connection = connection;
    this.exceptionListener = exceptionListener; 
}

public void onException(JMSException arg0) {
    logger.error("JMS exception has occured.. ", arg0);

    if(connection != null){
        connection.onException(arg0);
    } 
    if (exceptionListener != null) {
        exceptionListener.onException(arg0);
    } 
} 
}

1 Ответ

0 голосов
/ 04 декабря 2012

Я управлял классом exceptionListener следующим образом:

public class JmsExceptionListener implements ExceptionListener {
private final static Logger logger = LoggerFactory.getLogger(JmsExceptionListener.class);

@Autowired
private MailService mailService;

private ExceptionListener exceptionListener = null;

private CachingConnectionFactory cachingConnectionFactory;

public JmsExceptionListener() {
}

public JmsExceptionListener(Connection connection, ExceptionListener exceptionListener) {
    super();
    this.exceptionListener = exceptionListener;
}

public synchronized void onException(JMSException e) {
    logger.error("JMS exception has occurred: ", e);
    sendErrorNotificationMail(e);

    Exception ex = e.getLinkedException();
    if (ex != null) {
        logger.error("JMS Linked exception: ", ex);
    }

    if (exceptionListener != null) {
        exceptionListener.onException(e);
    }
}

public CachingConnectionFactory getCachingConnectionFactory() {
    return cachingConnectionFactory;
}

public void setCachingConnectionFactory(CachingConnectionFactory cachingConnectionFactory) {
    this.cachingConnectionFactory = cachingConnectionFactory;
}

private void sendErrorNotificationMail(Exception e) {
    try {
        mailService.sendJmsExceptionMail(e, ErrorMessageAccessor.get("core.jms.unexpected"));
    } catch (ElekBusinessException e1) {
        logger.error(ErrorMessageAccessor.get("generic.mailService.exp"), e);
    }
}

}

...