Java JMS例外侦听器

Java JMS例外侦听器,java,jms,Java,Jms,我正在使用javax.jms.Connection向JBoss501发送和接收jms消息。我还使用了连接.setExceptionListener()。我想知道在通过connection.start()启动连接之前是否需要设置异常侦听器?任意复制JBoss连接异常的想法,以确认是否调用了异常侦听器 来自规范: 如果JMS提供程序检测到连接对象存在严重问题,它会通知连接对象的ExceptionListener(如果已注册)。它通过调用侦听器的OneException方法来实现这一点,并向其传递一个

我正在使用
javax.jms.Connection
向JBoss501发送和接收jms消息。我还使用了
连接.setExceptionListener()
。我想知道在通过
connection.start()
启动连接之前是否需要设置异常侦听器?任意复制JBoss连接异常的想法,以确认是否调用了异常侦听器

来自规范:

如果JMS提供程序检测到连接对象存在严重问题,它会通知连接对象的ExceptionListener(如果已注册)。它通过调用侦听器的OneException方法来实现这一点,并向其传递一个描述问题的JMSException参数

异常侦听器允许异步通知客户机问题。有些连接只使用消息,因此它们没有其他方法来了解连接失败

请记住,这里有特定于供应商的实现,关于如何处理异常。如果可能的话,一些供应商试图“修复”这种情况

现在关于在设置异常侦听器之前或之后启动连接。。。 在启动连接之前,始终设置异常侦听器。

关于繁殖,我想你可以

  • 启动使用者,应运行connection.Start。等待消息
  • 立即关闭jboss
  • 重新启动jboss

我还知道,使用Eclipse或其他开发工具将帮助您在调试模式下启动,并且您可以在调试器显示状态的任何特定时间中止jboss服务器并重新启动它。

对于jboss 5.0.1,即使在启动连接后,设置异常侦听器仍然有效。正如“mrsimplemd”所提到的,异常监听器在启动连接之前服务得更好——事实上,最好是在从ConnectionFactory创建连接之后

即使连接未启动,异常侦听器也有效-对于Jboss 501


为了重现触发/调用ExceptionListener的场景,我使用JBoss管理控制台并使用JBoss管理控制台公开的mx bean停止ConnectionFactory

很高兴收到反馈并与SO社区分享+1.
 //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");
    }
    }