Hi, I just changed the settings to remove the property "acknowledgementModeName", and I still lost a message.
I was able to reproduce the problem in a test project, I send its spring configuration as an attachement. On Tue, May 10, 2011 at 8:40 AM, Claus Ibsen <claus.ib...@gmail.com> wrote: > Remove this > <property name="acknowledgementModeName" value="CLIENT_ACKNOWLEDGE"/> > > As when you use transacted=true, it has to use TRANSACTED_ACKNOWLEDGE. > So do not override/change this setting. > > 2011/5/10 Céline Bugaud <c.bug...@gmail.com>: >> Hi Ashwin, >> >> I didn't sent my entire spring configuration, but my ActiveMQComponent >> was already linked to the transactionManager : >> >> ---------------------------------------------------- >> <bean id="activemqPersistent" >> class="org.apache.activemq.camel.component.ActiveMQComponent" >> lazy-init="true"> >> <property name="connectionFactory" >> ref="amqPoolConnectionFactory"/> >> <property name="transactionManager" >> ref="amqTransactionManager"/> >> <property name="transacted" value="true"/> >> <property name="brokerURL" >> value="${bo.activemq.brokerurl}" /> >> <property name="acknowledgementModeName" >> value="CLIENT_ACKNOWLEDGE"/> >> <property name="maxConcurrentConsumers" value="10" /> >> <property name="receiveTimeout" value="3000"/> >> <property name="maxMessagesPerTask" value="1"/> >> <property name="deliveryPersistent" value="true"/> >> <property name="usePooledConnection" value="true"/> >> <property name="testConnectionOnStartup" value="true"/> >> </bean> >> ---------------------------------------------------- >> >> However, I tried using two different activeMQComponent, and that >> seemed to solve my problem : I no longer loose messages. The >> transaction does not seem to work well either : I now have duplicate >> messages. >> >> Regards, >> >> -- >> Céline >> >> On Mon, May 9, 2011 at 10:43 PM, Ashwin Karpe <aka...@fusesource.com> wrote: >>> Hi, >>> >>> Sorry about the confusion... You do not need the second connection factory >>> "activemq2". This is an error on my part. >>> >>> The key difference in your setup vs mine is that there is a >>> "transactionManager" property set in my ActiveMQ component and the >>> "transacted" property is set to true . This wires in the transactional >>> capability to the ActiveMQ component. >>> >>> Please see the corrected XML below. >>> >>> Cheers, >>> >>> Ashwin... >>> >>> >>> >>> ======================================= >>> ---------------------------------------------------- >>> <beans xmlns="http://www.springframework.org/schema/beans" >>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >>> xmlns:camel="http://camel.apache.org/schema/spring" >>> xsi:schemaLocation=" >>> http://www.springframework.org/schema/beans >>> http://www.springframework.org/schema/beans/spring-beans.xsd >>> http://camel.apache.org/schema/spring >>> http://camel.apache.org/schema/spring/camel-spring.xsd"> >>> >>> <camelContext> >>> <route> >>> <from ref="activemq:queue:foo" /> >>> <transacted ref="required"/> >>> <to ref="activemq:topic:bar" /> >>> </route> >>> </camelContext> >>> >>> <bean id="jmsConnectionFactory" >>> class="org.apache.activemq.ActiveMQConnectionFactory"> >>> <property name="brokerURL" >>> value="vm://localhost?broker.persistent=false&broker.useJmx=false"/> >>> </bean> >>> >>> <bean id="jmsTransactionManager" >>> class="org.springframework.jms.connection.JmsTransactionManager"> >>> <property name="connectionFactory" ref="jmsConnectionFactory"/> >>> </bean> >>> >>> <bean id="activemq" >>> class="org.apache.activemq.camel.component.ActiveMQComponent"> >>> <property name="connectionFactory" ref="jmsConnectionFactory"/> >>> <property name="transacted" value="true"/> >>> <property name="transactionManager" ref="jmsTransactionManager"/> >>> </bean> >>> >>> <bean id="required" >>> class="org.apache.camel.spring.spi.SpringTransactionPolicy"> >>> <property name="transactionManager" ref="amqTransactionManager" /> >>> <property name="propagationBehaviorName" >>> value="PROPAGATION_MANDATORY" /> >>> </bean> >>> >>> </beans> >>> >> > > > > -- > Claus Ibsen > ----------------- > FuseSource > Email: cib...@fusesource.com > Web: http://fusesource.com > CamelOne 2011: http://fusesource.com/camelone2011/ > Twitter: davsclaus > Blog: http://davsclaus.blogspot.com/ > Author of Camel in Action: http://www.manning.com/ibsen/ > -- Céline
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:amq="http://activemq.apache.org/schema/core" xmlns:camel="http://camel.apache.org/schema/spring" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd "> <bean id="required" class="org.apache.camel.spring.spi.SpringTransactionPolicy"> <property name="transactionManager" ref="amqTransactionManager" /> <property name="propagationBehaviorName" value="PROPAGATION_REQUIRED" /> </bean> <!-- ActiveMQ JMS --> <bean id="transactedRedeliveryPolicy" class="org.apache.activemq.RedeliveryPolicy"> <property name="initialRedeliveryDelay" value="1000" /> <property name="maximumRedeliveries" value="5" /> <property name="useExponentialBackOff" value="true" /> </bean> <!-- definition du gestionnaire de transaction pour la connexion ActiveMQ --> <bean id="amqTransactionManager" name="amqTransactionManager" class="org.springframework.jms.connection.JmsTransactionManager"> <property name="connectionFactory" ref="amqPoolConnectionFactory" /> </bean> <amq:connectionFactory id="amqConnectionFactory" brokerURL="tcp://10.16.34.115:62001" warnAboutUnstartedConnectionTimeout="1"> <property name="redeliveryPolicy" ref="transactedRedeliveryPolicy" /> </amq:connectionFactory> <!-- defintion du pool de connexion à ActiveMQ --> <bean id="amqPoolConnectionFactory" class="org.jencks.amqpool.PooledConnectionFactory"> <constructor-arg ref="amqConnectionFactory" /> <property name="maxConnections" value="10" /> <property name="maximumActive" value="10" /> </bean> <bean id="activemqPersistent" class="org.apache.activemq.camel.component.ActiveMQComponent" lazy-init="true"> <property name="connectionFactory" ref="amqPoolConnectionFactory"/> <property name="transactionManager" ref="amqTransactionManager"/> <property name="transacted" value="true"/> <property name="brokerURL" value="tcp://10.16.34.115:62001" /> <property name="maxConcurrentConsumers" value="10" /> <property name="receiveTimeout" value="3000"/> <property name="maxMessagesPerTask" value="1"/> <property name="deliveryPersistent" value="true"/> <property name="usePooledConnection" value="true"/> <property name="testConnectionOnStartup" value="true"/> </bean> <camel:endpoint id="AMQ_ORDERS" uri="activemqPersistent:queue:Orders_CBU"/> <camel:endpoint id="AMQ_ORDERS_2" uri="activemqPersistent:queue:Orders_CBU_2"/> <camel:camelContext id="ORDERS" shutdownRunningTask="CompleteCurrentTaskOnly" xmlns="http://camel.apache.org/schema/spring"> <camel:route id="ActiveMQ_ORDERS_TO_SCHEMA_VALIDATION"> <camel:from ref="AMQ_ORDERS" /> <camel:transacted ref="required"/> <camel:to ref="AMQ_ORDERS_2" /> </camel:route> </camel:camelContext> </beans>