2013-07-30 12 views
5

我正在開發一個使用Glassfish 4.0的REST應用程序。GlassFish 4 + JAX-RS過濾器@EJB

在資源類中,我可以通過使@Stateless類和通過@EJB(注入類是無狀態的EJB)注入來獲得注入的工作。

但是,這種方法在JAX-RS過濾器中不起作用。我根本無法注射。

見下面的代碼:

@Provider 
public class UpdateFilter implements ContainerRequestFilter { 

    @EJB 
    private MyBeanInterface doStuffBean; 

    @Override 
    public void filter(ContainerRequestContext requestContext) { 

     ... 
    } 
} 

doStuffBean總是空。

有什麼建議嗎?

回答

1

我相信@EJB只能在像其他EJB和Servlet一樣的Java EE託管類中工作。

如果您正在使用CDI,則可以使用@Inject註釋,但如果此類不是ManagedBean,則需要執行查找。

+0

@Inject不起作用。引發異常:** UnsatisfiedDependencyException:沒有可用於注入的對象... **。 – bafitor

+0

那是因爲你的類不是託管bean。我不確定是否可以將此Provider設置爲ManagedBean,因此您可能將不得不創建自己的生產者來執行EJB查找,然後您可以在任何地方注入(有大量文章顯示如何執行此操作),或者您只能在這個班上做查找。 – ZeusSelerim

0

嘗試使用CDI替換@Stateless by @ManagedBean和@EJB by @Inject。這在JAX-RS中適用於我。

如果您需要使用EJB來處理注入以外的其他事情,那麼可能會爲您保留雙註釋@Stateless @ManagedBean。

+0

我嘗試了兩種解決方案,但不起作用。我得到了一個** UnsatisfiedDependencyException:沒有可用於注入的對象。**。任何想法? – bafitor

+1

我以前沒有見過GF3,所以可能是GF4的一個問題。 https://java.net/jira/browse/GLASSFISH-20597表示它已在v4.0.1中修復 - 您正在使用的版本是?如果沒有,你可以嘗試一些解決方法建議在http://stackoverflow.com/questions/16216759/dependency-injection-with-jersey-2-0你嘗試刪除@Stateless或你需要它嗎? – TheArchitect