`
22cgreen
  • 浏览: 53627 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

tomcat(1)之Bootstrap.java

阅读更多
此类的作用,就是
* Initialize daemon. 初始化
* 主要有以下过程
* 1)设置环境变量,初始化类加载器,事实上就是为commonLoader,catalinaLoader,sharedLoader,不过这里其实都为
* commonLoader,因为其它几个并没配置,配置文件位于
org.apache,catalina.startup中的catalina.properties。
common.loader=${catalina.home}/lib,${catalina.home}/lib/*.jar
server.loader=
shared.loader=

* 2)设置当前线程当前类加载器,也是commonLoader,其实commonLoader就是批向tomcat/lib中的一个加载器.
也是tomcat的核心类库的加载位置,相然用的一些包也可以放在这个目录,同样可以被tomcat默认加载器
加载。
* 3)加载org.apache.catalina.startup.Catalina,并设置父加载器为commonLoader,最后把实例附值给catalinaDaemon
通过反射方式得到Catalina实例,同时设置Catalina的一个属性(也就是父加载器)为:commonLoader
然后把实例传给属性catalinaDaemon,其它方法通这个实例来操作类Catalina的实例。
* 初始化完成.
* 从这个初始化来看,只处理两个方面,1)设置加载器 2)产生Catalina实例
* 然后如一些start,load,stop都是调用类Catalina中相应方法来完成.(利用反射的方式)
我们看批处理最后执行的命令为:..apache.catalina.startup.Bootstrap  start,显然带的参数是start.
在启动时主要执行Catalina实例的二个方法:

1)load
2)start
源码:
  daemon.load(args); //加载参数,这里args为main方法中的参数,从最后批处理执行来看,只一个参数start,因此
  //args中只有一个元素的数组,这个元素值为:start
  daemon.start();
 
  我们来看看方法Bootstrap中的load做了什么事。
  ----------------------------------------------------------------------------------------------------
  /**
     * Load daemon.
     */
    private void load(String[] arguments)
        throws Exception {

        // Call the load() method
        String methodName = "load";
        Object param[]; //定义参数
        Class paramTypes[]; //定义方法参数类型
        if (arguments==null || arguments.length==0) {
            paramTypes = null;
            param = null;
        } else {
            paramTypes = new Class[1];
            paramTypes[0] = arguments.getClass();
            param = new Object[1];
            param[0] = arguments;
        }
        Method method =
            catalinaDaemon.getClass().getMethod(methodName, paramTypes);
        if (log.isDebugEnabled())
            log.debug("Calling startup class " + method);
        method.invoke(catalinaDaemon, param);

    }
   注:从原码看得出来,这个方法是把从args主方法传入的值,也就是start再作为参数执行Catalina中的load方法。

    再来看看start做了什么。
    ----------------------------------------------------------------------------------------------------
    public void start()
        throws Exception {
        if( catalinaDaemon==null ) init(); //如果实例为空,进行初始化。

        Method method = catalinaDaemon.getClass().getMethod("start", (Class [] )null);
        method.invoke(catalinaDaemon, (Object [])null);

    }
   
    注:从原码看得出,也就执行Catalina中的start方法。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics