// for each cache-mapping, create CacheMapping, setup the filter
for (int i = 0; i < cacheConfig.sizeCacheMapping(); i++) {
org.glassfish.web.deployment.runtime.CacheMapping
mapConfig = cacheConfig.getCacheMapping(i);
CacheMapping mapping = new CacheMapping();
configureCacheMapping(mapConfig, mapping, logger);
// use filter's name to refer to setup the filter
String filterName = CACHING_FILTER_CLASSNAME + i;
/**
* all cache-mapings are indexed by the unique filter-name;
* DefaultCacheHelper uses this name to access the mapping.
*/
manager.addCacheMapping(filterName, mapping);
// setup the ias CachingFilter definition with the context
FilterDef filterDef = new FilterDef();
filterDef.setFilterName(filterName);
filterDef.setFilterClassName(CACHING_FILTER_CLASSNAME);
if (mapping.getServletName() != null) {
filterDef.addInitParameter("servletName",
mapping.getServletName());
}
if (mapping.getURLPattern() != null) {
filterDef.addInitParameter("URLPattern",
mapping.getURLPattern());
}
app.addFilterDef(filterDef);
// setup the mapping for the specified servlet-name or url-pattern
FilterMap filterMap = new FilterMap();
filterMap.setServletName(mapping.getServletName());
filterMap.setURLPattern(mapping.getURLPattern());
String[] dispatchers = mapConfig.getDispatcher();
if (dispatchers != null) {
EnumSet<DispatcherType> dispatcherTypes = null;
for (String dispatcher : dispatchers) {
// calls to FilterMap.setDispatcher are cumulative
if (dispatcherTypes == null) {
dispatcherTypes = EnumSet.of(
Enum.valueOf(DispatcherType.class, dispatcher));
} else {
dispatcherTypes.add(
Enum.valueOf(DispatcherType.class, dispatcher));
}
}
filterMap.setDispatcherTypes(dispatcherTypes);
}
filterMap.setFilterName(filterName);
app.addFilterMap(filterMap);
if (logger.isLoggable(Level.FINE)) {
logger.log(Level.FINE,
CACHING_FILTER_ADDED,
new Object[] {mapping.getServletName(), mapping.getURLPattern()});
}
}
manager.setServletContext(app.getServletContext());
return manager;