2009-05-26 14 views
0

次のように私はJBossMQの-地-service.xmlにして、私のトピックを設定している: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> 

私は簡単にトピック名にJNDIルックアップを実行して、メッセージをパブリッシュするトピックに接続することができ、すべてが正常に動作します。

ただし、他のシステム機能によっては期限切れになる可能性があるため、一定の間隔でメッセージをクリアできるようにしたいのですが、これを行う方法や例が見つかりません。

トピックでJNDIルックアップを実行すると、メッセージを削除するための機能を持たないorg.jboss.mq.SpyTopicが返されたり、トピックのメッセージ数がわかります。すべての例では、org.jboss.mq.server.JMSTopicはすべての機能を備えていますが、SpyTopicをJMSTopicに変換する方法やトピックを設定する方法を理解できないため、JNDI参照によってJMSTopic。

誰でも手助けできますか?
ありがとうございます。

答えて

0

最後に多くの検索の後、私はこの方法を思いついた。

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

} 
関連する問題