brainbaking/content/wiki/code/java/queues.md

75 lines
2.2 KiB
Markdown

+++
title = "queues"
draft = false
tags = [
"code",
"java",
"queues"
]
date = "2013-03-12"
+++
# code:java >> Queues
Zie ook [code/java/monitoring]({{< relref "wiki/code/java/monitoring.md" >}}) om JMX te enablen.
## Via JMX (HornetQ) queues leegmaken
Dit is een `TestExecutionListener` die je met `@TestExecutionListeneres` kan gebruiken om na elke test de queues leeg te maken:
```java
public class QueueCleanerContextListener extends AbstractTestExecutionListener {
public void cleanQueues() throws Exception {
InitialContext initialContext = null;
JMXConnector connector = null;
try {
connector = connectToQueue();
for (String queue : getJMSServerControl(connector).getQueueNames()) {
getJMSQueueControl(connector, queue).removeMessages(null);
}
} finally {
connector.close();
if (initialContext != null) {
initialContext.close();
}
}
}
private JMXConnector connectToQueue() throws IOException, MalformedURLException {
return JMXConnectorFactory.connect(new JMXServiceURL(buildJMXUrl()), new HashMap<String, Object>());
}
private String buildJMXUrl() {
return "service:jmx:rmi:*/jndi/rmi:*localhost:3000/jmxrmi";
}
private JMSQueueControl getJMSQueueControl(JMXConnector connector, String queueNaam) throws IOException, Exception {
MBeanServerConnection mbsc = connector.getMBeanServerConnection();
return (JMSQueueControl) MBeanServerInvocationHandler.newProxyInstance(mbsc,
ObjectNameBuilder.DEFAULT.getJMSQueueObjectName(queueNaam), JMSQueueControl.class, false);
}
private JMSServerControl getJMSServerControl(JMXConnector connector) throws IOException, Exception {
MBeanServerConnection mbsc = connector.getMBeanServerConnection();
return (JMSServerControl) MBeanServerInvocationHandler.newProxyInstance(mbsc,
ObjectNameBuilder.DEFAULT.getJMSServerObjectName(), JMSServerControl.class, false);
}
@Override
public void afterTestMethod(TestContext testContext) throws Exception {
cleanQueues();
}
}
```
## Hoeveel berichten zitten er nog op mijn queue?
Zie boven, gebruik `JMSQueueControl`:
```java
String filter = ""; // if subset counting is required
JMSQueueControl control = fetchQueue(); // see above
control.countMessages(filter); // is a long
```