User: dewayne
Date: 01/02/09 22:00:18
Modified: tomcat/src/main/org/jboss/tomcat EmbeddedTomcatService.java
EmbeddedTomcatServiceMBean.java
Log:
Removed port and configfile accessors because they are no longer needed.
Tomcat's server.xml is now parsed, so the information is obtained there.
Revision Changes Path
1.10 +65 -320
contrib/tomcat/src/main/org/jboss/tomcat/EmbeddedTomcatService.java
Index: EmbeddedTomcatService.java
===================================================================
RCS file:
/products/cvs/ejboss/contrib/tomcat/src/main/org/jboss/tomcat/EmbeddedTomcatService.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- EmbeddedTomcatService.java 2000/12/21 16:29:48 1.9
+++ EmbeddedTomcatService.java 2001/02/10 06:00:17 1.10
@@ -4,11 +4,14 @@
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
+
package org.jboss.tomcat;
-//import java.io.IOException;
+import java.io.DataInputStream;
+import java.io.IOException;
import java.io.File;
import java.net.URL;
+import java.net.URL;
import java.net.MalformedURLException;
import java.net.InetAddress;
import java.lang.reflect.Method;
@@ -20,264 +23,91 @@
import javax.management.*;
import javax.servlet.ServletContext;
-import org.jboss.logging.Log;
import org.jboss.logging.Logger;
+import org.jboss.logging.Log;
import org.jboss.util.ServiceMBeanSupport;
import org.jboss.ejb.DeploymentException;
-import org.apache.tomcat.startup.EmbededTomcat;
-import org.apache.tomcat.context.WebXmlReader;
-import org.apache.tomcat.context.PolicyInterceptor;
-import org.apache.tomcat.context.LoaderInterceptor;
-import org.apache.tomcat.context.DefaultCMSetter;
-import org.apache.tomcat.context.WorkDirInterceptor;
-import org.apache.tomcat.context.LoadOnStartupInterceptor;
-import org.apache.tomcat.request.SessionInterceptor;
-import org.apache.tomcat.request.SimpleMapper1;
-import org.apache.tomcat.request.InvokerInterceptor;
-import org.apache.tomcat.request.StaticInterceptor;
-import org.apache.tomcat.request.AccessInterceptor;
-import org.apache.tomcat.request.Jdk12Interceptor;
-import org.apache.tomcat.session.StandardSessionInterceptor;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.DocumentBuilder;
-
/**
- * A service to launch tomcat from JMX.
- *
- * This uses the class org.apache.tomcat.startup.EmbededTomcat, which means
- * that we can add and remove tomcat "contexts" on the fly.
- *
- * If you use this service, the contexts defined in Tomcat's server.xml file
- * will be used, but all other info in that file will be ignored.
+ * <description>
*
- * @author <a href="mailto:[EMAIL PROTECTED]">Rickard �berg</a>
- * @author <a href="mailto:[EMAIL PROTECTED]">Sebastien Alborini</a>
- * @author <a href="mailto:[EMAIL PROTECTED]">Kevin Lewis</a>
- * @version $Revision: 1.9 $
+ * @see <related>
+ * @author Rickard �berg ([EMAIL PROTECTED])
+ * @author Dewayne McNair ([EMAIL PROTECTED])
+ * @version $Revision: 1.10 $
*/
-public class EmbeddedTomcatService extends ServiceMBeanSupport
- implements EmbeddedTomcatServiceMBean, MBeanRegistration
-{
-
- // Constants -----------------------------------------------------
- public static final String NAME = "EmbeddedTomcat";
-
- // Attributes ----------------------------------------------------
-
- // the tomcat launcher
- private EmbededTomcat embededTomcat;
-
- // the path to tomcat. We need it to set the root context
- String tomcatHome;
-
- // the port tomcat must listen to
- int port;
-
- // the config file to be used
- String configFile;
-
- // repository for deployed URLs and the associated servletContexts
- Hashtable deployedURLs = new Hashtable();
-
- final Log log = Log.createLog(NAME);
-
- // Constructors --------------------------------------------------
- public EmbeddedTomcatService()
- {
- this(null, 8080);
- }
-
- public EmbeddedTomcatService(String configFile, int port)
- {
- this.configFile = configFile;
- this.port = port;
- }
-
- // Public --------------------------------------------------------
- public void setPort(int port)
- {
- this.port = port;
- }
-
- public int getPort()
- {
- return port;
- }
-
- public void setConfigFile(String configFile)
- {
- this.configFile = configFile;
- }
-
- public String getConfigFile()
- {
- return configFile;
- }
-
- // Public --------------------------------------------------------
- public ObjectName getObjectName(MBeanServer server, ObjectName name)
- throws javax.management.MalformedObjectNameException
- {
-
- return name == null ? new ObjectName(OBJECT_NAME) : name;
- }
-
- public String getName()
- {
- return NAME;
- }
-
-
- public void startService() throws Exception
- {
- Log.setLog(log);
-
- Logger.log("Testing if Tomcat is present....");
-
- // tomcat (jdk12Interceptor) seems sets the contextclassloader but doesn't
restore the original one
- ClassLoader oldCcl = Thread.currentThread().getContextClassLoader();
-
- try
- {
- // We need the tomcat home to set tomcat's working dir / ROOT context
- Class tomcatClass;
- try {
- tomcatClass = Class.forName("org.apache.tomcat.startup.EmbededTomcat");
-
- } catch(Exception e)
- {
-
- Logger.log("failed");
- Logger.log("Tomcat not found. You need tomcat 3.2b4+");
- throw new Exception("start failed");
- }
-
- URL tomcatUrl =
tomcatClass.getProtectionDomain().getCodeSource().getLocation();
- tomcatHome = new File(new
File(tomcatUrl.getFile()).getParent()).getParent();
-
- // Locate server.xml
- if(configFile == null)
- {
- configFile = new File(tomcatHome, "conf/server.xml").toString();
- }
-
- try
- {
-
- // Using EmbededTomcat instead of org.apache.tomcat.startup.Tomcat
- // allows us to add/remove contexts on the fly
- embededTomcat = new EmbededTomcat();
- Logger.log("OK");
-
- } catch(NoClassDefFoundError e)
- {
- Logger.log("failed");
- Logger.log("org.apache.tomcat.startup.EmbededTomcat wasn't found. Be
sure to have your CLASSPATH correctly set");
- Logger.log("You need tomcat 3.2b4+ to use this service");
-
- throw e;
- }
-
- // Initialize the EmbededTomcat object.
- // See javadoc in org.apache.tomcat.startup.EmbededTomcat
- // set debug (Warning: setting debug to anything higher gave me lot of
exceptions)
- embededTomcat.setDebug(0);
-
- embededTomcat.setWorkDir(tomcatHome+"/work");
-
- // set the interceptors.
- addInterceptors(embededTomcat);
-
- // add root context
- deploy("/", "file:" + tomcatHome + "/webapps/ROOT");
-
- // add contexts from file
-
- // Create an instance of the DocumentBuilderFactory
- com.sun.xml.parser.DocumentBuilderFactoryImpl docBuilderFactory = new
com.sun.xml.parser.DocumentBuilderFactoryImpl();
-
- //Get the DocumentBuilder from the factory that we just got above.
- com.sun.xml.parser.DocumentBuilderImpl docBuilder =
(com.sun.xml.parser.DocumentBuilderImpl)docBuilderFactory.newDocumentBuilder();
-
- // parse the config file
- // ROB: it�s not bulletproof maybe should validate against a dtd file
- Document doc = docBuilder.parse(new File(configFile));
+public class EmbeddedTomcatService
+extends ServiceMBeanSupport
+implements EmbeddedTomcatServiceMBean, MBeanRegistration
+{
+ // Constants -----------------------------------------------------
+ public static final String NAME = "EmbeddedTomcat";
- // get list with contexts
- NodeList contexts = doc.getElementsByTagName("Context");
+ Thread runner;
+ TomcatEntry tomcat = null;
+ // repository for deployed URLs and the associated servletContexts
+ Hashtable deployedURLs = new Hashtable();
- // add them
- for(int i=0; i<contexts.getLength(); i++)
- {
- Element context = (Element)contexts.item(i);
- String path = context.getAttribute("path");
- String docBase = context.getAttribute("docBase");
- File f = new File(docBase);
- // check if docbase is of type /something in which case add tomcat home
- if(!f.exists())
+ public ObjectName getObjectName (MBeanServer server, ObjectName name)
+ throws javax.management.MalformedObjectNameException
+ {
+ return new ObjectName(OBJECT_NAME);
+ }
+
+ public String getName()
+ {
+ return NAME;
+ }
+
+ public void startService()
+ throws Exception
+ {
+ final Log log = this.log;
+
+ log.log ("Starting " + NAME + "....");
+ tomcat = new TomcatEntry();
+ log.log ("OK");
+ }
+
+ public void stopService()
+ {
+ if (tomcat != null)
+ {
+ try
{
- deploy(path, "file:" + tomcatHome + "/" + docBase);
- //System.out.println("file:" + tomcatHome + "/" + docBase);
+ tomcat.stopTomcat();
}
-
- // otherwise if it�s c:/something do nothing
- else
+ catch (Exception e)
{
- deploy(path, "file:" + docBase);
- //System.out.println("file:" + docBase);
+ // nothing -- we're shutting down
}
- }
-
-
- // add endpoint (web service)
- embededTomcat.addEndpoint(port, null, null);
-
- // start
- embededTomcat.start();
-
- } finally
- {
+ }
- // restore the original value of the ccl.
- Thread.currentThread().setContextClassLoader(oldCcl);
-
- // unset log for the main thread.
- // tomcat's child threads have a copy of it anyway.
- Log.unsetLog();
- }
- }
-
-
- public void stopService()
- {
- // NYI in tomcat for now (3.2b6)
- embededTomcat.stop();
- }
+ if (runner != null)
+ {
+ runner.stop();
+ runner = null;
+ }
+ }
-
- // warURL could be given as a java.net.URL, but the JMX RI's html adaptor can't
+ // warURL could be given as a java.net.URL,
+ // but the JMX RI's html adaptor can't
// show inputs for URLs in HTML forms.
- public void deploy(String ctxPath, String warUrl) throws DeploymentException
+ public void deploy(String ctxPath, String warUrl)
+ throws DeploymentException
{
- Log.setLog(log);
+ final Log log = this.log;
ClassLoader oldCcl = Thread.currentThread().getContextClassLoader();
try
{
-
// add the context
- ServletContext servletCtx = embededTomcat.addContext(ctxPath, new
URL(warUrl));
+ ServletContext servletCtx = tomcat.addContext(ctxPath, new URL(warUrl));
// init the context
- embededTomcat.initContext(servletCtx);
+ tomcat.initContext(servletCtx);
// keep track of deployed contexts for undeployment
deployedURLs.put(warUrl, servletCtx);
@@ -292,15 +122,13 @@
throw new DeploymentException(e.getMessage());
} finally
{
- Log.unsetLog();
Thread.currentThread().setContextClassLoader(oldCcl);
}
}
-
public void undeploy(String warUrl) throws DeploymentException
{
- Log.setLog(log);
+ final Log log = this.log;
try
{
@@ -311,103 +139,20 @@
throw new DeploymentException("URL " + warUrl + " is not deployed");
// remove the context
- embededTomcat.removeContext(servletCtx);
+ tomcat.removeContext(servletCtx);
} catch(Exception e)
{
throw new DeploymentException(e.getMessage());
} finally
{
- Log.unsetLog();
}
-
}
-
public boolean isDeployed(String warUrl)
{
return deployedURLs.containsKey(warUrl);
}
-
- // Protected -----------------------------------------------------
-
- protected void addContextInterceptors(EmbededTomcat tomcat)
- {
- // Since we add one non-default interceptor, we have to specify them all
- // the list comes from org.apache.tomcat.startup.EmbededTomcat
-
- WebXmlReader webXmlI=new WebXmlReader();
- webXmlI.setValidate(false);
- tomcat.addContextInterceptor(webXmlI);
-
- PolicyInterceptor polI=new PolicyInterceptor();
- tomcat.addContextInterceptor(polI);
- polI.setDebug(0);
-
- LoaderInterceptor loadI=new LoaderInterceptor();
- tomcat.addContextInterceptor(loadI);
-
- ContextClassLoaderInterceptor ccli = new ContextClassLoaderInterceptor();
- tomcat.addContextInterceptor(ccli);
-
- DefaultCMSetter defaultCMI=new DefaultCMSetter();
- tomcat.addContextInterceptor(defaultCMI);
-
- WorkDirInterceptor wdI=new WorkDirInterceptor();
- tomcat.addContextInterceptor(wdI);
-
- tomcat.addContextInterceptor(new org.jboss.tomcat.naming.JbossWebXmlReader());
-
- LoadOnStartupInterceptor loadOnSI=new LoadOnStartupInterceptor();
- tomcat.addContextInterceptor(loadOnSI);
- }
-
- protected void addSecurityRequestInterceptors(EmbededTomcat tomcat)
- {
- }
-
- protected void addRequestInterceptors(EmbededTomcat tomcat)
- {
-
- Jdk12Interceptor jdk12I=new Jdk12Interceptor();
- tomcat.addRequestInterceptor(jdk12I);
-
- // Debug
- // LogEvents logEventsI=new LogEvents();
- // addRequestInterceptor( logEventsI );
-
- SessionInterceptor sessI=new SessionInterceptor();
- tomcat.addRequestInterceptor(sessI);
-
- SimpleMapper1 mapI=new SimpleMapper1();
- tomcat.addRequestInterceptor(mapI);
- mapI.setDebug(0);
-
- InvokerInterceptor invI=new InvokerInterceptor();
- tomcat.addRequestInterceptor(invI);
- invI.setDebug(0);
-
- StaticInterceptor staticI=new StaticInterceptor();
- tomcat.addRequestInterceptor(staticI);
- mapI.setDebug(0);
-
- tomcat.addRequestInterceptor(new StandardSessionInterceptor());
-
- // access control ( find if a resource have constraints )
- AccessInterceptor accessI=new AccessInterceptor();
- tomcat.addRequestInterceptor(accessI);
- accessI.setDebug(0);
-
- addSecurityRequestInterceptors(tomcat);
- }
-
- // Private -------------------------------------------------------
-
- private void addInterceptors(EmbededTomcat tomcat)
- {
- addContextInterceptors(tomcat);
- addRequestInterceptors(tomcat);
- }
}
1.5 +1 -8
contrib/tomcat/src/main/org/jboss/tomcat/EmbeddedTomcatServiceMBean.java
Index: EmbeddedTomcatServiceMBean.java
===================================================================
RCS file:
/products/cvs/ejboss/contrib/tomcat/src/main/org/jboss/tomcat/EmbeddedTomcatServiceMBean.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- EmbeddedTomcatServiceMBean.java 2000/12/21 16:29:48 1.4
+++ EmbeddedTomcatServiceMBean.java 2001/02/10 06:00:17 1.5
@@ -14,7 +14,7 @@
*
* @see <related>
* @author <a href="mailto:[EMAIL PROTECTED]">Sebastien Alborini</a>
- * @version $Revision: 1.4 $
+ * @version $Revision: 1.5 $
*/
public interface EmbeddedTomcatServiceMBean
extends org.jboss.util.ServiceMBean
@@ -23,13 +23,6 @@
// Constants -----------------------------------------------------
public static final String OBJECT_NAME = ":service=EmbeddedTomcat";
- // Public --------------------------------------------------------
- public void setPort(int port);
- public int getPort();
-
- public void setConfigFile(String configFile);
- public String getConfigFile();
-
public void deploy(String ctxPath, String warUrl)
throws DeploymentException;