Tomcat의 시작은 BootStrap.java에서 시작하게 됩니다.

main object 

private static Bootstrap daemon = null;


Demon reference

주로 쓰게되는 Daemon

catalinaDaemon

클래스 로더들

commonLoader

catalinaLoader

sharedLoader


private void initClassLoaders()

createClassLoader를 이용하여 3개의 클래스로더에게 데이터를 넣어준다.



private ClassLoader createClassLoader(String nameClassLoader parent)

ClassLoader를 생성하는 곳으로

HomeToken과

baseToken을 이용하여 Local repository를 체크 합니다

그후에 JAR URL repository 탐색


return할 classLoader 생성부분

 ClassLoader classLoader = ClassLoaderFactory.createClassLoader
(locationstypesparent);



Initialize daemon

처음으로는 Catalina path를 설정한뒤

ClassLoader를 생성합니다.

initClassLoaders()를 실행합니다.

그런뒤 Thread를 이용하여 ClassLoader들을 Thread로 돌립니다.


말그대로 Class Load하는 부분이다. SecurityClassLoad안에는 톰켓 실행에 필요한 주요 package 실행이 들어있다.

SecurityClassLoad.securityClassLoad();


   loadCorePackage(loader);

        loadLoaderPackage(loader);

        loadSessionPackage(loader);

        loadUtilPackage(loader);

        loadJavaxPackage(loader);

        loadCoyotePackage(loader);

        loadHttp11Package(loader);

        loadTomcatPackage(loader);

이런식으로 주요 패키지들을 로드한다.


Class들을 전부 로드가 완료 되어지면 이제 본격적으로 시작되는 클래스인 Catalina 클래스를 instance를 받아온다

Class startupClass =

            catalinaLoader.loadClass

            ("org.apache.catalina.startup.Catalina");

        Object startupInstance = startupClass.newInstance();


그이후 Start Load Stop 등 기본 작동에 대해서 있게된다


Main Method 

parametes: args Command line arguments to be processed

daemon이 null이면

BootStrap 생성자 실행

이후 init();

daemon = bootstrap;


현재 상태에따라 다음 진행을 결정한다.

           String command = "start";

            if (args.length > 0) {

                command = args[args.length - 1];

            }


            if (command.equals("startd")) {

                args[args.length - 1] = "start";

                daemon.load(args);

                daemon.start();

            } else if (command.equals("stopd")) {

                args[args.length - 1] = "stop";

                daemon.stop();

            } else if (command.equals("start")) {

                daemon.setAwait(true);

                daemon.load(args);

                daemon.start();

            } else if (command.equals("stop")) {

                daemon.stopServer(args);

            } else {

                log.warn("Bootstrap: command \"" + command + "\" does not exist.");

            }


getCatalinaBase

Get the value of the catalina.base environment variable

setCatalinaBase

Set the catalina.base System property to the current working directory if it has not been set.

getCatalinaHome


setCatalinaHome




Posted by MIDDLE
,