2個(gè)不同的MDB監(jiān)聽(tīng)JBoss 4.2.3 上的同一個(gè)Topic (集成JBoss Messaging 1.4.2 SP1),Topic上的消息是BytesMessage。發(fā)一個(gè)消息到Topic上,2個(gè)MDB都會(huì)收到這個(gè)消息。

          但奇怪的是只有一個(gè)MDB能正常讀取BytesMesage,另一個(gè)MDB讀取BytesMessage.readBytes()始終返回-1

          同樣的測(cè)試程序,在WebLogic上就正常。

          JBoss怎么會(huì)發(fā)送同一個(gè)BytesMessage對(duì)象到所有的subscriber?有人解決過(guò)同樣的問(wèn)題嗎?


          google了很長(zhǎng)時(shí)間,也嘗試了很多方法,似乎沒(méi)什么好的辦法。一種方法是避免使用BytesMessage, 還有一種方法就是使用反射,直接復(fù)制JBoss的BytesMessage實(shí)現(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
          }

          posts - 5, comments - 25, trackbacks - 0, articles - 1

          Copyright © 天快黑了

          主站蜘蛛池模板: 丽水市| 揭东县| 邹平县| 仁布县| 广平县| 安仁县| 厦门市| 宣威市| 柳河县| 桐庐县| 上犹县| 安宁市| 阿克苏市| 高阳县| 永吉县| 阿荣旗| 肥乡县| 南靖县| 商都县| 乌鲁木齐市| 梅河口市| 青岛市| 莱芜市| 营口市| 礼泉县| 贺州市| 扎赉特旗| 察隅县| 临安市| 自治县| 射阳县| 江川县| 彩票| 繁昌县| 炉霍县| 临夏市| 迭部县| 巴林左旗| 双鸭山市| 邹平县| 永春县|