我需要在EJB 3无状态SessionBean(CMT,JBoss版本5)中回滚,我正在使用
sessionContext.setRollbackOnly();
使用@Resource注释注入此sessionContext。我的问题: 1)在EJB3中回滚是首选的方式吗?
2)如果我使用公共二传手注射,为什么Jboss会抱怨部署
// throws exception on deployment.
private SessionContext sessionContext;
@Resource
public void setSessionContext(SessionContext sessionContext) {
this.sessionContext = sessionContext;
}
但是以下工作正常:
@Resource
private SessionContext sessionContext;
以下是第一种情况的例外情况:
javax.ejb.SessionContext is an interface, and JAXB can't handle interfaces.
this problem is related to the following location:
at javax.ejb.SessionContext
at public javax.ejb.SessionContext invoice.sap.service.jaxws.SetSctx.arg0
at invoice.sap.service.jaxws.SetSctx
javax.ejb.SessionContext does not have a no-arg default constructor.
this problem is related to the following location:
at javax.ejb.SessionContext
答案 0 :(得分:6)
我认为EJB是@WebService,这就是你得到JAXB错误的原因。尝试:
@Resource
@WebMethod(exclude=true)
public void setSessionContext(SessionContext sessionContext) {
this.sessionContext = sessionContext;
}
或者,更改方法可见性或添加最终修饰符(仅公共非最终非静态方法是webservices方法)。
答案 1 :(得分:3)
1)是的
2)Dunno,也许是一个bug,也许已被弃用了。我已经浏览了EJB 3.1规范,在那里我只看到@Resource SessionContext sessionContext
表单,而EJB 3.0规范也显示了setter注入。