Andrew Overholt 7f96ff5
Index: .classpath
Andrew Overholt 7f96ff5
===================================================================
Andrew Overholt 7f96ff5
RCS file: /cvsroot/eclipse/org.eclipse.tomcat/.classpath,v
Andrew Overholt 7f96ff5
retrieving revision 1.21
Andrew Overholt 7f96ff5
diff -u -r1.21 .classpath
Andrew Overholt 7f96ff5
--- .classpath	9 May 2006 18:51:41 -0000	1.21
Andrew Overholt 7f96ff5
+++ .classpath	4 Jul 2006 18:42:40 -0000
Andrew Overholt 03777cc
@@ -1,28 +1,29 @@
Andrew Overholt 7f96ff5
 
Andrew Overholt 7f96ff5
 <classpath>
Andrew Overholt 7f96ff5
 	<classpathentry kind="src" path="src"/>
Andrew Overholt 7f96ff5
-	<classpathentry exported="true" sourcepath="D:/tomcat4.1.30src" kind="lib" path="catalina.jar"/>
Andrew Overholt 7f96ff5
-	<classpathentry exported="true" sourcepath="D:/tomcat4.1.30src" kind="lib" path="bootstrap.jar"/>
Andrew Overholt 7f96ff5
-	<classpathentry exported="true" sourcepath="D:/tomcat4.1.30src" kind="lib" path="commons-beanutils.jar"/>
Andrew Overholt 7f96ff5
-	<classpathentry exported="true" sourcepath="D:/tomcat4.1.30src" kind="lib" path="commons-collections.jar"/>
Andrew Overholt 7f96ff5
-	<classpathentry exported="true" sourcepath="D:/tomcat4.1.30src" kind="lib" path="commons-digester.jar"/>
Andrew Overholt 7f96ff5
-	<classpathentry exported="true" sourcepath="D:/tomcat4.1.30src" kind="lib" path="commons-logging-api.jar"/>
Andrew Overholt 7f96ff5
-	<classpathentry exported="true" sourcepath="D:/tomcat4.1.30src" kind="lib" path="commons-modeler.jar"/>
Andrew Overholt 7f96ff5
-	<classpathentry exported="true" sourcepath="D:/tomcat4.1.30src" kind="lib" path="jakarta-regexp-1.3.jar"/>
Andrew Overholt 7f96ff5
-	<classpathentry exported="true" sourcepath="D:/tomcat4.1.30src" kind="lib" path="jasper-compiler.jar"/>
Andrew Overholt 7f96ff5
-	<classpathentry exported="true" sourcepath="D:/tomcat4.1.30src" kind="lib" path="jasper-runtime.jar"/>
Andrew Overholt 7f96ff5
-	<classpathentry exported="true" sourcepath="D:/tomcat4.1.30src" kind="lib" path="mx4j-jmx.jar"/>
Andrew Overholt 7f96ff5
-	<classpathentry exported="true" sourcepath="D:/tomcat4.1.30src" kind="lib" path="naming-common.jar"/>
Andrew Overholt 7f96ff5
-	<classpathentry exported="true" sourcepath="D:/tomcat4.1.30src" kind="lib" path="naming-factory.jar"/>
Andrew Overholt 7f96ff5
-	<classpathentry exported="true" sourcepath="D:/tomcat4.1.30src" kind="lib" path="naming-resources.jar"/>
Andrew Overholt 7f96ff5
-	<classpathentry exported="true" sourcepath="D:/tomcat4.1.30src" kind="lib" path="servlet.jar"/>
Andrew Overholt 7f96ff5
-	<classpathentry exported="true" sourcepath="D:/tomcat4.1.30src" kind="lib" path="servlets-common.jar"/>
Andrew Overholt 7f96ff5
-	<classpathentry exported="true" sourcepath="D:/tomcat4.1.30src" kind="lib" path="servlets-default.jar"/>
Andrew Overholt 7f96ff5
-	<classpathentry exported="true" sourcepath="D:/tomcat4.1.30src" kind="lib" path="servlets-invoker.jar"/>
Andrew Overholt 7f96ff5
-	<classpathentry exported="true" sourcepath="D:/tomcat4.1.30src" kind="lib" path="servlets-manager.jar"/>
Andrew Overholt 7f96ff5
-	<classpathentry exported="true" sourcepath="D:/tomcat4.1.30src" kind="lib" path="tomcat-coyote.jar"/>
Andrew Overholt 7f96ff5
-	<classpathentry exported="true" sourcepath="D:/tomcat4.1.30src" kind="lib" path="tomcat-http11.jar"/>
Andrew Overholt 7f96ff5
-	<classpathentry exported="true" sourcepath="D:/tomcat4.1.30src" kind="lib" path="tomcat-util.jar"/>
Andrew Overholt 7f96ff5
+	<classpathentry exported="true" kind="lib" path="lib/catalina.jar"/>
Andrew Overholt 7f96ff5
+	<classpathentry exported="true" kind="lib" path="lib/catalina-optional.jar"/>
Andrew Overholt 7f96ff5
+	<classpathentry exported="true" kind="lib" path="lib/commons-el.jar"/>
Andrew Overholt 7f96ff5
+	<classpathentry exported="true" kind="lib" path="lib/commons-modeler.jar"/>
Andrew Overholt 03777cc
+	<classpathentry exported="true" kind="lib" path="lib/mx4j.jar"/>
Andrew Overholt 03777cc
+	<classpathentry exported="true" kind="lib" path="lib/mx4j-jmx.jar"/>
Andrew Overholt 03777cc
+	<classpathentry exported="true" kind="lib" path="lib/mx4j-impl.jar"/>
Andrew Overholt 03777cc
+	<classpathentry exported="true" kind="lib" path="lib/jspapi.jar"/>
Andrew Overholt 7f96ff5
+	<classpathentry exported="true" kind="lib" path="lib/naming-factory.jar"/>
Andrew Overholt 7f96ff5
+	<classpathentry exported="true" kind="lib" path="lib/naming-resources.jar"/>
Andrew Overholt 03777cc
+	<classpathentry exported="true" kind="lib" path="lib/servletapi5.jar"/>
Andrew Overholt 7f96ff5
+	<classpathentry exported="true" kind="lib" path="lib/servlets-default.jar"/>
Andrew Overholt 7f96ff5
+	<classpathentry exported="true" kind="lib" path="lib/tomcat-coyote.jar"/>
Andrew Overholt 7f96ff5
+	<classpathentry exported="true" kind="lib" path="lib/tomcat-http.jar"/>
Andrew Overholt 7f96ff5
+	<classpathentry exported="true" kind="lib" path="lib/tomcat-util.jar"/>
Andrew Overholt 7f96ff5
+	<classpathentry exported="true" kind="lib" path="lib/commons-beanutils.jar"/>
Andrew Overholt 7f96ff5
+	<classpathentry exported="true" kind="lib" path="lib/commons-collections.jar"/>
Andrew Overholt 7f96ff5
+	<classpathentry exported="true" kind="lib" path="lib/commons-digester.jar"/>
Andrew Overholt 7f96ff5
+	<classpathentry exported="true" kind="lib" path="lib/commons-logging-api.jar"/>
Andrew Overholt 7f96ff5
+	<classpathentry exported="true" kind="lib" path="lib/regexp.jar"/>
Andrew Overholt 7f96ff5
+	<classpathentry exported="true" kind="lib" path="lib/commons-digester-rss.jar"/>
Andrew Overholt 7f96ff5
+	<classpathentry exported="true" kind="lib" path="lib/jasper-compiler.jar"/>
Andrew Overholt 7f96ff5
+	<classpathentry exported="true" kind="lib" path="lib/jasper-runtime.jar"/>
Andrew Overholt 7f96ff5
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
Andrew Overholt 7f96ff5
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
Andrew Overholt 7f96ff5
 	<classpathentry kind="output" path="bin"/>
Andrew Overholt 7f96ff5
Index: build.properties
Andrew Overholt 7f96ff5
===================================================================
Andrew Overholt 7f96ff5
RCS file: /cvsroot/eclipse/org.eclipse.tomcat/build.properties,v
Andrew Overholt 7f96ff5
retrieving revision 1.16
Andrew Overholt 7f96ff5
diff -u -r1.16 build.properties
Andrew Overholt 7f96ff5
--- build.properties	10 May 2006 17:51:19 -0000	1.16
Andrew Overholt 7f96ff5
+++ build.properties	4 Jul 2006 18:42:40 -0000
Andrew Overholt 7f96ff5
@@ -11,7 +11,7 @@
Andrew Overholt 7f96ff5
 bin.includes = conf/,\
Andrew Overholt 7f96ff5
                webapps/,\
Andrew Overholt 7f96ff5
                plugin.xml,\
