Glassfish 玻璃鱼4号&x2B;带有@EJB的JAX-RS过滤器

Glassfish 玻璃鱼4号&x2B;带有@EJB的JAX-RS过滤器,glassfish,ejb,jersey,jax-rs,Glassfish,Ejb,Jersey,Jax Rs,我正在使用Glassfish 4.0开发一个REST应用程序 在资源类中,我可以通过使类@Stateless和通过@EJB进行注入(注入的类是无状态EJB)来实现注入 然而,这种方法在JAX-RS过滤器中不起作用。我根本无法注射到工作中去 见下面的代码: @Provider public class UpdateFilter implements ContainerRequestFilter { @EJB private MyBeanInterface doStuffBean;

我正在使用Glassfish 4.0开发一个REST应用程序

在资源类中,我可以通过使类@Stateless和通过@EJB进行注入(注入的类是无状态EJB)来实现注入

然而,这种方法在JAX-RS过滤器中不起作用。我根本无法注射到工作中去

见下面的代码:

@Provider
public class UpdateFilter implements ContainerRequestFilter {

    @EJB
    private MyBeanInterface doStuffBean;

    @Override
    public void filter(ContainerRequestContext requestContext) {

        ...
    }
}
doStuffBean始终为空。


有什么建议吗?

我相信@EJB只适用于javaee管理的类,就像其他EJB和servlet一样


如果您使用的是CDI,则可以使用@Inject注释,但如果该类不是ManagedBean,则需要进行查找。

尝试使用CDI,将@Stateless替换为@ManagedBean,将@EJB替换为@Inject。这在JAX-RS中对我很有效


如果您需要EJB来完成注入以外的其他工作,则可以保留双注释@Stateless@ManagedBean。

我尝试了这两种解决方案,但都不起作用。我得到了一个不满意的异常:没有可供注入的对象。。有什么想法吗?我以前在GF3上没见过这个,所以可能是GF4出了问题。表示它在v4.0.1中已修复-这是您正在使用的版本吗?如果没有,您可以尝试一些解决方案建议。您是否尝试删除@Stateless或是否需要它?@Inject不起作用。引发了一个异常:UnsatifiedPendencyException:没有可用于注入的对象……这是因为您的类不是托管bean。我不确定是否可以将此提供程序设置为ManagedBean,因此您可能必须创建自己的生产者来执行EJB查找,然后您可以在任何地方进行注入(有很多文章介绍了如何执行此操作),或者您可以在这个类中执行查找。