在以下代码段中:
Connection connection=getConnection();
try {
Session session=connection.createSession();
try {
Queue queue=session.createQueue("foobar");
MessageConsumer consumer=null;
try {
consumer = session.createConsumer(queue);
}
catch(JMSException e) {
// Under what circumstances does this happen?
}
try {
// ...
}
finally {
if(consumer != null) consumer.close();
}
}
finally {
session.close();
}
}
finally {
connection.close();
}
被抓者在什么情况下被JMSException
抛出?当它发生时,处理的正确方法是JMSException
什么?我已经阅读了 JMS 和 ActiveMQ 文档的相关部分,它似乎没有在这一点上提供任何指导(显然,除了使用try
/ catch
。)另外请原谅人为的代码示例!
例如,如果以某种方式“变坏”了,是否JMSException
会发生session
,所以拆掉并重新开始是正确的consumer
事情session
?或者这是否意味着connection
已经变坏了,所以我应该拆除并重建应用程序中基于该连接的所有内容?或者呼叫能否以createConsumer()
暂时的方式失败,并且使用同一会话重试呼叫可能会成功?
类似地,这些行什么时候会抛出一个JMSException
,忽略类似于封闭的Session
或Connection
:
Message message=consumer.receive();
producer.send(message);
我想了解JMSException
一般应如何在 JMS 中处理 s,但特定于 ActiveMQ 的答案也很好。(事实上,任何答案都可能必须针对特定的实现,因为 JMS 只是一个规范。)