【问题标题】:JPA transaction spanned over several postbacksJPA 事务跨越多个回发
【发布时间】:2014-04-11 08:34:39
【问题描述】:

我需要创建一个简单的 JEE 应用程序,它可以有两种模式。首先,它自动将每次修改存储到数据库中,其次,所有更改都按需存储。是否可以启动一个 JPA 事务并将其跨越给定有状态 bean 上的许多回发并在用户单击某个按钮时提交更改(或回滚)?

我尝试在我的 bean 上设置以下参数: @有状态 @TransactionManagement(TransactionManagementType.BEAN)

同样适用于 EntityManager: @PersistenceContext(type = PersistenceContextType.EXTENDED)

但是当我尝试提交时出现以下异常: java.lang.IllegalStateException: 事务在当前线程中不活跃。

如果不可能这样,创建上述功能的最简单方法是什么?

【问题讨论】:

  • 有状态bean客户端是如何实现的?

标签: java jakarta-ee jpa orm transactions


【解决方案1】:

这是因为您忘记打开交易。您使所有内容都正确,但您还必须在您的 @Stateful bean 中注入 UserTransaction(假设您的 PersistenceContext 是 JTA 而不是 RESOURCE_LOCAL),然后在提交更改之前启动事务。

【讨论】:

  • 是的,我确实开始了交易:@Resource private UserTransaction tx; @PostConstruct public void initialize() { try { tx.begin(); logger.log(Level.INFO, "CALL Bean.initialize, transaction started successfuly"); } catch (NotSupportedException | SystemException e) { logger.log(Level.SEVERE, "Begin transaction unsuccessful: {0}", e.toString()); } }
猜你喜欢
  • 2019-05-17
  • 1970-01-01
  • 2020-12-18
  • 2017-12-27
  • 1970-01-01
  • 1970-01-01
  • 2017-11-08
  • 2012-03-17
  • 1970-01-01
相关资源
最近更新 更多