2012-05-21 41 views
4

這真的是通過JMS接收POJO的方式嗎?通過JMS接收Java對象

public void onMessage(Message msg) { 
    ObjectMessage objMsg = (ObjectMessage) msg; 
    if(objMsg.getObject() instanceof <<sometype>>) { 
     //do something 
    } 
} 

是否必須轉換爲ObjectMessage。實際上,然後我必須檢查msg是否可以轉換爲ObjectMessage。

還是我想念什麼?

THX

回答

1

AFAIK,僅此而已。不過,在單個目標(隊列或主題)中混合消息內部的不同消息類型和不同的對象類型非常罕見。因此,如果您知道只有包含SomeType對象的ObjectMessage需要,您可以跳過instanceof檢查。

1

報價從JMS Spring Doc例如,你可以從例子中看到,我們需要檢查,如果消息是TextMessage的類型,或者沒有和你的情況如此相似,我們必須檢查鑄造或檢查是否你對象是消息類型的實例,所以你有兩種方法,希望能夠澄清你的問題。

import javax.jms.JMSException; 
import javax.jms.Message; 
import javax.jms.MessageListener; 
import javax.jms.TextMessage; 

public class ExampleListener implements MessageListener { 

    public void onMessage(Message message) { 
     if (message instanceof TextMessage) { 
      try { 
       System.out.println(((TextMessage) message).getText()); 
      } 
      catch (JMSException ex) { 
       throw new RuntimeException(ex); 
      } 
     } 
     else { 
      throw new IllegalArgumentException("Message must be of type TextMessage"); 
     } 
    } 
} 
1

是的,你可能想檢查一些例外。然而,對於Spring(以及apache camel等框架),您可以輕鬆地連接一個只處理某些類的對象的bean。這可能會或可能不值得開銷,並增加配置的複雜性以簡化代碼。

看幾頁到這篇文章的描述:http://www.wmrichards.com/mdp.pdf