in server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/metric/ActiveMQMetricCollectorImpl.java [126:200]
Void fetchAndUpdate(ActiveMQMetrics stats) throws JMSException {
Connection connection = null;
Session session = null;
TemporaryQueue replyTo = null;
MessageConsumer consumer = null;
MessageProducer producer = null;
try {
connection = connectionFactory.createConnection();
connection.start();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
replyTo = session.createTemporaryQueue();
consumer = session.createConsumer(replyTo);
Queue testQueue = session.createQueue(stats.getName());
producer = session.createProducer(testQueue);
Message msg = session.createMessage();
msg.setJMSReplyTo(replyTo);
producer.send(msg);
long timeoutMs = config.getAqmpTimeout().toMillis();
Message reply = consumer.receive(timeoutMs);
if (reply == null) {
throw new JMSException("no message received, timed out after " + timeoutMs + " ms");
} else if (!(reply instanceof MapMessage)) {
throw new JMSException("expected MapMessage but got " + reply.getClass());
}
stats.updateMetrics((MapMessage)reply);
} finally {
if (producer != null) {
try {
producer.close();
} catch (JMSException e) {
// ignore
}
}
if (consumer != null) {
try {
consumer.close();
} catch (JMSException e) {
// ignore
}
}
if (replyTo != null) {
// we need to delete the temporary queue to be sure we will
// free up memory if thats not done and a pool is used
// its possible that we will register a new mbean in jmx for
// every TemporaryQueue which will never get unregistered
try {
replyTo.delete();
} catch (JMSException e) {
// ignore
}
}
if (session != null) {
try {
session.close();
} catch (JMSException e) {
// ignore
}
}
if (connection != null) {
try {
connection.close();
} catch (JMSException e) {
// ignore
}
}
}
return null;
}