camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mario_horny <mario.ho...@dzbank.de>
Subject timeout exception when pushing a message to a JMS Queue
Date Tue, 20 Jan 2009 12:55:19 GMT

Hi guys,

I've got the following scenario. I want to receive a HTTP Message, put the
received message into a queue, wait for response and give the response back
as HTTP response.

My spring.xml looks like that:

<!-- define INBOUND interface of the router  -->
<cxf:cxfEndpoint id="RouterIn" address="..."  serviceClass="..." >
</cxf:cxfEndpoint>

<!-- define OUTBOUND interface of the router -->
<cxf:cxfEndpoint id="RouterOut" 
wsdlURL="mywsdl.wsdl"
endpointName="myPort"
serviceName="myService"
serviceClass="..."
</cxf:cxfEndpoint>

<!-- Define the route to the VR Infoforum service -->    		
<camelContext id="camel"
xmlns="http://activemq.apache.org/camel/schema/spring">
  <route errorHandlerRef="myDeadLetterErrorHandler">
     <from uri="cxf:bean:RouterIn" />
     <to uri="cxf:bean:RouterOut" /> 
   </route>
</camelContext> 

<!-- error handling  -->
<bean id="myDeadLetterErrorHandler"
class="org.apache.camel.builder.DeadLetterChannelBuilder">
   <!-- define dead letter endpoint for messages that cannot be routed -->
   <!--  property name="defaultDeadLetterEndpointUri" value"TODO"/ -- >
   <!-- reference the redelivery policy to use -->
   <property name="redeliveryPolicy" ref="myRedeliveryPolicyConfig"/>
</bean>

<!-- here we set the redelivery settings -->
<bean id="myRedeliveryPolicyConfig"
class="org.apache.camel.processor.RedeliveryPolicy">
   <!-- try redelivery at most 0 times, after that the exchange is dead  -->
      <property name="maximumRedeliveries" value="0"/>
</bean>   

In the wsdl File, the JMS definitions are made whose values are resolved
using a JNDI file:

<!-- Definition der Service-Implementierung mit Bindung und Adresse -->
<wsdl:service name="myService">
    <wsdl:port name="myPort" binding="....">
      <jms:address  jndiDestinationName="OutQueue"
jndiReplyDestinationName="InQueue" jndiConnectionFactoryName="QueueConFac"
destinationStyle="queue">
        <jms:JMSNamingProperty
value="com.sun.jndi.fscontext.RefFSContextFactory"
name="java.naming.factory.initial" />
        <jms:JMSNamingProperty value="file:."
name="java.naming.provider.url" />
      </jms:address>
    </wsdl:port>
  </wsdl:service>

The router is deployed well into a spring container. But when I send a
message to the inbound interface, I _immediatly_ get a timeout exception
back. 

Here is what the log looks like:
  
FINE: Payload to be sent out is :[<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns1:gibDokumenteOperation
xmlns:ns1="http://vrs-schema.genoip.de/VRInfoForumDokumente"><ns3:gibDokumente
xmlns:ns2="http://vrs-schema.genoip.de/VRInfoForumDokumente/uebernehmeDokumente"
xmlns:ns3="http://vrs-schema.genoip.de/VRInfoForumDokumente/gibDokumente"
xmlns:ns4="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
xmlns:ns5="http://www.genoip.de/protocol"><Organisation>?</Organisation><Optionen><Filter><DokumentID>?</DokumentID></Filter><VersandSynchron>true</VersandSynchron><DokumenteMitliefern>true</DokumenteMitliefern><AnhangMitliefern>true</AnhangMitliefern></Optionen></ns3:gibDokumente></ns1:gibDokumenteOperation></soap:Body></soap:Envelope>]
Jan 20, 2009 11:50:27 AM org.apache.cxf.transport.jms.JMSConduit
sendExchange
FINE: JMSConduit send message
.
.
.
INFO: Interceptor has thrown exception, unwinding now
java.lang.RuntimeException: Timeout receiving message with correlationId
dfrseai100_xn08693_Thread[qtp0-0 -
/CamelContext/VRInfoForumRouter,5,main]1232448628836
        at
org.apache.cxf.transport.jms.JMSConduit.sendExchange(JMSConduit.java:145)
        at
org.apache.cxf.transport.jms.JMSOutputStream.doClose(JMSOutputStream.java:56)
        at
org.apache.cxf.io.CachedOutputStream.close(CachedOutputStream.java:167)
        at
org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:66)
        at
org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
        at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:220)
        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:466)
        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:308)
        at
org.apache.camel.component.cxf.CxfProducer.invokeClient(CxfProducer.java:284)
        at
org.apache.camel.component.cxf.CxfProducer.process(CxfProducer.java:192)
        at
org.apache.camel.component.cxf.CxfProducer.process(CxfProducer.java:165)
        at
org.apache.camel.impl.converter.AsyncProcessorTypeConverter$ProcessorToAsyncProcessorBridge.process(AsyncProcessorTypeConverter.java:43)
        at
org.apache.camel.processor.SendProcessor.process(SendProcessor.java:75)
        at
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:68)
        at
org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:173)
        at
org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:94)
        at
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:68)
        at
org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:52)
        at
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:41)
        at
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:66)
        at
org.apache.camel.component.cxf.CamelInvoker.invoke(CamelInvoker.java:178)
        at
org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:56)
        at
org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37)
        at
org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:92)
        at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:220)
        at
org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:78)
        at
org.apache.cxf.transport.http_jetty.JettyHTTPDestination.serviceRequest(JettyHTTPDestination.java:278)
        at
org.apache.cxf.transport.http_jetty.JettyHTTPDestination.doService(JettyHTTPDestination.java:252)
        at
org.apache.cxf.transport.http_jetty.JettyHTTPHandler.handle(JettyHTTPHandler.java:70)
        at
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:757)
        at
org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206)
        at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
        at org.mortbay.jetty.Server.handle(Server.java:320)

How can I configure the timeout behavior ? Feasible would be something like
"wait for XXX seconds, after that put the message to the dead letter error
handler". Or is there something I do fundamentally wrong ?

I'm using Artix 5.5 with camel 1.5.1.0. 

Many thanks in advance,
Mario
-- 
View this message in context: http://www.nabble.com/timeout-exception-when-pushing-a-message-to-a-JMS-Queue-tp21562561s22882p21562561.html
Sent from the Camel - Users mailing list archive at Nabble.com.


Mime
View raw message