Hello! I`d like to built a camel route with this logic:
- receive message with XML from WebSphere queue (camel "from") - begin transaction (distributed transaction via "transacted") - parse xml (camel "process") - save income message to Oracle DB (camel "process") - create reply message (camel "process") - send reply message to WebSphere queue (camel "to" with uri="bean:mqRemoteSender?method=remoteRoute", where I manually send camel-message body to MQQueue object) i.e. I`d like to do "INSERT" request to DB and send message in single transaction. I use: 1) JmsComponent: <bean id="wmq" class="org.apache.camel.component.jms.JmsComponent"> <property name="connectionFactory" ref="wmqConnectionFactory"/> <property name="concurrentConsumers" value="5"/> <property name="maxConcurrentConsumers" value="5"/> <property name="transactionManager" ref="transactionManager"/> <property name="transacted" value="true"/> </bean> <bean id="wmqConnectionFactory" class="com.ibm.mq.jms.MQConnectionFactory"> <property name="transportType" value="1"/> <property name="hostName" value="${HostName}"/> <property name="port"> <bean id="portValue" class="java.lang.Integer"> <constructor-arg value="${PortValue}"/> </bean> </property> <property name="queueManager" value="${ManagerName}"/> <property name="channel" value="${ConnectionChannel}"/> </bean> 2) Transaction policy: <bean id="required" class="org.apache.camel.spring.spi.SpringTransactionPolicy"> <property name="transactionManager" ref="transactionManager"/> <property name="propagationBehaviorName" value="PROPAGATION_REQUIRED"/> </bean> 3) Transaction manager: <bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"/> 4) Annotation driver: <tx:annotation-driven transaction-manager="transactionManager" /> 5) Process with DB save requests: private org.springframework.orm.jpa.JpaTemplate jtaTemplate; @Transactional(propagation = Propagation.REQUIRED) @Override public void process(Exchange exchange) throws Exception { SomeEntityClass entityObject = new SomeEntityClass(); ... jtaTemplate.persist(entityObject); jtaTemplate.flush(); } 6) persistence-unit: <persistence-unit name="jpaName" transaction-type="JTA"> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <jta-data-source>jdbc/applicationConnection</jta-data-source> <mapping-file>META-INF/orm.xml</mapping-file> <class>SomeEntityClass</class> <properties> <property name="eclipselink.target-server" value="OC4J" /> <property name="eclipselink.target-database" value="Oracle" /> <property name="eclipselink.weaving" value="false" /> <property name="eclipselink.logging.level" value="FINE" /> <property name="eclipselink.cache.shared.default" value="false"/> <property name="eclipselink.jdbc.batch-writing" value="Oracle-JDBC" /> <property name="eclipselink.jdbc.fetch-size" value="1000" /> </properties> </persistence-unit> But there is no distributed transaction. Oracle-db-transaction and wmq-send-transaction are independent from jms-receive-transaction. Whats wrong? -- View this message in context: http://camel.465427.n5.nabble.com/Distributed-transaction-in-camel-route-tp5719279.html Sent from the Camel - Users mailing list archive at Nabble.com.