Я использую 2 PU в безгосударственного EJB и каждый из них вызывается на один метод:Как предотвратить «Локальная транзакция уже имеет 1 исключение не-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;
}
Эти методы с аннотацией REQUIRES_NEW transcaction, чтобы избежать этого исключения. Когда я вызывал этот метод из javaFX-апплета, все работало так, как ожидалось. Теперь я пытаюсь назвать их из JAX-RS webservice (я не вижу никакой логической разницы, так как в обоих случаях ejb просматривался в исходном контексте), и я продолжаю получать это исключение. Когда я установил XADatasource в пулах соединений Glassfish 2.1, я получил исключение nullpointer на em2.
Любые идеи, что попробовать дальше?
С уважением
См. Также http://stackoverflow.com/questions/2413911/if-i-access-usertransaction-does-this-mean-that-i-use-2-phase-commit-or-xa/2425585#2425585 – ewernli