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");
}
}