2010-11-11 17 views
0

Ma question est assez simple, mais j'ai du mal à trouver une solution. Je veux être en mesure d'obtenir toutes les files d'attente dans le serveur (ou la session, ce serait aussi bien). Est-ce possible?Glassfish - obtenir toutes les files d'attente dans une session

Ma situation est la suivante: Je suis nouveau à openMQ, Glassfish, activeMQ et ainsi de suite. J'ai développé un système de surveillance pour activeMQ dans lequel je reçois toutes les files d'attente existantes et montre à l'utilisateur, ainsi il peut obtenir des informations sur le nombre de messages et ainsi de suite. Pour ce faire, j'ai ce code:

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

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

cette dernière ligne obtient toutes les files d'attente pour la connexion, ce qui est exactement ce que je dois. Mais c'était mon code pour ActiveMQ.

Maintenant, l'équipe a décidé de passer à openMQ, et je dois adapter mon système de surveillance pour pouvoir gérer cela. Je voudrais utiliser LDAP pour que je puisse le faire indépendamment de la technologie. Après beaucoup de recherches, je suis venu à ce code:

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

connexion de connexion = connectionFactory.createConnection(); Session session = connection.createSession (false, Session.AUTO_ACKNOWLEDGE);

File d'attente myQueue = session.createQueue ("myQueue");

Ceci est bien, car il serait complètement indépendant (je pense, il faut le tester). Mais le problème est que je dois enregistrer la file d'attente, quelque chose que je n'aimerais pas faire. Je voudrais obtenir toutes les files d'attente existantes dans le serveur sans avoir besoin de s'enregistrer, mais je ne trouve aucune méthode GetQueues() ou aucun moyen d'imiter son comportement.

J'ai aussi découvert la classe de DestinationSource en activeMQ hérite de MessageListener, mais cette classe ne fournit aucune méthode similaire :(

Pourriez-vous s'il vous plaît me aider?

Merci, Oscar

Répondre

1

j'ai pu le faire en utilisant JMX, voici le code:

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")); 
    } 

références ici: http://forums.oracle.com/forums/thread.jspa?threadID=2129291&tstart=0