FAQ
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
" rel="nofollow">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.

Search Discussions

  • Claus Ibsen at Aug 4, 2009 at 5:47 am
    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,
    smilicevicswrote:
    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
    " rel="nofollow">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
  • Willem Jiang at Aug 4, 2009 at 7:20 am
    Another suggestion, you can try to make the JMS and DB work separately
    before you get them work together.

    Willem

    Claus Ibsen 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,
    smilicevicswrote:
    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
    " rel="nofollow">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.
  • Smilicevics at Aug 4, 2009 at 8:49 am
    Hi,

    I already did that. Separately, JMS and BD works.

    Sasa


    willem.jiang wrote:
    Another suggestion, you can try to make the JMS and DB work separately
    before you get them work together.

    Willem

    Claus Ibsen 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,
    smilicevicswrote:
    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
    " rel="nofollow">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.
    --
    View this message in context: http://www.nabble.com/Two-Phase-Commit-with-JCA%2C-Spring%2C-Camel-and-OC4j-tp24793274p24804576.html
    Sent from the Camel - Users mailing list archive at Nabble.com.
  • Smilicevics at Aug 4, 2009 at 7:55 am
    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,
    smilicevicswrote:
    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
    " rel="nofollow">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 at Aug 4, 2009 at 8:05 am
    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,
    smilicevicswrote:
    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,
    smilicevicswrote:
    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
    " rel="nofollow">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
  • Smilicevics at Aug 4, 2009 at 10:07 am
    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,
    smilicevicswrote:
    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,
    smilicevicswrote:
    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
    " rel="nofollow">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-tp24793274p24805711.html
    Sent from the Camel - Users mailing list archive at Nabble.com.
  • Smilicevics at Aug 5, 2009 at 10:36 am
    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,
    smilicevicswrote:
    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,
    smilicevicswrote:
    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
    " rel="nofollow">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.

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupusers @
categoriescamel
postedAug 3, '09 at 3:58p
activeAug 5, '09 at 10:36a
posts8
users3
websitecamel.apache.org

People

Translate

site design / logo © 2022 Grokbase