2

我正在使用 jboss 和 cmt 并且在我从另一个 bean 循环插入一些记录的 ejb 方法上使用 requires_new 时看到了奇怪的行为。我看到在重新启动jboss后间歇性地在方法完成后方法中的操作没有提交到db。所以,我尝试使用TransactionSynchronizationRegistry,发现当数据没有提交时,我实际上没有得到每次输入方法时都有新的交易。有谁听说过 jboss 这样做的吗?我正在使用 ejb、jboss、jpa、Hibernate、cmt。

4

1 回答 1

2

所以,我终于解决了这个问题。我用了这篇很棒的博文

http://piotrnowicki.com/2011/11/am-i-in-the-same-transaction-am-i-using-the-same-persistencecontext/

以确保在输入带注释的 REQUIRES_NEW 方法后我实际上处于同一事务中。所以后来我了解到 JBoss 间歇性地忽略了注释并默认为 REQUIRED 。这是因为多个类实现了相同的接口。所以我简化了它,现在我有一个接口,带注释的@Local 和一个实现类,其中 REQUIRES_NEW 带注释的方法是。我知道在这种情况下是我们的代码出错了,所以这并不是 Jboss 处理事务的方式中的一个错误。但是很奇怪,日志中没有警告那么多存在竞争条件。我可以重新启动 Jboss 并获得与重新启动之前不同的行为。我觉得这很奇怪。我没有

编辑:这不是关于多个实现类,只是关于在接口中声明@Local注释的所有方法,否则JBoss可能会忽略这些属性

于 2013-03-30T10:03:32.643 回答