public void contextDestroyed(ServletContextEvent event) { Log4jWebConfigurer.shutdownLogging(event.getServletContext()); }
public void afterPropertiesSet() { // ToDo Instead of stdout, use servletContext.log( "...") [NOTE: it writes to localhost.*.log // rather than catalina.out]. if (servletContext == null) throw new IllegalArgumentException("ServletContext must not be null."); // ToDo LOOK - Are we still using this. ServletUtil.initDebugging(servletContext); // Set the webapp name. this.webappName = servletContext.getServletContextName(); // Set the context path. // Servlet 2.5 allows the following. // contextPath = servletContext.getContextPath(); String tmpContextPath = servletContext.getInitParameter( "ContextPath"); // cannot be overridden in the ThreddsConfig file if (tmpContextPath == null) tmpContextPath = "thredds"; contextPath = "/" + tmpContextPath; // ToDo LOOK - Get rid of need for setting contextPath in ServletUtil. ServletUtil.setContextPath(contextPath); // Set the root directory and source. String rootPath = servletContext.getRealPath("/"); if (rootPath == null) { String msg = "Webapp [" + this.webappName + "] must run with exploded deployment directory (not from .war)."; System.out.println("ERROR - TdsContext.init(): " + msg); // logServerStartup.error( "TdsContext.init(): " + msg ); throw new IllegalStateException(msg); } this.rootDirectory = new File(rootPath); this.rootDirSource = new BasicDescendantFileSource(this.rootDirectory); this.rootDirectory = this.rootDirSource.getRootDirectory(); // ToDo LOOK - Get rid of need for setting rootPath in ServletUtil. ServletUtil.setRootPath(this.rootDirSource.getRootDirectoryPath()); // Set the startup (initial install) content directory and source. this.startupContentDirectory = new File(this.rootDirectory, this.startupContentPath); this.startupContentDirSource = new BasicDescendantFileSource(this.startupContentDirectory); this.startupContentDirectory = this.startupContentDirSource.getRootDirectory(); this.webinfPath = this.rootDirectory + "/WEB-INF"; // set the tomcat logging directory try { String base = System.getProperty("catalina.base"); if (base != null) { this.tomcatLogDir = new File(base, "logs").getCanonicalFile(); if (!this.tomcatLogDir.exists()) { String msg = "'catalina.base' directory not found"; System.out.println("WARN - TdsContext.init(): " + msg); // logServerStartup.error( "TdsContext.init(): " + msg ); } } else { String msg = "'catalina.base' property not found - probably not a tomcat server"; System.out.println("WARN - TdsContext.init(): " + msg); // logServerStartup.warn( "TdsContext.init(): " + msg ); } } catch (IOException e) { String msg = "tomcatLogDir could not be created"; System.out.println("WARN - TdsContext.init(): " + msg); // logServerStartup.error( "TdsContext.init(): " + msg ); } // Set the content directory and source. File contentRootDir = new File(this.contentRootPath); if (!contentRootDir.isAbsolute()) this.contentDirectory = new File(new File(this.rootDirectory, this.contentRootPath), this.contentPath); else { if (contentRootDir.isDirectory()) this.contentDirectory = new File(contentRootDir, this.contentPath); else { String msg = "Content root directory [" + this.contentRootPath + "] not a directory."; System.out.println("ERROR - TdsContext.init(): " + msg); // logServerStartup.error( "TdsContext.init(): " + msg ); throw new IllegalStateException(msg); } } // If the content directory doesn't exist, try to copy startup content directory. if (!this.contentDirectory.exists()) { try { IO.copyDirTree(this.startupContentDirectory.getPath(), this.contentDirectory.getPath()); } catch (IOException e) { String tmpMsg = "Content directory does not exist and could not be created"; System.out.println( "ERROR - TdsContext.init(): " + tmpMsg + " [" + this.contentDirectory.getAbsolutePath() + "]."); // logServerStartup.error( "TdsContext.init(): " + tmpMsg + " [" + // this.contentDirectory.getAbsolutePath() + "]" ); throw new IllegalStateException(tmpMsg); } } // If content directory exists, make sure it is a directory. if (this.contentDirectory.isDirectory()) { this.contentDirSource = new BasicDescendantFileSource( StringUtils.cleanPath(this.contentDirectory.getAbsolutePath())); this.contentDirectory = this.contentDirSource.getRootDirectory(); } else { String tmpMsg = "Content directory not a directory"; System.out.println( "ERROR - TdsContext.init(): " + tmpMsg + " [" + this.contentDirectory.getAbsolutePath() + "]."); // logServerStartup.error( "TdsContext.init(): " + tmpMsg + " [" + // this.contentDirectory.getAbsolutePath() + "]" ); throw new IllegalStateException(tmpMsg); } ServletUtil.setContentPath(this.contentDirSource.getRootDirectoryPath()); File logDir = new File(this.contentDirectory, "logs"); if (!logDir.exists()) { if (!logDir.mkdirs()) { String msg = "Couldn't create TDS log directory [" + logDir.getPath() + "]."; // System.out.println( "ERROR - TdsContext.init(): " + msg); logServerStartup.error("TdsContext.init(): " + msg); throw new IllegalStateException(msg); } } String loggingDirectory = StringUtil2.substitute(logDir.getPath(), "\\", "/"); System.setProperty("tds.log.dir", loggingDirectory); // variable substitution // LOOK Remove log4j init JC 6/13/2012 // which is used in log4j.xml file loaded here. Log4jWebConfigurer.initLogging(servletContext); logServerStartup.info("TdsConfigContextListener.contextInitialized() start[2]: "); logServerStartup.info("TdsContext.init() intializating logging..."); // read in persistent user-defined params from threddsConfig.xml File tdsConfigFile = this.contentDirSource.getFile(this.getTdsConfigFileName()); String tdsConfigFilename = tdsConfigFile != null ? tdsConfigFile.getPath() : ""; ThreddsConfig.init(tdsConfigFilename); this.publicContentDirectory = new File(this.contentDirectory, "public"); if (!publicContentDirectory.exists()) { if (!publicContentDirectory.mkdirs()) { String msg = "Couldn't create TDS public directory [" + publicContentDirectory.getPath() + "]."; // System.out.println( "ERROR - TdsContext.init(): " + msg); logServerStartup.error("TdsContext.init(): " + msg); throw new IllegalStateException(msg); } } this.publicContentDirSource = new BasicDescendantFileSource(this.publicContentDirectory); this.iddContentDirectory = new File(this.rootDirectory, this.iddContentPath); this.iddContentPublicDirSource = new BasicDescendantFileSource(this.iddContentDirectory); this.motherlodeContentDirectory = new File(this.rootDirectory, this.motherlodeContentPath); this.motherlodeContentPublicDirSource = new BasicDescendantFileSource(this.motherlodeContentDirectory); List<DescendantFileSource> chain = new ArrayList<DescendantFileSource>(); DescendantFileSource contentMinusPublicSource = new BasicWithExclusionsDescendantFileSource( this.contentDirectory, Collections.singletonList("public")); chain.add(contentMinusPublicSource); for (String curContentRoot : ThreddsConfig.getContentRootList()) { if (curContentRoot.equalsIgnoreCase("idd")) chain.add(this.iddContentPublicDirSource); else if (curContentRoot.equalsIgnoreCase("motherlode")) chain.add(this.motherlodeContentPublicDirSource); else { try { chain.add(new BasicDescendantFileSource(StringUtils.cleanPath(curContentRoot))); } catch (IllegalArgumentException e) { String msg = "Couldn't add content root [" + curContentRoot + "]: " + e.getMessage(); // System.out.println( "WARN - TdsContext.init(): " + msg ); logServerStartup.warn("TdsContext.init(): " + msg, e); } } } this.configSource = new ChainedFileSource(chain); this.publicDocSource = this.publicContentDirSource; // ToDo LOOK Find a better way once thredds.catalog2 is used. InvDatasetScan.setContext(contextPath); InvDatasetScan.setCatalogServletName("/catalog"); InvDatasetFeatureCollection.setContext(contextPath); // GridServlet.setContextPath( contextPath ); // Won't need when switch GridServlet to use Swing // MVC and TdsContext jspRequestDispatcher = servletContext.getNamedDispatcher("jsp"); defaultRequestDispatcher = servletContext.getNamedDispatcher("default"); TdsConfigMapper tdsConfigMapper = new TdsConfigMapper(); tdsConfigMapper.setTdsServerInfo(this.serverInfo); tdsConfigMapper.setHtmlConfig(this.htmlConfig); tdsConfigMapper.setWmsConfig(this.wmsConfig); tdsConfigMapper.init(this); }
public void contextInitialized(ServletContextEvent event) { Log4jWebConfigurer.initLogging(event.getServletContext()); }