2012-05-21 42 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