Andrew Overholt 7f96ff5
-               *.jar,\
Andrew Overholt 7f96ff5
+               lib/*.jar,\
Andrew Overholt 7f96ff5
                plugin.properties,\
Andrew Overholt 7f96ff5
                preferences.ini,\
Andrew Overholt 7f96ff5
                about.html,\
Andrew Overholt 7f96ff5
Index: src/org/eclipse/tomcat/internal/TomcatPlugin.java
Andrew Overholt 7f96ff5
===================================================================
Andrew Overholt 7f96ff5
RCS file: /cvsroot/eclipse/org.eclipse.tomcat/src/org/eclipse/tomcat/internal/TomcatPlugin.java,v
Andrew Overholt 7f96ff5
retrieving revision 1.24
Andrew Overholt 7f96ff5
diff -u -r1.24 TomcatPlugin.java
Andrew Overholt 7f96ff5
--- src/org/eclipse/tomcat/internal/TomcatPlugin.java	23 May 2005 03:58:20 -0000	1.24
Andrew Overholt 7f96ff5
+++ src/org/eclipse/tomcat/internal/TomcatPlugin.java	4 Jul 2006 18:42:41 -0000
Andrew Overholt 7f96ff5
@@ -24,13 +24,16 @@
Andrew Overholt 7f96ff5
 	public final static String PREF_ACCEPT_COUNT = "acceptCount"; //$NON-NLS-1$
Andrew Overholt 7f96ff5
 	public final static String PREF_MAX_PROCESSORS = "maxProcessors"; //$NON-NLS-1$
Andrew Overholt 7f96ff5
 	public final static String PREF_MIN_PROCESSORS = "minProcessors"; //$NON-NLS-1$
Andrew Overholt 7f96ff5
+	public final static String DISABLE_UPLOAD_TIMEOUT = "disableUploadTimeout"; //$NON-NLS-1$
Andrew Overholt 7f96ff5
 
Andrew Overholt 7f96ff5
 	public final static String PREF_SSL_PORT = "sslPort"; //$NON-NLS-1$
Andrew Overholt 7f96ff5
 	public final static String PREF_SSL_PROTOCOL = "sslProtocol"; //$NON-NLS-1$
Andrew Overholt 7f96ff5
+	public final static String PREF_SSL_PROTOCOLS = "sslProtocols"; //$NON-NLS-1$
Andrew Overholt 7f96ff5
 	public final static String PREF_SSL_SCHEME = "sslScheme"; //$NON-NLS-1$
Andrew Overholt 7f96ff5
 	public final static String PREF_SSL_ALGORITHM = "sslAlgorithm"; //$NON-NLS-1$
Andrew Overholt 7f96ff5
 	public final static String PREF_KEY_STORE_FILE = "keyStoreFile"; //$NON-NLS-1$
Andrew Overholt 7f96ff5
 	public final static String PREF_KEY_STORE_PASSWORD = "keyStorePassword"; //$NON-NLS-1$
Andrew Overholt 7f96ff5
+	public final static String PREF_CLIENT_AUTHENTICATION = "clientauth"; //$NON-NLS-1$
Andrew Overholt 7f96ff5
 	
Andrew Overholt 7f96ff5
 	private static TomcatPlugin plugin;
Andrew Overholt 7f96ff5
 //	private static BundleContext bundleContext;
Andrew Overholt 7f96ff5
Index: src/org/eclipse/tomcat/internal/TomcatAppServer.java
Andrew Overholt 7f96ff5
===================================================================
Andrew Overholt 7f96ff5
RCS file: /cvsroot/eclipse/org.eclipse.tomcat/src/org/eclipse/tomcat/internal/TomcatAppServer.java,v
Andrew Overholt 7f96ff5
retrieving revision 1.46
Andrew Overholt 7f96ff5
diff -u -r1.46 TomcatAppServer.java
Andrew Overholt 7f96ff5
--- src/org/eclipse/tomcat/internal/TomcatAppServer.java	17 Apr 2006 15:24:57 -0000	1.46
Andrew Overholt 7f96ff5
+++ src/org/eclipse/tomcat/internal/TomcatAppServer.java	4 Jul 2006 18:42:41 -0000
Andrew Overholt 7f96ff5
@@ -1,604 +1,650 @@
Andrew Overholt 7f96ff5
-/*******************************************************************************
Andrew Overholt 7f96ff5
- * Copyright (c) 2000, 2006 IBM Corporation and others.
Andrew Overholt 7f96ff5
- * All rights reserved. This program and the accompanying materials
Andrew Overholt 7f96ff5
- * are made available under the terms of the Eclipse Public License v1.0
Andrew Overholt 7f96ff5
- * which accompanies this distribution, and is available at
Andrew Overholt 7f96ff5
- * http://www.eclipse.org/legal/epl-v10.html
Andrew Overholt 7f96ff5
- *
Andrew Overholt 7f96ff5
- * Contributors:
Andrew Overholt 7f96ff5
- *     IBM Corporation - initial API and implementation
Andrew Overholt 7f96ff5
- *******************************************************************************/
Andrew Overholt 7f96ff5
-package org.eclipse.tomcat.internal;
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-import java.io.ByteArrayOutputStream;
Andrew Overholt 7f96ff5
-import java.io.PrintStream;
Andrew Overholt 7f96ff5
-import java.net.InetAddress;
Andrew Overholt 7f96ff5
-import java.net.URL;
Andrew Overholt 7f96ff5
-import java.net.UnknownHostException;
Andrew Overholt 7f96ff5
-import java.util.ArrayList;
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-import org.apache.catalina.Connector;
Andrew Overholt 7f96ff5
-import org.apache.catalina.Context;
Andrew Overholt 7f96ff5
-import org.apache.catalina.Engine;
Andrew Overholt 7f96ff5
-import org.apache.catalina.Host;
Andrew Overholt 7f96ff5
-import org.apache.catalina.LifecycleEvent;
Andrew Overholt 7f96ff5
-import org.apache.catalina.LifecycleException;
Andrew Overholt 7f96ff5
-import org.apache.catalina.LifecycleListener;
Andrew Overholt 7f96ff5
-import org.apache.catalina.Realm;
Andrew Overholt 7f96ff5
-import org.apache.catalina.core.StandardContext;
Andrew Overholt 7f96ff5
-import org.apache.catalina.core.StandardHost;
Andrew Overholt 7f96ff5
-import org.apache.catalina.logger.FileLogger;
Andrew Overholt 7f96ff5
-import org.apache.catalina.realm.MemoryRealm;
Andrew Overholt 7f96ff5
-import org.apache.catalina.startup.Embedded;
Andrew Overholt 7f96ff5
-import org.apache.coyote.tomcat4.CoyoteConnector;
Andrew Overholt 7f96ff5
-import org.apache.coyote.tomcat4.CoyoteServerSocketFactory;
Andrew Overholt 7f96ff5
-import org.eclipse.core.runtime.CoreException;
Andrew Overholt 7f96ff5
-import org.eclipse.core.runtime.FileLocator;
Andrew Overholt 7f96ff5
-import org.eclipse.core.runtime.IConfigurationElement;
Andrew Overholt 7f96ff5
-import org.eclipse.core.runtime.IExtension;
Andrew Overholt 7f96ff5
-import org.eclipse.core.runtime.IExtensionPoint;
Andrew Overholt 7f96ff5
-import org.eclipse.core.runtime.IExtensionRegistry;
Andrew Overholt 7f96ff5
-import org.eclipse.core.runtime.IPath;
Andrew Overholt 7f96ff5
-import org.eclipse.core.runtime.IStatus;
Andrew Overholt 7f96ff5
-import org.eclipse.core.runtime.Platform;
Andrew Overholt 7f96ff5
-import org.eclipse.core.runtime.Preferences;
Andrew Overholt 7f96ff5
-import org.eclipse.core.runtime.Status;
Andrew Overholt 7f96ff5
-import org.eclipse.help.internal.appserver.IWebappServer;
Andrew Overholt 7f96ff5
-import org.eclipse.osgi.util.NLS;
Andrew Overholt 7f96ff5
-import org.eclipse.tomcat.internal.extensions.IRealmFactory;
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-/**
Andrew Overholt 7f96ff5
- * Single engine, single host, single connector Tomcat Application Server.
Andrew Overholt 7f96ff5
- */
Andrew Overholt 7f96ff5
-public class TomcatAppServer implements IWebappServer {
Andrew Overholt 7f96ff5
-    /**
Andrew Overholt 7f96ff5
-     * Specify this reserved value for the SSL port # to indicate that SSL
Andrew Overholt 7f96ff5
-     * should not be used
Andrew Overholt 7f96ff5
-     */
Andrew Overholt 7f96ff5
-    public final static int SSL_DISABLED = -1;
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-    private String hostAddress;
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-    private int port;
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-    private int sslPort = SSL_DISABLED;
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-    // false until an attempt to start Tomcat
Andrew Overholt 7f96ff5
-    private boolean isStarted = false;
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-    // true after started without problems
Andrew Overholt 7f96ff5
-    private boolean running = false;
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-    private Embedded embedded = null;
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-    private Engine engine = null;
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-    private Host host = null;
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-    private Connector httpConnector = null;
Andrew Overholt 7f96ff5
-    private Connector sslConnector = null;
Andrew Overholt 7f96ff5
-    // Con
Andrew Overholt 7f96ff5
-    private ArrayList contexts = new ArrayList();
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-    /**
Andrew Overholt 7f96ff5
-     * Constructs this class, but does not instantiates or start Tomcat classes
Andrew Overholt 7f96ff5
-     * until webapp are added.
Andrew Overholt 7f96ff5
-     */
Andrew Overholt 7f96ff5
-    public TomcatAppServer() {
Andrew Overholt 7f96ff5
-    }
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-    /**
Andrew Overholt 7f96ff5
-     * @see org.eclipse.help.internal.appserver.IWebappServer#start(int,
Andrew Overholt 7f96ff5
-     *      java.lang.String)
Andrew Overholt 7f96ff5
-     */
Andrew Overholt 7f96ff5
-    public synchronized void start(int port, String hostAddress) throws CoreException {
Andrew Overholt 7f96ff5
-        this.hostAddress = hostAddress;
Andrew Overholt 7f96ff5
-        this.port = port;
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-        if (isStarted) {
Andrew Overholt 7f96ff5
-            return;
Andrew Overholt 7f96ff5
-        }
Andrew Overholt 7f96ff5
-        isStarted = true;
Andrew Overholt 7f96ff5
-        try {
Andrew Overholt 7f96ff5
-            FileLogger logger = new FileLogger();
Andrew Overholt 7f96ff5
-            logger.setDirectory(TomcatPlugin.getDefault().getStateLocation()
Andrew Overholt 7f96ff5
-                    .toOSString());
Andrew Overholt 7f96ff5
-            embedded = new Embedded(logger, new MemoryRealm());
Andrew Overholt 7f96ff5
-            embedded.setDebug(0);
Andrew Overholt 7f96ff5
-            embedded.setLogger(logger);
Andrew Overholt 7f96ff5
-            URL installURL = TomcatPlugin.getDefault().getBundle()
Andrew Overholt 7f96ff5
-                    .getEntry("/"); //$NON-NLS-1$
Andrew Overholt 7f96ff5
-            URL resolvedURL = FileLocator.resolve(installURL);
Andrew Overholt 7f96ff5
-            String home = FileLocator.toFileURL(resolvedURL).getFile();
Andrew Overholt 7f96ff5
-            System.setProperty("catalina.home", home); //$NON-NLS-1$
Andrew Overholt 7f96ff5
-            String base = home;
Andrew Overholt 7f96ff5
-            System.setProperty("catalina.base", base); //$NON-NLS-1$
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-            // Set up realm if one found
Andrew Overholt 7f96ff5
-            if (TomcatPlugin.getDefault().getPluginPreferences().getInt(
Andrew Overholt 7f96ff5
-                    TomcatPlugin.PREF_SSL_PORT) >= 0) {
Andrew Overholt 7f96ff5
-                Realm realm = getRealm();
Andrew Overholt 7f96ff5
-                embedded.setRealm(realm);
Andrew Overholt 7f96ff5
-            }
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-            // start now, and then add all the contexts..
Andrew Overholt 7f96ff5
-            embedded.start();
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-            // Create a very basic container hierarchy
Andrew Overholt 7f96ff5
-            engine = embedded.createEngine();
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-            host = embedded.createHost("localhost", home + "/webapps"); //$NON-NLS-1$ //$NON-NLS-2$
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-            // all request go to our only host
Andrew Overholt 7f96ff5
-            engine.setDefaultHost(host.getName());
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-            if (host instanceof StandardHost) {
Andrew Overholt 7f96ff5
-                ((StandardHost) host)
Andrew Overholt 7f96ff5
-                        .setErrorReportValveClass("org.eclipse.tomcat.internal.EclipseErrorReportValve"); //$NON-NLS-1$
Andrew Overholt 7f96ff5
-            }
Andrew Overholt 7f96ff5
-            engine.addChild(host);
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-            // Install the assembled container hierarchy
Andrew Overholt 7f96ff5
-            PrintStream sysOut = System.out;
Andrew Overholt 7f96ff5
-            // reassign standard output to prevent Tomcat from writing
Andrew Overholt 7f96ff5
-            // its version message there.
Andrew Overholt 7f96ff5
-            System.setOut(new PrintStream(new ByteArrayOutputStream()));
Andrew Overholt 7f96ff5
-            try {
Andrew Overholt 7f96ff5
-                embedded.addEngine(engine);
Andrew Overholt 7f96ff5
-            } finally {
Andrew Overholt 7f96ff5
-                System.setOut(sysOut);
Andrew Overholt 7f96ff5
-            }
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-            // Root context
Andrew Overholt 7f96ff5
-            Context root = embedded.createContext("", home + "/webapps/ROOT"); //$NON-NLS-1$ //$NON-NLS-2$
Andrew Overholt 7f96ff5
-            // this line should be replaced once tomcat provides support
Andrew Overholt 7f96ff5
-            // for setting the working directory
Andrew Overholt 7f96ff5
-            if (root instanceof StandardContext) {
Andrew Overholt 7f96ff5
-                ((StandardContext) root)
Andrew Overholt 7f96ff5
-                        .setWorkDir(getWorkingDirectory("ROOT")); //$NON-NLS-1$
Andrew Overholt 7f96ff5
-            }
Andrew Overholt 7f96ff5
-            root.setLoader(embedded.createLoader(this.getClass()
Andrew Overholt 7f96ff5
-                    .getClassLoader()));
Andrew Overholt 7f96ff5
-            contexts.add(root);
Andrew Overholt 7f96ff5
-            host.addChild(root);
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-            InetAddress iAddress = null;
Andrew Overholt 7f96ff5
-            if (this.hostAddress != null) {
Andrew Overholt 7f96ff5
-                try {
Andrew Overholt 7f96ff5
-                    iAddress = InetAddress.getByName(this.hostAddress);
Andrew Overholt 7f96ff5
-                } catch (UnknownHostException uhe) {
Andrew Overholt 7f96ff5
-                    // will default to all interfaces
Andrew Overholt 7f96ff5
-                }
Andrew Overholt 7f96ff5
-            }
Andrew Overholt 7f96ff5
-            updateSslPort(iAddress);
Andrew Overholt 7f96ff5
-            if (this.port == 0) {
Andrew Overholt 7f96ff5
-                this.port = SocketUtil.findUnusedLocalPort(iAddress); 
Andrew Overholt 7f96ff5
-                if (this.port == -1) {
Andrew Overholt 7f96ff5
-                    throw new CoreException(
Andrew Overholt 7f96ff5
-                            new Status(
Andrew Overholt 7f96ff5
-                                    IStatus.ERROR,
Andrew Overholt 7f96ff5
-                                    TomcatPlugin.PLUGIN_ID,
Andrew Overholt 7f96ff5
-                                    IStatus.OK,
Andrew Overholt 7f96ff5
-                                    TomcatResources.TomcatAppServer_start_CannotObtainPort, 
Andrew Overholt 7f96ff5
-                                    null));
Andrew Overholt 7f96ff5
-                }
Andrew Overholt 7f96ff5
-            }
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-            // Create Connector
Andrew Overholt 7f96ff5
-            Connector connector = embedded.createConnector(null, this.port,
Andrew Overholt 7f96ff5
-                    false);
Andrew Overholt 7f96ff5
-            // Override defaults on CoyoteConnector
Andrew Overholt 7f96ff5
-            if (connector instanceof CoyoteConnector) {
Andrew Overholt 7f96ff5
-                CoyoteConnector connectorImpl = (CoyoteConnector) connector;
Andrew Overholt 7f96ff5
-                if (iAddress != null) {
Andrew Overholt 7f96ff5
-                    // bug in Embedded that incorrectly sets host on connector.
Andrew Overholt 7f96ff5
-                    // pass null when creating connector, and set host here if
Andrew Overholt 7f96ff5
-                    // it is specified
Andrew Overholt 7f96ff5
-                    connectorImpl.setAddress(iAddress.getHostAddress());
Andrew Overholt 7f96ff5
-                }
Andrew Overholt 7f96ff5
-                Preferences pref = TomcatPlugin.getDefault()
Andrew Overholt 7f96ff5
-                        .getPluginPreferences();
Andrew Overholt 7f96ff5
-                int acceptCount = pref.getInt(TomcatPlugin.PREF_ACCEPT_COUNT);
Andrew Overholt 7f96ff5
-                if (acceptCount > 0) {
Andrew Overholt 7f96ff5
-                    connectorImpl.setAcceptCount(acceptCount);
Andrew Overholt 7f96ff5
-                }
Andrew Overholt 7f96ff5
-                int maxProcessors = pref
Andrew Overholt 7f96ff5
-                        .getInt(TomcatPlugin.PREF_MAX_PROCESSORS);
Andrew Overholt 7f96ff5
-                if (maxProcessors > 0) {
Andrew Overholt 7f96ff5
-                    connectorImpl.setMaxProcessors(maxProcessors);
Andrew Overholt 7f96ff5
-                }
Andrew Overholt 7f96ff5
-                int minProcessors = pref
Andrew Overholt 7f96ff5
-                        .getInt(TomcatPlugin.PREF_MIN_PROCESSORS);
Andrew Overholt 7f96ff5
-                if (minProcessors > 0) {
Andrew Overholt 7f96ff5
-                    connectorImpl.setMinProcessors(minProcessors);
Andrew Overholt 7f96ff5
-                }
Andrew Overholt 7f96ff5
-                if (this.sslPort > 0) {
Andrew Overholt 7f96ff5
-                    connectorImpl.setRedirectPort(this.sslPort);
Andrew Overholt 7f96ff5
-                    connectorImpl.setEnableLookups(true);
Andrew Overholt 7f96ff5
-                    connectorImpl.setConnectionTimeout(20000);
Andrew Overholt 7f96ff5
-                    connectorImpl.setUseURIValidationHack(false);
Andrew Overholt 7f96ff5
-                    connectorImpl.setDisableUploadTimeout(true);
Andrew Overholt 7f96ff5
-                }
Andrew Overholt 7f96ff5
-                // connectorImpl.setDebug(0);
Andrew Overholt 7f96ff5
-                // If there is problem in embedded.addConnector()
Andrew Overholt 7f96ff5
-                // there is no exception, so add a listener
Andrew Overholt 7f96ff5
-                connectorImpl.addLifecycleListener(new LifecycleListener() {
Andrew Overholt 7f96ff5
-                    public void lifecycleEvent(LifecycleEvent event) {
Andrew Overholt 7f96ff5
-                        if ("start".equals(event.getType())) //$NON-NLS-1$
Andrew Overholt 7f96ff5
-                            running = true;
Andrew Overholt 7f96ff5
-                    }
Andrew Overholt 7f96ff5
-                });
Andrew Overholt 7f96ff5
-            }
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-            // add Connector to Tomcat
Andrew Overholt 7f96ff5
-            PrintStream sysErr = System.err;
Andrew Overholt 7f96ff5
-            // reassign standard error to prevent Coyote from writing
Andrew Overholt 7f96ff5
-            // its version message there.
Andrew Overholt 7f96ff5
-            System.setErr(new PrintStream(new ByteArrayOutputStream()));
Andrew Overholt 7f96ff5
-            try {
Andrew Overholt 7f96ff5
-                embedded.addConnector(connector);
Andrew Overholt 7f96ff5
-                httpConnector = connector;
Andrew Overholt 7f96ff5
-            } finally {
Andrew Overholt 7f96ff5
-                System.setErr(sysErr);
Andrew Overholt 7f96ff5
-            }
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-            if (this.sslPort > 0) {
Andrew Overholt 7f96ff5
-                createSSLConnector(iAddress, this.sslPort);
Andrew Overholt 7f96ff5
-            }
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-            // if null passed for hostAddress, use local host
Andrew Overholt 7f96ff5
-            if (this.hostAddress == null) {
Andrew Overholt 7f96ff5
-                this.hostAddress = "127.0.0.1"; //$NON-NLS-1$
Andrew Overholt 7f96ff5
-            }
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-            // running = true;
Andrew Overholt 7f96ff5
-            TomcatPlugin.getDefault().setAppserver(this);
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-        } catch (Exception exc) {
Andrew Overholt 7f96ff5
-            TomcatPlugin
Andrew Overholt 7f96ff5
-                    .logError(
Andrew Overholt 7f96ff5
-                            "Exception occurred starting the embedded application server.", //$NON-NLS-1$
Andrew Overholt 7f96ff5
-                            exc);
Andrew Overholt 7f96ff5
-            if (exc instanceof CoreException) {
Andrew Overholt 7f96ff5
-                throw (CoreException) exc;
Andrew Overholt 7f96ff5
-            }
Andrew Overholt 7f96ff5
-            throw new CoreException(new Status(IStatus.ERROR,
Andrew Overholt 7f96ff5
-            		TomcatPlugin.PLUGIN_ID, IStatus.OK,
Andrew Overholt 7f96ff5
-            		TomcatResources.TomcatAppServer_start, 
Andrew Overholt 7f96ff5
-            		exc));
Andrew Overholt 7f96ff5
-        }
Andrew Overholt 7f96ff5
-        if (!running) {
Andrew Overholt 7f96ff5
-            throw new CoreException(new Status(IStatus.ERROR,
Andrew Overholt 7f96ff5
-                    TomcatPlugin.PLUGIN_ID, IStatus.OK,
Andrew Overholt 7f96ff5
-                    TomcatResources.TomcatAppServer_start, null)); 
Andrew Overholt 7f96ff5
-        }
Andrew Overholt 7f96ff5
-    }
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-    /**
Andrew Overholt 7f96ff5
-     * Update {@link sslPort} to refer an appropriate port. If the user set
Andrew Overholt 7f96ff5
-     * sslPort to 0, an arbitrary free port will be used.
Andrew Overholt 7f96ff5
-     * 
Andrew Overholt 7f96ff5
-     * @param iAddress
Andrew Overholt 7f96ff5
-     *            {@link InetAddress} object representing the machine hosting
Andrew Overholt 7f96ff5
-     *            the help system
Andrew Overholt 7f96ff5
-     * @return port number of use for the SSL connection
Andrew Overholt 7f96ff5
-     * @throws CoreException
Andrew Overholt 7f96ff5
-     */
Andrew Overholt 7f96ff5
-    private int updateSslPort(InetAddress iAddress) throws CoreException {
Andrew Overholt 7f96ff5
-        this.sslPort = TomcatPlugin.getDefault().getPluginPreferences().getInt(
Andrew Overholt 7f96ff5
-                TomcatPlugin.PREF_SSL_PORT);
Andrew Overholt 7f96ff5
-        if (this.sslPort == 0) {
Andrew Overholt 7f96ff5
-            this.sslPort = SocketUtil.findUnusedLocalPort(iAddress); 
Andrew Overholt 7f96ff5
-            if (this.sslPort == -1) {
Andrew Overholt 7f96ff5
-                throw new CoreException(new Status(IStatus.ERROR,
Andrew Overholt 7f96ff5
-                        TomcatPlugin.PLUGIN_ID, IStatus.OK,
Andrew Overholt 7f96ff5
-                        TomcatResources.TomcatAppServer_start_CannotObtainPort, 
Andrew Overholt 7f96ff5
-                        null));
Andrew Overholt 7f96ff5
-            }
Andrew Overholt 7f96ff5
-        }
Andrew Overholt 7f96ff5
-        return this.sslPort;
Andrew Overholt 7f96ff5
-    }
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-    /**
Andrew Overholt 7f96ff5
-     * @param iAddress
Andrew Overholt 7f96ff5
-     *            InetAddress representing the machine hosting the help system.
Andrew Overholt 7f96ff5
-     * @param sslport
Andrew Overholt 7f96ff5
-     *            port # to use for the SSL connection
Andrew Overholt 7f96ff5
-     * @throws CoreException
Andrew Overholt 7f96ff5
-     */
Andrew Overholt 7f96ff5
-    private void createSSLConnector(InetAddress iAddress, int sslport)
Andrew Overholt 7f96ff5
-            throws CoreException {
Andrew Overholt 7f96ff5
-        // Create Connector
Andrew Overholt 7f96ff5
-        this.sslConnector = embedded.createConnector(null, sslport, false);
Andrew Overholt 7f96ff5
-        // Override defaults on CoyoteConnector
Andrew Overholt 7f96ff5
-        if (this.sslConnector instanceof CoyoteConnector) {
Andrew Overholt 7f96ff5
-            CoyoteConnector connectorImpl = (CoyoteConnector) this.sslConnector;
Andrew Overholt 7f96ff5
-            if (iAddress != null) {
Andrew Overholt 7f96ff5
-                // bug in Embedded that incorrectly sets host on connector.
Andrew Overholt 7f96ff5
-                // pass null when creating connector, and set host here if
Andrew Overholt 7f96ff5
-                // it is specified
Andrew Overholt 7f96ff5
-                connectorImpl.setAddress(iAddress.getHostAddress());
Andrew Overholt 7f96ff5
-            }
Andrew Overholt 7f96ff5
-            Preferences pref = TomcatPlugin.getDefault().getPluginPreferences();
Andrew Overholt 7f96ff5
-            int acceptCount = pref.getInt(TomcatPlugin.PREF_ACCEPT_COUNT);
Andrew Overholt 7f96ff5
-            if (acceptCount > 0) {
Andrew Overholt 7f96ff5
-                connectorImpl.setAcceptCount(acceptCount);
Andrew Overholt 7f96ff5
-            }
Andrew Overholt 7f96ff5
-            int maxProcessors = pref.getInt(TomcatPlugin.PREF_MAX_PROCESSORS);
Andrew Overholt 7f96ff5
-            if (maxProcessors > 0) {
Andrew Overholt 7f96ff5
-                connectorImpl.setMaxProcessors(maxProcessors);
Andrew Overholt 7f96ff5
-            }
Andrew Overholt 7f96ff5
-            int minProcessors = pref.getInt(TomcatPlugin.PREF_MIN_PROCESSORS);
Andrew Overholt 7f96ff5
-            if (minProcessors > 0) {
Andrew Overholt 7f96ff5
-                connectorImpl.setMinProcessors(minProcessors);
Andrew Overholt 7f96ff5
-            }
Andrew Overholt 7f96ff5
-            connectorImpl.setUseURIValidationHack(false);
Andrew Overholt 7f96ff5
-            connectorImpl.setDisableUploadTimeout(true);
Andrew Overholt 7f96ff5
-            connectorImpl.setSecure(true);
Andrew Overholt 7f96ff5
-            String scheme = pref.getString(TomcatPlugin.PREF_SSL_SCHEME);
Andrew Overholt 7f96ff5
-            if ((scheme != null) && (!("".equals(scheme.trim())))) { //$NON-NLS-1$
Andrew Overholt 7f96ff5
-                connectorImpl.setScheme(scheme);
Andrew Overholt 7f96ff5
-            }
Andrew Overholt 7f96ff5
-            connectorImpl.setEnableLookups(true);
Andrew Overholt 7f96ff5
-            CoyoteServerSocketFactory factory = new CoyoteServerSocketFactory();
Andrew Overholt 7f96ff5
-            factory.setClientAuth(false);
Andrew Overholt 7f96ff5
-            String protocol = pref.getString(TomcatPlugin.PREF_SSL_PROTOCOL);
Andrew Overholt 7f96ff5
-            if ((protocol != null) && (!("".equals(protocol.trim())))) { //$NON-NLS-1$
Andrew Overholt 7f96ff5
-                factory.setProtocol(protocol);
Andrew Overholt 7f96ff5
-            }
Andrew Overholt 7f96ff5
-            String algorithm = pref.getString(TomcatPlugin.PREF_SSL_ALGORITHM);
Andrew Overholt 7f96ff5
-            if ((algorithm != null) && (!("".equals(algorithm.trim())))) { //$NON-NLS-1$
Andrew Overholt 7f96ff5
-                factory.setAlgorithm(algorithm);
Andrew Overholt 7f96ff5
-            }
Andrew Overholt 7f96ff5
-            String keyStoreFile = pref
Andrew Overholt 7f96ff5
-                    .getString(TomcatPlugin.PREF_KEY_STORE_FILE);
Andrew Overholt 7f96ff5
-            if ((keyStoreFile != null) && (!("".equals(keyStoreFile.trim())))) { //$NON-NLS-1$
Andrew Overholt 7f96ff5
-                factory.setKeystoreFile(keyStoreFile);
Andrew Overholt 7f96ff5
-            }
Andrew Overholt 7f96ff5
-            String keyStorePassword = pref
Andrew Overholt 7f96ff5
-                    .getString(TomcatPlugin.PREF_KEY_STORE_PASSWORD);
Andrew Overholt 7f96ff5
-            if ((keyStorePassword != null)
Andrew Overholt 7f96ff5
-                    && (!("".equals(keyStorePassword.trim())))) { //$NON-NLS-1$
Andrew Overholt 7f96ff5
-                factory.setKeystorePass(keyStorePassword);
Andrew Overholt 7f96ff5
-            }
Andrew Overholt 7f96ff5
-            connectorImpl.setFactory(factory);
Andrew Overholt 7f96ff5
-            connectorImpl.setDebug(0);
Andrew Overholt 7f96ff5
-            // If there is problem in embedded.addConnector()
Andrew Overholt 7f96ff5
-            // there is no exception, so add a listener
Andrew Overholt 7f96ff5
-            connectorImpl.addLifecycleListener(new LifecycleListener() {
Andrew Overholt 7f96ff5
-                public void lifecycleEvent(LifecycleEvent event) {
Andrew Overholt 7f96ff5
-                    if ("start".equals(event.getType())) //$NON-NLS-1$
Andrew Overholt 7f96ff5
-                        running = true;
Andrew Overholt 7f96ff5
-                }
Andrew Overholt 7f96ff5
-            });
Andrew Overholt 7f96ff5
-        }
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-        // add Connector to Tomcat
Andrew Overholt 7f96ff5
-        PrintStream sysErr = System.err;
Andrew Overholt 7f96ff5
-        // reassign standard error to prevent Coyote from writing
Andrew Overholt 7f96ff5
-        // its version message there.
Andrew Overholt 7f96ff5
-        System.setErr(new PrintStream(new ByteArrayOutputStream()));
Andrew Overholt 7f96ff5
-        try {
Andrew Overholt 7f96ff5
-            embedded.addConnector(this.sslConnector);
Andrew Overholt 7f96ff5
-        } finally {
Andrew Overholt 7f96ff5
-            System.setErr(sysErr);
Andrew Overholt 7f96ff5
-        }
Andrew Overholt 7f96ff5
-    }
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-    /**
Andrew Overholt 7f96ff5
-     * Creates a {@link Realm}object using the information contained in
Andrew Overholt 7f96ff5
-     * extensions of the type org.eclipse.tomcat.realmfactory in the plugin
Andrew Overholt 7f96ff5
-     * registry.
Andrew Overholt 7f96ff5
-     * 
Andrew Overholt 7f96ff5
-     * @return the {@link Realm}object created
Andrew Overholt 7f96ff5
-     */
Andrew Overholt 7f96ff5
-    private Realm getRealm() {
Andrew Overholt 7f96ff5
-        IExtensionRegistry registry = Platform.getExtensionRegistry();
Andrew Overholt 7f96ff5
-        IExtensionPoint extensionPoint = registry.getExtensionPoint(
Andrew Overholt 7f96ff5
-                TomcatPlugin.PLUGIN_ID, "realmfactory"); //$NON-NLS-1$
Andrew Overholt 7f96ff5
-        Realm realm = null;
Andrew Overholt 7f96ff5
-        if (extensionPoint != null) {
Andrew Overholt 7f96ff5
-            IExtension[] extensions = extensionPoint.getExtensions();
Andrew Overholt 7f96ff5
-            if ((extensions != null) && (extensions.length == 1)) {
Andrew Overholt 7f96ff5
-                IConfigurationElement[] factoryElements = extensions[0]
Andrew Overholt 7f96ff5
-                        .getConfigurationElements();
Andrew Overholt 7f96ff5
-                if ((factoryElements != null) && (factoryElements.length == 1)) {
Andrew Overholt 7f96ff5
-                    try {
Andrew Overholt 7f96ff5
-                        IRealmFactory realmFactory = (IRealmFactory) factoryElements[0]
Andrew Overholt 7f96ff5
-                                .createExecutableExtension("class"); //$NON-NLS-1$
Andrew Overholt 7f96ff5
-                        realm = realmFactory.createRealm();
Andrew Overholt 7f96ff5
-                    } catch (CoreException e) {
Andrew Overholt 7f96ff5
-                        logError(
Andrew Overholt 7f96ff5
-                                TomcatResources.TomcatAppServer_getRealmFactoryFailed,
Andrew Overholt 7f96ff5
-                                e);
Andrew Overholt 7f96ff5
-                    }
Andrew Overholt 7f96ff5
-                } else {
Andrew Overholt 7f96ff5
-                    if ((factoryElements == null)
Andrew Overholt 7f96ff5
-                            || (factoryElements.length == 0)) {
Andrew Overholt 7f96ff5
-                        logError(TomcatResources.TomcatAppServer_missingFactoryElement);
Andrew Overholt 7f96ff5
-                    } else {
Andrew Overholt 7f96ff5
-                        logError(TomcatResources.TomcatAppServer_multipleFactoryElements);
Andrew Overholt 7f96ff5
-                    }
Andrew Overholt 7f96ff5
-                }
Andrew Overholt 7f96ff5
-            } else {
Andrew Overholt 7f96ff5
-                if ((extensions == null) || (extensions.length == 0)) {
Andrew Overholt 7f96ff5
-                    logError(TomcatResources.TomcatAppServer_missingRealmExtension);
Andrew Overholt 7f96ff5
-                } else {
Andrew Overholt 7f96ff5
-                    logError(TomcatResources.TomcatAppServer_multipleRealmExtensions);
Andrew Overholt 7f96ff5
-                }
Andrew Overholt 7f96ff5
-            }
Andrew Overholt 7f96ff5
-        } else {
Andrew Overholt 7f96ff5
-            logError(TomcatResources.TomcatAppServer_missingRealmExtensionPoint);
Andrew Overholt 7f96ff5
-        }
Andrew Overholt 7f96ff5
-        return realm;
Andrew Overholt 7f96ff5
-    }
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-    /**
Andrew Overholt 7f96ff5
-     * Create an error entry in the log
Andrew Overholt 7f96ff5
-     * 
Andrew Overholt 7f96ff5
-     * @param msg
Andrew Overholt 7f96ff5
-     *            error message
Andrew Overholt 7f96ff5
-     */
Andrew Overholt 7f96ff5
-    private void logError(String msg) {
Andrew Overholt 7f96ff5
-        logError(msg, null);
Andrew Overholt 7f96ff5
-    }
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-    /**
Andrew Overholt 7f96ff5
-     * Create an error entry in the log
Andrew Overholt 7f96ff5
-     * 
Andrew Overholt 7f96ff5
-     * @param msg
Andrew Overholt 7f96ff5
-     *            error message
Andrew Overholt 7f96ff5
-     * @param cause
Andrew Overholt 7f96ff5
-     *            {@link Throwable} associated with this error message
Andrew Overholt 7f96ff5
-     */
Andrew Overholt 7f96ff5
-    private void logError(String msg, Throwable cause) {
Andrew Overholt 7f96ff5
-        TomcatPlugin.logError(msg, cause);
Andrew Overholt 7f96ff5
-    }
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-    /**
Andrew Overholt 7f96ff5
-     * @see org.eclipse.help.internal.appserver.IWebappServer#start(java.lang.String,
Andrew Overholt 7f96ff5
-     *      org.eclipse.core.runtime.IPath, java.lang.ClassLoader)
Andrew Overholt 7f96ff5
-     */
Andrew Overholt 7f96ff5
-    public synchronized void start(String webappName, IPath path, ClassLoader customLoader)
Andrew Overholt 7f96ff5
-            throws CoreException {
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-        if (!isStarted) {
Andrew Overholt 7f96ff5
-            start(port, hostAddress);
Andrew Overholt 7f96ff5
-        }
Andrew Overholt 7f96ff5
-        if (!running) {
Andrew Overholt 7f96ff5
-            throw new CoreException(new Status(IStatus.ERROR,
Andrew Overholt 7f96ff5
-                    TomcatPlugin.PLUGIN_ID, IStatus.OK, NLS.bind(
Andrew Overholt 7f96ff5
-                            TomcatResources.TomcatAppServer_addingWebapp,
Andrew Overholt 7f96ff5
-                            webappName, path.toOSString()), null));
Andrew Overholt 7f96ff5
-        }
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-        String contextPath = webappName;
Andrew Overholt 7f96ff5
-        if (!contextPath.startsWith("/")) { //$NON-NLS-1$
Andrew Overholt 7f96ff5
-            contextPath = "/" + contextPath; //$NON-NLS-1$
Andrew Overholt 7f96ff5
-        }
Andrew Overholt 7f96ff5
-        try {
Andrew Overholt 7f96ff5
-            Context context = embedded.createContext(contextPath, path
Andrew Overholt 7f96ff5
-                    .toOSString());
Andrew Overholt 7f96ff5
-            if (context instanceof StandardContext) {
Andrew Overholt 7f96ff5
-                ((StandardContext) context)
Andrew Overholt 7f96ff5
-                        .setWorkDir(getWorkingDirectory(webappName));
Andrew Overholt 7f96ff5
-            }
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-            WebAppClassLoader webappLoader = new WebAppClassLoader(customLoader);
Andrew Overholt 7f96ff5
-            context.setLoader(embedded.createLoader(webappLoader));
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-            host.addChild(context);
Andrew Overholt 7f96ff5
-            contexts.add(context);
Andrew Overholt 7f96ff5
-        } catch (Exception exc) {
Andrew Overholt 7f96ff5
-            throw new CoreException(new Status(IStatus.ERROR,
Andrew Overholt 7f96ff5
-                    TomcatPlugin.PLUGIN_ID, IStatus.OK, NLS.bind(
Andrew Overholt 7f96ff5
-                            "TomcatAppServer.addingWebapp", webappName, path //$NON-NLS-1$
Andrew Overholt 7f96ff5
-                                    .toOSString()), exc));
Andrew Overholt 7f96ff5
-        }
Andrew Overholt 7f96ff5
-    }
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-    /**
Andrew Overholt 7f96ff5
-     * @see org.eclipse.help.internal.appserver.IWebappServer#stop(java.lang.String)
Andrew Overholt 7f96ff5
-     */
Andrew Overholt 7f96ff5
-    public synchronized void stop(String webappName) throws CoreException {
Andrew Overholt 7f96ff5
-        if (!running) {
Andrew Overholt 7f96ff5
-            return;
Andrew Overholt 7f96ff5
-        }
Andrew Overholt 7f96ff5
-        Context context = (Context) host.findChild("/" + webappName); //$NON-NLS-1$
Andrew Overholt 7f96ff5
-        if (context != null) {
Andrew Overholt 7f96ff5
-        	contexts.remove(context);
Andrew Overholt 7f96ff5
-            embedded.removeContext(context);
Andrew Overholt 7f96ff5
-        }
Andrew Overholt 7f96ff5
-    }
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-    /**
Andrew Overholt 7f96ff5
-     * @see org.eclipse.help.internal.appserver.IWebappServer#getHost()
Andrew Overholt 7f96ff5
-     */
Andrew Overholt 7f96ff5
-    public String getHost() {
Andrew Overholt 7f96ff5
-        if (!running) {
Andrew Overholt 7f96ff5
-            return null;
Andrew Overholt 7f96ff5
-        }
Andrew Overholt 7f96ff5
-        return hostAddress;
Andrew Overholt 7f96ff5
-    }
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-    /**
Andrew Overholt 7f96ff5
-     * @see org.eclipse.help.internal.appserver.IWebappServer#getPort()
Andrew Overholt 7f96ff5
-     */
Andrew Overholt 7f96ff5
-    public int getPort() {
Andrew Overholt 7f96ff5
-        if (!running) {
Andrew Overholt 7f96ff5
-            return 0;
Andrew Overholt 7f96ff5
-        }
Andrew Overholt 7f96ff5
-        return port;
Andrew Overholt 7f96ff5
-    }
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-    /**
Andrew Overholt 7f96ff5
-     * @see org.eclipse.help.internal.appserver.IWebappServer#isRunning()
Andrew Overholt 7f96ff5
-     */
Andrew Overholt 7f96ff5
-    public boolean isRunning() {
Andrew Overholt 7f96ff5
-        return running;
Andrew Overholt 7f96ff5
-    }
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-    /**
Andrew Overholt 7f96ff5
-     * @see org.eclipse.help.internal.appserver.IWebappServer#stop()
Andrew Overholt 7f96ff5
-     */
Andrew Overholt 7f96ff5
-    public synchronized void stop() throws CoreException {
Andrew Overholt 7f96ff5
-        if (!running) {
Andrew Overholt 7f96ff5
-            return;
Andrew Overholt 7f96ff5
-        }
Andrew Overholt 7f96ff5
-        running = false;
Andrew Overholt 7f96ff5
-        // Remove all contexts
Andrew Overholt 7f96ff5
-        for(int i = 0; i< contexts.size(); i++){
Andrew Overholt 7f96ff5
-            embedded.removeContext((Context)contexts.get(i));
Andrew Overholt 7f96ff5
-           	contexts.remove(contexts.get(i));
Andrew Overholt 7f96ff5
-        }
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-        // Remove the sslConnector, if present.
Andrew Overholt 7f96ff5
-        try {
Andrew Overholt 7f96ff5
-            if (sslConnector != null) {
Andrew Overholt 7f96ff5
-                embedded.removeConnector(this.sslConnector);
Andrew Overholt 7f96ff5
-            }
Andrew Overholt 7f96ff5
-        } catch (Exception exc) {
Andrew Overholt 7f96ff5
-            throw new CoreException(new Status(IStatus.ERROR,
Andrew Overholt 7f96ff5
-                    TomcatPlugin.PLUGIN_ID, IStatus.OK,
Andrew Overholt 7f96ff5
-                    TomcatResources.TomcatAppServer_sslConnectorRemove, 
Andrew Overholt 7f96ff5
-                    exc));
Andrew Overholt 7f96ff5
-        }
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-        // Remove the HTTP Connector, if present.
Andrew Overholt 7f96ff5
-        try {
Andrew Overholt 7f96ff5
-            if (httpConnector != null) {
Andrew Overholt 7f96ff5
-                embedded.removeConnector(this.httpConnector);
Andrew Overholt 7f96ff5
-            }
Andrew Overholt 7f96ff5
-        } catch (Exception exc) {
Andrew Overholt 7f96ff5
-            throw new CoreException(new Status(IStatus.ERROR,
Andrew Overholt 7f96ff5
-                    TomcatPlugin.PLUGIN_ID, IStatus.OK,
Andrew Overholt 7f96ff5
-                    TomcatResources.TomcatAppServer_httpConnectorRemove, 
Andrew Overholt 7f96ff5
-                    exc));
Andrew Overholt 7f96ff5
-        }
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-        // Remove the engine (which should trigger removing the connector)
Andrew Overholt 7f96ff5
-        try {
Andrew Overholt 7f96ff5
-            embedded.removeEngine(engine);
Andrew Overholt 7f96ff5
-        } catch (Exception exc) {
Andrew Overholt 7f96ff5
-            throw new CoreException(new Status(IStatus.ERROR,
Andrew Overholt 7f96ff5
-                    TomcatPlugin.PLUGIN_ID, IStatus.OK,
Andrew Overholt 7f96ff5
-                    TomcatResources.TomcatAppServer_engineRemove, 
Andrew Overholt 7f96ff5
-                    exc));
Andrew Overholt 7f96ff5
-        }
Andrew Overholt 7f96ff5
-        // Shut down this tomcat server (should have nothing left to do)
Andrew Overholt 7f96ff5
-        try {
Andrew Overholt 7f96ff5
-            embedded.stop();
Andrew Overholt 7f96ff5
-        } catch (LifecycleException e) {
Andrew Overholt 7f96ff5
-            throw new CoreException(new Status(IStatus.ERROR,
Andrew Overholt 7f96ff5
-                    TomcatPlugin.PLUGIN_ID, IStatus.OK,
Andrew Overholt 7f96ff5
-                    TomcatResources.TomcatAppServer_embeddedStop, 
Andrew Overholt 7f96ff5
-                    e));
Andrew Overholt 7f96ff5
-        }
Andrew Overholt 7f96ff5
-        isStarted = false;
Andrew Overholt 7f96ff5
-    }
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-    private String getWorkingDirectory(String webApp) {
Andrew Overholt 7f96ff5
-        return TomcatPlugin.getDefault().getStateLocation().append(webApp)
Andrew Overholt 7f96ff5
-                .toOSString();
Andrew Overholt 7f96ff5
-    }
Andrew Overholt 7f96ff5
-}
Andrew Overholt 7f96ff5
+/*******************************************************************************
Andrew Overholt 7f96ff5
+ * Copyright (c) 2000, 2006 IBM Corporation and others.
Andrew Overholt 7f96ff5
+ * All rights reserved. This program and the accompanying materials
Andrew Overholt 7f96ff5
+ * are made available under the terms of the Eclipse Public License v1.0
Andrew Overholt 7f96ff5
+ * which accompanies this distribution, and is available at
Andrew Overholt 7f96ff5
+ * http://www.eclipse.org/legal/epl-v10.html
Andrew Overholt 7f96ff5
+ * 
Andrew Overholt 7f96ff5
+ * Contributors:
Andrew Overholt 7f96ff5
+ *     IBM Corporation - initial API and implementation
Andrew Overholt 7f96ff5
+ *******************************************************************************/
Andrew Overholt 7f96ff5
+package org.eclipse.tomcat.internal;
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+import java.io.ByteArrayOutputStream;
Andrew Overholt 7f96ff5
+import java.io.PrintStream;
Andrew Overholt 7f96ff5
+import java.net.InetAddress;
Andrew Overholt 7f96ff5
+import java.net.URL;
Andrew Overholt 7f96ff5
+import java.net.UnknownHostException;
Andrew Overholt 7f96ff5
+import java.util.ArrayList;
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+import mx4j.log.FileLogger;
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+import org.apache.catalina.Context;
Andrew Overholt 7f96ff5
+import org.apache.catalina.Engine;
Andrew Overholt 7f96ff5
+import org.apache.catalina.Host;
Andrew Overholt 7f96ff5
+import org.apache.catalina.Lifecycle;
Andrew Overholt 7f96ff5
+import org.apache.catalina.LifecycleEvent;
Andrew Overholt 7f96ff5
+import org.apache.catalina.LifecycleException;
Andrew Overholt 7f96ff5
+import org.apache.catalina.LifecycleListener;
Andrew Overholt 7f96ff5
+import org.apache.catalina.Realm;
Andrew Overholt 7f96ff5
+import org.apache.catalina.connector.Connector;
Andrew Overholt 7f96ff5
+import org.apache.catalina.core.StandardContext;
Andrew Overholt 7f96ff5
+import org.apache.catalina.core.StandardHost;
Andrew Overholt 7f96ff5
+import org.apache.catalina.realm.MemoryRealm;
Andrew Overholt 7f96ff5
+import org.apache.catalina.startup.Embedded;
Andrew Overholt 7f96ff5
+import org.apache.coyote.http11.Http11Protocol;
Andrew Overholt 7f96ff5
+import org.apache.tomcat.util.net.jsse.JSSEImplementation;
Andrew Overholt 7f96ff5
+import org.eclipse.core.runtime.CoreException;
Andrew Overholt 7f96ff5
+import org.eclipse.core.runtime.IConfigurationElement;
Andrew Overholt 7f96ff5
+import org.eclipse.core.runtime.IExtension;
Andrew Overholt 7f96ff5
+import org.eclipse.core.runtime.IExtensionPoint;
Andrew Overholt 7f96ff5
+import org.eclipse.core.runtime.IExtensionRegistry;
Andrew Overholt 7f96ff5
+import org.eclipse.core.runtime.IPath;
Andrew Overholt 7f96ff5
+import org.eclipse.core.runtime.IStatus;
Andrew Overholt 7f96ff5
+import org.eclipse.core.runtime.Platform;
Andrew Overholt 7f96ff5
+import org.eclipse.core.runtime.Preferences;
Andrew Overholt 7f96ff5
+import org.eclipse.core.runtime.Status;
Andrew Overholt 7f96ff5
+import org.eclipse.help.internal.appserver.IWebappServer;
Andrew Overholt 7f96ff5
+import org.eclipse.osgi.util.NLS;
Andrew Overholt 7f96ff5
+import org.eclipse.tomcat.internal.extensions.IRealmFactory;
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+/**
Andrew Overholt 7f96ff5
+ * Single engine, single host, single connector Tomcat Application Server.
Andrew Overholt 7f96ff5
+ */
Andrew Overholt 7f96ff5
+public class TomcatAppServer implements IWebappServer {
Andrew Overholt 7f96ff5
+    /**
Andrew Overholt 7f96ff5
+     * Specify this reserved value for the SSL port # to indicate that SSL
Andrew Overholt 7f96ff5
+     * should not be used
Andrew Overholt 7f96ff5
+     */
Andrew Overholt 7f96ff5
+    public final static int SSL_DISABLED = -1;
Andrew Overholt 7f96ff5
+    
Andrew Overholt 7f96ff5
+    private final static String NULL = null;
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+    private String hostAddress;
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+    private int port;
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+    private int sslPort = SSL_DISABLED;
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+    // false until an attempt to start Tomcat
Andrew Overholt 7f96ff5
+    private boolean isStarted = false;
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+    // true after started without problems
Andrew Overholt 7f96ff5
+    private boolean running = false;
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+    private Embedded embedded = null;
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+    private Engine engine = null;
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+    private Host host = null;
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+    private Connector httpConnector = null;
Andrew Overholt 7f96ff5
+    private boolean hasConnection = false; 
Andrew Overholt 7f96ff5
+    private Connector sslConnector = null;
Andrew Overholt 7f96ff5
+    private boolean hasSSLConnection = false;
Andrew Overholt 7f96ff5
+    // Con
Andrew Overholt 7f96ff5
+    private ArrayList contexts = new ArrayList();
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+    /**
Andrew Overholt 7f96ff5
+     * Constructs this class, but does not instantiates or start Tomcat classes
Andrew Overholt 7f96ff5
+     * until webapp are added.
Andrew Overholt 7f96ff5
+     */
Andrew Overholt 7f96ff5
+    public TomcatAppServer() {
Andrew Overholt 7f96ff5
+    }
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+    /**
Andrew Overholt 7f96ff5
+     * @see org.eclipse.help.internal.appserver.IWebappServer#start(int,
Andrew Overholt 7f96ff5
+     *      java.lang.String)
Andrew Overholt 7f96ff5
+     */
Andrew Overholt 7f96ff5
+    public synchronized void start(int port, String hostAddress) throws CoreException {
Andrew Overholt 7f96ff5
+        // if null passed for hostAddress, use local host
Andrew Overholt 7f96ff5
+        if (hostAddress == null) {
Andrew Overholt 7f96ff5
+            this.hostAddress = "127.0.0.1"; //$NON-NLS-1$
Andrew Overholt 7f96ff5
+        } else {
Andrew Overholt 7f96ff5
+        	this.hostAddress = hostAddress;
Andrew Overholt 7f96ff5
+        }
Andrew Overholt 7f96ff5
+        InetAddress iAddress = null;
Andrew Overholt 7f96ff5
+        
Andrew Overholt 7f96ff5
+        //Defaults to LOCALHOST
Andrew Overholt 7f96ff5
+        try{
Andrew Overholt 7f96ff5
+              iAddress = InetAddress.getByName(this.hostAddress);
Andrew Overholt 7f96ff5
+        } catch (UnknownHostException uhe) {
Andrew Overholt 7f96ff5
+                // will default to all interfaces
Andrew Overholt 7f96ff5
+         }
Andrew Overholt 7f96ff5
+        
Andrew Overholt 7f96ff5
+        String hostname = iAddress.getHostName();
Andrew Overholt 7f96ff5
+        
Andrew Overholt 7f96ff5
+        this.port = port;
Andrew Overholt 7f96ff5
+        if (isStarted) {
Andrew Overholt 7f96ff5
+            return;
Andrew Overholt 7f96ff5
+        }
Andrew Overholt 7f96ff5
+        isStarted = true;
Andrew Overholt 7f96ff5
+        try {
Andrew Overholt 7f96ff5
+            embedded = new Embedded(new MemoryRealm());
Andrew Overholt 7f96ff5
+            URL installURL = TomcatPlugin.getDefault().getBundle()
Andrew Overholt 7f96ff5
+                    .getEntry("/"); //$NON-NLS-1$
Andrew Overholt 7f96ff5
+            URL resolvedURL = Platform.resolve(installURL);
Andrew Overholt 7f96ff5
+            String home = Platform.asLocalURL(resolvedURL).getFile();
Andrew Overholt 7f96ff5
+            System.setProperty("catalina.home", home); //$NON-NLS-1$
Andrew Overholt 7f96ff5
+            String base = home;
Andrew Overholt 7f96ff5
+            System.setProperty("catalina.base", base); //$NON-NLS-1$
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+            // Set up realm if one found
Andrew Overholt 7f96ff5
+            if (TomcatPlugin.getDefault().getPluginPreferences().getInt(
Andrew Overholt 7f96ff5
+                    TomcatPlugin.PREF_SSL_PORT) >= 0) {
Andrew Overholt 7f96ff5
+                Realm realm = getRealm();
Andrew Overholt 7f96ff5
+                embedded.setRealm(realm);
Andrew Overholt 7f96ff5
+            }
Andrew Overholt 7f96ff5
+            //the embedded application is now started by using embedded.start()
Andrew Overholt 7f96ff5
+            embedded.addLifecycleListener(new LifecycleListener(){
Andrew Overholt 7f96ff5
+	                public void lifecycleEvent(LifecycleEvent event) {
Andrew Overholt 7f96ff5
+	                    if (Lifecycle.START_EVENT.equals(event.getType())) 
Andrew Overholt 7f96ff5
+	                        running = true;
Andrew Overholt 7f96ff5
+	                }
Andrew Overholt 7f96ff5
+    	
Andrew Overholt 7f96ff5
+            });
Andrew Overholt 7f96ff5
+            // start now, and then add all the contexts..
Andrew Overholt 7f96ff5
+            embedded.start();
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+            // Create a very basic container hierarchy
Andrew Overholt 7f96ff5
+            engine = embedded.createEngine();
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+            host = embedded.createHost(hostname, home + "webapps"); //$NON-NLS-1$
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+            // all request go to our only host
Andrew Overholt 7f96ff5
+            engine.setDefaultHost(host.getName());
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+            if (host instanceof StandardHost) {
Andrew Overholt 7f96ff5
+                ((StandardHost) host)
Andrew Overholt 7f96ff5
+                        .setErrorReportValveClass("org.eclipse.tomcat.internal.EclipseErrorReportValve"); //$NON-NLS-1$
Andrew Overholt 7f96ff5
+            }
Andrew Overholt 7f96ff5
+            
Andrew Overholt 7f96ff5
+            engine.addChild(host);
Andrew Overholt 7f96ff5
+            
Andrew Overholt 7f96ff5
+            // Install the assembled container hierarchy
Andrew Overholt 7f96ff5
+            PrintStream sysOut = System.out;
Andrew Overholt 7f96ff5
+            // reassign standard output to prevent Tomcat from writing
Andrew Overholt 7f96ff5
+            // its version message there.
Andrew Overholt 7f96ff5
+            System.setOut(new PrintStream(new ByteArrayOutputStream()));
Andrew Overholt 7f96ff5
+            try {
Andrew Overholt 7f96ff5
+                embedded.addEngine(engine);
Andrew Overholt 7f96ff5
+            } finally {
Andrew Overholt 7f96ff5
+                System.setOut(sysOut);
Andrew Overholt 7f96ff5
+            }
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+            // Root context
Andrew Overholt 7f96ff5
+            Context root = embedded.createContext("", home + "webapps/ROOT"); //$NON-NLS-1$ //$NON-NLS-2$
Andrew Overholt 7f96ff5
+            // this line should be replaced once tomcat provides support
Andrew Overholt 7f96ff5
+            // for setting the working directory
Andrew Overholt 7f96ff5
+            if (root instanceof StandardContext) {
Andrew Overholt 7f96ff5
+                ((StandardContext) root)
Andrew Overholt 7f96ff5
+                        .setWorkDir(getWorkingDirectory("ROOT")); //$NON-NLS-1$
Andrew Overholt 7f96ff5
+            }
Andrew Overholt 7f96ff5
+            root.setLoader(embedded.createLoader(this.getClass()
Andrew Overholt 7f96ff5
+                    .getClassLoader()));
Andrew Overholt 7f96ff5
+            
Andrew Overholt 7f96ff5
+            host.addChild(root);
Andrew Overholt 7f96ff5
+            contexts.add(root);
Andrew Overholt 7f96ff5
+ 
Andrew Overholt 7f96ff5
+            updateSslPort(iAddress);
Andrew Overholt 7f96ff5
+            if (this.port == 0) {
Andrew Overholt 7f96ff5
+                this.port = SocketUtil.findUnusedLocalPort(iAddress);
Andrew Overholt 7f96ff5
+                if (this.port == -1) {
Andrew Overholt 7f96ff5
+                    throw new CoreException(
Andrew Overholt 7f96ff5
+                            new Status(
Andrew Overholt 7f96ff5
+                                    IStatus.ERROR,
Andrew Overholt 7f96ff5
+                                    TomcatPlugin.PLUGIN_ID,
Andrew Overholt 7f96ff5
+                                    IStatus.OK,
Andrew Overholt 7f96ff5
+                                    TomcatResources.TomcatAppServer_start_CannotObtainPort, 
Andrew Overholt 7f96ff5
+                                    null));
Andrew Overholt 7f96ff5
+                }
Andrew Overholt 7f96ff5
+            }
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+             // Create Connector
Andrew Overholt 7f96ff5
+            Connector connector = embedded.createConnector(iAddress.getHostAddress(), this.port,false);;
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+            Preferences pref = TomcatPlugin.getDefault()
Andrew Overholt 7f96ff5
+                    .getPluginPreferences();
Andrew Overholt 7f96ff5
+            /**
Andrew Overholt 7f96ff5
+             * To extend additional properties, make use of org.apache.tomcat.util.IntrospectionUtils
Andrew Overholt 7f96ff5
+             * A Connector will initialize a protocolhandler defaults to org.apache.coyote.http11.Http11Protocol
Andrew Overholt 7f96ff5
+             * format : connector.setProperty("STRING_PROP_NAME","STRING_PROP_VALUE");
Andrew Overholt 7f96ff5
+             *  
Andrew Overholt 7f96ff5
+             */
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+            int acceptCount = pref.getInt(TomcatPlugin.PREF_ACCEPT_COUNT);
Andrew Overholt 7f96ff5
+            if (acceptCount > 0) {
Andrew Overholt 7f96ff5
+                connector.setProperty("backlog",""+acceptCount); //$NON-NLS-1$ //$NON-NLS-2$
Andrew Overholt 7f96ff5
+            }
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+            int maxProcessors = pref
Andrew Overholt 7f96ff5
+                    .getInt(TomcatPlugin.PREF_MAX_PROCESSORS);
Andrew Overholt 7f96ff5
+            if (maxProcessors > 0) {
Andrew Overholt 7f96ff5
+            	connector.setProperty("maxThreads",""+maxProcessors); //$NON-NLS-1$ //$NON-NLS-2$
Andrew Overholt 7f96ff5
+            }
Andrew Overholt 7f96ff5
+            
Andrew Overholt 7f96ff5
+            int minProcessors = pref
Andrew Overholt 7f96ff5
+                    .getInt(TomcatPlugin.PREF_MIN_PROCESSORS);
Andrew Overholt 7f96ff5
+            if (minProcessors > 0) {
Andrew Overholt 7f96ff5
+            	connector.setProperty("minSpareThreads",""+minProcessors); //$NON-NLS-1$ //$NON-NLS-2$
Andrew Overholt 7f96ff5
+            }
Andrew Overholt 7f96ff5
+            
Andrew Overholt 7f96ff5
+            if (this.sslPort > 0) {
Andrew Overholt 7f96ff5
+                connector.setRedirectPort(this.sslPort);
Andrew Overholt 7f96ff5
+                connector.setEnableLookups(true);
Andrew Overholt 7f96ff5
+                connector.setProperty("soTimeout",""+20000); //$NON-NLS-1$ //$NON-NLS-2$
Andrew Overholt 7f96ff5
+                //connector.setUseURIValidationHack(false); no longer available
Andrew Overholt 7f96ff5
+                connector.setUseBodyEncodingForURI(false);
Andrew Overholt 7f96ff5
+                String disableUploadTimeout = pref.getString(TomcatPlugin.DISABLE_UPLOAD_TIMEOUT);
Andrew Overholt 7f96ff5
+                if ((disableUploadTimeout != null) && (!("".equals(disableUploadTimeout.trim())))) { //$NON-NLS-1$
Andrew Overholt 7f96ff5
+                    connector.setProperty("disableUploadTimeout", disableUploadTimeout); //$NON-NLS-1$
Andrew Overholt 7f96ff5
+                }
Andrew Overholt 7f96ff5
+            }
Andrew Overholt 7f96ff5
+            // connectorImpl.setDebug(0);
Andrew Overholt 7f96ff5
+            // If there is problem in embedded.addConnector()
Andrew Overholt 7f96ff5
+            // there is no exception, so add a listener
Andrew Overholt 7f96ff5
+            connector.addLifecycleListener(new LifecycleListener() {
Andrew Overholt 7f96ff5
+                public void lifecycleEvent(LifecycleEvent event) {
Andrew Overholt 7f96ff5
+                    if (Lifecycle.START_EVENT.equals(event.getType())) 
Andrew Overholt 7f96ff5
+                        hasConnection = true;
Andrew Overholt 7f96ff5
+                }
Andrew Overholt 7f96ff5
+            });
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+            // add Connector to Tomcat
Andrew Overholt 7f96ff5
+            PrintStream sysErr = System.err;
Andrew Overholt 7f96ff5
+            // reassign standard error to prevent Coyote from writing
Andrew Overholt 7f96ff5
+            // its version message there.
Andrew Overholt 7f96ff5
+            System.setErr(new PrintStream(new ByteArrayOutputStream()));
Andrew Overholt 7f96ff5
+            try {
Andrew Overholt 7f96ff5
+            	this.httpConnector = connector;
Andrew Overholt 7f96ff5
+                embedded.addConnector(this.httpConnector);
Andrew Overholt 7f96ff5
+                httpConnector.start();
Andrew Overholt 7f96ff5
+            } finally {
Andrew Overholt 7f96ff5
+                System.setErr(sysErr);
Andrew Overholt 7f96ff5
+            }
Andrew Overholt 7f96ff5
+            if (this.sslPort > 0) {
Andrew Overholt 7f96ff5
+                createSSLConnector(iAddress, this.sslPort);
Andrew Overholt 7f96ff5
+            }
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+            // running = true;
Andrew Overholt 7f96ff5
+            TomcatPlugin.getDefault().setAppserver(this);
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+        } catch (Exception exc) {
Andrew Overholt 7f96ff5
+            TomcatPlugin
Andrew Overholt 7f96ff5
+                    .logError(
Andrew Overholt 7f96ff5
+                            "Exception occurred starting the embedded application server.", //$NON-NLS-1$
Andrew Overholt 7f96ff5
+                            exc);
Andrew Overholt 7f96ff5
+            if (exc instanceof CoreException) {
Andrew Overholt 7f96ff5
+                throw (CoreException) exc;
Andrew Overholt 7f96ff5
+            }
Andrew Overholt 7f96ff5
+            throw new CoreException(new Status(IStatus.ERROR,
Andrew Overholt 7f96ff5
+            		TomcatPlugin.PLUGIN_ID, IStatus.OK,
Andrew Overholt 7f96ff5
+            		TomcatResources.TomcatAppServer_start, 
Andrew Overholt 7f96ff5
+            		exc));
Andrew Overholt 7f96ff5
+        }
Andrew Overholt 7f96ff5
+        if (!running) {
Andrew Overholt 7f96ff5
+            throw new CoreException(new Status(IStatus.ERROR,
Andrew Overholt 7f96ff5
+                    TomcatPlugin.PLUGIN_ID, IStatus.OK,
Andrew Overholt 7f96ff5
+                    TomcatResources.TomcatAppServer_start, null)); 
Andrew Overholt 7f96ff5
+        }
Andrew Overholt 7f96ff5
+    }
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+    /**
Andrew Overholt 7f96ff5
+     * Update {@link sslPort} to refer an appropriate port. If the user set
Andrew Overholt 7f96ff5
+     * sslPort to 0, an arbitrary free port will be used.
Andrew Overholt 7f96ff5
+     * 
Andrew Overholt 7f96ff5
+     * @param iAddress
Andrew Overholt 7f96ff5
+     *            {@link InetAddress} object representing the machine hosting
Andrew Overholt 7f96ff5
+     *            the help system
Andrew Overholt 7f96ff5
+     * @return port number of use for the SSL connection
Andrew Overholt 7f96ff5
+     * @throws CoreException
Andrew Overholt 7f96ff5
+     */
Andrew Overholt 7f96ff5
+    private int updateSslPort(InetAddress iAddress) throws CoreException {
Andrew Overholt 7f96ff5
+        this.sslPort = TomcatPlugin.getDefault().getPluginPreferences().getInt(
Andrew Overholt 7f96ff5
+                TomcatPlugin.PREF_SSL_PORT);
Andrew Overholt 7f96ff5
+        if (this.sslPort == 0) {
Andrew Overholt 7f96ff5
+            this.sslPort = SocketUtil.findUnusedLocalPort(iAddress); 
Andrew Overholt 7f96ff5
+            if (this.sslPort == -1) {
Andrew Overholt 7f96ff5
+                throw new CoreException(new Status(IStatus.ERROR,
Andrew Overholt 7f96ff5
+                        TomcatPlugin.PLUGIN_ID, IStatus.OK,
Andrew Overholt 7f96ff5
+                        TomcatResources.TomcatAppServer_start_CannotObtainPort, 
Andrew Overholt 7f96ff5
+                        null));
Andrew Overholt 7f96ff5
+            }
Andrew Overholt 7f96ff5
+        }
Andrew Overholt 7f96ff5
+        return this.sslPort;
Andrew Overholt 7f96ff5
+    }
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+    /**
Andrew Overholt 7f96ff5
+     * @param iAddress
Andrew Overholt 7f96ff5
+     *            InetAddress representing the machine hosting the help system.
Andrew Overholt 7f96ff5
+     * @param sslport
Andrew Overholt 7f96ff5
+     *            port # to use for the SSL connection
Andrew Overholt 7f96ff5
+     * @throws CoreException
Andrew Overholt 7f96ff5
+     */
Andrew Overholt 7f96ff5
+    private void createSSLConnector(InetAddress iAddress, int sslport)
Andrew Overholt 7f96ff5
+            throws CoreException {  	
Andrew Overholt 7f96ff5
+       
Andrew Overholt 7f96ff5
+        // Create Connector
Andrew Overholt 7f96ff5
+    	//Defaults to local if IAddress is null
Andrew Overholt 7f96ff5
+        Connector connector = embedded.createConnector(iAddress.getHostAddress(), this.port,false);
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+        //--------------------create the Protocol-----------------------//
Andrew Overholt 7f96ff5
+        Preferences pref = TomcatPlugin.getDefault().getPluginPreferences();
Andrew Overholt 7f96ff5
+        /**
Andrew Overholt 7f96ff5
+         * To extend additional properties, make use of org.apache.tomcat.util.IntrospectionUtils
Andrew Overholt 7f96ff5
+         * A Connector will initialize a protocolhandler which initialize a SSLImplementation which initialize
Andrew Overholt 7f96ff5
+         * a ServerSocketFactory
Andrew Overholt 7f96ff5
+         * format : connector.setProperty("STRING_PROP_NAME","STRING_PROP_VALUE");
Andrew Overholt 7f96ff5
+         *  
Andrew Overholt 7f96ff5
+         */
Andrew Overholt 7f96ff5
+        //----------------configure connector -------------------------------//
Andrew Overholt 7f96ff5
+        // by looking at the code, it seems like the protocol go in first
Andrew Overholt 7f96ff5
+	   	String protocol = pref.getString(TomcatPlugin.PREF_SSL_PROTOCOL);
Andrew Overholt 7f96ff5
+	    if ((protocol != null) && (!("".equals(protocol.trim())))) { //$NON-NLS-1$
Andrew Overholt 7f96ff5
+	        connector.setProperty("protocol",protocol); //$NON-NLS-1$
Andrew Overholt 7f96ff5
+	    }
Andrew Overholt 7f96ff5
+	   	String protocols = pref.getString(TomcatPlugin.PREF_SSL_PROTOCOLS);
Andrew Overholt 7f96ff5
+	    if ((protocols != null) && (!("".equals(protocols.trim())))) { //$NON-NLS-1$
Andrew Overholt 7f96ff5
+	        connector.setProperty("protocols",protocols); //$NON-NLS-1$
Andrew Overholt 7f96ff5
+	    }
Andrew Overholt 7f96ff5
+        String protocolClassName = Http11Protocol.class.getName(); 
Andrew Overholt 7f96ff5
+        connector.setProtocol(protocolClassName);
Andrew Overholt 7f96ff5
+        
Andrew Overholt 7f96ff5
+        String JSSEImplementationName = JSSEImplementation.class.getName();
Andrew Overholt 7f96ff5
+        connector.setProperty("sslImplementation",JSSEImplementationName); //$NON-NLS-1$
Andrew Overholt 7f96ff5
+        
Andrew Overholt 7f96ff5
+        String disableUploadTimeout = pref.getString(TomcatPlugin.DISABLE_UPLOAD_TIMEOUT);
Andrew Overholt 7f96ff5
+        if ((disableUploadTimeout != null) && (!("".equals(disableUploadTimeout.trim())))) { //$NON-NLS-1$
Andrew Overholt 7f96ff5
+            connector.setProperty("disableUploadTimeout", disableUploadTimeout); //$NON-NLS-1$
Andrew Overholt 7f96ff5
+        }
Andrew Overholt 7f96ff5
+        
Andrew Overholt 7f96ff5
+        String algorithm = pref.getString(TomcatPlugin.PREF_SSL_ALGORITHM);
Andrew Overholt 7f96ff5
+        if ((algorithm != null) && (!("".equals(algorithm.trim())))) { //$NON-NLS-1$
Andrew Overholt 7f96ff5
+            connector.setProperty("algorithm", algorithm); //$NON-NLS-1$
Andrew Overholt 7f96ff5
+        }
Andrew Overholt 7f96ff5
+        int maxProcessors = pref.getInt(TomcatPlugin.PREF_MAX_PROCESSORS);
Andrew Overholt 7f96ff5
+        if (maxProcessors > 0) {
Andrew Overholt 7f96ff5
+            //connector.setMaxProcessors(maxProcessors);
Andrew Overholt 7f96ff5
+        	connector.setProperty("maxThreads",""+maxProcessors); //$NON-NLS-1$ //$NON-NLS-2$
Andrew Overholt 7f96ff5
+        }
Andrew Overholt 7f96ff5
+        int minProcessors = pref.getInt(TomcatPlugin.PREF_MIN_PROCESSORS);
Andrew Overholt 7f96ff5
+        if (minProcessors > 0) {
Andrew Overholt 7f96ff5
+            //connector.setMinProcessors(minProcessors);
Andrew Overholt 7f96ff5
+        	connector.setProperty("minSpareThreads",""+minProcessors); //$NON-NLS-1$ //$NON-NLS-2$
Andrew Overholt 7f96ff5
+        }
Andrew Overholt 7f96ff5
+        //this is making use of org.apache.tomcat.util.IntrospectionUtils 
Andrew Overholt 7f96ff5
+        connector.setProperty("disableUploadTimeout",""+true);  //$NON-NLS-1$ //$NON-NLS-2$
Andrew Overholt 7f96ff5
+	   	String clientauth = pref.getString(TomcatPlugin.PREF_CLIENT_AUTHENTICATION);
Andrew Overholt 7f96ff5
+	    if ((clientauth != null) && (!("".equals(clientauth.trim())))) { //$NON-NLS-1$
Andrew Overholt 7f96ff5
+	        connector.setProperty("clientauth",clientauth); //$NON-NLS-1$
Andrew Overholt 7f96ff5
+	    }
Andrew Overholt 7f96ff5
+    
Andrew Overholt 7f96ff5
+        int acceptCount = pref.getInt(TomcatPlugin.PREF_ACCEPT_COUNT);
Andrew Overholt 7f96ff5
+        if (acceptCount > 0) {
Andrew Overholt 7f96ff5
+            connector.setProperty("backlog",""+acceptCount); //$NON-NLS-1$ //$NON-NLS-2$
Andrew Overholt 7f96ff5
+        }
Andrew Overholt 7f96ff5
+        
Andrew Overholt 7f96ff5
+        String keyStoreFile = pref
Andrew Overholt 7f96ff5
+        .getString(TomcatPlugin.PREF_KEY_STORE_FILE);
Andrew Overholt 7f96ff5
+		if ((keyStoreFile != null) && (!("".equals(keyStoreFile.trim())))) { //$NON-NLS-1$
Andrew Overholt 7f96ff5
+			connector.setProperty("keystore", keyStoreFile); //$NON-NLS-1$
Andrew Overholt 7f96ff5
+		}
Andrew Overholt 7f96ff5
+        String keyStorePassword = pref
Andrew Overholt 7f96ff5
+        .getString(TomcatPlugin.PREF_KEY_STORE_PASSWORD);
Andrew Overholt 7f96ff5
+		if ((keyStorePassword != null)
Andrew Overholt 7f96ff5
+		        && (!("".equals(keyStorePassword.trim())))) { //$NON-NLS-1$
Andrew Overholt 7f96ff5
+			connector.setProperty("keypass", keyStorePassword); //$NON-NLS-1$
Andrew Overholt 7f96ff5
+		}
Andrew Overholt 7f96ff5
+        //connector.setUseURIValidationHack(false);  --no longer avaliable, hope they fixed the bug
Andrew Overholt 7f96ff5
+        connector.setUseBodyEncodingForURI(false);
Andrew Overholt 7f96ff5
+        // connector.setSecure(true); ---setting ssLImplementation set secure to true
Andrew Overholt 7f96ff5
+        String scheme = pref.getString(TomcatPlugin.PREF_SSL_SCHEME);
Andrew Overholt 7f96ff5
+        if ((scheme != null) && (!("".equals(scheme.trim())))) { //$NON-NLS-1$
Andrew Overholt 7f96ff5
+            connector.setScheme(scheme);
Andrew Overholt 7f96ff5
+        }
Andrew Overholt 7f96ff5
+        connector.setEnableLookups(true);
Andrew Overholt 7f96ff5
+        
Andrew Overholt 7f96ff5
+        //connector.setFactory(factory);  --no longer needed, now handled by SSLImplemenatation
Andrew Overholt 7f96ff5
+        // If there is problem in embedded.addConnector()
Andrew Overholt 7f96ff5
+        // there is no exception, so add a listener
Andrew Overholt 7f96ff5
+        connector.addLifecycleListener(new LifecycleListener() {
Andrew Overholt 7f96ff5
+            public void lifecycleEvent(LifecycleEvent event) {
Andrew Overholt 7f96ff5
+                if (Lifecycle.START_EVENT.equals(event.getType())||Lifecycle.PERIODIC_EVENT.equals(event.getType()))
Andrew Overholt 7f96ff5
+                    hasSSLConnection = true;
Andrew Overholt 7f96ff5
+            }
Andrew Overholt 7f96ff5
+        });
Andrew Overholt 7f96ff5
+	    // add Connector to Tomcat
Andrew Overholt 7f96ff5
+	    PrintStream sysErr = (PrintStream) System.err;
Andrew Overholt 7f96ff5
+	    // reassign standard error to prevent Coyote from writing
Andrew Overholt 7f96ff5
+	    // its version message there.
Andrew Overholt 7f96ff5
+	    System.setErr(new PrintStream(new ByteArrayOutputStream()));
Andrew Overholt 7f96ff5
+	    try{
Andrew Overholt 7f96ff5
+		    sslConnector = connector;
Andrew Overholt 7f96ff5
+		    embedded.addConnector(this.sslConnector);
Andrew Overholt 7f96ff5
+		    sslConnector.start();
Andrew Overholt 7f96ff5
+        } catch(LifecycleException e){
Andrew Overholt 7f96ff5
+            TomcatPlugin
Andrew Overholt 7f96ff5
+            .logError(
Andrew Overholt 7f96ff5
+                    "Exception occurred while establishing secure connection.", //$NON-NLS-1$
Andrew Overholt 7f96ff5
+                    e);
Andrew Overholt 7f96ff5
+        }
Andrew Overholt 7f96ff5
+	    finally {
Andrew Overholt 7f96ff5
+                System.setErr(sysErr);
Andrew Overholt 7f96ff5
+         }
Andrew Overholt 7f96ff5
+    }
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+    /**
Andrew Overholt 7f96ff5
+     * Creates a {@link Realm}object using the information contained in
Andrew Overholt 7f96ff5
+     * extensions of the type org.eclipse.tomcat.realmfactory in the plugin
Andrew Overholt 7f96ff5
+     * registry.
Andrew Overholt 7f96ff5
+     * 
Andrew Overholt 7f96ff5
+     * @return the {@link Realm}object created
Andrew Overholt 7f96ff5
+     */
Andrew Overholt 7f96ff5
+    private Realm getRealm() {
Andrew Overholt 7f96ff5
+        IExtensionRegistry registry = Platform.getExtensionRegistry();
Andrew Overholt 7f96ff5
+        IExtensionPoint extensionPoint = registry.getExtensionPoint(
Andrew Overholt 7f96ff5
+                TomcatPlugin.PLUGIN_ID, "realmfactory"); //$NON-NLS-1$
Andrew Overholt 7f96ff5
+        Realm realm = null;
Andrew Overholt 7f96ff5
+        if (extensionPoint != null) {
Andrew Overholt 7f96ff5
+            IExtension[] extensions = extensionPoint.getExtensions();
Andrew Overholt 7f96ff5
+            if ((extensions != null) && (extensions.length == 1)) {
Andrew Overholt 7f96ff5
+                IConfigurationElement[] factoryElements = extensions[0]
Andrew Overholt 7f96ff5
+                        .getConfigurationElements();
Andrew Overholt 7f96ff5
+                if ((factoryElements != null) && (factoryElements.length == 1)) {
Andrew Overholt 7f96ff5
+                    try {
Andrew Overholt 7f96ff5
+                        IRealmFactory realmFactory = (IRealmFactory) factoryElements[0]
Andrew Overholt 7f96ff5
+                                .createExecutableExtension("class"); //$NON-NLS-1$
Andrew Overholt 7f96ff5
+                        realm = realmFactory.createRealm();
Andrew Overholt 7f96ff5
+                    } catch (CoreException e) {
Andrew Overholt 7f96ff5
+                        logError(
Andrew Overholt 7f96ff5
+                                TomcatResources.TomcatAppServer_getRealmFactoryFailed,
Andrew Overholt 7f96ff5
+                                e);
Andrew Overholt 7f96ff5
+                    }
Andrew Overholt 7f96ff5
+                } else {
Andrew Overholt 7f96ff5
+                    if ((factoryElements == null)
Andrew Overholt 7f96ff5
+                            || (factoryElements.length == 0)) {
Andrew Overholt 7f96ff5
+                        logError(TomcatResources.TomcatAppServer_missingFactoryElement);
Andrew Overholt 7f96ff5
+                    } else {
Andrew Overholt 7f96ff5
+                        logError(TomcatResources.TomcatAppServer_multipleFactoryElements);
Andrew Overholt 7f96ff5
+                    }
Andrew Overholt 7f96ff5
+                }
Andrew Overholt 7f96ff5
+            } else {
Andrew Overholt 7f96ff5
+                if ((extensions == null) || (extensions.length == 0)) {
Andrew Overholt 7f96ff5
+                    logError(TomcatResources.TomcatAppServer_missingRealmExtension);
Andrew Overholt 7f96ff5
+                } else {
Andrew Overholt 7f96ff5
+                    logError(TomcatResources.TomcatAppServer_multipleRealmExtensions);
Andrew Overholt 7f96ff5
+                }
Andrew Overholt 7f96ff5
+            }
Andrew Overholt 7f96ff5
+        } else {
Andrew Overholt 7f96ff5
+            logError(TomcatResources.TomcatAppServer_missingRealmExtensionPoint);
Andrew Overholt 7f96ff5
+        }
Andrew Overholt 7f96ff5
+        return realm;
Andrew Overholt 7f96ff5
+    }
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+    /**
Andrew Overholt 7f96ff5
+     * Create an error entry in the log
Andrew Overholt 7f96ff5
+     * 
Andrew Overholt 7f96ff5
+     * @param msg
Andrew Overholt 7f96ff5
+     *            error message
Andrew Overholt 7f96ff5
+     */
Andrew Overholt 7f96ff5
+    private void logError(String msg) {
Andrew Overholt 7f96ff5
+        logError(msg, null);
Andrew Overholt 7f96ff5
+    }
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+    /**
Andrew Overholt 7f96ff5
+     * Create an error entry in the log
Andrew Overholt 7f96ff5
+     * 
Andrew Overholt 7f96ff5
+     * @param msg
Andrew Overholt 7f96ff5
+     *            error message
Andrew Overholt 7f96ff5
+     * @param cause
Andrew Overholt 7f96ff5
+     *            {@link Throwable} associated with this error message
Andrew Overholt 7f96ff5
+     */
Andrew Overholt 7f96ff5
+    private void logError(String msg, Throwable cause) {
Andrew Overholt 7f96ff5
+        TomcatPlugin.logError(msg, cause);
Andrew Overholt 7f96ff5
+    }
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+    /**
Andrew Overholt 7f96ff5
+     * @see org.eclipse.help.internal.appserver.IWebappServer#start(java.lang.String,
Andrew Overholt 7f96ff5
+     *      org.eclipse.core.runtime.IPath, java.lang.ClassLoader)
Andrew Overholt 7f96ff5
+     */
Andrew Overholt 7f96ff5
+    public synchronized void start(String webappName, IPath path, ClassLoader customLoader)
Andrew Overholt 7f96ff5
+            throws CoreException {
Andrew Overholt 7f96ff5
+    	
Andrew Overholt 7f96ff5
+        if (!isStarted) {
Andrew Overholt 7f96ff5
+            start(port, hostAddress);
Andrew Overholt 7f96ff5
+         }
Andrew Overholt 7f96ff5
+        if (!running) {
Andrew Overholt 7f96ff5
+            throw new CoreException(new Status(IStatus.ERROR,
Andrew Overholt 7f96ff5
+                    TomcatPlugin.PLUGIN_ID, IStatus.OK, NLS.bind(
Andrew Overholt 7f96ff5
+                            TomcatResources.TomcatAppServer_addingWebapp,
Andrew Overholt 7f96ff5
+                            webappName, path.toOSString()), null));
Andrew Overholt 7f96ff5
+        }
Andrew Overholt 7f96ff5
+        String contextPath = webappName;
Andrew Overholt 7f96ff5
+        if (!contextPath.startsWith("/")) { //$NON-NLS-1$
Andrew Overholt 7f96ff5
+            contextPath = "/" + contextPath; //$NON-NLS-1$
Andrew Overholt 7f96ff5
+        }
Andrew Overholt 7f96ff5
+        try {
Andrew Overholt 7f96ff5
+            Context context = embedded.createContext(contextPath, path
Andrew Overholt 7f96ff5
+                    .toOSString());
Andrew Overholt 7f96ff5
+            if (context instanceof StandardContext) {
Andrew Overholt 7f96ff5
+                ((StandardContext) context)
Andrew Overholt 7f96ff5
+                        .setWorkDir(getWorkingDirectory(webappName));
Andrew Overholt 7f96ff5
+            }
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+            WebAppClassLoader webappLoader = new WebAppClassLoader(customLoader);
Andrew Overholt 7f96ff5
+            context.setLoader(embedded.createLoader(webappLoader));
Andrew Overholt 7f96ff5
+            host.addChild(context);
Andrew Overholt 7f96ff5
+            contexts.add(context);
Andrew Overholt 7f96ff5
+        } catch (Exception exc) {
Andrew Overholt 7f96ff5
+            throw new CoreException(new Status(IStatus.ERROR,
Andrew Overholt 7f96ff5
+                    TomcatPlugin.PLUGIN_ID, IStatus.OK, NLS.bind(
Andrew Overholt 7f96ff5
+                            "TomcatAppServer.addingWebapp", webappName, path //$NON-NLS-1$
Andrew Overholt 7f96ff5
+                                    .toOSString()), exc));
Andrew Overholt 7f96ff5
+        }
Andrew Overholt 7f96ff5
+    }
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+    /**
Andrew Overholt 7f96ff5
+     * @see org.eclipse.help.internal.appserver.IWebappServer#stop(java.lang.String)
Andrew Overholt 7f96ff5
+     */
Andrew Overholt 7f96ff5
+    public synchronized void stop(String webappName) throws CoreException {
Andrew Overholt 7f96ff5
+        if (!running) {
Andrew Overholt 7f96ff5
+            return;
Andrew Overholt 7f96ff5
+        }
Andrew Overholt 7f96ff5
+        Context context = (Context) host.findChild("/" + webappName); //$NON-NLS-1$
Andrew Overholt 7f96ff5
+        if (context != null) {
Andrew Overholt 7f96ff5
+        	contexts.remove(context);
Andrew Overholt 7f96ff5
+            embedded.removeContext(context);
Andrew Overholt 7f96ff5
+        }
Andrew Overholt 7f96ff5
+    }
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+    /**
Andrew Overholt 7f96ff5
+     * @see org.eclipse.help.internal.appserver.IWebappServer#getHost()
Andrew Overholt 7f96ff5
+     */
Andrew Overholt 7f96ff5
+    public String getHost() {
Andrew Overholt 7f96ff5
+        if (!running) {
Andrew Overholt 7f96ff5
+            return null;
Andrew Overholt 7f96ff5
+        }
Andrew Overholt 7f96ff5
+        return hostAddress;
Andrew Overholt 7f96ff5
+    }
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+    /**
Andrew Overholt 7f96ff5
+     * @see org.eclipse.help.internal.appserver.IWebappServer#getPort()
Andrew Overholt 7f96ff5
+     */
Andrew Overholt 7f96ff5
+    public int getPort() {
Andrew Overholt 7f96ff5
+        if (!running) {
Andrew Overholt 7f96ff5
+            return 0;
Andrew Overholt 7f96ff5
+        }
Andrew Overholt 7f96ff5
+        return port;
Andrew Overholt 7f96ff5
+    }
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+    /**
Andrew Overholt 7f96ff5
+     * @see org.eclipse.help.internal.appserver.IWebappServer#isRunning()
Andrew Overholt 7f96ff5
+     */
Andrew Overholt 7f96ff5
+    public boolean isRunning() {
Andrew Overholt 7f96ff5
+        return running;
Andrew Overholt 7f96ff5
+    }
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+    /**
Andrew Overholt 7f96ff5
+     * @see org.eclipse.help.internal.appserver.IWebappServer#stop()
Andrew Overholt 7f96ff5
+     */
Andrew Overholt 7f96ff5
+    public synchronized void stop() throws CoreException {
Andrew Overholt 7f96ff5
+        if (!running) {
Andrew Overholt 7f96ff5
+            return;
Andrew Overholt 7f96ff5
+        }
Andrew Overholt 7f96ff5
+        running = false;
Andrew Overholt 7f96ff5
+        // Remove all contexts
Andrew Overholt 7f96ff5
+        for(int i = 0; i< contexts.size(); i++){
Andrew Overholt 7f96ff5
+            embedded.removeContext((Context)contexts.get(i));
Andrew Overholt 7f96ff5
+           	contexts.remove(contexts.get(i));
Andrew Overholt 7f96ff5
+        }
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+        // Remove the sslConnector, if present.
Andrew Overholt 7f96ff5
+        try {
Andrew Overholt 7f96ff5
+            if (sslConnector != null) {
Andrew Overholt 7f96ff5
+                embedded.removeConnector(this.sslConnector);
Andrew Overholt 7f96ff5
+            }
Andrew Overholt 7f96ff5
+        } catch (Exception exc) {
Andrew Overholt 7f96ff5
+            throw new CoreException(new Status(IStatus.ERROR,
Andrew Overholt 7f96ff5
+                    TomcatPlugin.PLUGIN_ID, IStatus.OK,
Andrew Overholt 7f96ff5
+                    TomcatResources.TomcatAppServer_sslConnectorRemove, 
Andrew Overholt 7f96ff5
+                    exc));
Andrew Overholt 7f96ff5
+        }
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+        // Remove the HTTP Connector, if present.
Andrew Overholt 7f96ff5
+        try {
Andrew Overholt 7f96ff5
+            if (httpConnector != null) {
Andrew Overholt 7f96ff5
+                embedded.removeConnector(this.httpConnector);
Andrew Overholt 7f96ff5
+            }
Andrew Overholt 7f96ff5
+        } catch (Exception exc) {
Andrew Overholt 7f96ff5
+            throw new CoreException(new Status(IStatus.ERROR,
Andrew Overholt 7f96ff5
+                    TomcatPlugin.PLUGIN_ID, IStatus.OK,
Andrew Overholt 7f96ff5
+                    TomcatResources.TomcatAppServer_httpConnectorRemove, 
Andrew Overholt 7f96ff5
+                    exc));
Andrew Overholt 7f96ff5
+        }
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+        // Remove the engine (which should trigger removing the connector)
Andrew Overholt 7f96ff5
+        try {
Andrew Overholt 7f96ff5
+            embedded.removeEngine(engine);
Andrew Overholt 7f96ff5
+        } catch (Exception exc) {
Andrew Overholt 7f96ff5
+            throw new CoreException(new Status(IStatus.ERROR,
Andrew Overholt 7f96ff5
+                    TomcatPlugin.PLUGIN_ID, IStatus.OK,
Andrew Overholt 7f96ff5
+                    TomcatResources.TomcatAppServer_engineRemove, 
Andrew Overholt 7f96ff5
+                    exc));
Andrew Overholt 7f96ff5
+        }
Andrew Overholt 7f96ff5
+        // Shut down this tomcat server (should have nothing left to do)
Andrew Overholt 7f96ff5
+        try {
Andrew Overholt 7f96ff5
+            embedded.stop();
Andrew Overholt 7f96ff5
+        } catch (LifecycleException e) {
Andrew Overholt 7f96ff5
+            throw new CoreException(new Status(IStatus.ERROR,
Andrew Overholt 7f96ff5
+                    TomcatPlugin.PLUGIN_ID, IStatus.OK,
Andrew Overholt 7f96ff5
+                    TomcatResources.TomcatAppServer_embeddedStop, 
Andrew Overholt 7f96ff5
+                    e));
Andrew Overholt 7f96ff5
+        }
Andrew Overholt 7f96ff5
+        isStarted = false;
Andrew Overholt 7f96ff5
+    }
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+    private String getWorkingDirectory(String webApp) {
Andrew Overholt 7f96ff5
+        return TomcatPlugin.getDefault().getStateLocation().append(webApp)
Andrew Overholt 7f96ff5
+                .toOSString();
Andrew Overholt 7f96ff5
+    }
Andrew Overholt 7f96ff5
+}
Andrew Overholt 7f96ff5
\ No newline at end of file
Andrew Overholt 7f96ff5
Index: src/org/eclipse/tomcat/internal/EclipseErrorReportValve.java
Andrew Overholt 7f96ff5
===================================================================
Andrew Overholt 7f96ff5
RCS file: /cvsroot/eclipse/org.eclipse.tomcat/src/org/eclipse/tomcat/internal/EclipseErrorReportValve.java,v
Andrew Overholt 7f96ff5
retrieving revision 1.9
Andrew Overholt 7f96ff5
diff -u -r1.9 EclipseErrorReportValve.java
Andrew Overholt 7f96ff5
--- src/org/eclipse/tomcat/internal/EclipseErrorReportValve.java	23 Feb 2006 22:51:14 -0000	1.9
Andrew Overholt 7f96ff5
+++ src/org/eclipse/tomcat/internal/EclipseErrorReportValve.java	4 Jul 2006 18:42:41 -0000
Andrew Overholt 7f96ff5
@@ -69,15 +69,27 @@
Andrew Overholt 7f96ff5
 package org.eclipse.tomcat.internal;
