문제

Spring DefaultMessagelistenerContainer를 기반으로하는 WebLogic에 응용 프로그램을 배포하려고합니다.JNDI 이름에서 AQ 연결 팩토리 및 대상에 대한 액세스를 제공하기 위해 외부 서버를 사용하여 WebLogic을 설정했습니다.

나는받는 메시지를 기록하는 간단한 메시지 수신기가 있습니다 (단지 테스트).이 메시지 수신기를 아래에 표시된 Spring DMLC에서 래핑합니다.

<jee:jndi-lookup id="connectionFactory" jndi-name="jms/aq/admAQCF"  />
<jee:jndi-lookup id="handlersDest"  jndi-name="jms/aq/dpqueue"/>

 <beans:bean id="testMessageListener" class="aquila.administrator.docprod.core.handler.adm.TestHandler"/>

 <beans:bean id="testMLC" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <beans:property name="connectionFactory" ref="connectionFactory"/>
    <beans:property name="destination" ref="handlersDest"/>
    <beans:property name="messageListener" ref="testMessageListener"/>
 </beans:bean>
.

WebLogic 에서이 응용 프로그램을 배포하려고 할 때마다 DMLC에서 다음 예외를 얻을 수 있습니다.

testMLC-26 [Tue Mar 13 14:07:52 GMT 2012] AQjmsConsumer.jdbcDequeue: Exception: oracle.jms.AQjmsException: JMS-122: Internal error Corrupted message
oracle.jms.AQjmsException: JMS-122: Internal error Corrupted message
        at oracle.jms.AQjmsError.throwEx(AQjmsError.java:334)
        at oracle.jms.AQjmsUtil.getTextData(AQjmsUtil.java:751)
        at oracle.jms.AQjmsTextMessage.readTextMessageContainer(AQjmsTextMessage.java:308)
        at oracle.jms.AQjmsTextMessage.<init>(AQjmsTextMessage.java:148)
        at oracle.jms.AQjmsConsumer.jdbcDequeue(AQjmsConsumer.java:1389)
        at oracle.jms.AQjmsConsumer.receiveFromAQ(AQjmsConsumer.java:1035)
        at oracle.jms.AQjmsConsumer.receiveFromAQ(AQjmsConsumer.java:960)
        at oracle.jms.AQjmsConsumer.receiveFromAQ(AQjmsConsumer.java:938)
        at oracle.jms.AQjmsConsumer.receive(AQjmsConsumer.java:790)
        at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveMessage(AbstractPollingMessageListenerContainer.java:431)
        at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:311)
        at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:264)
        at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1071)
        at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1063)
        at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:960)
        at java.lang.Thread.run(Thread.java:662)
.

Java가 대기열에서 메시지를 수신 할 수 있도록이 문제를 해결하는 방법을 알고 있습니까?

감사합니다

도움이 되었습니까?

해결책

이 답변은 실제로 메시지 대기열에서 덮개를 삭제하려고 시도하는 모든 경로에 "orai18n.jar"를 추가하는 것이 었습니다.내 예에서는 APPLISE 서버의 클래스 경로에 JAR을 추가했으며 문제를 해결했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top