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&amp;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>

Reply via email to