KR20000006402A - 클래스로우더 - Google Patents

클래스로우더 Download PDF

Info

Publication number
KR20000006402A
KR20000006402A KR1019990023875A KR19990023875A KR20000006402A KR 20000006402 A KR20000006402 A KR 20000006402A KR 1019990023875 A KR1019990023875 A KR 1019990023875A KR 19990023875 A KR19990023875 A KR 19990023875A KR 20000006402 A KR20000006402 A KR 20000006402A
Authority
KR
South Korea
Prior art keywords
class
cassette
classes
loader
dependency
Prior art date
Application number
KR1019990023875A
Other languages
English (en)
Inventor
다니엘제이. 구인안
로렌엘. 하트
Original Assignee
케네쓰 올센
선 마이크로시스템즈, 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 케네쓰 올센, 선 마이크로시스템즈, 인코포레이티드 filed Critical 케네쓰 올센
Publication of KR20000006402A publication Critical patent/KR20000006402A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/468Specific access rights for resources, e.g. using capability register
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

클래스 로우더는 접속된 클래스를 공개할 필요없이 네임스페이스 경계 너머로 클래스를 자동적으로 접속시키기 위해 제공된다. 클래스 제 1 컬렉션으로 이루어지는 제 1 카세트는 제 2 카세트에 종속된다. 제 1 카세트 내로부터의 클래스는 제 1 클래스 로우더에 의해 로우딩되고, 제 2 카세트 내로부터의 클래스는 제 2 클래스 로우더에 의해 로우딩된다. 제 1 참조가 제 1 카세트 내로부터 로우딩되지 않은 클래스에 만들어질 때, 참조된 클래스는 제 2 종속시키는 카세트에 대해서 서치된다. 만약 발견되면, 제 2 클래스 로우더에 의해 로우딩된다. 참조된 클래스가 제 2 카세트 내에서 발견되지 않을 때만, 제 1 카세트 내에 대해서 서치된다. 그러나, 참조된 클래스가 제 2 카세트 내에서 "독립적"으로 보호되고 있다면, 제 1 카세트에 접속할 수 없다.

Description

