如何将EJB注入ResourceFilterFactory(Jersey)

时间:2012-11-27 12:22:20

标签: java ejb jersey

我似乎无法通过@EJB@Inject向泽西岛注入任何内容。当我在FilterFactory中使用@ EJB / @Inject时,该字段保持为null,但是注入其他bean工作正常。

可以使用@Context成功注入FIlterFacory。

我在这里缺少什么?

public class FilterFactory implements ResourceFilterFactory{

    @EJB
    private MyFilter myFilter ;

    @Override 
    public List<ResourceFilter> create(AbstractMethod am) {
        List<ResourceFilter> filters = new ArrayList<ResourceFilter>();
        filters.add(myFilter);
        return filters;
    }

我的web.xml的一部分:

<init-param>
     <param-name>com.sun.jersey.spi.container.ResourceFilters</param-name>
     <param-value>com.jea.openxchange.rest.filter.FilterFactory</param-value>
</init-param>

我的过滤器

@Stateless
public class MyFilter implements ResourceFilter,ContainerResponseFilter  {

    @Override
    public ContainerResponse filter(ContainerRequest request, ContainerResponse response) {
        //todo
        return response;
    }

    @Override
    public ContainerRequestFilter getRequestFilter() {
        return null;
    }

    @Override
    public ContainerResponseFilter getResponseFilter() {
        return this;
    }  
}

1 个答案:

答案 0 :(得分:1)

这可能是Jersey如何创建FilterFactory实例的问题。如果它不是由容器创建的,则CDI将不起作用,@EJB也不会。根据Java EE6 CDI规范,由new或反射创建的对象不受管理,因此不会发生注入。新的CDI规范将解决这个问题。