camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From smilicevics <sasa.milicevic-sej...@el2.net>
Subject Re: Two-Phase-Commit with JCA, Spring, Camel and OC4j
Date Tue, 04 Aug 2009 07:55:08 GMT

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.AQjmsTextMessage@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.ConnectionHolder@d8b0f6]
for key [oracle.oc4j.sql.ManagedDataSource@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.ConnectionHolder@d8b0f6] for key
[oracle.oc4j.sql.ManagedDataSource@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.ConnectionHolder@d8b0f6] for key
[oracle.oc4j.sql.ManagedDataSource@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.LocallyExposedJmsResourceHolder@13223ad]
for key [oracle.jms.AQjmsQueueConnectionFactory@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<sasa.milicevic-sejfic@el2.net> 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.


Mime
View raw message