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 name, ClassLoader parent)
ClassLoader를 생성하는 곳으로
HomeToken과
baseToken을 이용하여 Local repository를 체크 합니다
그후에 JAR URL repository 탐색
return할 classLoader 생성부분
Initialize daemon
처음으로는 Catalina path를 설정한뒤
ClassLoader를 생성합니다.
initClassLoaders()를 실행합니다.
그런뒤 Thread를 이용하여 ClassLoader들을 Thread로 돌립니다.
Thread.currentThread().setContextClassLoader(catalinaLoader);
말그대로 Class Load하는 부분이다. SecurityClassLoad안에는 톰켓 실행에 필요한 주요 package 실행이 들어있다.
SecurityClassLoad.securityClassLoad(catalinaLoader);
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