Tôi đang sử dụng 2 PU trong EJB stateless và mỗi người trong số họ được gọi vào một phương pháp:Làm cách nào để ngăn chặn "Giao dịch địa phương đã có 1 ngoại lệ" không phải XA?
@PersistenceContext(unitName="PU")
private EntityManager em;
@PersistenceContext(unitName="PU2")
private EntityManager em2;
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void getCandidates(final Integer eventId) throws ControllerException {
ElectionEvent electionEvent = em.find(ElectionEvent.class, eventId);
...
Person person = getPerson(candidate.getLogin());
...
}
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
private Person getPerson(String login) throws ControllerException {
Person person = em2.find(Person.class, login);
return person;
}
Những phương pháp được chú thích với REQUIRES_NEW transcaction để tránh ngoại lệ này. Khi tôi gọi phương thức này từ applet javaFX, tất cả đều hoạt động như mong đợi. Bây giờ tôi đang cố gắng gọi chúng từ JAX-RS webservice (tôi không thấy bất kỳ sự khác biệt hợp lý nào như trong cả hai trường hợp ejb được tra cứu trong ngữ cảnh ban đầu) và tôi tiếp tục nhận được ngoại lệ này. Khi tôi thiết lập XADatasource trong các pool kết nối glassfish 2.1, tôi có ngoại lệ nullpointer trên em2.
Bất kỳ ý tưởng nào cần thử tiếp theo?
Trân
Xem thêm http://stackoverflow.com/questions/2413911/if-i-access-usertransaction-does-this-mean-that-i-use-2-phase-commit-or-xa/2425585#2425585 – ewernli