use of org.apache.sling.engine.impl.helper.SlingServletContext in project sling by apache.
the class SlingMainServlet method activate.
// ---------- Property Setter for SCR --------------------------------------
@Activate
protected void activate(final BundleContext bundleContext, final Map<String, Object> componentConfig, final Config config) {
final String[] props = config.sling_additional_response_headers();
if (props != null) {
final ArrayList<StaticResponseHeader> mappings = new ArrayList<>(props.length);
for (final String prop : props) {
if (prop != null && prop.trim().length() > 0) {
try {
final StaticResponseHeader mapping = new StaticResponseHeader(prop.trim());
mappings.add(mapping);
} catch (final IllegalArgumentException iae) {
log.info("configure: Ignoring '{}': {}", prop, iae.getMessage());
}
}
}
RequestData.setAdditionalResponseHeaders(mappings);
}
configuredServerInfo = config.sling_serverinfo();
// setup server info
setProductInfo(bundleContext);
// prepare the servlet configuration from the component config
final Hashtable<String, Object> configuration = new Hashtable<>(componentConfig);
// ensure the servlet name
if (!(configuration.get("servlet-name") instanceof String)) {
configuration.put("servlet-name", this.productInfo);
}
// configure method filter
allowTrace = config.sling_trace_allow();
// configure the request limits
RequestData.setMaxIncludeCounter(config.sling_max_inclusions());
RequestData.setMaxCallCounter(config.sling_max_calls());
RequestData.setSlingMainServlet(this);
// Warn about the obsolete parameter encoding configuration
if (componentConfig.get(DEPRECATED_ENCODING_PROPERTY) != null) {
log.warn("Please configure the default request parameter encoding using " + "the 'org.apache.sling.engine.parameters' configuration PID; the property " + DEPRECATED_ENCODING_PROPERTY + "=" + componentConfig.get(DEPRECATED_ENCODING_PROPERTY) + " is obsolete and ignored");
}
// register the servlet context
final Dictionary<String, String> contextProperties = new Hashtable<>();
contextProperties.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_NAME, SERVLET_CONTEXT_NAME);
contextProperties.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_PATH, SLING_ROOT);
contextProperties.put(Constants.SERVICE_DESCRIPTION, "Apache Sling Engine Servlet Context Helper");
contextProperties.put(Constants.SERVICE_VENDOR, "The Apache Software Foundation");
this.contextRegistration = bundleContext.registerService(ServletContextHelper.class, this.slingHttpContext, contextProperties);
// register the servlet
final Dictionary<String, String> servletConfig = toStringConfig(configuration);
servletConfig.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_SELECT, "(" + HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_NAME + "=" + SERVLET_CONTEXT_NAME + ")");
servletConfig.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_PATTERN, SLING_ROOT);
servletConfig.put(Constants.SERVICE_DESCRIPTION, "Apache Sling Engine Main Servlet");
servletConfig.put(Constants.SERVICE_VENDOR, "The Apache Software Foundation");
this.servletRegistration = bundleContext.registerService(Servlet.class, this, servletConfig);
log.info("{} ready to serve requests", this.getServerInfo());
// now that the sling main servlet is registered with the HttpService
// and initialized we can register the servlet context
slingServletContext = new SlingServletContext(bundleContext, this);
// register render filters already registered after registration with
// the HttpService as filter initialization may cause the servlet
// context to be required (see SLING-42)
filterManager = new ServletFilterManager(bundleContext, slingServletContext);
filterManager.open();
requestProcessor.setFilterManager(filterManager);
// initialize requestListenerManager
requestListenerManager = new RequestListenerManager(bundleContext, slingServletContext);
// Setup configuration printer
this.printerRegistration = WebConsoleConfigPrinter.register(bundleContext, filterManager);
// setup the request info recorder
try {
int maxRequests = config.sling_max_record_requests();
String[] patterns = config.sling_store_pattern_requests();
if (patterns == null)
patterns = new String[0];
List<Pattern> compiledPatterns = new ArrayList<>(patterns.length);
for (String pattern : patterns) {
if (pattern != null && pattern.trim().length() > 0) {
compiledPatterns.add(Pattern.compile(pattern));
}
}
RequestHistoryConsolePlugin.initPlugin(bundleContext, maxRequests, compiledPatterns);
} catch (Throwable t) {
log.debug("Unable to register web console request recorder plugin.", t);
}
try {
Dictionary<String, String> mbeanProps = new Hashtable<>();
mbeanProps.put("jmx.objectname", "org.apache.sling:type=engine,service=RequestProcessor");
RequestProcessorMBeanImpl mbean = new RequestProcessorMBeanImpl();
requestProcessorMBeanRegistration = bundleContext.registerService(RequestProcessorMBean.class, mbean, mbeanProps);
requestProcessor.setMBean(mbean);
} catch (Throwable t) {
log.debug("Unable to register mbean");
}
// provide the SlingRequestProcessor service
Hashtable<String, String> srpProps = new Hashtable<>();
srpProps.put(Constants.SERVICE_VENDOR, "The Apache Software Foundation");
srpProps.put(Constants.SERVICE_DESCRIPTION, "Sling Request Processor");
requestProcessorRegistration = bundleContext.registerService(SlingRequestProcessor.class, requestProcessor, srpProps);
}
Aggregations