我在JBoss AS 7.1.1环境中使用RestEasy。

出于安全原因,我实现了PreProcessInterceptor类。该类使用@Provider和@ServerInterceptor进行注释。
拦截器每次都被调用,这很好。

现在,困扰我的是以下内容。

我将带有@EJB注释的EJB注入到类中。调用PreProcessInterceptor时,该EJB始终为 null

@Provider
@ServerInterceptor
public class SecurityInterceptor implements PreProcessInterceptor
{
    @EJB
    private SomeEjb someEjbServiceFacade;

    ... some funny stuff
}

该EJB如下所示:
@Stateless
public class SomeEjb extends AbstractServiceFacade
{
    ... some important stuff
}

有趣的是,它通过查找工作:
Context ctx = new InitialContext();
SomeEjb asf = ( SomeEjb )ctx.lookup("java:global/mySuperApplication/SomeEjb" );

有人对此行为有解释吗?

提前致谢。

最佳答案

您不能在任意类中注入EJB,而只能以指定的类型注入EJB,例如Servlet,Filter,Listener,Stateless,Statefull,MessageDriven bean,Singleton。如果您想在其他类型的类中使用EJB,则如上所述,通过JNDI使用访问。

07-22 07:59