클래스 로우더{CLASS LOADER}
본 발명은 컴퓨터 시스템의 분야에 관련된다. 보다 특히, 프로그램 코드의 연동 컬렉션 사이에 목적 프로그램을 나누기 위한 시스템과 방법이 제공된다.
클래스 로우더는 프로그램 클래스와 인터페이스를 형성하는 프로그램 파일을 띄우는 자바 프로그래밍 언어에서 사용된다. 자바 프로그램을 가동시키기 위하여 특정 하드웨어 플랫폼 상에서 작동하는 가상 컴퓨터로 작용하는(즉 소프트웨어에서 작용하는) 자바 가상 기계(JVM)는 하나 이상의 클래스 로우더를 포함한다. 하나의 자바 프로그램은 예를 들어 다른 위치로부터 클래스 파일을 띄우기 위하여 다른 클래스 로우더를 부른다(즉, 여러 웹 사이트/페이지에 접속하는 웹 브라우저, 로컬 하드 디스크로부터 구동되는 응용 프로그램).
각각의 클래스 로우더는 로우딩된 클래스로 이루어지는 관련된 네임스페이스를 가진다. 클래스 로우더가 상기 네임스페이스로 특정 클래스를 로우딩한 후에, 상기 클래스가 다른 클래스에 적용되면, JVM은 적용 클래스를 로우딩한 똑같은 클래스 로우더로부터 참조 클래스를 요구한다. 네임스페이스 내의 클래스는 고유의 이름을 가지지만, 분리된 네임스페이스에 있는 다른 클래스 로우더는 같은 이름의 클래스를 로우딩한다.
일반적으로, 하나의 클래스 로우더에 의해 로우딩되는 클래스는 다른 클래스 로우더에 의해 로우딩되는 클래스에 접속할 수 없다(즉, 상기 클래스들은 네임스페이스 경계를 너머 쉽게 기준으로 할 수 없다). 이러한 보안 특성은 하나의 클래스 로우더에 의해 로우딩되는 해로운 코드가 다른 클래스 로우더에 의해 사용되는 클래스와 간섭하는 것을 방지한다. 일반적으로, 클래스 로우더를 불러낸 응용 프로그램만이 이러한 보안 특성을 무시할 수 있다. 이러한 보안 특성이 클래스를 공개함으로서 프로그램 소오스 코드에 의해 무시될 때, 클래스는 개발자가 의도한 이상으로 폭넓게 접속할 수 있을 것이다.
자바 언어를 실행할 때, 두 레벨의 클래스 로우더가 갖춰진다. 시스템 클래스 로우더는 하드웨어 플랫폼에서 JVM 실행의 일부로 갖춰진다. 시스템 클래스 로우더는 자바 API(응용 프로그래머 인터페이스)에 포함되는 모든 클래스에 접속한다. 이러한 실행에서, 응용 프로그램이 먼저 특정 클래스를 기준으로 할 때(즉, 접속을 시도할 때), 시스템 클래스 로우더는 신뢰되는 클래스의 라이브러리로부터 그것을 로우딩하려고 시도한다. 성공하지 못하면, 제 2 클래스 로우더가 클래스를(네트워크 위치로부터 받아옴으로서) 로우딩한다. 후에, 로우딩된 클래스가 제 2 클래스를 기준으로 할 때, JVM은 제 1 클래스를 로우딩하였으므로 제 2 클래스 로우더가 제 2 클래스를 로우딩시킨다. 제 2 클래스 로우더는 시스템 클래스 로우더에 상기 요청을 먼저 보낸다. 시스템 클래스 로우더가 제 2 클래스를 로우딩하지 못할 때만 상기 요청을 만족시키도록 제 2 클래스 로우더가 요구된다.
상기 기술된 실행에서, 시스템 클래스 로우더에 접속할 수 있는 클래스는 외부 프로그램 코드로부터 지켜지고, 붕괴로부터 자신을 보호한다. 이러한 도식은 클래스 접속에 대해 약간의 제어를 허용한다(즉, 제 2 클래스 로우더에 이용할 수 있는 클래스는, 시스템 클래스 로우더에 의해 제공되는 클래스와 같은 이름을 가진다면, 로우딩될 수 없다). 특히, 이러한 도식은 제 2 클래스 로우더에 의해 로우딩된 클래스가 시스템 클래스 로우더에 의해 로우딩된 클래스로 가장하는 것을 방지한다.
그러나, 이러한 실행은 특별히 가능한 혜택을 제공하는 것을 막는다. 특히, 관련된 네임스페이스에 코드나 클래스 사이의 어떠한 관계가 존재한다고 해도, 이러한 실행은 하나의 클래스 로우더가 다른 클래스 로우더(즉, 제 2 클래스 로우더의 제 2 예)의 클래스에 쉽게 접속하는 것을 방지한다. 예를 들어, 두 개의 다른 클래스 로우더에 의해 로우딩된 클래스가 약간의 연동성이나 협동성을 갖는 경우, 하나의 클래스 로우더의 네임스페이스 내의 클래스는 응용 프로그램의 일부 상에서 특정 작용없이 다른 네임스페이스 내의 클래스와 접속할 수 없다.
클래스 로우더 구조는 하나의 클래스 로우더가 다른 클래스 로우더에 의해 로우딩되는 클래스 파일을 상처없이 접속하도록, 그리고 선택된 클래스가 독자적으로 유지되어 네임스페이스 경계 너머로 접속하지 않도록, 제공된다. "카세트"로 알려진 클래스 제 1 세트는 제 1 클래스 로우더와 연관된다. 클래스 제 2 세트는 클래스 제 1 세트에 종속된 관계를 가진다. 이런 종속성은, 카세트가 짜맞춰지고 암호로 확인될 때, 구체화된다. 종속성 그래프(즉, 그래프, 목록, 표의 형태)는, 제 1 카세트로부터의 종속성(즉 제 2 카세트는 제 1 카세트에 종속됨) 크기를 확인하기 위하여, 제 2 카세트에 대해 그려진다. 제 1 카세트가 다른 카세트에 종속된다면, 상기 다른 카세트는 제 2 카세트의 종속성 그래프에 포함된다.
새로운 클래스 참조가 제 2 카세트 내로부터 만들어질 때, 가장 먼, 종속시키는 카세트(즉, 제 1 카세트)와 연관된 클래스 로우더는 제 1 세트로부터 참조된클래스를 로우딩하려고 시도한다. 성공하지 못하면, 참조된 클래스는 종속되는 카세트(제 2 카세트) 다음으로 가장 가까운 카세트에서 찾을 수 있다. 참조 클래스를 찾으면, 찾은 카세트와 관련된 클래스 로우더에 의해 로우딩된다. 그러나, 참조 클래스가 독립적이라면, 종속시키는 카세트로부터 로우딩되지 않고, 표준 프로그램 보안 도식에 부합할 것이다.
도 1은 본 발명의 실시예에 따르는 설명 프로그램 환경의 블락 다이어그램.
도 2는 본 발명의 실시예에 따라 도 1의 프로그램 환경 내에서 하나의 종속되는 카세트와 여러 종속시키는 카세트 사이의 관계를 도시하는 블락 다이어그램.
도 3은 본 발명의 실시예에 따라 참조 카세트와 연관된 종속성 그래프에서 카세트 내로부터의 참조된 클래스를 발견하여 로우딩하는 반복적 과정의 블락 다이어그램.
* 참조번호설명
100,102,104 ... JAR 파일
106,108,110,112,114 ... 카세트
106a,106b,108a,108b ... 자바 패키지
120,122,124 ... 목록
206,208,210,212,214 ... 클래스 로우더
206a,208a,210a,212a,214a ... 네임스페이스
다음의 기술 내용은 당 분야의 숙련자라면 누구나 본 발명을 만들고 사용할 수 있도록 나타나 있다. 그리고 특정 용도와 요구의 환경 하에서 제공된다. 공개된 실시예에 여러 가지 수정을 가할 수 있다는 것이 당 분야의 숙련자에게는 너무나 명백하고, 여기서 정의되는 일반 원칙은 본 발명의 정신과 범위를 벗어나지 않고 다른 실시예와 다른 응용품에 적용될 수 있을 것이다. 그러므로, 본 발명은 도시된 실시예에 한정되는 것을 의도하지 않으며, 여기서 공개되는 원칙과 특징에 벗어나지 않는 최대의 범위에 조화될 것이다.
본 발명의 한 실시예에서, 클래스 로우더는, 응용 프로그램 소오스 코드를 수정하지 않고 네임스페이스 경계너머로 프로그램 코드를 접속할 수 있는 자바 프로그래밍 언어와 같은 프로그래밍 언어를 위해 제공된다. 예를 들어, 클래스 로우더는 자바 가상 기계(JVM)에 제공되는 시스템 클래스 로우더이거나 그것의 서브-클래스일 수 있다. 선택적으로, 상기 클래스 로우더는 추상적인 클래스로우더 클래스의 예일 수 있다.
"카세트"로 불려지는 프로그램 코드 제 1 컬렉션은 제 1 클래스 로우더와 연관되며, 제 2 카세트는 제 2 클래스 로우더와 연관된다. 두 카세트 사이에는 종속 관계가 성립되며, 제 2 카세트는 제 1 카세트의 클래스와 접속하는 것으로 증명된다. 다시 말하면, 제 2 카세트는 제 1 카세트에 종속된다.
종속성 목록(목록, 표, 또는 그래프의 형태)이 종속되는 카세트로부터의 종속성의 전체 크기를 나타내도록 그려진다. 상기 목록은 종속되는 카세트로부터 종속시키는 모든 카세트와, 상기 모든 카세트로부터 종속시키는 모든 카세트를 포함한다. 종속성 목록이나 그래프는 카세트가 프로그램의 개발 혹은 실행 환경 내에서 설치되면서 그려지고, 프로그램의 모든 요소(카세트나 JAR 파일)가 짜맞춰질 때까지 임시 데이터 저장소에 저장된다.
프로그램이 가동되면, 종속성 그래프는 쉽게 접속하기 위해 메모리에 위치한다. 종속성 그래프 내에서 식별되는 여러 카세트는 카세트나 패키지가 나누어지는 "병합된 네임스페이스"를 나누는 것으로 생각할 수 있다.
제 2 카세트로부터 로우딩된 클래스가 새 클래스의 실증을 요구할 때, 종속성 목록은 가장 먼, 종속시키는 카세트(예에서의 제 1 카세트)를 찾아내기 위하여 이어진다. 종속시키는 카세트의 클래스 로우더는 종속시키는 카세트로부터 참조 클래스를 로우딩하려고 시도한다. 그러나, 요구된 객체가 종속시키는 카세트 내에 있지 않으면, 제 2 클래스 로우더는 제 2 카세트 내의 클래스를 찾으려고 시도한다.
본 발명의 현재 기술되는 실시예에서, 각 카세트가 음양을 나타낼 때, 종속성이 성립된다. 카세트가 그 유효성을 입증하기 위하여 암호 키(cryptographic key)로 디지털 방식을 사용하여 음양을 나타낸다. 음양부호의 카세트로부터 클래스를 접속시키는 클래스 로우더는 표준 방식으로 디지털 부호를 입증시킴으로서, 카세트를 인정할 수 있다. 카세트가 부호화되면, 카세트와 카세트의 종속성 모두가 변하지 않아, 그 내용의 보안성을 증가시킨다. 카세트는 다중 클래스나 클래스 파일로부터 형성된다. 카세트가 짜맞춰지고 다른 카세트에 종속되는 것으로 간주될 때, 표기법이 카세트를 동반하는 목록 내의 이 결과에 주어진다.
카세트가 다른 클래스에 제 1 참조를 만들면, JVM은 클래스가 벌써 로우딩되어는 지를 먼저 결정한다. 그렇다면, 클래스는 정상으로 접속된다. 그러나, JVM이 클래스에 어떤 참조도 가지고 있지 않다면, JVM은 카세트의 클래스 로우더를 지도하고, 상기 클래스 로우더로부터 클래스를 로우딩하도록 참조가 만들어졌다. 그 카세트를 찾기 전에, 종속성 그래프는 종속시키는 카세트 중 어느 것이 클래스를 포함하는 지를 결정하도록 가로질러진다. 그러므로, 종속시키는 카세트와 연관된 클래스 로우더는 가장 먼 곳에서 출발하여, 상기 로우더의 카세트를 찾는다.
참조 클래스가 종속되는 카세트 내에서 발견된다면, 클래스가 발견된 카세트와 관련된 클래스 로우더에 의해 로우딩된다. 마지막으로, 그리고 종속시키는 카세트 내에서 참조 클래스를 발견할 수 없을 때만, 종속되는 카세트가 찾아진다. 참조 클래스가 종속시키는 카세트 내에서 발견되지만 독립적인 보호 표시를 가진다면, 표준 자바 클래스 보안이 적용되고 종속되는 카세트는 클래스를 접속시킬 수 없고, 그러므로 로우딩되지 않는다. 본 발명의 선택적인 실시예에서, "패키지" 보호를 가지는 클래스는 자신의 카세트 외부로 역시 접속불가능하다. 본 발명의 또 하나의 실시예에서, "방지되는" 보호를 가지는 클래스는 카세트와 네임스페이스 경계를 너머 접속가능하다.
상기 기술된 종속되는 관계는, 본 발명의 실시예에서, 개개의 카세트와 관련되거나 저장된다. 선택적인 실시예에서, 카세트 연동성은 JAR(자바 기록) 파일과 연관되어 표현된다. 카세트는 이러한 선택적인 실시예에서 JAR 파일을 통해 전송되고, 각각의 JAR 파일은 단 하나의 카세트를 포함한다. 그러므로, 카세트 연동성은 본 발명의 목적에 따라 JAR 파일 연동성으로 표현될 수 있다.
JAR 파일은 자바 응용품이나 애플릿(즉, 작은 자바 응용품), 또는 자바 응용품의 구성성분을 전송하는 데 이용된다. 예를 들어, 필요한 클래스 파일, 이미지 파일, 오디오 파일 등으로 된 자바 애플릿이나 응용품을 JAR 파일로 조합함으로서, 애플릿은 인터넷과 같은 공용 네트워크 너머로 전송될 수 있다. 이것은, 웹 브라우저가 웹 서버로부터 애플릿을 다운로우딩할 필요가 있을 때, 예를 들어 전체 애플릿이 단일 HTTP 트랜잭션에서 다운로우딩될 수 있기 때문에, 도움이 된다. JAR 파일은 이름이 제시하는 바와 같이 기록 용도로 사용될 수도 있다.
도 1은 프로그램 개발 환경과 같은 프로그램 환경을 도시하고, 여기서 본 발명의 실시예가 사용된다. 도 1의 프로그램 환경은 손에 놓고 사용하는 컴퓨터와 같은 특별한 목적의 장치나 일반 용도의 컴퓨터에 사용된다. 이러한 장치(즉 프로세서, 메모리, 데이터 저장소)의 세부 사항은 잘 알려져 있으므로, 발명의 명확성을 위해 생략한다. 도시된 실시예는 JAR 파일(100,102,104)을 포함한다. JAR 파일(100,102,104)은 카세트(106,108,110)를 각각 포함한다. 현재 기술되는 실시예에서, 카세트는 일반적인 기능을 가지는 클래스의 컬렉션이다. 각각의 카세트는 응용 프로그램이나 다른 카세트에 하나 이상의 서비스(인쇄 서비스, 신용카드 서비스, 세금 서비스 등)를 제공한다. 자바 응용품이 다른 프로그램 코드로부터 일반적으로 독립적이지만, 카세트는 그 코드를 나누고 필요한 서비스와 기능을 제공하기 위해 다른 카세트에 자주 종속되는 점에서, 카세트는 전형적이고 완전한 자바 응용품과 다르다. 그러나, 카세트는 완전한 응용품으로 이루어진다.
도시된 실시예에서, 카세트(106)는 자바 패키지(106a,106b)를 포함하고, 카세트(108)는 자바 패키지(108a,108b)를 포함한다. 자바 패키지는 카세트나 자바 응용품 내에서 사용되는 관련된 클래스의 컬렉션이다.
JAR 파일(100,102,104)은 목록(120,122,124)을 포함한다. JAR 파일의 목록은 포함된 카세트에 의해 유지되는 어떤 종속성에 덧붙여서, JAR 파일 내에 포함되는 객체나 다른 파일 그리고 카세트를 식별한다. 예를 들어, 목록(120)은 카세트(106)가 카세트(108,110)에 종속되는 것을 공개한다. 또한, 카세트(108)는 카세트(112)에 종속된다(도 1에 도시되지 않음); 그러나, 카세트(110)는 종속성을 가지지 않는다. 그러므로, 도시된 실시예에서, 카세트(106)의 완전한 사용은 카세트(108,110)가 프로그램 환경 내에서 사용될 수 있을 것을 요구한다.
목록은 텍스트 파일로 형성된다. 발명의 현 실시예에서, 각각의 목록은 목록과 함께 JAR 파일에 저장되는 카세트로부터 종속성을 식별하기 위해서, "종속성" 섹션이나 헤더를 유지할 필요가 있다. 이러한 섹션이나 헤더 내에, 카세트로부터 직접 종속되는 각 카세트의 파일 네임(경로 포함)이 있다. 선택적으로, 파일 네임 대신에, 종속시키는 카세트가 인터페이스에 의해 식별되고, 상기 인터페이스는 종속시키는 카세트에 의해 실행된다. 또한, 종속시키는 카세트가 종속되는 카세트와 함께 국부적으로 저장되지 않으면, 본 실시예에서, 균일 리소오스 로케이터(URL)가 종속시키는 카세트를 얻을 수 있는 위치를 식별하기 위해 목록에 포함된다.
도 1은 전형적인 프로그램 환경(프로그램의 구동시나 개발 환경)을 도시하고, 여러 JAR 파일의 내용이 자바 애플릿이나 응용품 내에서 사용된다. 본 발명의 실시예에 따라, 카세트(106) 내의 클래스는 카세트(108,110,112)에 포함되는 클래스와 객체를 접속시킨다(카세트(112)는 카세트(108)로부터의 종속성 때문에 접속가능하다). 종속되는 카세트에 접속하는 것은, 환경 내에서 각각의 종속시키는 카세트가 분리된 네임스페이스에서 작동하는 다른 클래스 로우더에 의해 로우딩됨에도 불구하고, 가능하다. 그러나, 종속시키는 카세트 내의 클래스(즉, 패키지(108a) 내의 클래스)는, 표준 자바 클래스 구조에 따라 클래스를 "독립적으로" 보호함으로서 카세트(106) 내의 클래스에 의해 접속으로부터 보호받을 수 있다.
도 2를 참고하여, 도식적인 종속성 그래프가 도시된다. 본 발명의 용도에 따라, 종속성 그래프는 프로그램 환경 내에서 기계적으로 해독가능한 포맷으로 저장된다. 클래스 로우더(206, 208, 210, 212, 214)는 카세트(106,108,110,112,114)를 각각 로우딩하기 위하여 도시된다. 각각의 클래스 로우더는 같은 클래스 로우더 클래스(즉, 추상적인 클래스 로우더 클래스 또는 시스템 클래스 로우더의 서브-클래스)의 예이지만, 각각의 클래스 로우더는 분리된 네임스페이스로 클래스를 로우딩한다. 도 2에서, 네임스페이스(206a,208a,210a,212a,214a)는 각각의 클래스 로우더와 관련된다.
발명의 본 실시예에 따라, 카세트(106) 내의 객체나 클래스가 제 1 참조에 다른 클래스나 객체를 만들 때, 카세트(106,108,110, 또는 112) 내로부터 클래스나 객체를 접속시킬 수 있다. 다시 말하면, 카세트 사이에서 종속되는 관계를 정립함으로서, 한 카세트로부터 실행하는 프로그램 코드는, 프로그램 소오스 코드로부터의 명백한 인증없이 네임스페이스 경계 너머로 도달할 수 있다. 그러나, 네임스페이스(214a)는, 카세트(106)의 종속성이 카세트(114)까지 연장되지 않기 때문에, 카세트(114) 내에 클래스를 접속시키기 위하여 자동적으로 투과될 수 없다.
목록(120)으로부터, 종속성 그래프나 목록(도 2에서 도시됨)이 카세트의 종속성 사이에서 클래스를 서치하기 위하여 형성된다. 카세트(106)로부터 실행하는 프로그램 코드가 클래스를 참조로 할 때, 참조된 클래스는 특정 순서로 서치된다. 현재 도시된 실시예에서, JVM에 의해 유지되는 시스템 캐쉬 내에서 참조된 클래스가 먼저 서치된다. 캐쉬 내에 있지 않다고 하면, 그 이전에 클래스는 로우딩된 적이 없고, 로우딩 되기 전에 캐쉬 내에 위치해야 한다. 표준 자바 클래스(자바 API에 제공된 클래스)가 먼저 서치된다. 표준 클래스에서 발견되지 않으면, 종속되는 카세트의 종속성 그래프를 가로지르는 반복 과정에 따라 프로그램의 카세트나 패키지 사이에서 서치된다.
도 3은 참조 카세트와 관련된 종속성 그래프에서 카세트 내에서부터 참조된 클래스를 찾아내고 로우딩하는 반복적인 과정을 도시한다. 상태 300이 시작 상태이다. 상태 302에서, 참조 카세트의 클래스 로우더는 참조된 클래스를 로우딩하도록 요청받는다. 상태 304에서, 참조 카세트는 상기 카세트를 (종속성 그래프를 참조로하여) 식별한다. 도시되는 과정의 반복성 때문에, 그리고 카세트가 하나 이상의 다른 카세트에 종속되기 때문에, 클래스 로우더는, 종속시키는 카세트가 참조된 클래스에 대해 서치되었는 지의 여부를 또한 결정한다. 카세트는 아래에 기술되는 바와 같이 상기 과정에서 또한 서치된다.
상태 306에서, 서치되지 않은 종속시키는 카세트의 클래스 로우더는 참조된 클래스를 로우딩하도록 요청받는다(즉, 과정은 종속성 그래프의 레벨을 따라 내려간다). 더 이상의 종속성을 가지지 않는 종속시키는 카세트에 도달할 때까지, 상태 304와 306이 반복된다.
상태 308에서, 종속시키는 카세트의 클래스 로우더는 카세트 내로부터 참조된 클래스를 로우딩하려고 시도한다. 예를 들어, 클래스가 카세트 내에서 발견되고 "독립적"으로 보호되지 않으면, 상태 301에서 로우딩되고, 그 후 과정은 상태 316에 존재한다.
참조된 클래스가 상태 308에서 로우딩할 수 없었다면, 참조 카세트로부터 클래스를 로우딩하려고 시도했는 지의 여부를 상태 302에서 결정한다. 참조 카세트가 현재 기술되는 실시예에서 마지막으로 서치되어 서치 과정의 마지막을 표시하기 때문에, 참조 카세트가 서치된 후 상태 316에서 과정이 종료된다.
참조 카세트가 아직 서치되지 않았다면, 상태 314에서 과정은, 방금 서치된 카세트가 종속시키는 카세트의 클래스 로우더를 호출한다(즉, 과정은 종속성 그래프의 레벨을 따라 올라간다). 참조된 클래스가 발견되어 로우딩되거나 참조 카세트가 서치될 때까지, 과정은 상태 304,306,308,312,314를 반복한다.
당 분야의 숙련자는 설명된 과정의 반복성에 대한 필요를 인식할 수 있을 것이다. 설명된 과정은 카세트가 종속성의 반대 순서로 서치되게 하고, 또한 하나의 카세트가 여럿의 직접적인 종속성을 가지게 할 것이다(즉, 도 2의 카세트(106)는 카세트(108,110)에 직접 종속할 것이다).
그러므로, 도 2에 도시된 종속성 그래프에 따라, 카세트(106)에 관련된 클래스 로우더는, 카세트(106)이 다른 것에 종속되는 지의 여부를 결정할 것이다. 만약 그러하다면, 종속시키는 카세트의 클래스 로우더는, 종속되는 카세트의 클래스 로우더가 종속되는 카세트 내에서 보이기 전에, 클래스를 발견하고 로우딩하는 시도로 불려질 것이다. 그러므로, 과정은 그래프를 따라 내려가, 어떤 종속성도 가지지 않는 종속시키는 카세트(즉, 카세트(112))를 만날 것이다. 카세트(112)가 종속시키는 카세트를 가지지 않는다는 것을 클래스 로우더(212)가 결정하면, 카세트(112)로부터 참조된 클래스를 로우딩하려고 시도할 것이다. 성공한다면, 클래스는 클래스 로우더(212)에 의해 로우딩되고, 프로그램이 계속될 것이다.
그러나, 참조된 클래스가 카세트(112)에서 발견되지 않으면, 서치 과정은, 종속성 그래프를 위쪽으로 가로지르고 각각의 연속 카세트 내로부터 클래스를 로우딩하려고 시도함으로서, 계속될 것이다. 클래스가 캐쉬 내에서 발견되지 않을 때만, 디폴트 클래스나 카세트(112,110,108) 중 하나가 서치된 카세트(106)이다.
클래스를 위한 자바 보안 메카니즘은 도시된 실시예에서 유효하다. 예를 들어, 카세트(108)의 패키지(108a) 내의 클래스는 "독립적"으로 보호될 수 있고, 상기 경우에 카세트(106) 내의 클래스는 클래스를 접속시킬 수 없다. 독립적 보호란,카세트(106,108) 사이의 종속되는 관계에 상관없이 패키지(108a) 내의 다른 클래스에만 클래스가 접속할 수 있다는 것을 의미한다. 또한, 카세트(114)가 카세트(116)의 종속성 체인 내에 있지 않기 때문에, 카세트(106) 내의 클래스가 먼저 클래스를 참조로 할 때, 그 클래스는 자동적으로 서치되지 않는다.
현재 기술되는 발명의 실시예에 적용한 결과로, "패키지 가림(package eclipsing)"의 위험이 감소되거나 제거된다. 패키지 가림이란, 두 클래스 로우더의 네임스페이스가 병합되거나 하나의 클래스 로우더가 다른 네임스페이스에 자유로운 접속을 허용할 때의 위험을 말한다. 이러한 경우, 같은 이름을 가지는, 그리고 분리된 네임스페이스에 이전부터 존재하는, 두 패키지는 서로 논리적인 연관성을 가진다. 그 결과로, 두 패키지 중 하나 내의 클래스는 다른 네임스페이스 내의 클래스에 접속할 수 있다. 특히, 동일 이름의 패키지 중 하나 내에 "독립적" 보호 표시된 (또한 상기 패키지 내의 클래스에만 접속가능한) 클래스는 다른 패키지의 클래스에 접속가능하여 잠재적으로 중대한 취약성을 가지게 된다.
그러나 기술된 실시예에서, 각각의 클래스 로우더는 카세트 내의 패키지를 따른다. 각각의 클래스 로우더는 카세트 내에 모든 패키지의 목록이나 표를 저장한다. 한 카세트가 다른 카세트와 종속적인 관계를 유지할 때, 그리고 또다른 카세트가 제 1 카세트 내의 패키지와 같은 이름을 가지는 패키지를 포함할 때, 제 1 카세트와 연관된 클래스 로우더는 그 카세트 내에 패키지를 접속시킴으로서만 패키지 가림을 막을 수 있다. 같은 이름의 제 2 카세트 패키지를 접속시킬 수는 없다.
상기의 발명의 실시예는 도시와 기술의 용도로 제시되었다. 이는 공개된 형태로 발명을 제한하거나 소모시키는 것을 의도하지 않았다. 당 분야의 숙련자에게는 많은 수정과 변화가 가능할 것이다. 따라서, 상기 공개 내용은 발명을 제한하는 목적이 아니며, 발명의 범위는 첨부된 청구범위에 의해 형성될 것이다.
현재 기술되는 발명의 실시예에 적용한 결과로, "패키지 가림(package eclipsing)"의 위험이 감소되거나 제거된다. 패키지 가림이란, 두 클래스 로우더의 네임스페이스가 병합되거나 하나의 클래스 로우더가 다른 네임스페이스에 자유로운 접속을 허용할 때의 위험을 말한다. 이러한 경우, 같은 이름을 가지는, 그리고 분리된 네임스페이스에 이전부터 존재하는, 두 패키지는 서로 논리적인 연관성을 가진다. 그 결과로, 두 패키지 중 하나 내의 클래스는 다른 네임스페이스 내의 클래스에 접속할 수 있다.

