Reputation: 3039
I want to check if a jms queue exists in HornetQ or not. I'm using jms management api:
public boolean queueExists(String queueName) throws Exception
{
final Queue managementQueue = HornetQJMSClient.createQueue("hornetq.management");
Connection connection = jmsConnectionFactory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
QueueRequestor requestor = new QueueRequestor((QueueSession) session, managementQueue);
connection.start();
Message message = session.createMessage();
JMSManagementHelper.putAttribute(message, queueName, ???);
Message reply = requestor.request(message);
Object result = JMSManagementHelper.getResult(reply);
//???
}
My Question is which attribute should i put in the request message for this purpose? And where can i find all possible attributes (documentation or constant fields of a class) ?
JMSManagementHelper.putAttribute(message, queueName, ???);
And what should I do with the result of reply message to understand the request result?
Message reply = requestor.request(message);
Object result = JMSManagementHelper.getResult(reply);
//???
I'm using HornetQ 2.4.1.Final.
Upvotes: 0
Views: 914
Reputation: 3039
JMSManagementHelper.putOperationInvocation() has to be used instead of JMSManagementHelper.putAttribute(), with resource name: jms and operation parameter getQueueNames. The result of this operation is an Object[] that contains all jms queues names.
public boolean queueExists(String queueName) throws Exception
{
final Queue managementQueue = HornetQJMSClient.createQueue("hornetq.management");
Connection connection = jmsConnectionFactory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
QueueRequestor requestor = new QueueRequestor((QueueSession) session, managementQueue);
connection.start();
Message message = session.createMessage();
JMSManagementHelper.putOperationInvocation(message,
org.hornetq.api.core.management.ResourceNames.JMS_SERVER, "getQueueNames");
Message reply = requestor.request(message);
Object result = JMSManagementHelper.getResult(reply);
Object[] results = (Object[])result;
for (int i = 0; i < results.length; i++)
{
if (queueName.equals(((String)results[i])))
return true;
}
return false;
}
Upvotes: 1