Инъекция SessionContext с использованием аннотации @Resource - PullRequest
2 голосов
/ 04 апреля 2011

Мне нужно выполнить откат в EJB 3 Stateless SessionBean (CMT, JBoss версии 5), для которого я использую

sessionContext.setRollbackOnly();

Этот sessionContext внедряется с использованием аннотации @Resource.Мои вопросы: 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

Ответы [ 2 ]

6 голосов
/ 04 апреля 2011

Я предполагаю, что EJB - это @WebService, поэтому вы получаете ошибки JAXB. Попробуйте:

@Resource
@WebMethod(exclude=true)
public void setSessionContext(SessionContext sessionContext) {
    this.sessionContext = sessionContext;
}

Либо измените видимость метода или добавьте окончательный модификатор (только общедоступные не окончательные нестатические методы являются методами веб-сервисов).

3 голосов
/ 04 апреля 2011

1) да

2) Не знаю, возможно, ошибка, возможно, устарела.Я просмотрел спецификацию EJB 3.1 и там увидел только форму @Resource SessionContext sessionContext, в то время как спецификация EJB 3.0 также показала инъекцию сеттера.

...