我在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使用访问。