2009-05-26 11 views
0

J'ai configuré mon sujet dans JBossMQ-destinations-service.xml comme suit:Comment puis-je supprimer des messages d'un sujet JBoss JMS?

<mbean code="org.jboss.mq.server.jmx.Topic" 
    name="jboss.mq.destination:service=Topic,name=myTopicName"> 
    <depends optional-attribute-name="DestinationManager"> 
      jboss.mq:service=DestinationManager</depends> 
    <depends optional-attribute-name="SecurityManager"> 
      jboss.mq:service=SecurityManager</depends> 
    <attribute name="SecurityConf"> 
    <security> 
     <role name="guest" read="true" write="true" create="true"/> 
     <role name="publisher" read="true" write="true" create="false"/> 
     <role name="durpublisher" read="true" write="true" create="true"/> 
    </security> 
    </attribute> 
</mbean> 

Je peux facilement vous connecter au sujet de publier des messages en faisant une recherche JNDI sur le nom du sujet et tout fonctionne bien.

Cependant, je souhaite pouvoir effacer les messages à certains intervalles, car ils peuvent devenir obsolètes en fonction d'autres fonctionnalités du système, mais je ne trouve aucun exemple ou explication sur la façon de procéder. Le problème est que lorsque je fais une recherche JNDI sur le sujet, il renvoie un org.jboss.mq.SpyTopic qui n'a aucune fonctionnalité pour supprimer des messages ou même pour savoir combien de messages sont sur le sujet. Tous les exemples semblent suggérer que org.jboss.mq.server.JMSTopic a toutes les fonctionnalités mais je n'arrive pas à comprendre comment convertir un SpyTopic en JMSTopic ou comment configurer le topic pour que la recherche JNDI renvoie un JMSTopic.

Quelqu'un peut-il aider?
Merci.

Répondre

0

Finalement, après beaucoup de recherches, j'ai trouvé cette méthode.

public static void removeAllMessagesFromTopic(String topicName) 
{ 
    try 
    { 
     //============================================================== 
     // Set up the name of the topic object. 
     // Alternative way: 
     // objName = new ObjectName(
     //  "jboss.mq.destination:service=Topic,name=" + topicName); 
     //============================================================== 
     String domain = "jboss.mq.destination"; 
     Hashtable<String, String> keys = new Hashtable<String, String>(); 
     keys.put("service", "Topic"); 
     keys.put("name", topicName); 
     ObjectName objName = new ObjectName(domain, keys); 

     //============================================================== 
     // Get the MBean server 
     //============================================================== 
     MBeanServer server = (MBeanServer)MBeanServerFactory 
       .findMBeanServer(null).iterator().next(); 

     //============================================================== 
     // Invoke the MBean 
     //============================================================== 
     Integer msgCount = (Integer)server.getAttribute(objName, "AllMessageCount"); 

     log.debug("Invoking removeAllMessages. (" + msgCount + "messages)"); 

     server.invoke(objName, "removeAllMessages", 
       new Object[] {}, // No paramaters needed for removeAllMessages 
       new String[] {}); 

     log.debug("Messages removed."); 
    } 
    catch (Exception ex) 
    { 
     log.error("Failed to remove messages from topic. Exception: " + ex); 
     ex.printStackTrace(); 
    } 

} 
Questions connexes