Andrew Overholt 7f96ff5
 
Andrew Overholt 7f96ff5
 
Andrew Overholt 7f96ff5
-import java.io.*;
Andrew Overholt 7f96ff5
-import java.util.*;
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-import javax.servlet.*;
Andrew Overholt 7f96ff5
-import javax.servlet.http.*;
Andrew Overholt 7f96ff5
-
Andrew Overholt 7f96ff5
-import org.apache.catalina.*;
Andrew Overholt 7f96ff5
-import org.apache.catalina.util.*;
Andrew Overholt 7f96ff5
-import org.apache.catalina.valves.*;
Andrew Overholt 7f96ff5
+import java.io.IOException;
Andrew Overholt 7f96ff5
+import java.io.PrintWriter;
Andrew Overholt 7f96ff5
+import java.io.StringWriter;
Andrew Overholt 7f96ff5
+import java.io.Writer;
Andrew Overholt 7f96ff5
+import java.util.Locale;
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+import javax.servlet.ServletException;
Andrew Overholt 7f96ff5
+import javax.servlet.ServletRequest;
Andrew Overholt 7f96ff5
+import javax.servlet.ServletResponse;
Andrew Overholt 7f96ff5
+import javax.servlet.http.HttpServletResponse;
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+import mx4j.log.Logger;
Andrew Overholt 7f96ff5
+
Andrew Overholt 7f96ff5
+import org.apache.catalina.Globals;
Andrew Overholt 7f96ff5
+import org.apache.catalina.Valve;
Andrew Overholt 7f96ff5
+import org.apache.catalina.connector.Request;
Andrew Overholt 7f96ff5
+import org.apache.catalina.connector.Response;
Andrew Overholt 7f96ff5
+import org.apache.catalina.util.RequestUtil;
Andrew Overholt 7f96ff5
+import org.apache.catalina.util.StringManager;
Andrew Overholt 7f96ff5
+import org.apache.catalina.valves.Constants;
Andrew Overholt 7f96ff5
+import org.apache.catalina.valves.ValveBase;
Andrew Overholt 7f96ff5
 import org.eclipse.core.runtime.Platform;
