Glassfish - 在会话中获取所有队列

时间:2010-11-11 10:01:40

标签: java glassfish

我的问题非常简单,但我很难找到解决方案。 我希望能够获得服务器(或会话中的所有队列,也可以)。这可能吗?

我的情况如下: 我是openMQ,Glassfish,activeMQ等的新手。我为activeMQ开发了一个监控系统,在其中我获得了所有现有的队列并向用户显示,因此它可以获得有关消息数量的信息等。 为此,我有这段代码:

ActiveMQConnection.makeConnection("tcp://localhost:61616");
activeMQConnection.start();

//Get queues
DestinationSource destinationSource = activeMQConnection.getDestinationSource();
Set<ActiveMQQueue> queues = destinationSource.getQueues();

这最后一行获取连接的所有队列,这正是我需要的。但这是我的ActiveMQ代码。

现在团队决定改为openMQ,我必须调整我的监控系统才能处理。我想使用LDAP,所以我可以独立于技术。经过大量的研究,我来到了这段代码:

ConnectionFactory connectionFactory = (ConnectionFactory) ctx.lookup("cn=QueueConnectionFactory");

Connection connection = connectionFactory.createConnection();   会话session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);

队列myQueue = session.createQueue(“myQueue”);

这很好,因为它完全是独立的(我想,必须测试它)。但问题是我必须注册队列,这是我不想做的事情。我想在服务器中获取所有现有队列而无需注册,但我找不到任何GetQueues()方法或任何模仿其行为的方法。

我还发现activeMQ中的DestinationSource类继承自MessageListener,但是这个类没有提供任何类似的方法:(

你能帮我吗?

谢谢你, 奥斯卡

1 个答案:

答案 0 :(得分:1)

我能够使用JMX做到这一点,这是代码:

HashMap environment = new HashMap();
  String[] credentials = new String[] { "user", "pass" };
  environment.put(JMXConnector.CREDENTIALS, credentials);

  JMXServiceURL url = new JMXServiceURL("URL");

  // Get JMX connector, supplying user name and password
  JMXConnector jmxc1 = JMXConnectorFactory.connect(url, environment);

  // Get MBean server connection
  MBeanServerConnection mbsc = jmxc1.getMBeanServerConnection();

  ObjectName destMgrConfigName = new ObjectName(MQObjectName.DESTINATION_MANAGER_MONITOR_MBEAN_NAME);

  // Create operation's parameter and signature arrays

  Object opParams[] = {};

  String opSig[] = {};

  // Invoke operation
  ObjectName[] objectNames = (ObjectName[]) mbsc.invoke(destMgrConfigName, DestinationOperations.GET_DESTINATIONS, opParams, opSig);

  for (ObjectName objectName : objectNames) {
   System.out.println(objectName.getCanonicalName());
   System.out.println(objectName.getKeyProperty("name"));
  }

此处有更多参考资料:http://forums.oracle.com/forums/thread.jspa?threadID=2129291&tstart=0