我想知道在下面这个场景中是否可以使用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等,但是我要问这个用例)