Question

I'm trying to deploy an application in weblogic which is based on a Spring DefaultMessageListenerContainer. I have set up weblogic using a foreign server to provide access to the AQ connection factory and destination under JNDI names.

I have a simple message listener which logs the messages it receives (just a test), I wrap this message listener in a Spring DMLC shown below:

<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>

Whenever I try deploy this application in weblogic I get the following exception from the 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)

Does anyone know how to resolve this so that java can receive the messages on the queue?

Thanks

Was it helpful?

Solution

The answer to this was to add "orai18n.jar" into the class path of whatever was actually attempting to dequeue from the message queue. In my example I added the jar to the classpath of the application server and that resolved the problem.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top