如何解决与Singleton Session Bean和并发一起使用时,UserTransaction线程安全吗?
我正在使用Bean管理的事务和容器管理的实体管理器。我的项目使用JBoss应用服务器。 我有以下代码。
@Startup
@Singleton
@TransactionManagement(TransactionManagementType.BEAN)
public class myClass{
@PersistenceContext(unitName="name")
EntityManager em;
@Resource
private UserTransaction tx;
public void doBussinesLogic() {
tx.begin();
em.joinTransaction();
// do some staff
tx.commit();
}
}
在多个线程中同时调用doBussinesLogic()方法。这意味着线程共享单例的EntityManager和UserTranaction。我知道EntityMenager根据本文第10.4 https://docs.wildfly.org/14/Developer_Guide.html点是线程安全的,但是我不确定UserTranaction。
- 这些线程是否使用相同的UserTranaction(由于Singleton Bean)?如果是,那安全吗?
- 是“ em.joinTransaction();”这里有必要吗?
- 我想并行处理doBussinesLogic方法,因此我希望这些线程彼此之间不锁定,因此它们必须使用不同的事务。另一方面,我必须使用Singleton Session Bean。有什么解决办法吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。