spring - java :comp/UserTransaction is not bound in the context using btm and spring

标签 spring tomcat transactions

我正在尝试像这样使用 spring 将 bitronix 配置为我的 JTA 管理器:

<!--  Bitronix Transaction Manager embedded configuration -->
    <bean id="xaDataSource" class="bitronix.tm.resource.jdbc.PoolingDataSource"
        init-method="init" destroy-method="close">
        <property name="className" value="bitronix.tm.resource.jdbc.lrc.LrcXADataSource" />
        <property name="uniqueName" value="java/DS1" />
        <property name="maxPoolSize" value="5" />
        <property name="minPoolSize" value="0" />
        <property name="allowLocalTransactions" value="false" />
        <property name="testQuery" value="SELECT 1 FROM DUAL" />
        <property name="driverProperties">
            <props>
                <prop key="user">user</prop>
                <prop key="password">user</prop>
                <prop key="url">url</prop>
                <prop key="driverClassName">oracle.jdbc.OracleDriver</prop>
            </props>
        </property>
    </bean>


    <bean id="btmConfig" factory-method="getConfiguration"
        class="bitronix.tm.TransactionManagerServices">
        <property name="serverId" value="spring-btm" />
    </bean>


    <bean id="bitronixTransactionManager" factory-method="getTransactionManager"
        class="bitronix.tm.TransactionManagerServices" depends-on="btmConfig,xaDataSource"
        destroy-method="shutdown" />


    <bean id="jtaTransactionManager"
        class="org.springframework.transaction.jta.JtaTransactionManager">
        <property name="transactionManager" ref="bitronixTransactionManager" />
        <property name="userTransaction" ref="bitronixTransactionManager" />
    </bean>
    <!--  end of Bitronix Transaction Manager embedded configuration -->

我看到 bitronix 正在启动并运行:

399 DEBUG (        PoolingDataSource.java:84)     - building XA pool for java/DS1 with 0 connection(s) etc..)

但是当我尝试时:

DataSource ds = (DataSource) ic.lookup("java:comp/UserTransaction");

我得到了命名异常(exception)。

为什么会这样?我还需要配置什么?

已编辑

我在 tomcat documentation 中看到那<Transaction>可以绑定(bind)事务管理器来处理它。

我在tomcat和spring中都定义会不会冲突?

最佳答案

尝试将此添加到您的网络应用程序的 META-INF/context.xml 中:

<Context>
  <Transaction factory="bitronix.tm.BitronixUserTransactionObjectFactory" />
</Context>

这应该仅将事务管理器绑定(bind)到此特定 Web 应用程序的 java:comp/UserTransaction 名称下。

关于spring - java :comp/UserTransaction is not bound in the context using btm and spring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5325764/

相关文章:

java - Spring 在哪里获取 SSL 证书?

java - 如何完全删除/禁用Web浏览器上的Spring boot Logo ?

java - 为 Junit 使用 spring-rabbit-test

java - 了解 Tomcat 连接池设置

windows - Tomcat 上的 Web 应用程序没有响应

c# - 如何仅在 TransactionScope 提交时运行自定义 C# 函数?

ruby-on-rails - Sidekiq 是否适用于高度关键任务、需要一次性执行保证、需要单线程执行的任务?

java - Spring - 等待rabbitmq消息监听器完成

transactions - Loopback4 中的事务支持吗?

java - 在 VPS 服务器上部署时出现 hibernate 异常