servlet中的UserTransaction

时间:2016-01-14 15:22:10

标签: jpa servlets jta

我想知道在下面这个场景中是否可以使用UserTransaction。

EntityManager不是线程安全的,所以有帮助类。

public class EMProducer {

    @PersistenceContext
    EntityManager em;

    @Produces
    @RequestScoped
    public EntityManager createEM() {
        return em;
    }
}

和Servlet:

@WebServlet("/test")
public class TestServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @Inject
    EntityManager em;
    @Resource
    UserTransaction utx;

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
            MyEntity entity = new MyEntity("test entity");
            //try...
            utx.begin();
            em.persist(entity);
            utx.commit();
            //catch...
    }
}

问题是注入了UserTransaction对象的相同实例。它是好的还是应该以不同的方式完成? UserTransaction是线程安全的吗? 当我使用BMT EJB时,总是注入相同的UserTransaction实例,所以我认为它是,但我想确定它是如何工作的。

(我知道EJB,@ Transactal,我不应该将业务逻辑添加到servlet等,但是我要问这个用例)

0 个答案:

没有答案