我使用javax.jms.Connection向JBoss501发送和接收JMS消息。我也在使用Connection.setExceptionListener()。我想知道是否需要在Connection.start()启动连接之前设置异常侦听器?任意复制JBoss连接异常的任何想法,以确认是否调用了异常侦听器。
发布于 2015-05-28 08:57:11
从规范中:
如果JMS提供程序检测到连接对象的严重问题,它会通知连接对象的ExceptionListener (如果已经注册)。它通过调用侦听器的onException方法来做到这一点,并将描述问题的JMSException参数传递给它。 异常侦听器允许异步通知客户端问题。有些连接只使用消息,因此它们没有其他方法来了解它们的连接失败。
请记住,这里有关于如何处理异常的特定于供应商的实现的位置。一些供应商试图“修复”这种情况,如果可能的话。
现在关于在设置异常列表之前或之后启动连接.总是在启动连接.之前设置异常侦听器。
关于繁殖,我想你可以
我还知道,使用Eclipse或其他dev工具将帮助您在调试模式下启动,并且您可以在任何特定的时间,就像调试器向您显示的那样,将状态中止jboss服务器并重新启动它。
发布于 2015-06-03 15:02:03
使用JBoss5.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管理控制台,并使用Jboss控制台公开的mx停止了ConnectionFactory。
https://stackoverflow.com/questions/30501338
复制相似问题