【发布时间】:2014-01-28 04:58:50
【问题描述】:
我有一个简单的 JMS 客户端,我想在最后关闭所有与 JMS 相关的资源,即 MessageConsumer、Session、Connection 的实例。这些类中的每一个都有一个抛出 JMSException 的 close() 方法。我读到我必须关闭所有这些并且关闭 Connection 的实例是不够的。这就是我目前所拥有的:
try {
consumer.close();
session.close();
connection.close();
} catch (JMSException e) {
log.error(e.getMessage(), e);
}
但是如果例如 consumer.close() 抛出异常,会话和连接将不会关闭。所以更正确的方法是:
try {
consumer.close();
} catch (JMSException e) {
log.error(e.getMessage(), e);
}
try {
session.close();
} catch (JMSException e) {
log.error(e.getMessage(), e);
}
try {
connection.close();
} catch (JMSException e) {
log.error(e.getMessage(), e);
}
但由于代码重复,它看起来并不好。我发现很难将其抽象出来,因为这些类都没有实现带有 close() 方法的公共接口(例如 Closable)。
您知道正确关闭所有这 3 个资源的更好方法吗?
【问题讨论】: