Domanda

Sto cercando di distribuire un'applicazione in WebLogic che si basa su un defaultMessaGelistenerContainer di primavera.Ho impostato weblogic utilizzando un server straniero per fornire l'accesso alla fabbrica di connessione AQ e alla destinazione con i nomi JNDI.

Ho un semplice ascoltatore dei messaggi che registra i messaggi che riceve (solo un test), avvolgo questo ascoltatore di messaggi in una molla DMLC mostrata di seguito:

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

Ogni volta che provo implementare questa applicazione in WebLogic ottengo la seguente eccezione dal 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)
.

Qualcuno sa come risolverlo in modo che Java possa ricevere i messaggi sulla coda?

Grazie

È stato utile?

Soluzione

La risposta a questo è stata quella di aggiungere "ORAILYN.JAR" nel percorso di classe di ciò che stava effettivamente tentando di dequeuente dalla coda dei messaggi.Nel mio esempio ho aggiunto il barattolo al classpath del server delle applicazioni e che ha risolto il problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top