use of jakarta.jms.JMSConsumer in project openmq by eclipse-ee4j.
the class JMSContextImpl method close.
@Override
public void close() {
contextLogger.log(Level.FINE, "JMSContext@" + this.hashCode() + ".close(): connection@" + (connection == null ? "null" : connection.hashCode()));
if (closed) {
return;
}
closed = true;
// close all JMSConsumer objects associated with this JMSContext
for (JMSConsumer consumer : consumers) {
consumer.close();
}
if (!consumers.isEmpty()) {
throw new RuntimeException("Debug: consumers not empty");
}
// close the anonymous MessageProducer associated with this JMSContext
if (messageProducer != null) {
try {
messageProducer.close();
messageProducer = null;
} catch (IllegalStateException e) {
throw new MQIllegalStateRuntimeException(e);
} catch (JMSException e) {
throw new MQRuntimeException(e);
}
}
// close the Session
try {
session.close();
} catch (IllegalStateException e) {
throw new MQIllegalStateRuntimeException(e);
} catch (JMSException e) {
throw new MQRuntimeException(e);
}
// if this is the only JMSContext using the connection, close it
synchronized (contextSet) {
// debug
if (!contextSet.contains(this)) {
throw new RuntimeException("I am not in the context set");
}
contextSet.remove(this);
if (contextSet.contains(this)) {
throw new RuntimeException("I am not in the context set");
}
if (contextSet.isEmpty()) {
try {
connection.close();
} catch (IllegalStateException e) {
throw new MQIllegalStateRuntimeException(e);
} catch (JMSException e) {
throw new MQRuntimeException(e);
}
}
}
closed = true;
}
Aggregations