我有一个简单的JMS客户端,我希望能在结束时关闭与之相关的所有JMS资源,如MessageConsumer、Session和Connection实例。每个类都有一个close()方法,会抛出JMSException异常。据我所知,必须关闭它们中的所有实例,仅关闭Connection实例是不够的。因此,我目前有以下内容:
try {
consumer.close();
session.close();
connection.close();
} catch (JMSException e) {
log.error(e.getMessage(), e);
}
但是,如果例如一个 consumer.close() 抛出异常,则 session 和 connection 将不会被关闭。因此,更正确的方法应该是:
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个资源的更好方法吗?