Andrew Overholt 7f96ff5
 
Andrew Overholt 7f96ff5
 
Andrew Overholt 7f96ff5
@@ -145,12 +157,12 @@
Andrew Overholt 7f96ff5
      * @exception IOException if an input/output error occurs
Andrew Overholt 7f96ff5
      * @exception ServletException if a servlet error occurs
Andrew Overholt 7f96ff5
      */
Andrew Overholt 7f96ff5
-    public void invoke(Request request, Response response,
Andrew Overholt 7f96ff5
-                       ValveContext context)
Andrew Overholt 7f96ff5
+    public void invoke(Request request, Response response)
Andrew Overholt 7f96ff5
         throws IOException, ServletException {
Andrew Overholt 7f96ff5
 
Andrew Overholt 7f96ff5
         // Perform the request
Andrew Overholt 7f96ff5
-        context.invokeNext(request, response);
Andrew Overholt 7f96ff5
+        Valve nextValve = getNext();
Andrew Overholt 7f96ff5
+        nextValve.invoke(request, response);
Andrew Overholt 7f96ff5
 
Andrew Overholt 7f96ff5
         ServletRequest sreq = (ServletRequest) request;
Andrew Overholt 7f96ff5
         Throwable throwable = 
Andrew Overholt 7f96ff5
@@ -220,14 +232,11 @@
Andrew Overholt 7f96ff5
         throws IOException {
Andrew Overholt 7f96ff5
 
Andrew Overholt 7f96ff5
         // Do nothing on non-HTTP responses
Andrew Overholt 7f96ff5
-        if (!(response instanceof HttpResponse))
Andrew Overholt 7f96ff5
-            return;
Andrew Overholt 7f96ff5
-        HttpResponse hresponse = (HttpResponse) response;
Andrew Overholt 7f96ff5
         if (!(response instanceof HttpServletResponse))
Andrew Overholt 7f96ff5
             return;
Andrew Overholt 7f96ff5
         HttpServletResponse hres = (HttpServletResponse) response;
Andrew Overholt 7f96ff5
-        int statusCode = hresponse.getStatus();
Andrew Overholt 7f96ff5
-        String message = RequestUtil.filter(hresponse.getMessage());
Andrew Overholt 7f96ff5
+        int statusCode = response.getStatus();
Andrew Overholt 7f96ff5
+        String message = RequestUtil.filter(response.getMessage());
Andrew Overholt 7f96ff5
         if (message == null)
Andrew Overholt 7f96ff5
             message = ""; //$NON-NLS-1$
Andrew Overholt 7f96ff5
 
Andrew Overholt 7f96ff5
@@ -373,9 +382,9 @@
Andrew Overholt 7f96ff5
      */
Andrew Overholt 7f96ff5
     protected void log(String message) {
Andrew Overholt 7f96ff5
 
Andrew Overholt 7f96ff5
-        Logger logger = container.getLogger();
Andrew Overholt 7f96ff5
+        Logger logger = (Logger) container.getLogger();
Andrew Overholt 7f96ff5
         if (logger != null)
Andrew Overholt 7f96ff5
-            logger.log(this.toString() + ": " + message); //$NON-NLS-1$
Andrew Overholt 7f96ff5
+            logger.info(this.toString() + ": " + message); //$NON-NLS-1$
Andrew Overholt 7f96ff5
         else
Andrew Overholt 7f96ff5
             System.out.println(this.toString() + ": " + message); //$NON-NLS-1$
Andrew Overholt 7f96ff5
 
Andrew Overholt 7f96ff5
@@ -390,9 +399,9 @@
Andrew Overholt 7f96ff5
      */
Andrew Overholt 7f96ff5
     protected void log(String message, Throwable throwable) {
Andrew Overholt 7f96ff5
 
Andrew Overholt 7f96ff5
-        Logger logger = container.getLogger();
Andrew Overholt 7f96ff5
+        Logger logger = (Logger) container.getLogger();
Andrew Overholt 7f96ff5
         if (logger != null)
Andrew Overholt 7f96ff5
-            logger.log(this.toString() + ": " + message, throwable); //$NON-NLS-1$
Andrew Overholt 7f96ff5
+            logger.info(this.toString() + ": " + message, throwable); //$NON-NLS-1$
Andrew Overholt 7f96ff5
         else {
Andrew Overholt 7f96ff5
             System.out.println(this.toString() + ": " + message); //$NON-NLS-1$
Andrew Overholt 7f96ff5
             throwable.printStackTrace(System.out);
Andrew Overholt 7f96ff5
Index: META-INF/MANIFEST.MF
Andrew Overholt 7f96ff5
===================================================================
Andrew Overholt 7f96ff5
RCS file: /cvsroot/eclipse/org.eclipse.tomcat/META-INF/MANIFEST.MF,v
Andrew Overholt 7f96ff5
retrieving revision 1.21
Andrew Overholt 7f96ff5
diff -u -r1.21 MANIFEST.MF
Andrew Overholt 7f96ff5
--- META-INF/MANIFEST.MF	9 May 2006 20:26:52 -0000	1.21
Andrew Overholt 7f96ff5
+++ META-INF/MANIFEST.MF	4 Jul 2006 18:42:40 -0000
Andrew Overholt 03777cc
@@ -2,30 +2,32 @@
Andrew Overholt 7f96ff5
 Bundle-ManifestVersion: 2
Andrew Overholt 7f96ff5
 Bundle-Name: %pluginName
Andrew Overholt 7f96ff5
 Bundle-SymbolicName: org.eclipse.tomcat; singleton:=true
Andrew Overholt 7f96ff5
-Bundle-Version: 4.1.130.qualifier
Andrew Overholt a9ae1f6
+Bundle-Version: 5.5.17.qualifier
Andrew Overholt 7f96ff5
 Bundle-ClassPath: tomcatwrapper.jar,
Andrew Overholt 7f96ff5
- catalina.jar,
Andrew Overholt 7f96ff5
- bootstrap.jar,
Andrew Overholt 7f96ff5
- commons-beanutils.jar,
Andrew Overholt 7f96ff5
- commons-collections.jar,
Andrew Overholt 7f96ff5
- commons-digester.jar,
Andrew Overholt 7f96ff5
- commons-logging-api.jar,
Andrew Overholt 7f96ff5
- commons-modeler.jar,
Andrew Overholt 7f96ff5
- jakarta-regexp-1.3.jar,
Andrew Overholt 7f96ff5
- jasper-compiler.jar,
Andrew Overholt 7f96ff5
- jasper-runtime.jar,
Andrew Overholt 7f96ff5
- mx4j-jmx.jar,
Andrew Overholt 7f96ff5
- naming-common.jar,
Andrew Overholt 7f96ff5
- naming-factory.jar,
Andrew Overholt 7f96ff5
- naming-resources.jar,
Andrew Overholt 7f96ff5
- servlet.jar,
Andrew Overholt 7f96ff5
- servlets-common.jar,
Andrew Overholt 7f96ff5
- servlets-default.jar,
Andrew Overholt 7f96ff5
- servlets-invoker.jar,
Andrew Overholt 7f96ff5
- servlets-manager.jar,
Andrew Overholt 7f96ff5
- tomcat-coyote.jar,
Andrew Overholt 7f96ff5
- tomcat-http11.jar,
Andrew Overholt 7f96ff5
- tomcat-util.jar
Andrew Overholt 7f96ff5
+ lib/catalina.jar,
Andrew Overholt 7f96ff5
+ lib/catalina-optional.jar,
Andrew Overholt 7f96ff5
+ lib/commons-beanutils.jar,
Andrew Overholt 7f96ff5
+ lib/commons-collections.jar,
Andrew Overholt 7f96ff5
+ lib/commons-digester.jar,
Andrew Overholt 7f96ff5
+ lib/commons-digester-rss.jar,
Andrew Overholt 7f96ff5
+ lib/commons-el.jar,
Andrew Overholt 7f96ff5
+ lib/commons-logging-api.jar,
Andrew Overholt 7f96ff5
+ lib/commons-modeler.jar,
Andrew Overholt 7f96ff5
+ lib/jasper-compiler.jar,
Andrew Overholt 7f96ff5
+ lib/jasper-runtime.jar,
Andrew Overholt 03777cc
+ lib/mx4j.jar,
Andrew Overholt 03777cc
+ lib/mx4j-jmx.jar,
Andrew Overholt 03777cc
+ lib/mx4j-impl.jar,
Andrew Overholt 03777cc
+ lib/jspapi.jar,
Andrew Overholt 7f96ff5
+ lib/naming-factory.jar,
Andrew Overholt 7f96ff5
+ lib/naming-resources.jar,
Andrew Overholt 7f96ff5
+ lib/regexp.jar,
Andrew Overholt 03777cc
+ lib/servletapi5.jar,
Andrew Overholt 7f96ff5
+ lib/servlets-default.jar,
Andrew Overholt 7f96ff5
+ lib/tomcat-coyote.jar,
Andrew Overholt 7f96ff5
+ lib/tomcat-http.jar,
Andrew Overholt 7f96ff5
+ lib/tomcat-util.jar,
Andrew Overholt 7f96ff5
+ lib/servlets-invoker.jar
Andrew Overholt 7f96ff5
 Bundle-Activator: org.eclipse.tomcat.internal.TomcatPlugin
Andrew Overholt 7f96ff5
 Bundle-Vendor: %providerName
Andrew Overholt 7f96ff5
 Bundle-Localization: plugin
Andrew Overholt 839e68f
@@ -33,6 +35,73 @@
Andrew Overholt 7f96ff5
  org.apache.ant;bundle-version="[1.6.5,1.7.0)";resolution:=optional,
Andrew Overholt 7f96ff5
  org.eclipse.core.runtime;bundle-version="[3.1.0,4.0.0)"
Andrew Overholt 7f96ff5
 Eclipse-LazyStart: true
Andrew Overholt 7f96ff5
-Export-Package: org.eclipse.tomcat.internal;x-internal:=true,
Andrew Overholt 7f96ff5
+Export-Package: javax.management;x-internal:=true,
Andrew Overholt 7f96ff5
+ javax.management.loading;x-internal:=true,
Andrew Overholt 7f96ff5
+ javax.management.modelmbean;x-internal:=true,
Andrew Overholt 7f96ff5
+ javax.management.monitor;x-internal:=true,
Andrew Overholt 7f96ff5
+ javax.management.openmbean;x-internal:=true,
Andrew Overholt 7f96ff5
+ javax.management.relation;x-internal:=true,
Andrew Overholt 7f96ff5
+ javax.management.timer;x-internal:=true,
Andrew Overholt 7f96ff5
+ javax.servlet;x-internal:=true,
Andrew Overholt 7f96ff5
+ javax.servlet.http;x-internal:=true,
Andrew Overholt 7f96ff5
+ javax.servlet.jsp;x-internal:=true,
Andrew Overholt 7f96ff5
+ javax.servlet.jsp.tagext;x-internal:=true,
Andrew Overholt 7f96ff5
+ mx4j;x-internal:=true,
Andrew Overholt 7f96ff5
+ mx4j.loading;x-internal:=true,
Andrew Overholt 7f96ff5
+ mx4j.log;x-internal:=true,
Andrew Overholt 7f96ff5
+ mx4j.persist;x-internal:=true,
Andrew Overholt 7f96ff5
+ mx4j.server;x-internal:=true,
Andrew Overholt 7f96ff5
+ mx4j.server.interceptor;x-internal:=true,
Andrew Overholt 7f96ff5
+ mx4j.timer;x-internal:=true,
Andrew Overholt 7f96ff5
+ mx4j.util;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.catalina;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.catalina.connector;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.catalina.core;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.catalina.realm;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.catalina.servlets;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.commons.beanutils;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.commons.beanutils.converters;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.commons.beanutils.locale;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.commons.beanutils.locale.converters;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.commons.collections;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.commons.collections.comparators;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.commons.collections.iterators;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.commons.digester;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.commons.digester.rss;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.commons.digester.xmlrules;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.commons.logging;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.commons.logging.impl;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.commons.modeler;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.commons.modeler.ant;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.commons.modeler.mbeans;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.commons.modeler.modules;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.commons.modeler.util;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.coyote;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.coyote.http11;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.coyote.http11.filters;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.coyote.memory;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.jasper;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.jasper.compiler;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.jasper.runtime;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.jasper.servlet;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.jasper.util;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.jasper.xmlparser;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.naming;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.naming.factory;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.naming.java;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.naming.resources;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.regexp;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.tomcat.util;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.tomcat.util.buf;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.tomcat.util.collections;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.tomcat.util.http;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.tomcat.util.http.mapper;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.tomcat.util.log;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.tomcat.util.net;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.tomcat.util.net.jsse;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.tomcat.util.res;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.apache.tomcat.util.threads;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.eclipse.tomcat.internal;x-internal:=true,
Andrew Overholt 7f96ff5
+ org.eclipse.tomcat.internal;x-internal:=true,
Andrew Overholt 7f96ff5
  org.eclipse.tomcat.internal.extensions;x-internal:=true
Andrew Overholt 7f96ff5
 Bundle-RequiredExecutionEnvironment: J2SE-1.4