Claims (13)

  1. 네임스페이스 경계를 너머 카세트 내의 클래스를 접속시키는 방법으로서,
    제 1 클래스를 제 1 클래스 로우더와 제 1 네임스페이스에 연관시키고;
    제 2 카세트를 제 2 클래스 로우더와 제 2 네임스페이스에 연관시키고 - 상기 제 2 카세트는 제 1 카세트에 종속성을 가지고;
    상기 제 2 카세트로부터 종속되는 모든 카세트를 포함하는 종속성 그래프를 형성하고;
    특정 클래스를 상기 제 2 카세트 내로부터의 제 1 참조로 하여, 상기 제 1 카세트로부터 상기 참조된 클래스를 로우딩하려고 시도하고; 그리고
    상기 참조된 클래스가 상기 제 1 카세트로부터 로우딩되지 않으면, 상기 제 2 카세트로부터 상기 참조된 클래스를 로우딩하려고 시도하는, 이상의 단계로 이루어지는 것을 특징으로 하는 방법.
  2. 제 1 항에 있어서, 제 1 카세트가 제 3 카세트에 종속되는 방법으로서,
    상기 제 1 카세트로부터 상기 참조된 클래스를 로우딩하려고 시도하기 전에 상기 제 3 카세트로부터 상기 참조된 클래스를 로우딩하려고 시도하는, 단계를 또한 포함하는 방법.
  3. 제 1 항에 있어서,
    컨테이너 파일을 열고; 그리고
    상기 컨테이너 파일로부터 상기 제 2 카세트를 검색하는, 이상의 단계를 또한 포함하는 방법.
  4. 제 3 항에 있어서,
    컨테이너 파일을 여는 것은 네트워크를 통해 상기 컨테이너 파일을 입수하는 단계를 포함하는 것을 특징으로 하는 방법.
  5. 제 3 항에 있어서,
    상기 제 2 카세트롸 연관된 목록을 입수하는 단계를 또한 포함하는 것을 특징으로 하는 방법.
  6. 제 5 항에 있어서,
    상기 목록에 인식된 위치로부터 상기 제 1 카세트를 검색하는 단계를 또한 포함하는 것을 특징으로 하는 방법.
  7. 클래스의 여러 컬렉션(각각의 컬렉션은 다른 클래스 로우더와 연관됨)으로 이루어지는 프로그램을 실행하는 컴퓨터 시스템으로서,
    프로그램을 실행하는 프로세서;
    클래스의 제 1 컬렉션으로부터 클래스를 로우딩하기 위한 제 1 클래스 로우더;
    클래스의 제 2 컬렉션으로부터 클래스를 로우딩하기 위한 제 2 클래스 로우더 - 상기 제 2 컬렉션은 클래스의 상기 제 1 컬렉션에 종속성을 가지고; 그리고
    상기 제 2 카세트의 상기 종속성을 저장하기 위한 종속성 메모리;를 포함하고,
    클래스의 상기 제 1 컬렉션은, 상기 참조된 클래스에 대해 상기 제 2 컬렉션이 서치되기 전에, 클래스의 상기 제 2 컬렉션 내의 클래스에 의해 참조되는 클래스에 대해 서치되는 것을 특징으로 하는 컴퓨터 시스템.
  8. 제 7 항에 있어서, 클래스의 상기 제 2 컬렉션의 상기 종속성을 식별하기 위한 목록을 또한 포함하는 것을 특징으로 하는 컴퓨터 시스템.
  9. 연산 장치를 작동시키는 방법으로서,
    클래스 제 1 세트를 만들고;
    클래스 제 2 세트를 만들고;
    상기 클래스 제 2 세트로부터 상기 클래스 제 1 세트에 종속되는 관계를 확립하고;
    상기 종속되는 관계를 저장하고;
    상기 클래스 제 1 세트를 제 1 클래스 로우더와 연관시키고;
    상기 클래스 제 2 세트를 제 2 클래스 로우더에 연관시키고;
    특정 클래스에 제 1 참조를 입수하고 - 상기 참조는 상기 클래스 제 2 세트 내의 클래스로부터 만들어지고;
    상기 종속되는 관계에 따라 상기 클래스 제 1 세트로부터 상기 특정 클래스를 로우딩하려고 시도하고; 그리고
    상기 특정 클래스가 상기 클래스 제 1 세트로부터 로우딩되지 않으면, 상기 클래스 제 2 세트로부터 상기 특정 클래스를 로우딩하려고 시도하는, 이상의 단계로 이루어지는 것을 특징으로 하는, 방법.
  10. 컴퓨터로 실행할 때, 프로그램 객체를 접속시키기 위한 방법을 컴퓨터가 수행하도록 하는 명령을 저장하는, 컴퓨터에 의해 해독가능한 저장 매체로서, 상기 방법은:
    제 1 카세트를 제 1 클래스 로우더와 제 1 네임스페이스에 연관시키고;
    제 2 카세트를 제 2 클래스 로우더와 제 2 네임스페이스에 연관시키고 - 상기 제 2 카세트는 상기 제 1 카세트에 종속성을 가지고;
    상기 제 2 카세트로부터 종속되는 모든 카세트를 포함하는 종속성 그래프를 형성하고;
    특정 클래스를 상기 제 2 카세트로부터의 제 1 참조로 하여, 상기 종속성 그래프에 가장 떨어진 카세트를 위치시키고;
    상기 떨어진 카세트로부터 상기 참조된 클래스를 로우딩하려고 시도하고; 그리고
    상기 제 2 카세트로부터 종속되는 그 다음으로 떨어진 카세트로부터 상기 참조된 클래스를 로우딩하려고 시도하는, 이상의 단계로 이루어지는 것을 특징으로 하는, 명령을 저장하는 컴퓨터에 의해 해독가능한 저장 매체.
  11. 클래스 제 1 세트로부터 클래스를 로우딩하기 위한 제 1 로우더 장치;
    클래스 제 2 세트로부터 클래스를 로우딩하기 위한 제 2 로우더 장치;
    상기 클래스 제 2 세트로부터 상기 클래스 제 1 세트의 종속성을 식별하기 위한 목록 장치; 그리고
    상기 클래스 제 2 세트로부터의 종속성을 저장하기 위한 메모리 장치;로 이루어지고,
    상기 제 1 로우더 장치는 상기 클래스 제 2 세트로부터 상기 특정 클래스를 참조로 상기 클래스 제 1 세트로부터의 특정 클래스를 로우딩하려고 시도하는 것을 특징으로 하는 프로그램 실행 장치.
  12. 프로그램 명령의 컬렉션 사이에서 접속을 허용하는 데이터 구조를 포함하는, 컴퓨터에 의해 해독가능한 저장 매체로서, 상기 데이터 구조는:
    컨테이너 파일 - 상기 컨테이너 파일은 프로그램 명령의 제 1 컬렉션과 목록을 포함하고, 상기 목록은 프로그램 클래스 제 2 세트에 대한 프로그램 클래스의 제 1 세트의 종속성을 구체화함 -로 이루어지는 것을 특징으로 하는, 컴퓨터에 의해 해독가능한 저장 매체.
  13. 제 12 항에 있어서,
    상기 목록은 텍스트 파일로 이루어지는 것을 특징으로 하는, 컴퓨터에 의해 해독가능한 저장 매체.
