【问题标题】:How to create apache camel XA connection using JNDI in Atomikos如何在 Atomikos 中使用 JNDI 创建 apache camel XA 连接
【发布时间】:2015-08-24 13:46:42
【问题描述】:
Hi i am trying to create a XA transaction for camel and jdbc using atomikos but i have JNDI to set up a XA jdbc transaction i am having issues configuring it.  

以下是我的代码,我无法写入类异常

 <!-- Atomikos and Spring transaction configuration  -->


    <!-- JMS config; with XAConnectionFactory -->


      <bean id="xa.amqConnectionFactory" class="org.apache.activemq.spring.ActiveMQXAConnectionFactory">
        <property name="brokerURL" value="tcp://localhost:61616"/>
      </bean>

      <!-- nothing transactional here, this connection factory will be used from the test harness -->
      <bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
        <property name="brokerURL" value="tcp://localhost:61616"/>
      </bean>


      <!-- Atomikos JTA configuration, nothing specific to Spring here -->
      <bean id="atomikos.connectionFactory" class="com.atomikos.jms.AtomikosConnectionFactoryBean"
            init-method="init" destroy-method="close">
        <property name="uniqueResourceName" value="My_MQSeries_XA_RMI"/>
        <property name="xaConnectionFactory" ref="xa.amqConnectionFactory"/>
        <!-- XAConnectionFactory -->
        <property name="maxPoolSize" value="10"/>
        <property name="ignoreSessionTransactedFlag" value="false"/>
      </bean>


      <!-- database config; the XADataSource bean is both a DataSource and an XADataSource-->
      <!-- <import resource="xa-embedded-db-context.xml"/> -->

      <bean id="db2jndi" class="org.springframework.jndi.JndiObjectFactoryBean">
      <property name="jndiName" value = "jndi NAMe"/>

      </bean>

      <!-- <bean id="XADataSource" class="MyDAOclass">
      <property name="MyDAOmethod" ref="db2jndi"/>
      </bean> -->

      <bean id="atomikos.dataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean">
        <property name="xaDataSource" ref="XADataSource"/>
        <!-- XADataSource -->
      </bean>


      <!-- javax.transaction.TransactionManager -->
      <bean id="atomikos.transactionManager"
            class="com.atomikos.icatch.jta.UserTransactionManager"
            init-method="init"
            destroy-method="close"
            depends-on="atomikos.connectionFactory,atomikos.dataSource">
        <property name="forceShutdown" value="false"/>
      </bean>

      <!-- javax.transaction.UserTransaction -->
      <bean id="atomikos.userTransaction"
            class="com.atomikos.icatch.jta.UserTransactionImp">
        <property name="transactionTimeout" value="300"/>
      </bean>

      <!-- This is the Spring wrapper over the JTA configuration -->
      <!-- org.springframework.transaction.PlatformTransactionManager -->
      <bean id="jta.transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
        <property name="transactionManager" ref="atomikos.transactionManager"/>
        <property name="userTransaction" ref="atomikos.userTransaction"/>
      </bean>


      <!-- Camel components -->
      <bean id="jms" class="org.apache.activemq.camel.component.ActiveMQComponent">
        <property name="connectionFactory" ref="atomikos.connectionFactory"/>
        <property name="transactionManager" ref="jta.transactionManager"/>
      </bean>

      <!-- this component is used only from the test harness -->
      <bean id="nonTxJms" class="org.apache.activemq.camel.component.ActiveMQComponent">
        <property name="connectionFactory" ref="connectionFactory"/>
      </bean>

      <bean id="sql" class="org.apache.camel.component.sql.SqlComponent">
        <property name="dataSource" ref="atomikos.dataSource"/>
      </bean>

      <!-- Policy -->
      <bean id="PROPAGATION_REQUIRED" class="org.apache.camel.spring.spi.SpringTransactionPolicy">
        <property name="transactionManager" ref="jta.transactionManager"/>
        <!-- Atomikos TX Manager -->
        <property name="propagationBehaviorName" value="PROPAGATION_REQUIRED"/>
      </bean>

