Java не может удалить сообщение из Oracle AQ - PullRequest
0 голосов
/ 13 марта 2012

Я пытаюсь развернуть приложение в weblogic, основанное на Spring DefaultMessageListenerContainer.Я настроил weblogic с использованием стороннего сервера для предоставления доступа к фабрике соединений AQ и месту назначения под именами JNDI.

У меня есть простой приемник сообщений, который регистрирует полученные сообщения (просто тест), я обертываю этопрослушиватель сообщений в 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)

Кто-нибудь знает, как решитьэто чтобы ява могла получать сообщения в очереди?

Спасибо

1 Ответ

1 голос
/ 14 марта 2012

Ответом было добавить «orai18n.jar» в путь к классу того, что фактически пыталось удалить из очереди сообщений. В моем примере я добавил jar в classpath сервера приложений, и это решило проблему.

...