jboss在重启后忽略requires_new

时间:2013-03-29 11:48:46

标签: jboss transactions annotations jta container-managed

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

1 个答案:

答案 0 :(得分: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可能会忽略属性

相关问题