Hi, is there any solutions to my problem? Sasa
smilicevics wrote: > > Hi > > I did that too: > > <camel:camelContext id="camel"> > <camel:route> > <camel:from > uri="oracle:queue:java:comp/resource/WeborderJmsResourceProvider/Queues/JMSEXAMPLE?maxMessagesPerTask=-1" > /> > <camel:policy ref="PROPAGATION_REQUIRED"/> > <camel:to uri="bean:testProcessor" /> > <camel:to uri="bean:updateProcessor" /> > </camel:route> > </camel:camelContext> > > <bean id="PROPAGATION_REQUIRED" > class="org.apache.camel.spring.spi.SpringTransactionPolicy"> > <property name="transactionManager" ref="transactionManager"/> > </bean> > > > Claus Ibsen-2 wrote: >> >> Hi >> >> You need to set transacted=true on the JMS endpoint to let it be >> transacted. >> Try this first as you use annotations for the rest so that might do the >> trick. >> >> If not you need to add <policy ref="required"/> in the route so Camel >> knows its a transacted route. >> >> See more here: >> http://camel.apache.org/transactional-client.html >> >> >> >> >> >> >> On Tue, Aug 4, 2009 at 9:55 AM, >> smilicevics<[email protected]> wrote: >>> >>> Hi, >>> >>> I am using apache camel 1.6.1, oracle as 10.1.3.3, spring 2.5., aspectj >>> 1.5.4 >>> Here is the stacktrace: >>> >>> 1817082 2009-08-03 17:20:33,623 DEBUG >>> org.apache.camel.component.jms.EndpointMessageListener.onMessage(63) - >>> Endpoint[oracle:queue:java:comp/resource/WeborderJmsResourceProvider/Queues/JMSEXAMPLE?maxMessagesPerTask=-1] >>> consumer receiving JMS message: oracle.jms.aqjmstextmess...@74e259 >>> 1817082 2009-08-03 17:20:33,623 DEBUG >>> org.apache.camel.impl.converter.DefaultTypeConverter.doConvertTo(96) - >>> Converting null -> java.lang.Boolean with value: null >>> 1817082 2009-08-03 17:20:33,623 DEBUG >>> org.springframework.transaction.support.AbstractPlatformTransactionManager.handleExistingTransaction(469) >>> - Participating in existing transaction >>> 1817082 2009-08-03 17:20:33,623 DEBUG >>> org.apache.camel.spring.spi.TransactionInterceptor$1.doInTransactionWithoutResult(101) >>> - Is actual transaction active: true >>> 1817082 2009-08-03 17:20:33,623 DEBUG >>> org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(214) >>> - Returning cached instance of singleton bean 'testProcessor' >>> 1817097 2009-08-03 17:20:33,638 DEBUG >>> org.springframework.jdbc.core.JdbcTemplate.execute(417) - Executing SQL >>> statement [insert into test values ('this is only test')] >>> 1817097 2009-08-03 17:20:33,638 DEBUG >>> org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(112) >>> - >>> Fetching JDBC Connection from DataSource >>> 1817097 2009-08-03 17:20:33,638 DEBUG >>> org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(116) >>> - >>> Registering transaction synchronization for JDBC Connection >>> 1817097 2009-08-03 17:20:33,638 DEBUG >>> org.springframework.transaction.support.TransactionSynchronizationManager.bindResource(186) >>> - Bound value >>> [org.springframework.jdbc.datasource.connectionhol...@d8b0f6] >>> for key [oracle.oc4j.sql.manageddatasou...@5cba16] to thread >>> [DefaultMessageListenerContainer-7] >>> 1817097 2009-08-03 17:20:33,638 DEBUG >>> org.springframework.transaction.support.TransactionSynchronizationManager.getResource(142) >>> - Retrieved value >>> [org.springframework.jdbc.datasource.connectionhol...@d8b0f6] for key >>> [oracle.oc4j.sql.manageddatasou...@5cba16] bound to thread >>> [DefaultMessageListenerContainer-7] >>> 1817113 2009-08-03 17:20:33,654 DEBUG >>> org.springframework.transaction.support.TransactionSynchronizationManager.getResource(142) >>> - Retrieved value >>> [org.springframework.jdbc.datasource.connectionhol...@d8b0f6] for key >>> [oracle.oc4j.sql.manageddatasou...@5cba16] bound to thread >>> [DefaultMessageListenerContainer-7] >>> 1817113 2009-08-03 17:20:33,654 DEBUG >>> org.springframework.transaction.support.TransactionSynchronizationManager.getResource(142) >>> - Retrieved value >>> [org.springframework.jms.listener.locallyexposedjmsresourcehol...@13223ad] >>> for key [oracle.jms.aqjmsqueueconnectionfact...@130fa43] bound to thread >>> [DefaultMessageListenerContainer-7] >>> 1817113 2009-08-03 17:20:33,654 DEBUG >>> org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(328) >>> - Rolling back transaction because of listener exception thrown: >>> oracle.jms.AQjmsException: Die Methode 'commit' kann nicht aufgerufen >>> werden, wenn eine globale Transaktion aktiv ist. >>> 1817113 2009-08-03 17:20:33,654 WARN >>> org.springframework.jms.listener.AbstractMessageListenerContainer.handleListenerException(646) >>> - Execution of JMS message listener failed >>> oracle.jms.AQjmsException: Die Methode 'commit' kann nicht aufgerufen >>> werden, wenn eine globale Transaktion aktiv ist. >>> at oracle.jms.AQjmsSession.commitNoCheck(AQjmsSession.java:815) >>> at oracle.jms.AQjmsSession.commit(AQjmsSession.java:784) >>> at >>> org.springframework.jms.support.JmsUtils.commitIfNecessary(JmsUtils.java:217) >>> at >>> org.springframework.jms.listener.AbstractMessageListenerContainer.commitIfNecessary(AbstractMessageListenerContainer.java:558) >>> at >>> org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:465) >>> at >>> org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:323) >>> at >>> org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:241) >>> at >>> org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:982) >>> at >>> org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:974) >>> at >>> org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:876) >>> at java.lang.Thread.run(Thread.java:595) >>> >>> [Linked-exception] >>> java.sql.SQLException: Die Methode 'commit' kann nicht aufgerufen >>> werden, >>> wenn eine globale Transaktion aktiv ist. >>> at >>> oracle.oc4j.sql.spi.ConnectionHandle.oc4j_throwSQLExceptionIfGlobalTxActive(ConnectionHandle.java:417) >>> at >>> oracle.oc4j.sql.spi.ConnectionHandle.commit(ConnectionHandle.java:123) >>> at oracle.jms.AQjmsSession.commitNoCheck(AQjmsSession.java:811) >>> at oracle.jms.AQjmsSession.commit(AQjmsSession.java:784) >>> at >>> org.springframework.jms.support.JmsUtils.commitIfNecessary(JmsUtils.java:217) >>> at >>> org.springframework.jms.listener.AbstractMessageListenerContainer.commitIfNecessary(AbstractMessageListenerContainer.java:558) >>> at >>> org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:465) >>> at >>> org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:323) >>> at >>> org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:241) >>> at >>> org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:982) >>> at >>> org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:974) >>> at >>> org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:876) >>> at java.lang.Thread.run(Thread.java:595) >>> >>> The error message is in german, but you can guess what it means "Cannot >>> call >>> commit in a global transaction". >>> >>> I did already looked in google, and did not find it. >>> As you suggested I will try to find some working example with oc4j >>> spring >>> jdbc and xa. >>> >>> thx, >>> Sasa >>> >>> >>> Claus Ibsen-2 wrote: >>>> >>>> Hi >>>> >>>> Which versions of the various products are you using? >>>> >>>> And when you get an error shown the real stacktrace / error message >>>> helps. >>>> >>>> And try use google on this exception / stacktrace to find others with >>>> same problem. >>>> >>>> And try get a sample working with Oracle + Spring + JDBC + XA to >>>> ensure that combo works before throwing in annotations, aop and other >>>> stuff that just complicates matter. >>>> >>>> And there was an issue in Camel 1.6.0 or older with sometimes Spring >>>> did not do IoC on classes with @annotations. It did output something >>>> about bean XXX not being eligible for ... So check whether Spring >>>> logs this in your case. >>>> >>>> >>>> On Mon, Aug 3, 2009 at 5:57 PM, >>>> smilicevics<[email protected]> wrote: >>>>> >>>>> Hi, >>>>> >>>>> I am trying to write code which will consume a message and do the >>>>> insert >>>>> in >>>>> database. >>>>> I want to use global transactions and two-phase-commit. >>>>> >>>>> I got always the same error: cannot commit in global transaction. >>>>> Can somebody tell me what am i doing wrong here: >>>>> >>>>> this is my spring xml: >>>>> >>>>> <?xml version="1.0" encoding="UTF-8"?> >>>>> >>>>> <beans xmlns="http://www.springframework.org/schema/beans" >>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >>>>> xmlns:camel="http://activemq.apache.org/camel/schema/spring" >>>>> xmlns:tx="http://www.springframework.org/schema/tx" >>>>> xmlns:aop="http://www.springframework.org/schema/aop" >>>>> xsi:schemaLocation=" >>>>> http://www.springframework.org/schema/beans >>>>> http://www.springframework.org/schema/beans/spring-beans-2.5.xsd >>>>> http://activemq.apache.org/camel/schema/spring camel-spring.xsd >>>>> http://www.springframework.org/schema/tx >>>>> http://www.springframework.org/schema/tx/spring-tx-2.0.xsd >>>>> http://www.springframework.org/schema/aop >>>>> http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"> >>>>> >>>>> >>>>> <camel:camelContext id="camel"> >>>>> <camel:route> >>>>> <camel:from >>>>> uri="oracle:queue:java:comp/resource/WeborderJmsResourceProvider/Queues/JMSEXAMPLE?maxMessagesPerTask=-1" >>>>> /> >>>>> <camel:to uri="bean:testProcessor" /> >>>>> </camel:route> >>>>> </camel:camelContext> >>>>> >>>>> <camel:template id="camelTemplate" /> >>>>> >>>>> <bean id="oracle" >>>>> class="org.apache.camel.component.jms.JmsComponent"> >>>>> <property name="connectionFactory" >>>>> ref="oJmsQueueConnectionFactory" /> >>>>> <property name="destinationResolver" >>>>> ref="jmsDestinationResolver" /> >>>>> <property name="transacted" value="true" /> >>>>> <property name="transactionManager" >>>>> ref="transactionManager" /> >>>>> </bean> >>>>> >>>>> <bean id="jmsDestinationResolver" >>>>> >>>>> class="org.springframework.jms.support.destination.JndiDestinationResolver"> >>>>> <property name="jndiTemplate" ref="jndiTemplate" /> >>>>> <property name="cache" value="true" /> >>>>> </bean> >>>>> >>>>> <bean id="transactionManager" >>>>> class="org.springframework.transaction.jta.OC4JJtaTransactionManager" >>>>> /> >>>>> >>>>> <bean id="oJmsQueueConnectionFactory" >>>>> class="org.springframework.jndi.JndiObjectFactoryBean"> >>>>> <property name="jndiTemplate" ref="jndiTemplate" /> >>>>> <property name="jndiName"> >>>>> >>>>> <value>java:comp/resource/WeborderJmsResourceProvider/QueueConnectionFactories/QCF</value> >>>>> </property> >>>>> </bean> >>>>> >>>>> <bean id="jndiTemplate" >>>>> class="org.springframework.jndi.JndiTemplate" /> >>>>> >>>>> <bean id="testProcessor" class="oc4j.test.TestProcessor"> >>>>> <property name="testImpl" ref="testImpl" /> >>>>> </bean> >>>>> >>>>> <bean id="testDataSource" >>>>> class="org.springframework.jndi.JndiObjectFactoryBean"> >>>>> <property name="jndiName" value="jdbc/WeborderJmsDS" /> >>>>> </bean> >>>>> >>>>> <bean id="testImpl" class="oc4j.test.TestImpl"> >>>>> <property name="dataSource" ref="testDataSource" /> >>>>> </bean> >>>>> >>>>> <aop:config> >>>>> <aop:pointcut id="process" expression="execution(* >>>>> oc4j.test.*)"/> >>>>> <aop:advisor pointcut-ref="process" >>>>> advice-ref="txAdvice"/> >>>>> </aop:config> >>>>> >>>>> <tx:advice id="txAdvice" >>>>> transaction-manager="transactionManager"> >>>>> <tx:attributes> >>>>> <tx:method name="process" >>>>> propagation="REQUIRED"/> >>>>> </tx:attributes> >>>>> </tx:advice> >>>>> >>>>> </beans> >>>>> >>>>> and TestProcessor: >>>>> >>>>> public class TestProcessor implements Processor { >>>>> >>>>> private TestImpl test = null; >>>>> >>>>> public void setTestImpl(TestImpl test) { >>>>> this.test = test; >>>>> } >>>>> >>>>> �...@transactional(propagation = Propagation.REQUIRED) >>>>> public void process(Exchange arg0) throws Exception { >>>>> >>>>> Logger logger = Logger >>>>> >>>>> .getLogger("oc4j.test.Oc4jServletContextListener"); >>>>> >>>>> test.insertTest(); >>>>> logger.info("Received exchange: " + arg0.getIn()); >>>>> logger.info("Received exchange: " + >>>>> arg0.getIn().getBody()); >>>>> } >>>>> } >>>>> >>>>> and TestImpl: >>>>> >>>>> public class TestImpl extends JdbcDaoSupport { >>>>> >>>>> public void insertTest() { >>>>> getJdbcTemplate().execute("insert into test values >>>>> ('this >>>>> is only >>>>> test')"); >>>>> } >>>>> } >>>>> >>>>> >>>>> thanks in advance. >>>>> >>>>> Sasa >>>>> >>>>> >>>>> >>>>> -- >>>>> View this message in context: >>>>> http://www.nabble.com/Two-Phase-Commit-with-JCA%2C-Spring%2C-Camel-and-OC4j-tp24793274p24793274.html >>>>> Sent from the Camel - Users mailing list archive at Nabble.com. >>>>> >>>>> >>>> >>>> >>>> >>>> -- >>>> Claus Ibsen >>>> Apache Camel Committer >>>> >>>> Open Source Integration: http://fusesource.com >>>> Blog: http://davsclaus.blogspot.com/ >>>> Twitter: http://twitter.com/davsclaus >>>> >>>> >>> >>> -- >>> View this message in context: >>> http://www.nabble.com/Two-Phase-Commit-with-JCA%2C-Spring%2C-Camel-and-OC4j-tp24793274p24803834.html >>> Sent from the Camel - Users mailing list archive at Nabble.com. >>> >>> >> >> >> >> -- >> Claus Ibsen >> Apache Camel Committer >> >> Open Source Integration: http://fusesource.com >> Blog: http://davsclaus.blogspot.com/ >> Twitter: http://twitter.com/davsclaus >> >> > > -- View this message in context: http://www.nabble.com/Two-Phase-Commit-with-JCA%2C-Spring%2C-Camel-and-OC4j-tp24793274p24824514.html Sent from the Camel - Users mailing list archive at Nabble.com.
