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.

Reply via email to