java

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ java ] in KIDS
글 쓴 이(By): iknowyou (Coffeeman)
날 짜 (Date): 1999년 9월 22일 수요일 오후 05시 35분 28초
제 목(Title): Re: application에서 application수행은..?



일반 자바 애플리캐이션에서 다른 자바 애플리캐이션을 실행시키는 경우는
두가지를 생각할 수 있습니다.  첫째는 컴파일 시간에 실행시킬 애플리캐이션
이 지정이 되는 경우이고, 둘째는 런타임 시간에 실행시킬 애플리캐이션이
지정이 되는 경우 입니다.  첫째와 같은 경우는  main메쏘드만을 수행
시키면 되므로 전혀 어려운 문제가 아닙니다. 따라서 두번째 경우에 대해서
설명합니다.  런타임시에 실행시킬 클래스를 지정하고 수행시키는 방법으로
두가지를 제안할 수 있습니다.

1. 같은 자바가상머신 인스턴스내에서 실행한다.

우선 실행을 위해서는 실행하고자 하는 자바 애플리캐이션 클래스를 읽어
와야 합니다.  물론 실행전에 클래스패스로 지정되어 있으면 문제가 않되지만
질문의 문맥을 볼 때, 실행전에는 클래스의 경로를 모르는 상황인 것 같습니다.
따라서 클래스 로더를 만들고 등록을 해야 합니다.  클래스 로더를 만들고
등록하는 코드예는 Bill Venners가 쓴  Inside java Virtual Machine Ch. 8에
나와 있습니다.

클래스로더를 통해서 클래스를 동적으로 적제할 수 있게 되면, 로드한 클래스의
main메쏘드를 수행시켜야 합니다.  이를 위해서 reflection기능을 사용합니다.
main메쏘드를 가지는 클래스의 Class 인스턴스를 통해서 main의 Method 인스턴스를
찾고 원하는 전달인자(String[])를 전해주면서 invoke하면 됩니다.

구체적인 예를 들어 봅니다.  jar포멧으로 되어 있는 자바 애플리캐이션을
실행시키는 자바 애플리캐이션을 작성한다고 합니다.  사용자로부터는
자바 애플리캐이션의 URL을 받기만 합니다.  애플릿뷰어하고 비슷합니다.
단지 Applet의 init, start를 실행시키는 것이 아닌 main만을 실행시키는
차이일 뿐입니다.
이 라운쳐를 만들기 위한스트레이티지는 

1. URL을 위한 클래스로더 클래스를 정의하고 인스턴스를 생성.
2. 지정된 클래스의 main메쏘드 수행을 위해서 java.reflect패키지 사용.




2. 다른 자바 가상머신 인스턴스 내에서 실행한다.

새로운 자바 가상머신 프로세스를 생성하고 난 뒤에 클래스패스를 지정해서
실행되도록 하는 방법입니다.  새로운 자바가상머신 프로세스를 생성하기위해서
java.Runtime.exec(...)를 이용하면 됩니다.  이 방법은 단순하다는 장점이 
있으나, 1번 방법에 비해서는 자유도(원하는 대로 쓰는 정도)가 떨어지고,
실행환경에 대한 정보(java가상머신의 위치, 동작하는 OS)가 부가적으로
필요하다는 단점이 있습니다.





class Life extends Object implements Dynamic {
      Life(Life father, Life mother){}
      responseToThis(Life this){}
      responseToOthers(Life others){}        }
class Life extends Object implements Dynamic {
      Life(Life father, Life mother){}
      responseToThis(Life this){}
      responseToOthers(Life others){}        }
[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.