[ 
https://issues.apache.org/jira/browse/CAMEL-8749?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Claus Ibsen resolved CAMEL-8749.
--------------------------------
    Resolution: Not A Problem
      Assignee: Claus Ibsen

As the response from Juergen Holler its by design how spring-jms works.

For using client ack mode, you should use spring jms teamplate, or write jms 
code yourself etc.

> JMS message always acknowledged even with CLIENT_ACKNOWLEDGE
> ------------------------------------------------------------
>
>                 Key: CAMEL-8749
>                 URL: https://issues.apache.org/jira/browse/CAMEL-8749
>             Project: Camel
>          Issue Type: Wish
>          Components: camel-jms
>            Reporter: Thomas Diesler
>            Assignee: Claus Ibsen
>             Fix For: 2.16.0
>
>
> On a JMS message consumer route, we support
> {code}
> jms:...&acknowledgementModeName=CLIENT_ACKNOWLEDGE
> {code}
> The pattern is that a client may chose to process a batch of msgs before it 
> acks. If batch processing succeeds the client calls Message.acknowledge(). If 
> it fails, the client may choose to recover the msgs in the batch with 
> Session.recover()
> In a Processor we can now call Message.acknowledge() or  Session.recover(). 
> However, even if the route (i.e. the client) does not call 
> Message.acknowledge() it is called automatically in 
> {{org.springframework.jms.listener.AbstractMessageListenerContainer}}
> {code}
>       protected void commitIfNecessary(Session session, Message message) 
> throws JMSException {
>               // Commit session or acknowledge message.
>               if (session.getTransacted()) {
>                       // Commit necessary - but avoid commit call within a 
> JTA transaction.
>                       if (isSessionLocallyTransacted(session)) {
>                               // Transacted session created by this container 
> -> commit.
>                               JmsUtils.commitIfNecessary(session);
>                       }
>               }
>               else if (message != null && isClientAcknowledge(session)) {
>                       message.acknowledge();
>               }
>       }
> {code}
> This would not be correct if the route is the JMS client. Redelivery can only 
> be achieved in the context of one message invocation
> CrossRef: https://jira.spring.io/browse/SPR-12995



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to