2015-05-28 7 views
1

Я использую javax.jms.Connection для отправки & получать сообщения jms в/из JBoss501. Я также использую Connection.setExceptionListener(). Я хотел бы знать, нужно ли установить прослушиватель исключений до начала соединения (Conneciton.start())? Любые идеи воспроизвести исключение соединения JBoss по желанию, чтобы подтвердить, вызван ли прослушиватель исключений.JMS ExceptionListener

ответ

0

Из спецификации:

Если провайдер JMS обнаруживает серьезные проблемы с объектом Connection, информирует ExceptionListener объекта Connection, в случае один был зарегистрирован. Он делает это, вызывая метод onException слушателя, передавая ему аргумент JMSException, описывающий проблему.

Слушатель исключений позволяет асинхронно уведомлять клиента о проблеме. Некоторые соединения только потребляют сообщения, поэтому у них не будет другого способа узнать, что их соединение не удалось.

Помните, что здесь есть место для реализации конкретного поставщика, о том, как обрабатываются исключения. Некоторые поставщики пытаются «исправить» ситуацию, если это возможно.

Теперь о запуске соединения до или после установки листинга исключений ... Всегда устанавливайте прослушиватель исключений ПЕРЕД началом подключения.

И О воспроизводя я думаю, вы могли бы

  • Start потребитель, connection.start должен быть запущен. И ждет сообщение.
  • Закрытие jboss немедленно.
  • Перезапустить jboss.

Кроме того, я знаю, что с помощью Eclipse, или другие инструменты Dev поможет вам начать работу в режиме отладки, и вы можете в любой момент времени, как отладчик показывает вам статус просто прервать сервер JBoss и перезапустить его снова.

1

С Jboss 5.0.1 настройка прослушивателя исключений срабатывала даже после запуска соединения. Как уже упоминалось в «MrSimpleMind» , прослушиватель исключений лучше работает, прежде чем начать соединение - на самом деле - лучше, как только соединение будет создано из ConnectionFactory.

Слушатель исключение вступает в силу, даже если соединение не началось - в случае Jboss 501.

//Main  
try { 
     connection = getConnection(); 
     connection.setExceptionListener(new MyExceptionListener()); 
     //Exception listener is effective even before connection is started. 
     //connection.start(); 
     while(true){ 
      try { 
       Thread.sleep(1000 * 5); 
       Log.l("Kill the JMS provider any time now. !! Observe if the JMS listener works."); 
      } catch (InterruptedException e) { 
       //do nothing. 
      } 
     } 
    } catch (NamingException e) { 
     e.printStackTrace(); 
    } catch (JMSException e) { 
     e.printStackTrace(); 
    } 

    //Exception Listener 
    public class MyExceptionListener implements ExceptionListener { 

    @Override 
    public void onException(JMSException e) { 
      Log.l("Exception listener invoked"); 
    } 
    } 

Чтобы воспроизвести ситуацию, в которой ExceptionListener сработал/вызывается, я использовал управление JBoss консоли и остановил ConnectionFactory, используя компонент mx, выставленный консолью Jboss mgmt.

+0

Ницца с обратной связью и вашим обменом с сообществом SO. +1 – MrSimpleMind

Смежные вопросы