2011-01-25 3 views
1

먼 서버의 MQ 큐를 수신하는 EJB3 MDB에서 작업하고 있습니다. MDB에서 처리 한 것을 제외하고 모두 잘 작동합니다 (MDB는 메시지를 대기열에 넣을 때 트리거됩니다). 자세한 내용은 WMQ 리소스 어댑터를 사용하여 큐를 매핑합니다.JBoss MDB - JMSBytesMessage 클래스 캐스트 예외

MDB의 'onMessage'메소드에 'com.ibm.jms.JMSBytesMessage'클래스에 주어진 메시지를 캐스트하려고 시도했지만 이상한 오류 메시지가 나타납니다.

public void onMessage(Message theMessage) { 
    ((JMSBytesMessage) theMessage).readBytes(myBytes); 
} 

그리고 예외 메시지 :

코드는 다음 (예를위한 심플)이다 호환 com.ibm.jms.JMSBytesMessage :

예외 판독 입력 요구하면서

좋아 com.ibm.jms.JMSBytesMessage, 혼란과 받은 연령은 'com.ibm.jms.JMSBytesMessage'유형이어야하며, 응용 프로그램이 작동하지 않는 이유는 무엇입니까? JBoss 서버가 이미 다른 버전의 'com.ibm.mqjms.jar'(JMSBytesMessage 클래스 포함)를 사용하고 있으며 이런 종류의 오류가 발생할 수 있습니까?

ps : Linux 시스템에서 JBoss 서버 버전 4.2.3에 응용 프로그램을 배포했습니다. 이미 로컬 시스템에서 동일한 버전의 JBoss 서버로 응용 프로그램을 작동 시켰습니다 (동일한 구성, 동일한 라이브러리 등)

누군가 이러한 오류의 원인에 대해 알고 있습니까?

미리 도움을 청하십시오.

감사합니다,

편집 : 해결책 :

하지 마십시오 : javax.jms.BytesMessage 대신 com.ibm.jms.JMSBytesMessage

와 함께 캐스팅하는 것은
+1

왜 모두 주조합니까? JMS가 제공하는 인터페이스를 고수하지 않는다면 JMS를 사용할 필요가 없습니다. 'javax.jms.BytesMessage'에 캐스트 할 수 없습니까? – skaffman

+0

BytesMessage를 캐스팅하려고했지만 MDB에 이상한 동작이 있습니다 (입력 대기열에서 메시지를 읽지 만 메시지를 롤백 한 후 다시 읽는 것처럼 보입니다). 하지만 오류 메시지가 나타나지도 다른 치료 흔적 (그래서 아무 것도 MDB에서 이루어집니다) : 나는 '예외'및 '오류'형식을 모두 잡으려고하고 추적을 표시했지만 아무것도 로그에 표시됩니다. 그래서 지금은 javax.jms.BytesMessage를 사용한 캐스팅이 작동하지 않지만 이유는 알 수 없습니다. 그러나 맞습니다. javax.jms.BytesMesasge – kij

+0

이 아닌 다른 것으로 캐스트 할 필요가 없습니다. 마지막으로 javax.jms.BytesMessage로 정밀하게 변환됩니다. 나중에 내 코드에서 뭔가 잘못되었습니다. 도움 주셔서 감사합니다. – kij

답변

3

는 물론 대답은 내 의견을 재현 할 수 있음 MQ 관련 com.ibm.jms.JMSBytesMessage으로 캐스트하고 JMS 표준 javax.jms.BytesMessage으로 캐스팅하십시오. 코드를 구현 특정 유형에 연결하는 것은 JMS가 달성하려고하는 것과 반대입니다.

+0

예. 수락, 감사합니다 :) – kij

관련 문제