簡體   English   中英

使用@Resource注釋的SessionContext注入

[英]SessionContext Injection using @Resource annotation

我需要回滾EJB 3無狀態SessionBean(CMT,JBoss版本5),我正在使用它

sessionContext.setRollbackOnly();

使用@Resource注釋注入此sessionContext。 我的問題:1)在EJB3中回滾是首選方式嗎?

2)如果我使用公共setter注入,為什么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

我假設EJB是一個@WebService,這就是你得到JAXB錯誤的原因。 嘗試:

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

或者,更改方法可見性或添加最終修飾符(僅公共非最終非靜態方法是webservices方法)。

1)是的

2)Dunno,也許是一個bug,也許已經棄用了。 我瀏覽了EJB 3.1規范,在那里我只看到了@Resource SessionContext sessionContext表單,而EJB 3.0規范也顯示了setter注入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM