總算找到了一個利用Message-Driven-Bean(MDB)建queue的方法。
一般來說,在ejb-jar.xml和 jboss.xml 裏定義好MDB後,Jboss在擴展EJB包的時候會創建相應的Queue。但目前我需要的不只是一個普通的queue,而是要讓message保留的queue,也就說並非first come, first out,而是人工手動對queue裏的message進行刪除,重發等操作。
那麼怎樣才能讓message bean對messages拒收呢?
在*bean.class裏onMessage(Message msg) 是必不可少的,就算是個空block,也會照常接收queue裏的message,只是不做任何處理罷了,畢竟MDB是一個特殊的message listner 和receiver。
所以在程序裏是無法對message的接收進行控制的,也只能在配置文件裏動手腳了。
最後終於發現了這麼一個參數,<message-selector>, 這個是作爲message 的filter 來使用的,這樣MDB只會接收滿足條件的message。
在我的實例裏使用瞭如下語句:
<message-selector><![CDATA[ JMS_JBOSS_REDELIVERY_DELAY < 0 ]]></message-selector>
條件語句滿足SQL-92的語法,執行參數爲message的property。
http://javaboutique.internet.com/resources/books/EntJavaBeans/entjava4_1.html
http://java.sun.com/j2ee/1.4/docs/api/javax/jms/Message.html