zer*_*021 8 java persistence ejb transactions jax-rs
我在无状态EJB中使用2 PU,并且在一个方法上调用它们:
@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;
}
Run Code Online (Sandbox Code Playgroud)
这些方法使用REQUIRES_NEW transcaction注释以避免此异常.当我从javaFX applet调用这些方法时,所有方法都按预期工作.现在我试图从JAX-RS webservice调用它们(我没有看到任何逻辑上的区别,因为在初始上下文中查找了ejb两种情况)并且我一直得到这个异常.当我在glassfish 2.1连接池中设置XADatasource时,我在em2上得到了nullpointer异常.
任何想法接下来要尝试什么?
问候
好,
它现在已经解决了.我将分享以防万一有人被类似的事情处理.整个问题在于netbeans部署.它们会覆盖glassfish连接池中的设置,当你在运行时正确设置它们时,你会得到npe或缺少密码的傻东西.编辑它的地方是sun-resources.xml.XML元素具有datasource-classname和rs-type属性.在Derby数据库中需要做的是:
<jdbc-connection-pool ...
datasource-classname="org.apache.derby.jdbc.ClientXADataSource"
res-type="javax.sql.XADataSource">
...
</jdbc-connection-pool>
Run Code Online (Sandbox Code Playgroud)
现在就像一个魅力.