OK. things are improving a bit but I am still puzzled that I can't find a working example of a JMS request/reply mechanism with SI.
Here's the updated config (probably ugly and overcomplicated)
Code:
<integration:annotation-config/>
<integration:channel id="chunkOutput"/>
<integration:channel id="chunkStatus"/>
<bean id="messagingGateway" class="org.springframework.integration.gateway.SimpleMessagingGateway">
<property name="requestChannel" ref="chunkOutput"/>
<property name="replyChannel" ref="chunkStatus"/>
<property name="replyTimeout" value="1000"/>
</bean>
<jms:outbound-gateway id="chunkSender"
request-channel="chunkOutput"
request-destination="batchChunkInQueue"/>
<jms:inbound-gateway id="chunkResponseReceiver" request-channel="chunkStatus"
request-destination="batchChunkOutQueue"/>
<!-- Messages are received from the batchChunkInQueue and send to the chunkRequests channel. These
are processed by the chunkHandler service activator -->
<integration:channel id="chunkRequests"/>
<integration:channel id="chunkResponses"/>
<jms:inbound-gateway id="chunkReceiver" request-channel="chunkRequests"
request-destination="batchChunkInQueue"/>
<jms:outbound-gateway id="chunkResponseSender"
request-channel="chunkResponses"
request-destination="batchChunkOutQueue"/>
<integration:service-activator input-channel="chunkRequests" output-channel="chunkResponses" ref="chunkHandler"/>
All works well until the receiver is supposed to dispatch the response
Code:
2009-12-22 11:20:29 [org.springframework.jms.listener.DefaultMessageListenerContainer#0-1] DirectChannel [DEBUG] preSend on channel 'chunkStatus', message: [Payload=ChunkResponse: jobId=1, stepContribution=[StepContribution: read=0, written=0, filtered=0, readSkips=0, writeSkips=0, processSkips=0, exitStatus=EXECUTING], successful=false][Headers={springintegration_jms_messageId=ID:llnp186-2335-1261477138812-2:3:1:1:1, springintegration_replyChannel=org.springframework.integration.channel.MessageChannelTemplate$TemporaryReplyChannel@30cd64, springintegration_timestamp=1261477229031, springintegration_id=d77a2055-13e4-4327-a38c-7f4e4995c380, springintegration_jms_redelivered=false, springintegration_jms_replyTo=temp-queue://ID:llnp186-2335-1261477138812-2:3:1, springintegration_errorChannel=org.springframework.integration.channel.MessageChannelTemplate$TemporaryReplyChannel@30cd64}]
2009-12-22 11:20:29 [org.springframework.jms.listener.DefaultMessageListenerContainer#0-1] DefaultMessageListenerContainer [WARN] Execution of JMS message listener failed
org.springframework.integration.message.MessageDeliveryException: Dispatcher has no subscribers.
at org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:97)
at org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:90)
at org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:43)
at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:116)
at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:94)
at org.springframework.integration.channel.MessageChannelTemplate.doSend(MessageChannelTemplate.java:223)
at org.springframework.integration.channel.MessageChannelTemplate.doSendAndReceive(MessageChannelTemplate.java:248)
at org.springframework.integration.channel.MessageChannelTemplate.sendAndReceive(MessageChannelTemplate.java:215)
at org.springframework.integration.channel.MessageChannelTemplate.sendAndReceive(MessageChannelTemplate.java:203)
at org.springframework.integration.jms.ChannelPublishingJmsMessageListener.onMessage(ChannelPublishingJmsMessageListener.java:209)
at org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:518)
at org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:479)
at org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:451)
at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:323)
at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:261)
at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:982)
at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:974)
at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:876)
at java.lang.Thread.run(Thread.java:619)
Apparently, my message gateway is not susbribed to the chunkStatus channel?