costin      01/12/16 21:27:06

  Modified:    src/share/org/apache/tomcat/startup EmbededTomcat.java
  Log:
  Added few more comments, have been sitting in my workspace for a while.
  
  Revision  Changes    Path
  1.61      +160 -22   
jakarta-tomcat/src/share/org/apache/tomcat/startup/EmbededTomcat.java
  
  Index: EmbededTomcat.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/startup/EmbededTomcat.java,v
  retrieving revision 1.60
  retrieving revision 1.61
  diff -u -r1.60 -r1.61
  --- EmbededTomcat.java        2001/11/18 06:20:57     1.60
  +++ EmbededTomcat.java        2001/12/17 05:27:05     1.61
  @@ -81,6 +81,42 @@
    *
    *  All file paths _should_ be absolute. If not, you should set "home" and
    *  make sure you include the "PathSetter" module before anything else.
  + *
  + * <b>Example1</b>
  + * <pre>
  +    // Assume EmbededTomcat and all common jars are in CLASSPATH
  +    EmbededTomcat tomcat=new EmbededTomcat();
  +    tomcat.setInstallDir( installDir );
  +
  +    // tomcat.setDebug( debug );
  +    // tomcat.setAutoDeploy( false ); // no webapps/ is used
  +    // tomcat.setEstart(true ); // server.xml will not be used 
  +
  +    tomcat.initClassLoaders();
  +
  +    if( explicitModules ) {
  +      // For each module you want to add ( you must include a minimal set )
  +      int mid=tomcat.addModule( "org.apache.tomcat.modules.xxxx" );
  +      tomcat.setModuleProperty( mid, "property", "value" );
  +    } else {
  +      // Nothing - server.xml will be used if setEstart(false) ( default )
  +      //           the default set will be used if setEstart(true)
  +    }
  +
  +    // If you don't add one explicitely, the defaults are used ( HTTP/8080,
  +    //  Ajp12/8007 for shutdown )
  +    // tomcat.addEndpoint( port, null, null );
  +    // You can add other connectors using addModule()
  +
  +    // tomcat.addApplicationAdapter( myModule );
  +
  +    // If you also want "webapps/" ( if you don addContext this is automatic )
  +    // tomcat.addAutoDeploy(); 
  +    // tomcat.addContext( path, docBase, null);
  +    
  +    tomcat.execute();
  +    
  +   </pre>
    * 
    * @author Costin Manolache
    */
  @@ -112,18 +148,22 @@
       boolean nostart=false;
       
       public EmbededTomcat() {
  -     //      setDebug( 10 );
       }
   
       // -------------------- 
  -    
  +
  +    /** Access to the ContextManager.
  +     */
       public ContextManager getContextManager() {
        return contextM;
       }
       
       // -------------------- Properties - set before start
   
  -    /** Debug for EmbededTomcat. 
  +    /**
  +     *  Debug for EmbededTomcat, enable debugging on tomcat
  +     *  and the LogEvents module.
  +     *  "-debug debug" on the command line
        */
       public void setDebug( int debug ) {
        this.dL=debug;
  @@ -131,45 +171,85 @@
        debug( "Debugging enabled ");
       }
   
  +
  +    boolean noClassLoaders=false;
  +    
  +    public void setNoClassloaders( boolean b ) {
  +        noClassLoaders=b;
  +    }
  +    
  +    /** Set the home dir for tomcat, where webapps/ will be located.
  +     *  "-home dir" on the command line.
  +     */
       public void setHome( String s ) {
        home=s;
       }
   
  +    /** Set install dir for tomcat, where libs will be located.
  +     *  "-install dir" on the command line.
  +     */
       public void setInstall(String install) {
        this.installDir=install;
  -     contextM.setInstallDir( install );
  +     contextM.setInstallDir( install );
        if( dL > 0 ) debug( "setInstall " + install);
       }
   
  +    /** Set location of the server.xml file, to be used by ServerXml reader.
  +     *       Not used if EStart() is used.
  +     *  "-config foo" on the command line.
  +     */
       public void setConfig( String s ) {
        attributes.put("config", s);
       }
   
  -    /** Tomcat will run in a sandboxed environment, under SecurityManager
  +    /** Tomcat will run in a sandboxed environment, under SecurityManager.
  +     *  "-sandbox" on the command line
        */
       public void setSandbox(boolean b) {
        attributes.put("sandbox", "true");
       }
   
  +    /** Generate Jk configuration, without running tomcat. 
  +     *  Equivalent with "-jkconf" on the command line.
  +     */
       public void setJkconf(boolean b ) {
        attributes.put("jkconf", "true");
        nostart=true;
       }
       
  -    // First param
  +    /** Dummy, "-start" on the command line.
  +     */
       public void setStart(boolean b) {
        // nothing, default mode
       }
   
  +    /** Use 'embeded' configuration to start tomcat. 
  +     *
  +     *  If Estart is false ( the default ), we'll load server.xml and all
  +     * the modules inside.
  +     *
  +     * If it is set to true, we'll load the a hard-coded set of modules.
  +     *
  +     * If you add explicitely your own set of module it will be used
  +     * instead of the defaults. Modules need to be added before 
  +     * adding the first connector or initContextManager is called.
  +     *
  +     * Equivalent with "-estart" on the command line.
  +     */
       public void setEstart(boolean b) {
        debug( "Using default embedded config ");
        serverXml=false;
       }
   
  +    /** Dummy, "-run" on the command line.
  +     */
       public void setRun(boolean b) {
        setStart(true);
       }
   
  +    /** Don't run, just display the help message.
  +     "-help" on the command line.
  +     */
       public void setHelp(boolean b) {
        help=b;
       }
  @@ -201,7 +281,7 @@
            attributes.put( name, v );
       }
       
  -    // Ant compatibility
  +    // Ant compatibility ( TODO )
       public void addProperty(Property prop) {
       }
       
  @@ -223,6 +303,16 @@
   
       Vector modules=new Vector();
   
  +    /** Add a module explicitely. You can use server.xml, a pre-defined
  +     *       set of modules, or your own set.
  +     *
  +     * Must be called before adding the first endpoint or context and
  +     * before initContextManger.
  +     *
  +     * If you add a module you must also call addDefaultModules (before
  +     * or after your modules ) - or you can add all the required modules
  +     * manually.
  +     */
       public int addModule( BaseInterceptor ri )
        throws TomcatException
       {
  @@ -235,8 +325,9 @@
       }
       
       /** Add a custom module. It'll return the module id, that can be
  -     used to set properties
  -    */
  +     *  used to set properties
  +     *  @see addModule( BaseInterceptor ri )
  +     */
       public int addModule( String className )
        throws TomcatException
       {
  @@ -246,6 +337,8 @@
        return addModule( bi );
       }
   
  +    /** Find a module from the set added with  addModule() or addDefaultModules()
  +     */
       public int findModule( String className, int startPos )
       {
        for( int i=startPos; i<modules.size(); i++ ) {
  @@ -256,6 +349,12 @@
        return -1;
       }
   
  +    /** Configure a module property. Since modules can be added from
  +     *  child classloaders this is the best way to configure them.
  +     *  If the module is in the same class loader you can also set
  +     *  the property explicitely, but for more flexibility it's better
  +     *  to use this method.
  +     */
       public void setModuleProperty( int id, String name, String value )
        throws TomcatException
       {
  @@ -267,7 +366,10 @@
   
       // -------------------- Module helpers --------------------
   
  -    /** Init tomcat using server.xml-style configuration
  +    /** Init tomcat using server.xml-style configuration. Called
  +     *  automatically if no module was explicitely added and Estart is
  +     *  true ( default ). The automatic call happens before addContext,
  +     *  addEndpoint or execute()
        */
       public void addServerXmlModules() throws TomcatException {
        String conf=(String)attributes.get( "config" );
  @@ -282,12 +384,12 @@
       }
   
       /** Add all the default modules, needed for a fully functional container.
  -     *  This does not need any XML parser or server.xml. Use this method or
  -     *  addServerXmlModules().
  +     *  You must setEtomcat( true ) if you don't want  server.xml to be used.
        */ 
       public void addDefaultModules()
        throws TomcatException
       {
  +     //this is a bug in 3.3.0, we shoud disable it automcatically 
        if( serverXml ) {
            addServerXmlModules();
            return;
  @@ -303,8 +405,11 @@
       }
   
       /** Add modules needed for auto-deploy function. 
  -     * By default you need to explicitely add ( using addContext() ) any
  -     *       webapp. Use this with addDefaultModules(). 
  +     *  By default you need to explicitely add ( using addContext() ) any
  +     *       webapp. Use this with addDefaultModules().
  +     *
  +     *  Will be called automcatically if no context was added, you must
  +     *  call it if you want both autodeploy and manually-added contexts.
        */
       public void addAutoDeploy()
        throws TomcatException
  @@ -320,7 +425,10 @@
   
       protected boolean initialized=false;
       
  -    /** Add and init a context. Must be called after all modules are added.
  +    /** Add and init a context. Must be called after all modules and endpoints
  +     *  are added.
  +     *
  +     *  This will initialize the context manager.
        */
       public Context addContext(  String ctxPath, URL docRoot, String hosts[] )
        throws TomcatException
  @@ -393,7 +501,11 @@
       }
   
       // -------------------- Startup/shutdown methods --------------------
  -    
  +
  +    /** Initialize the context manager. Called automatically before the
  +     *  first addContext or on execute(). You can call it explicitely
  +     *  if you want to 'tweak' the cm before execute.
  +     */
       public void initContextManager()
        throws TomcatException 
       {
  @@ -456,6 +568,9 @@
        initialized=true;
       }
   
  +    /** Start the context manager. Will do nothing if -jkConfig or -help
  +     *  ( or the equivalent setters ) are used.
  +     */
       public void start() throws TomcatException {
        if( nostart ) {
            debug("Tomcat will not start  - configuration only mode ");
  @@ -486,7 +601,9 @@
   
       // -------------------- Helpers and shortcuts --------------------
       
  -    /** Add a HTTP listener.
  +    /** Add a HTTP listener. Must be called after all 'core' modules
  +     *  are called. If no endpoint is added explicitely the defaults will
  +     *  be added.
        */
       public int addEndpoint( int port, InetAddress addr , String hostname)
        throws TomcatException
  @@ -542,6 +659,9 @@
        return mid;
       }
   
  +    /** Add the default HTTP/8080, Ajp12-stop/8007, if no explicit addEndpoint
  +     *  was called
  +     */
       public void addDefaultConnectors()
        throws TomcatException
       {
  @@ -579,7 +699,7 @@
            long time2=System.currentTimeMillis();
            debug("Init time "  + (time2-time1));
        }
  -     
  +
        // Start
        start();
       }
  @@ -716,7 +836,22 @@
       public void initClassLoaders()
        throws IOException, MalformedURLException
       {
  -     if( dL > 0 ) debug( "Init class loaders ");
  +     if( dL > 0 ) debug( "Init class loaders " + noClassLoaders );
  +        if( noClassLoaders ) {
  +            commonCL=this.getClass().getClassLoader();
  +            if( commonCL == null ) {
  +                commonCL=new java.net.URLClassLoader( new URL[] {}, null );
  +            }
  +            parentCL=commonCL;
  +            containerCL=commonCL;
  +            modulesCL=commonCL;
  +            if( dL> 0 ) debug( "All class loaders " + commonCL );
  +            contextM.setParentLoader(parentCL);
  +            contextM.setCommonLoader(modulesCL);
  +            contextM.setContainerLoader(containerCL);
  +            contextM.setAppsLoader(appsCL);
  +            return;
  +        }
        if( parentCL==null ) {
            if( dL > 0 ) debug( "Default parent loader: null");
        }
  @@ -894,7 +1029,7 @@
        "org.apache.tomcat.modules.config.WorkDirSetup",
        "org.apache.tomcat.modules.generators.Jdk12Interceptor",
        "org.apache.tomcat.modules.generators.InvokerInterceptor",
  -     "org.apache.tomcat.facade.JspInterceptor",
  +        //XXX GCC-HACK       "org.apache.tomcat.facade.JspInterceptor",
        "org.apache.tomcat.modules.generators.StaticInterceptor",
   
        "org.apache.tomcat.modules.mappers.ReloadInterceptor",
  @@ -944,9 +1079,12 @@
   
       // -------------------- Override --------------------
   
  +    /** Hook - will be called after all modules are configured,
  +     *  before they are added to the ContextManager.
  +     */ 
       protected void beforeAddInterceptors() throws TomcatException {
  -//   int mid=findModule( "org.apache.tomcat.modules.config.LoaderInterceptor11" ,0);
  -//   setModuleProperty( mid, "debug", "10" );
  +     //int mid=findModule( "org.apache.tomcat.modules.config.LoaderInterceptor11" 
,0);
  +     //setModuleProperty( mid, "debug", "10" );
       }
   }
   
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to