对于任何人碰到这个绊脚石就可以启动一个过滤器内部的@RequestScope:
public class WeldRequestScopeFilter implements Filter {
private static final Logger logger = LoggerFactory.getLogger(
WeldRequestScopeFilter.class.getSimpleName());
@Override
public void destroy() {
logger.trace("Filter destroyed");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
final String url = ((HttpServletRequest) request).getRequestURL()
.toString();
final Map<String, Object> requestDataStore = new HashMap<>(10);
final WeldContainer WELD = WeldContainer
.instance(Application.WELD_CONTAINER_ID);
final BoundRequestContext requestContext = WELD
.select(BoundRequestContext.class).get();
logger.info("Activating @RequestScoped for request on {}", url);
requestContext.associate(requestDataStore);
requestContext.activate();
chain.doFilter(request, response);
logger.info("Deactivating @RequestScoped for request on {}", url);
requestContext.invalidate();
requestContext.deactivate();
requestContext.dissociate(requestDataStore);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
logger.trace("Filter initialized");
}
}