实现spring事务时出错

实现spring事务时出错,spring,transactions,Spring,Transactions,我对春天不熟悉。我想在我的应用程序中实现JtaTransactionManager,而不是 HibernateTransactionManager。但是当我在xml中编写以下代码时,出现以下错误 <bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"/> <!-- Spring LoadTimeWeaver Support for

我对春天不熟悉。我想在我的应用程序中实现JtaTransactionManager,而不是 HibernateTransactionManager。但是当我在xml中编写以下代码时,出现以下错误

<bean id="transactionManager"
     class="org.springframework.transaction.jta.JtaTransactionManager"/>
<!-- Spring LoadTimeWeaver Support for the Tomcat server. -->

 <Loader loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"/>

Tomcat没有内置的JTA实现,因此如果您尝试使用
JtaTransactionManager
,Spring将失败

<!-- Spring LoadTimeWeaver Support for the Tomcat server. -->

 <Loader loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"/>
但是,您可以使用,它可以在Tomcat中使用以提供此类功能

<!-- Spring LoadTimeWeaver Support for the Tomcat server. -->

 <Loader loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"/>

我不得不问,你为什么要从JTA开始?hibernate事务管理器是否足够?如果您发现自己需要JTA支持,那么您可能需要考虑使用一个完整的JavaEE应用服务器(JBOSS将是显而易见的选择,因为它包含Tomcat作为其servlet引擎),并使用那里适当的、完全支持的JTA实现。

作为SkFalman SAD,Tomcat没有内置的JTA实现。因此,为了在应用程序上下文中使用JtaTransactionManager,您应该将某些JTA实现的JAR(例如Bitronix)放入Tomcat lib文件夹中,并将以下声明放入Tomcat的context.xml文件中

<Transaction factory="bitronix.tm.BitronixUserTransactionObjectFactory" />
<!-- Spring LoadTimeWeaver Support for the Tomcat server. -->

 <Loader loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"/>


通过这种方式,Tomcat将创建并公开用于JtaTransactionManager初始化的UserTransaction。

如果您在JTA实现中使用Atomikos,我会对特定情况做出响应,我通过将下面的行添加到/conf文件夹中的th context.xml解决了问题

<!-- Spring LoadTimeWeaver Support for the Tomcat server. -->

 <Loader loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"/>

<!-- Spring LoadTimeWeaver Support for the Tomcat server. -->

 <Loader loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"/>


thanx的答案。但在使用hbernate事务管理器时,我无法保存或更新数据。出现各种异常。我的应用程序集成了struts+spring+hibernate。我想使用spring来管理我的所有事务。我会尝试执行你建议的操作。如果struts+spring+hibernate是你的设置,那么你就不需要或想要JTA了,它只会让事情变得更复杂。Spring
HibernateTransactionManager
是正确的选择。@skaffman,你能看看我的帖子吗-