private void validateServletTags( TreeLogger logger, ServletValidator servletValidator, ServletWriter servletWriter, ModuleDef module) { String[] servletPaths = module.getServletPaths(); if (servletPaths.length == 0) { return; } TreeLogger servletLogger = logger.branch( TreeLogger.DEBUG, "Validating <servlet> tags for module '" + module.getName() + "'", null, new InstalledHelpInfo("servletMappings.html")); for (String servletPath : servletPaths) { String servletClass = module.findServletForPath(servletPath); assert (servletClass != null); // Prefix module name to convert module mapping to global mapping. servletPath = "/" + module.getName() + servletPath; if (servletValidator == null) { servletWriter.addMapping(servletClass, servletPath); } else { servletValidator.validate(servletLogger, servletClass, servletPath); } } }
@Override protected boolean doStartup() { // Background scan the classpath to warm the cache. Thread scanThread = new Thread( new Runnable() { public void run() { ResourceOracleImpl.preload(TreeLogger.NULL); } }); scanThread.setDaemon(true); scanThread.setPriority((Thread.MIN_PRIORITY + Thread.NORM_PRIORITY) / 2); scanThread.start(); File persistentCacheDir = null; if (options.getWarDir() != null && !options.getWarDir().getName().endsWith(".jar")) { persistentCacheDir = new File(options.getWarDir(), "../"); } if (!super.doStartup(persistentCacheDir)) { return false; } ServletValidator servletValidator = null; ServletWriter servletWriter = null; File webXml = new File(options.getWarDir(), "WEB-INF/web.xml"); if (!options.isNoServer()) { if (webXml.exists()) { servletValidator = ServletValidator.create(getTopLogger(), webXml); } else { servletWriter = new ServletWriter(); } } TreeLogger branch = getTopLogger().branch(TreeLogger.TRACE, "Loading modules"); try { for (String moduleName : options.getModuleNames()) { TreeLogger moduleBranch = branch.branch(TreeLogger.TRACE, moduleName); ModuleDef module = loadModule(moduleBranch, moduleName, false); // Create a hard reference to the module to avoid gc-ing it until we // actually load the module from the browser. startupModules.put(module.getName(), module); if (!options.isNoServer()) { validateServletTags(moduleBranch, servletValidator, servletWriter, module); } } if (servletWriter != null) { servletWriter.realize(webXml); } } catch (IOException e) { getTopLogger().log(TreeLogger.WARN, "Unable to generate '" + webXml.getAbsolutePath() + "'"); } catch (UnableToCompleteException e) { // Already logged. return false; } return true; }