protected void configureContextXmlAttribute( WebappClassLoader cloader, File base, DeploymentContext dc) throws XMLStreamException, IOException { boolean consistent = true; Boolean value = null; File warContextXml = new File(base.getAbsolutePath(), WAR_CONTEXT_XML); if (warContextXml.exists()) { ContextXmlParser parser = new ContextXmlParser(warContextXml); value = parser.getClearReferencesStatic(); } if (value == null) { Boolean domainCRS = null; File defaultContextXml = new File(serverEnvironment.getInstanceRoot(), DEFAULT_CONTEXT_XML); if (defaultContextXml.exists()) { ContextXmlParser parser = new ContextXmlParser(defaultContextXml); domainCRS = parser.getClearReferencesStatic(); } List<Boolean> csrs = new ArrayList<Boolean>(); HttpService httpService = serverConfig.getHttpService(); DeployCommandParameters params = dc.getCommandParameters(DeployCommandParameters.class); String vsIDs = params.virtualservers; List<String> vsList = StringUtils.parseStringList(vsIDs, " ,"); if (httpService != null && vsList != null && !vsList.isEmpty()) { for (VirtualServer vsBean : httpService.getVirtualServer()) { if (vsList.contains(vsBean.getId())) { Boolean csr = null; Property prop = vsBean.getProperty("contextXmlDefault"); if (prop != null) { File contextXml = new File(serverEnvironment.getInstanceRoot(), prop.getValue()); if (contextXml.exists()) { // vs context.xml ContextXmlParser parser = new ContextXmlParser(contextXml); csr = parser.getClearReferencesStatic(); } } if (csr == null) { csr = domainCRS; } csrs.add(csr); } } // check that it is consistent for (Boolean b : csrs) { if (b != null) { if (value != null && !b.equals(value)) { consistent = false; break; } value = b; } } } } if (consistent) { if (value != null) { cloader.setClearReferencesStatic(value); } } else if (logger.isLoggable(Level.WARNING)) { logger.log(Level.WARNING, INCONSISTENT_CLEAR_REFERENCE_STATIC); } }
@Override public ClassLoader getClassLoader(final ClassLoader parent, DeploymentContext context) { WebappClassLoader cloader = AccessController.doPrivileged( new PrivilegedAction<WebappClassLoader>() { @Override public WebappClassLoader run() { return new WebappClassLoader(parent); } }); try { WebDirContext r = new WebDirContext(); File base = new File(context.getSource().getURI()); r.setDocBase(base.getAbsolutePath()); cloader.setResources(r); cloader.addRepository("WEB-INF/classes/", new File(base, "WEB-INF/classes/")); if (context.getScratchDir("ejb") != null) { cloader.addRepository(context.getScratchDir("ejb").toURI().toURL().toString().concat("/")); } if (context.getScratchDir("jsp") != null) { cloader.setWorkDir(context.getScratchDir("jsp")); } // add libraries referenced from manifest for (URL url : getManifestLibraries(context)) { cloader.addRepository(url.toString()); } WebXmlParser webXmlParser = getWebXmlParser(context.getSource()); configureLoaderAttributes(cloader, webXmlParser, base); configureLoaderProperties(cloader, webXmlParser, base); configureContextXmlAttribute(cloader, base, context); try { final DeploymentContext dc = context; final ClassLoader cl = cloader; AccessController.doPrivileged( new PermsArchiveDelegate.SetPermissionsAction( SMGlobalPolicyUtil.CommponentType.war, dc, cl)); } catch (PrivilegedActionException e) { throw new SecurityException(e.getException()); } } catch (XMLStreamException xse) { logger.log(Level.SEVERE, xse.getMessage()); if (logger.isLoggable(Level.FINE)) { logger.log(Level.FINE, xse.getMessage(), xse); } xse.printStackTrace(); } catch (IOException ioe) { logger.log(Level.SEVERE, ioe.getMessage()); if (logger.isLoggable(Level.FINE)) { logger.log(Level.FINE, ioe.getMessage(), ioe); } ioe.printStackTrace(); } cloader.start(); return cloader; }