没有可用的 JTA 用户事务 - 指定“用户事务”或“用户事务名称”

2022-09-02 14:13:02

我在春季交易中遇到了一个奇怪的问题。我的应用程序将 Spring 与 EJB 结合使用。EJB 还调用用 注释的 Spring 服务类。我使用Spring进行事务管理。该应用程序被打包为 EAR 文件并部署在 jboss5.0 上,并且工作正常。但是当我指示 jboss 为每个 EAR 应用程序使用单独的类装入器时,弹簧初始化会给出错误。@TransactionJtaTransactionManager

org.springframework.beans.factory.BeanCreationException: Error creating bean
   with name 'transactionManager' defined in ServletContext resource 
   [/WEB-INF/applicationContext.xml]: Invocation of init method failed; 
nested exception is java.lang.IllegalStateException: No JTA UserTransaction 
   available - specify either 'userTransaction' or 'userTransactionName' or 
   'transactionManager' or 'transactionManagerName'

为什么 Spring 的初始化不成功?

谢谢


答案 1

尝试添加

@EnableTransactionManagement

在保存配置 Bean 的配置类上

当我遇到这个问题时,这对我有用,也许你需要其他特定于平台的事务管理器实现,但这是一个很好的起点。

@Bean
public PlatformTransactionManager transactionManager() {
    JpaTransactionManager txManager = new JpaTransactionManager();
    txManager.setEntityManagerFactory(entityManagerFactory());
    return txManager;
}

答案 2

推荐