誰能解決多個MDB讀取JBoss Topic上的BytesMessage出現(xiàn)的奇怪問題
Posted on 2010-08-24 15:54 天快黑了 閱讀(1326) 評論(0) 編輯 收藏 所屬分類: Question2個不同的MDB監(jiān)聽JBoss 4.2.3 上的同一個Topic (集成JBoss Messaging 1.4.2 SP1),Topic上的消息是BytesMessage。發(fā)一個消息到Topic上,2個MDB都會收到這個消息。
但奇怪的是只有一個MDB能正常讀取BytesMesage,另一個MDB讀取BytesMessage.readBytes()始終返回-1
同樣的測試程序,在WebLogic上就正常。
JBoss怎么會發(fā)送同一個BytesMessage對象到所有的subscriber?有人解決過同樣的問題嗎?
google了很長時間,也嘗試了很多方法,似乎沒什么好的辦法。一種方法是避免使用BytesMessage, 還有一種方法就是使用反射,直接復制JBoss的BytesMessage實現(xiàn)。
public void onMessage(Message msg) {

BytesMessageProxy msgProxy = (BytesMessageProxy)msg;
Class clazz = MessageProxy.class;
Field field = clazz.getDeclaredField("message");
field.setAccessible(true);
JBossMessage rawMsg = (JBossMessage)field.get(msgProxy);
BytesMessage newMsg = (BytesMessage)rawMsg.doCopy();

// read data from newMsg
}
但奇怪的是只有一個MDB能正常讀取BytesMesage,另一個MDB讀取BytesMessage.readBytes()始終返回-1
同樣的測試程序,在WebLogic上就正常。
JBoss怎么會發(fā)送同一個BytesMessage對象到所有的subscriber?有人解決過同樣的問題嗎?
google了很長時間,也嘗試了很多方法,似乎沒什么好的辦法。一種方法是避免使用BytesMessage, 還有一種方法就是使用反射,直接復制JBoss的BytesMessage實現(xiàn)。












