与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。

  1. 这些线程是否使用相同的UserTranaction(由于Singleton Bean)?如果是,那安全吗?
  2. 是“ em.joinTransaction();”这里有必要吗?
  3. 我想并行处理dobussinesLogic方法,因此我希望这些线程彼此之间不锁定,因此它们必须使用不同的事务。另一方面,我必须使用Singleton Session Bean。有什么解决办法吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)