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.