我在无状态EJB使用2 PU和他们每个人的调用一个方法:如何防止“本地事务已有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 applet调用这些方法时,所有方法都按预期工作。现在我试图从JAX-RS webservice中调用它们(我没有看到任何逻辑上的差异,因为在这两种情况下,ejb都是在初始上下文中查找的),并且我不断收到此异常。当我在glassfish 2.1连接池中设置XADatasource时,em2上出现空指针异常。
任何想法接下来要尝试什么?
的问候,我在无状态EJB使用2 PU
另请参阅http://stackoverflow.com/questions/2413911/if-i-access-usertransaction-does-this-mean-that-i-use-2-phase-commit-or-xa/2425585#2425585 – ewernli 2010-04-22 06:27:09