//======================================================================== //$Id: $ //Copyright 2006 Mort Bay Consulting Pty. Ltd. //------------------------------------------------------------------------ //Licensed under the Apache License, Version 2.0 (the "License"); //you may not use this file except in compliance with the License. //You may obtain a copy of the License at //http://www.apache.org/licenses/LICENSE-2.0 //Unless required by applicable law or agreed to in writing, software //distributed under the License is distributed on an "AS IS" BASIS, //WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. //See the License for the specific language governing permissions and //limitations under the License. //======================================================================== package org.jboss.jetty; import java.io.CharArrayWriter; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.jboss.logging.Logger; import org.eclipse.jetty.xml.XmlConfiguration; import org.w3c.dom.Element; /** * Jetty * * Extends the jetty Server class. * * TODO remove this class and apply jboss-web.xml configuration in * JettyService class instead. * * @author <a href="mailto:jules_gosnell@yahoo..com">Julian Gosnell </a> * @author <a href="mailto:andreas@jboss.org">Andreas Schaefer </a>. * * <p> * <b>20011201 andreas: </b> * <ul> * <li>Fixed fixURL() because it is to "Unix" centric. Right now the method looks for the last * part of the JAR URL (file:/...) which should be the JAR file name and add a "/." before them. * Now this should work for Windows as well (the problem with windows was that after "file:" came * the DRIVE LETTER which created a wrong URL). * </ul> */ public class Jetty extends org.eclipse.jetty.server.Server { protected static final Logger _log = Logger.getLogger("org.jboss.jetty"); JettyService _service; /** * the XML snippet */ String _xmlConfigString = null; /** * the XML snippet as a DOM element */ Element _configElement = null; //TODO move these to JettyDeployer? protected boolean _stopWebApplicationsGracefully = false; Jetty(JettyService service) { super(); _service = service; } public Element getConfigurationElement() { return _configElement; } /** * @param configElement XML fragment from jboss-service.xml */ public void setConfigurationElement(Element configElement) { // convert to an xml string to pass into Jetty's normal // configuration mechanism _configElement = configElement; try { DOMSource source = new DOMSource(configElement); CharArrayWriter writer = new CharArrayWriter(); StreamResult result = new StreamResult(writer); TransformerFactory factory = TransformerFactory.newInstance(); Transformer transformer = factory.newTransformer(); transformer.transform(source, result); _xmlConfigString = writer.toString(); // get rid of the first line, as this will be prepended by // the XmlConfiguration int index = _xmlConfigString.indexOf("?>"); if (index >= 0) { index += 2; while ((_xmlConfigString.charAt(index) == '\n') || (_xmlConfigString.charAt(index) == '\r')) index++; } _xmlConfigString = _xmlConfigString.substring(index); if (_log.isDebugEnabled()) _log.debug("Passing xml config to jetty:\n" + _xmlConfigString); setXMLConfiguration(_xmlConfigString); } catch (TransformerConfigurationException tce) { _log.error("Can't transform config Element -> xml:", tce); } catch (TransformerException te) { _log.error("Can't transform config Element -> xml:", te); } catch (Exception e) { _log.error("Unexpected exception converting configuration Element -> xml", e); } } /* * Actually perform the configuration @param xmlString */ private void setXMLConfiguration(String xmlString) { try { XmlConfiguration xmlConfigurator = new XmlConfiguration(xmlString); xmlConfigurator.configure(this); } catch (Exception e) { _log.error("problem configuring Jetty:", e); } } public String[] getCompileClasspath(ClassLoader cl) { return _service.getCompileClasspath(cl); } public boolean getStopWebApplicationsGracefully() { return _stopWebApplicationsGracefully; } public void setStopWebApplicationsGracefully(boolean graceful) { _stopWebApplicationsGracefully = graceful; } }