我正在使用javax.jms.Connection发送&从JBoss501接收jms消息。我也在使用Connection.setExceptionListener()。我想知道是否需要在连接启动之前设置异常监听器(Conneciton.start())?任何重现JBoss连接异常的想法都会确认是否调用了异常监听器。
答案 0 :(得分: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 Management Console并使用Jboss mgmt console公开的mx bean停止了ConnectionFactory。
答案 1 :(得分:0)
来自规范:
如果JMS提供程序检测到Connection对象存在严重问题,则会通知Connection对象的ExceptionListener(如果已注册)。它通过调用侦听器的onException方法,向它传递一个描述问题的JMSException参数来实现这一点。
异常侦听器允许客户端异步通知问题。有些连接只消耗消息,因此没有其他方法可以了解它们的连接是否失败。
请记住,这里有供应商特定实施的地方,关于如何处理异常。一些供应商试图修复"如果可能的话。
现在关于在设置异常监听器之前或之后启动连接... 始终在启动连接之前设置异常侦听器。
关于复制,我认为你可以
我也知道使用Eclipse或其他开发工具将帮助您在调试模式下启动,并且您可以在调试器显示状态时的任何特定时间中止jboss服务器并重新启动它。