2012-05-21 3 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에도 캐스팅 할 수 있는지 확인해야합니다.

또는 무엇인가 놓칠 수 있습니까? 이 예에서 볼 수 있듯이

들으

답변

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

예, 일부 예외를 확인하고자 할 수 있습니다. 그러나 스프링 (및 apache camel과 같은 프레임 워크)을 사용하면 일부 클래스의 객체를 단순히 처리하는 빈을 쉽게 쉽게 연결할 수 있습니다. 이는 오버 헤드의 가치가있을 수도 있고 없을 수도 있으며, 코드를 단순화하기 위해 구성의 복잡성이 추가됩니다.

설명을 보려면이 문서의 몇 페이지를보십시오. http://www.wmrichards.com/mdp.pdf