Я пытаюсь написать программу Java, которая может просматривать все очереди JMS на сервере Weblogic JMS и читать сообщения в заданной очереди (но не потреблять их). Я пытаюсь использовать Weblogic Mbeans и JMX, но новичок в обоих. У меня есть следующий код, чтобы получить все очереди и их глубину:
private void countMessages1() throws Exception {
JMXConnector connector = getMBeanServerConnector("/jndi/"+RuntimeServiceMBean.MBEANSERVER_JNDI_NAME);
MBeanServerConnection mbeanServerConnection = connector.getMBeanServerConnection();
ObjectName service = new ObjectName("com.bea:Name=RuntimeService,Type=weblogic.management.mbeanservers.runtime.RuntimeServiceMBean");
ObjectName serverRuntime = (ObjectName) mbeanServerConnection.getAttribute(service, "ServerRuntime");
ObjectName jmsRuntime = (ObjectName) mbeanServerConnection.getAttribute(serverRuntime, "JMSRuntime");
ObjectName[] jmsServers = (ObjectName[]) mbeanServerConnection.getAttribute(jmsRuntime, "JMSServers");
for (ObjectName jmsServer: jmsServers) {
if ("JMSServer".equals(jmsServer.getKeyProperty("Name"))) {
ObjectName[] destinations = (ObjectName[]) mbeanServerConnection.getAttribute(jmsServer, "Destinations");
for (ObjectName destination: destinations) {
String queueName = destination.getKeyProperty("Name");
Long queueDepth = (Long) mbeanServerConnection.getAttribute(destination, "MessagesCurrentCount");
System.out.println("Queue: " + queueName + " Depth: " + queueDepth);
}
break;
}
}
connector.close();
}
У меня также есть возможность удалить все из очереди:
mbeanServerConnection.invoke(destination, "deleteMessages", new Object[] {""}, new String[] {"java.lang.String"});
Где я застрял, так это в том, как читать фактические сообщения в пункте назначения/очереди. Я играл с mbeanServerConnection.invoke и вижу getMessage и getMessages, но не знаю, как правильно их использовать. Может кто-нибудь показать пример того, как использовать их для просмотра сообщений в пункте назначения (но не для их потребления)? Я пробовал несколько вариантов, подобных этому, но я не могу заставить его работать:
String message = (String) mbeanServerConnection.invoke(destination, "getMessage", new Object[] { "", 0, JMS_ALL_STATES}, new String[] {"java.lang.String"});