KR1019990023875A 1998-06-30 1999-06-24 클래스로우더 KR20000006402A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10791598A 1998-06-30 1998-06-30
US09/107,915 1998-06-30

Publications (1)

Publication Number Publication Date
KR20000006402A true KR20000006402A (ko) 2000-01-25

Family

ID=22319140

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019990023875A KR20000006402A (ko) 1998-06-30 1999-06-24 클래스로우더

Country Status (3)

Country Link
EP (1) EP0969361A1 (ko)
JP (1) JP2000047875A (ko)
KR (1) KR20000006402A (ko)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1300757A1 (en) * 2001-10-02 2003-04-09 Sun Microsystems, Inc. Shareable installation hierarchies
US6985909B2 (en) 2001-12-28 2006-01-10 Sap Ag Modified class loaders and methods of use
FR2888351A1 (fr) * 2005-07-08 2007-01-12 Gemplus Sa Arborescence de chargeurs de classes mappee sur l'arborescence de repertoires
US9383448B2 (en) 2012-07-05 2016-07-05 Deca System Co., Ltd. Golf GPS device with automatic hole recognition and playing hole selection
CN104317575B (zh) * 2014-09-30 2018-04-13 珠海格力电器股份有限公司 空调器组件的代码文件的封装方法和装置
US9800585B2 (en) 2015-10-21 2017-10-24 Red Hat, Inc. Restricting access by services deployed on an application server
CN106055356A (zh) * 2016-05-25 2016-10-26 东软集团股份有限公司 控制资源访问的方法及装置

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5023773A (en) * 1988-02-10 1991-06-11 International Business Machines Corporation Authorization for selective program access to data in multiple address spaces
US5280614A (en) * 1990-08-21 1994-01-18 International Business Machines Corporation Apparatus and method for controlling access to data using domains
US5410698A (en) * 1993-10-12 1995-04-25 Intel Corporation Method and system for dynamic loading of software libraries
US5734904A (en) * 1994-11-14 1998-03-31 Microsoft Corporation Method and system for calling one of a set of routines designed for direct invocation by programs of a second type when invoked by a program of the first type
JPH09231156A (ja) * 1996-02-28 1997-09-05 Nec Corp プログラム受信機能付遠隔実行装置
US5721824A (en) * 1996-04-19 1998-02-24 Sun Microsystems, Inc. Multiple-package installation with package dependencies

