Java EJB在预处理器中为空
我正在JBossAS7.1.1环境中使用RestEasy 出于安全原因,我实现了一个预处理器类。该类使用@Provider和@ServerInterceptor进行注释。 拦截器每次都被调用,这很好 现在,困扰我的是以下几点 我将带有@EJB注释的EJB注入到类中。当调用预侦听器时,表示EJB总是nullJava EJB在预处理器中为空,java,jakarta-ee,jboss,ejb,interceptor,Java,Jakarta Ee,Jboss,Ejb,Interceptor,我正在JBossAS7.1.1环境中使用RestEasy 出于安全原因,我实现了一个预处理器类。该类使用@Provider和@ServerInterceptor进行注释。 拦截器每次都被调用,这很好 现在,困扰我的是以下几点 我将带有@EJB注释的EJB注入到类中。当调用预侦听器时,表示EJB总是null @Provider @ServerInterceptor public class SecurityInterceptor implements PreProcessInterceptor {
@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" );
有人对这种行为有什么解释吗
提前感谢。尝试向您的SecurityInterceptor
类添加注释。什么是注释
拦截器?
拦截器
与JavaEE管理的类结合使用,允许开发人员在相关目标类
上调用拦截器方法,并与方法调用或生命周期事件结合使用
下面的类SomeEjb
也应该可以被相关的目标类访问,即SecurityInterceptor
@Stateless
public class SomeEjb extends AbstractServiceFacade
{
... some important stuff
}
为此,我们需要在web.xml
的
中添加SecurityInterceptor
应该是这样的
<context-param>
<param-name>resteasy.providers</param-name>
<param-value>
....
com.myInterceptors.interceptors.security.SecurityInterceptor
</param-value>
</context-param>
resteasy.providers
....
com.myInterceptors.interceptors.security.SecurityInterceptor
您不能在任意类中注入EJB,只能在指定类型中注入EJB,例如Servlet、筛选器、侦听器、无状态、状态完整、消息驱动bean、单例。如果您想在其他类型的类中使用EJB,那么可以像上面指出的那样使用通过JNDI的访问。如果您使用的是CDI,那么您也可以使用@Observer
注释。您是否尝试过@Inject
?