dependency injectionResourceFilter不起作用?

我有一堆JAX-RS资源,为新的WebService提供API。 为了理解发生了什么,我想将有关每个请求的信息存储在数据仓库中。 在我看来,这是一个跨领域关注的完美例子,可以由ResourceFilter实现,对吗?

所以我构建了一个DataWarehouseService ,它应该在DB中存储东西:

 @Stateless @LocalBean public class DataWarehouseService { public void logApiCall(ContainerRequest cr) { // get interesting fields from request, store in DB ... } } 

这是我的filter:

 public class LoggingResourceFilter implements ResourceFilter { Logger log = Logger.getLogger(this.getClass().getName()); @EJB DataWarehouseService dwh; @Override public ContainerRequestFilter getRequestFilter() { return new ContainerRequestFilter() { @Override public ContainerRequest filter(ContainerRequest cr) { log.info("Incoming request: "+ cr.getHeaderValue("user-agent") +" "+ cr.getMethod() +" "+ cr.getPath() ); dwh.logApiRequest(cr); return cr; } }; } @Override public ContainerResponseFilter getResponseFilter() { return null; } } 

我通过类级别上的注释@ResourceFilters(LoggingResourceFilter.class)将filter注入到我的JAX-RS资源中。

Filter-injection工作正常,当我访问其中一个JAX-RS资源时,会执行日志语句(“Incoming request:…”)。 但紧接着,对注入的DataWarehouseServicedwh.logApiRequest(cr)的调用因dwh.logApiRequest(cr)失败 – 显然注入失败了?!

这有什么问题? 我想, ResourceFilters是管理的,可以使用CDI。 我错了吗?

所有这些都在Glassfish 3.1.1上运行,Jersey 1.8是JAX-RS提供商。 如果我使用@Inject会有所作为吗?

好吧,我是个白痴。

LoggingResourceFilter注释添加到LoggingResourceFilter修复它。