Also Published As

Publication number Publication date
JP2000047875A (ja) 2000-02-18
EP0969361A1 (en) 2000-01-05

Similar Documents

Publication Publication Date Title
US7316010B1 (en) Methods for sharing conditionally across class loaders dynamically compiled code
US8627269B2 (en) Runtime library including a virtual file system
US6876996B2 (en) Method and apparatus for using a shared library mechanism to facilitate sharing of metadata
US5944781A (en) Persistent executable object system and method
US8510734B2 (en) Streaming optimized virtual application images
US8280908B2 (en) Merging file system directories
KR100373526B1 (ko) 분산 네트워크 시스템에서의 액세스 제어 시스템 및 자원 보호 방법
US7409694B2 (en) Highly componentized system architecture with loadable virtual memory manager
US8434099B2 (en) Efficient linking and loading for late binding and platform retargeting
US7565665B2 (en) Efficient linking and loading for late binding and platform retargeting
KR102284630B1 (ko) 웹브라우저의 레이아웃 엔진 메모리 공간에서의 객체와 스크립팅 엔진 메모리 공간에서의 객체 사이의 바인딩을 나타내기 위한 인터페이스
CN109614165B (zh) 一种com组件的多版本并行运行方法和装置
US8887150B2 (en) Methods for dynamic mobile application behavior modification subject to a behavior policy
US8112745B2 (en) Apparatus and method for capabilities verification and restriction of managed applications in an execution environment
US6237043B1 (en) System and method for adding highly optimized synchronization capability to objects at run-time
KR20060082353A (ko) 실행가능 웹 컨텐트 제공 및 처리 시스템 및 방법
US7665075B1 (en) Methods for sharing of dynamically compiled code across class loaders by making the compiled code loader reentrant
JP2010170585A (ja) ディスパッチテーブル構造のための方法と装置
US20090133042A1 (en) Efficient linking and loading for late binding and platform retargeting
US6675375B1 (en) Method and apparatus for optimized multiprocessing in a safe language
US7406687B1 (en) Sharing runtime representation of software component methods across component loaders
EP1361496B1 (en) Alteration of executable code module load locations
US6418484B1 (en) Method of remotely executing computer processes
US8239862B2 (en) Apparatus, method, and computer program product for processing information
US20100205593A1 (en) Memory efficient classloading to reduce the number of class copies

Legal Events

Date Code Title Description
WITN Withdrawal due to no request for examination