I believe there is one significant difference between a jms:channel and a pair of ordinary int:channel and jms:outbound-channel-adapter.
If the intention is to fire and forget (e.g. using wire-tap) a message to the JMS backed channel, following configuration will not work if there is no listener (e.g. jms:message-driven-channel-adapter) available at the time message is sent to the channel:
Code:
<jms:channel
id="logger"
queue="logQueue"
message-driven="false"
/>
It will throw ChannelResolutionException exception:
Code:
org.springframework.integration.support.channel.ChannelResolutionException: no output-channel or replyChannel header available
I believe this is not always the desired behavior since JMS messages might be consumed later and/or by different process. In order to avoid this exception, you a pair of ordinary int:channel and jms:outbound-channel-adapter is needed:
Code:
<int:channel id="logger"/>
<jms:outbound-channel-adapter
channel="logger"
destination="logQueue"
/>
Since message-driven attribute of jms:channel is not documented, I would expect setting it to true should not even set the channel to pollable, but also not to require JMS listener.
The difference between jms:channel and jms:outbound-channel-adapter shall definitely be underlined in the documentation along with an explanation of message-driven attribute of jms:channel.