如果有人使用 XA 事务在 apache camel 上工作,你们能否提供我的示例配置文件,以便我可以使用和修改它。

【问题讨论】:

    标签: jms apache-camel jndi xa atomikos


    【解决方案1】:

    这对我有用。看起来您错过了 ActiveMQResourceManager。还要确保您使用 XAPooledConnectionFactory 否则您的 MDB 将在每次绑定后断开连接以检查消息(并且代理上的 CPU 将通过屋顶)。

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="
          http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
    
        <bean id="env" class="java.lang.String">
            <constructor-arg value="test-junit"/>
        </bean>
    
        <!-- JMS configuration -->
        <bean id="resourceManager" class="org.apache.activemq.pool.ActiveMQResourceManager"
            init-method="recoverResource">
            <property name="transactionManager" ref="atomikosTransactionManager" />
            <property name="connectionFactory" ref="pooledJmsXaConnectionFactory" />
            <property name="resourceName" value="activemq.default" />
        </bean>
    
        <bean id="transactionManager"
            class="org.springframework.transaction.jta.JtaTransactionManager">
            <property name="transactionManager" ref="atomikosTransactionManager" />
            <property name="userTransaction" ref="userTransaction" />
        </bean>
    
        <bean id="pooledJmsXaConnectionFactory" class="org.apache.activemq.pool.XaPooledConnectionFactory"
            init-method="start" destroy-method="stop">
            <property name="maxConnections" value="8" />
            <property name="connectionFactory" ref="jmsXaConnectionFactory" />
            <property name="transactionManager" ref="atomikosTransactionManager" />
        </bean>
    
        <!-- <bean id="pooledJmsXaConnectionFactory" class="com.atomikos.jms.AtomikosConnectionFactoryBean" 
            init-method="init" destroy-method="close"> <property name="poolSize" value="8" 
            /> <property name="uniqueResourceName" value="activemq" /> <property name="xaConnectionFactory" 
            ref="jmsXaConnectionFactory" /> </bean> -->
    
        <bean id="jmsXaConnectionFactory" class="org.apache.activemq.ActiveMQXAConnectionFactory">
            <property name="brokerURL" value="tcp://localhost:61616" />
            <property name="redeliveryPolicy">
                <bean class="org.apache.activemq.RedeliveryPolicy">
                    <property name="maximumRedeliveries" value="0" />
                </bean>
            </property>
        </bean>
    
        <bean id="jms" class="org.apache.activemq.camel.component.ActiveMQComponent">
            <property name="connectionFactory" ref="pooledJmsXaConnectionFactory" />
            <property name="transacted" value="false" />
            <property name="transactionManager" ref="transactionManager" />
        </bean>
    
        <!-- JMS configuration for test enqueue/dequeue without transactions -->
        <bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
            <property name="brokerURL" value="tcp://localhost:61616" />
        </bean>
    
    
        <bean id="myEmf"
            class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
            <property name="dataSource" ref="dataSource" />
            <property name="jpaVendorAdapter">
                <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
            </property>
            <property name="persistenceXmlLocation" value="classpath:META-INF/test-persistence.xml"/>
        </bean>
    
        <!-- JDBC configuration -->
        <bean id="dataSource" class="org.apache.commons.dbcp2.managed.BasicManagedDataSource">
            <property name="transactionManager" ref="atomikosTransactionManager" />
            <!-- <property name="driverClassName" value="org.apache.derby.jdbc.EmbeddedXADataSource40" /> -->
            <property name="driverClassName" value="org.apache.derby.jdbc.EmbeddedDriver" />
            <property name="url" value="jdbc:derby:target/testdb;create=true" />
            <property name="defaultAutoCommit" value="false" />
        </bean>
    
        <bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager"
            init-method="init" destroy-method="close">
            <property name="forceShutdown" value="false" />
        </bean>
    
        <bean id="userTransaction" class="com.atomikos.icatch.jta.UserTransactionImp">
            <property name="transactionTimeout" value="120" />
        </bean>
    
        <!--   -->
        <bean id="springContext" class="org.example.testutils.SpringContext"/>
    
    </beans>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-23
      • 2022-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多