org.apache.catalina.stratup.Constants

접근에 필요한 패키지나 내부에서 사용되는 상수값들이 저장되어있다. 웹에 쓰이는 주소등 서버 config파일 건들고 싶을때는 여기를 참조하면 된다.



org.apache.catalina.startup.Catalina

시작과 멈춤을 관리하는 쉘이 담겨있는 Class


setConfigFile(java.lang.String)

@deprecated

public void setConfig(String file){

configFile =file;

}

public void setConfigFile(String file){

configFile =file;

}

public String getConfigFile(){

return configFile;

}

public void setUseShutdownHook(boolean useShutdownHook){

this.useShutdownHook = useShutdownHook;

}

public boolean getUseShutdownHook(){

return useShutdownHook;

}


Set the shared extensions class loader

 public void setParentClassLoader(ClassLoader parentClassLoader) {


        this.parentClassLoader = parentClassLoader;


 }

public ClassLoader getParentClassLoader(){

if (parentClassLoader != null){

return (parentClassLoader);

}

return ClassLoader.getSystemClassLoader();

}

public void setServer(Server server){

this.server = server;

}

public Server getServer(){

return server;

}




prcoessing을 계속해야 한다면 return true 아니면 false;

protected boolean arguments(String args[]) {


        boolean isConfig = false;


        if (args.length < 1) {

            usage();

            return (false);

        }


        for (int i = 0; i < args.length; i++) {

            if (isConfig) {

                configFile = args[i];

                isConfig = false;

            } else if (args[i].equals("-config")) {

                isConfig = true;

            } else if (args[i].equals("-nonaming")) {

                setUseNaming( false );

            } else if (args[i].equals("-help")) {

                usage();

                return (false);

            } else if (args[i].equals("start")) {

                starting = true;

                stopping = false;

            } else if (args[i].equals("stop")) {

                starting = false;

                stopping = true;

            } else {

                usage();

                return (false);

            }

        }


        return (true);


    }



return a File object representing our configuration file.

protected File configFile() {


        File file = new File(configFile);

        if (!file.isAbsolute())

            file = new File(System.getProperty("catalina.base"), configFile);

        return (file);

}

 create the Apache Digetster File will be  using for startup

protected Digester createStartDigester()

 create the Apache Digetster File will be  using for shutdown

protected Digester createStopDigester()


socket, inputstream,outputstream, 등 닫는다.

stopServer();


Start a new server instance 새로 시작

public void load()

'오픈소스 분석' 카테고리의 다른 글

Eclipse기반 Tomcat 소스 분석  (0) 2015.04.09
Posted by MIDDLE
,

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
,

Apache의 오픈소스중에 유명한 Tomcat을 분석해보고 싶어져서 시작해봅니다.


1. Apache에서 Tomcat을 다운로드 받습니다.

http://apache.tt.co.kr/tomcat/tomcat-8/v8.0.21/src/apache-tomcat-8.0.21-src.zip

분석 하고싶은 버전으로 받으시면 됩니다.


2. Tomcat을 빌드 하기 위해서 필요한 Ant를 다운로드 받습니다.

http://ant.apache.org/


2-2 eclipse 실행후 Window -> Preferences -> Ant -> Runtime Global Entries 선택 후 Add External JARs 클릭

그후 jdk폴더의 lib안에 있는 tools.jar 추가 합니다.


3. Ant Project를 이용하여 Tomcat 등록하기


이후에 Ant Buildfile: 의 Browse.. 클릭한 후 톰켓 소스폴더안의 build.xml파일을 선택합니다.

Ant로 빌드가 완료가 되어지면 Tomcat 프로젝트가 프로젝트 목록에 뜨게됩니다.

그러나 아직libraray가 완전하지 않기 때문에 에러가 많이 뜨고있습니다.


4. lib추가 하기

프로젝트에서 우클릭 이후 lib폴더를 하나 생성합니다.


생성된 lib폴더 안에 Jar파일들을 넣습니다. 넣게될 Jar파일 목록으로는

build하면서 생긴 lib안의 *.jar파일들

ouput/build/bin/*.jar

output/build/lib/*.jar

output/extras/tomcat-juli.jar

output/extras/tomcat-juli-adapters.jar

output/extras/webservices/jaxrpc.jar

아까 받아둔 Ant 

Ant 안의 lib안의 *.jar파일들


마지막으로 axis2 lib안의 *.jar파일

http://axis.apache.org/

에서 받으시면 됩니다.


4.2 모든 파일들을 lib폴더에 copy & paste 하였다면 다음으로는 lib를 등록.

해당 프로젝트 우클릭


Add Jars 선택한 후 lib 폴더안의 모든 Jar선택



4.3 모든 lib를추가하였지만 에러가 뜨고는 있지만 괜찮습니다.


5. Run Configuration을 조정합니다.



       5.1 Java Application 선택한후 new로 생성

Project를 맞춰 선택 한 이후에 org.apache.catalina.startup.Bootstrap을 찾아서 선택 합니다.


Arguments 탭으로 이동한 뒤 

Program arguments 탭에는 start

VM arguments 탭에는


-Djava.util.logging.config.file="D:\JGWK\test_tomcat_6.0.36\conf\logging.properties" 

-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager 

-Dcatalina.base="C:\workspace\test_tomcat_6.0.36

-Dcatalina.home="C:\workspace\test_tomcat_6.0.36"

를 입력합니다.

C:\workspace\test_tomcat_6.0.36 이부분들은 자신의 Tomcat위치를 잡아줍니다.


6. 실행합니다.



'오픈소스 분석' 카테고리의 다른 글

톰켓 소스분석 2일차  (0) 2015.04.13
Posted by MIDDLE
,