KR100639167B1 - 프로그램 객체들의 버전-적응가능한 직렬화 및 탈직렬화 - Google Patents

프로그램 객체들의 버전-적응가능한 직렬화 및 탈직렬화 Download PDF

Info

Publication number
KR100639167B1
KR100639167B1 KR1020000053559A KR20000053559A KR100639167B1 KR 100639167 B1 KR100639167 B1 KR 100639167B1 KR 1020000053559 A KR1020000053559 A KR 1020000053559A KR 20000053559 A KR20000053559 A KR 20000053559A KR 100639167 B1 KR100639167 B1 KR 100639167B1
Authority
KR
South Korea
Prior art keywords
program
class
serialized
attributes
program object
Prior art date
Application number
KR1020000053559A
Other languages
English (en)
Other versions
KR20010050408A (ko
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 KR20010050408A publication Critical patent/KR20010050408A/ko
Application granted granted Critical
Publication of KR100639167B1 publication Critical patent/KR100639167B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • 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/465Distributed object oriented systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99951File or database maintenance
    • Y10S707/99952Coherency, e.g. same view to multiple users
    • Y10S707/99953Recoverability
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99951File or database maintenance
    • Y10S707/99952Coherency, e.g. same view to multiple users
    • Y10S707/99954Version management

Landscapes

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

Abstract

프로그램 객체들을 표현하고(직렬화) 직렬 정보로부터 프로그램 객체들을 재작성하기(탈직렬화) 위해 직렬 정보를 생성하는 공지기술은 종종 클래스 구조 또는 프로그램 객체의 정의에 가해질 수 있는 변경들에 대해 제한을 가한다. 클래스 구조에 대한 다수의 변경들은 하나의 프로그램 객체의 하나의 버전이 프로그램 객체의 다른 버전을 표현하는 직렬 정보로부터 회복되는 것을 방해하는 비호환성을 야기한다. 상기 직렬화 및 탈직렬화 과정으로 하여금 프로그램 객체의 버전에 따라 적응될 수 있도록 함으로써 이러한 문제를 극복하는 기술이 개시되어 있다.

Description

프로그램 객체들의 버전-적응가능한 직렬화 및 탈직렬화{Version-Adaptive Serialization and Deserialization of Program Objects}
도 1은 본 발명의 다양한 국면을 수행하는데 이용될 수 있는 컴퓨터 시스템의 블록도.
도 2는 네트워크와 같은 통신설비에 의해 상호 접속된 몇개의 컴퓨터 시스템들의 블록도.
도 3은 프로그램 객체의 버전에 따라 프로그램 객체를 표현하기 위해 직렬 정보를 생성하는 기본 과정을 묘사한 블록도.
도 4는 도 3에 도시된 기본 과정의 하나의 특정 구현을 묘사한 블록도.
도 5는 프로그램 객체의 버전에 따라 직렬 정보로부터 프로그램 객체를 작성하는 기본 과정을 묘사한 블록도.
도 6은 도 5에 도시된 기본 과정의 하나의 특정 구현을 묘사한 블록도.
도 7은 하나 또는 그 이상의 프로그램 객체들을 표현하는 직렬 정보를 생성하는 데 이용될 수 있는 하나의 과정의 편제를 묘사한 블록도.
도 8은 하나 이상의 프로그램 객체들을 표현하는 직렬 정보를 판독하여 처리하는 데 이용될 수 있는 하나의 과정의 구성을 도시한 도면.
도 9는 프로그램 객체 클래스가 직렬화가 가능하다고 생각되는 하나 또는 그 이상의 기초 클래스들로부터 도출되는지를 결정하는데 이용되는 과정을 묘사한 블록도.
도 10은 본 발명에 따라, 직렬화 과정에 의해 생성될 수 있는 직렬 정보 스트림의 내용물에 대한 개략도.
도 11은 본 발명의 일실시예에 따라, 도출된 프로그램 객체 클래스들의 계층과 관련 객체-기술자 클래스들의 계층사이의 관계를 묘사하는 블록도.
본 발명은 일반적으로 컴퓨터 프로그램들에 관한 것이고, 특히 객체지향 프로그래밍에서 프로그램 객체들을 다루는 기술에 관한 것이다.
객체지향 프로그래밍에 의해 구현되는 애플리케이션들에서, 애플리케이션의 요소들은 프로그램 객체들로 알려진 구조들을 프로그램함으로써 표현될 수 있다. 프로그램 객체는 본질적으로 임의의 실제 또는 가상, 유형 또는 무형의 아이템을 표현할 수 있다. 예를 들면, 임금대장(payroll) 시스템에서, 객체는 피고용자 또는 지정된 고용기간 동안의 피고용자의 수당을 표현하는데 이용될 수 있다. 항공기 착륙 제어 시스템에서는, 프로그램 객체가 개별 항공기나 특정 활주로를 표현하는데 이용될 수 있다. 이와 동일한 시스템에서, 전체 공항을 표현하는 프로그램 객체는 관제탑을 표현할 수도 있고 또한 그 공항의 모든 활주로를 표현하는 프로그램 객체들을 포함하거나 내장할 수 있다.
프로그램 객체들은 보통 그들을 작성한 프로그램의 실행시간을 넘어서 잔존하지는 않는다. 상기 객체들을 표현하는 정보는 보통 랜덤 액세스 메모리(RAM)와 같은 형태의 휘발성 저장매체에 상주하며, 이러한 정보에 액세스하고 이용할 수 있는 능력은 보통 상기 프로그램 객체들을 작성했던 상기 프로그램이 실행되고 있는 동안에만 존재한다.
공지기술은 실행 프로그램으로 하여금 기록되거나 전송될 수 있는 형태로 프로그램 객체를 표현하는 정보를 생성하는 것을 허용하며, 또한 다른 시간이나 장소에서 실행되고 있는 프로그램으로 하여금 상기 정보를 읽어서 상기 프로그램 객체를 재작성하는 것을 가능케 한다. 자바 프로그래밍 언어에서의 프로그램 객체들에 대한 적절한 기술이 캘리포니아 팔로 알토의 선마이크로 시스템즈(Sun Microsystems)에 의해 발표된 “객체 직렬화 명세(The Object Serialization Specification)”에 개시되어 있다. 이 명세는 URL(Uniform Resource Locator)주소 http://java.sun.com/j2se/1.3/docs/guide/serialization/ 의 “명세”디렉토리(‘Specification’ directory)에서 인터넷으로부터 구할 수 있으며, 이는 참조로써 본 명세서의 내용에 편입된다. 상기 명세 디렉토리에서, 상기 명세의 내용물 목록은 “serialTOC.doc.html” 로 식별되며(URL 주소는 http://java.sun.com/j2se/ 1.3/docs/guide/serialization/spec/serialTOC.doc.html), 시스템 아키텍쳐에 대한 논의는 “serial-arch.doc.html”로 식별된다(URL 주소는 http://java.sun.com/ j2se/1.3/docs/guide/serialization/spec/serial-arch.doc.html). 부가 정보는 웹 퍼블리싱사에 의해 자바월드(JavaWorld)에서 발표된 목록에서 구할 수 있다. 이러한 목록들은 URL 주소 http://www.javaworld.com/javaworld/로 식별되는 “자바월드 디렉토리 (javaworld directory)”의 서브디렉토리에서 인터넷으로부터 구할 수 있다. 상기 자바월드 베이스 디렉토리에서 두개의 관련 목록들에 대한 상기 서브디렉토리들 및 명칭들은 jw-01-1998/jw-01-beans_p.html(URL 주소는 http://www. javaworld.com/javaworld/jw-01-1998/jw-01-beans_p.html) 및 jw-02-1998/jw-02-beans_p.html (URL 주소는 http://www.javaworld.com/javaworld/jw-02-1998/jw-02-beans_p.html)이고, 양자 모두는 참조로써 본 명세서의 내용에 편입된다. "객체 직렬화(object serialization)"라는 용어는 프로그램 객체를 표현하는 정보의 직렬 스트림을 생성하는 과정을 지칭하는 것이며, "객체 탈직렬화(object deserialization)"라는 용어는 상기 정보의 직렬 스트림을 읽어서 상기 프로그램 객체를 재작성하는 과정을 지칭하는 것이다.
객체 직렬화 및 탈직렬화는 하나 또는 그 이상의 애플리케이션에 필요한 프로세싱을 최적화하는데 이용될 수 있다. 예를 들면, 애플리케이션 프로세싱은 세그먼트들로 분리될 수 있으며 그 세그먼트들을 수행하는데 필요한 상기 프로세싱은 둘 또는 그 이상의 컴퓨팅 시스템들에 의해 제공될 수 있다. 하나의 컴퓨터 시스템은 애플리케이션의 초기 세그먼트를 수행할 수 있으며, 그 세그먼트의 종결부에서는, 직렬 정보 스트림에 상기 프로세싱 상태를 수집하기 위해 하나 또는 그 이상의 프로그램 객체들을 직렬화할 수 있다. 제 2 컴퓨터 시스템은, 상기 직렬 정보 스트림에 의해 표현되는 상기 프로그램 객체들을 재작성하여 상기 초기 세그먼트의 말단부에서 상기 제 1 컴퓨터 시스템에 존재했던 상기 프로세싱의 상태를 재저장하고, 후속 세그먼트를 수행함으로써 상기 프로세싱을 지속시키는 것에 의해 애플리케이션 프로세싱을 지속시킬 수 있다. 대안으로, 직렬화된 정보는, 상기 과정의 동일한 세그먼트를 다소 병렬적으로 수행하기 위한 복수의 컴퓨터 시스템들에 제공될 수 있다.
불행하게도, 프로그램 객체들을 직렬화 및 탈직렬화하기 위한 공지기술은 애플리케이션을 수행하는데 이용되는 프로그램들에 가해질 수 있는 변경들에 심각한 제한을 가한다. 에러를 수정하거나 애플리케이션에 새로운 특징들을 부가하는 변경들은 프로그램 객체들의 하나 또는 그 이상의 피정의(被定義) 구조들에서 대응하는 변경들을 요구할 수 있다. 프로그램 객체의 정의에 대한 각각의 변경은 상기 프로그램 객체의 새로운 "버전"을 도입하는 것이라고 말할 수 있다. 보다 상세하게는, 그러한 변경들은 상기 프로그램 객체의 상기 구조를 정의하는 "클래스"의 새로운 버전을 도입한다. 프로그램 객체는 그것의 구조를 정의하는 상기 클래스의 인스턴스 (instance)이다.
변경은, 클래스의 나중 버전을 이용한 프로그램이 상기 클래스의 이전 버전을 이용한 프로그램에 의해 생성된 직렬정보로부터 성공적으로 그 클래스의 인스턴스를 탈직렬화할 수 있다는 점에서 전향 호환적일 수도 있다. 변경은, 클래스의 이전 버전을 이용한 프로그램이 상기 클래스의 나중 버전을 이용한 프로그램에 의해 생성된 직렬정보로부터 성공적으로 그 클래스의 인스턴스를 탈직렬화할 수 있다는 점에서 후향 호환적일 수도 있다. 호환적인 변경은 전향 호환적이며 동시에 후향 호환적이다. 비호환적인 변경은 전향 및 후향 호환성 중 하나 또는 모두를 결여하고 있다. 필요한 변경이 비호환적이라면, 분산형 네트워크에 참여하고 있는 모든 컴퓨터 시스템들이 동일한 클래스 버전을 이용하기 위해 변경되기까지 그 변경은 어느 컴퓨터 시스템에도 도입될 수 없다. 자바 프로그래밍 언어에서 프로그램 객체들에게 영향을 미치는 호환성 및 비호환성의 변경들에 관한 부가 정보는 상기한 명세 디렉토리내의 "version.doc.html" 문서(URL 주소 http://java.sun.com/j2se/ 1.3/docs/guide/serialization/spec/version.doc.html) 및 상기한 자바월드 디렉토리내의 jw-03-1998/jw-03-beans_p.html로 식별된 목록(URL 주소는 http://www. javaworld.com/javaworld/jw-03-1998/jw-03-beans_p.html)으로부터 얻을 수 있으며, 이들 문서 및 목록은 참조로써 본 명세서의 내용에 편입된다.
클래스들에 대한 변경들은 일반적으로 비호환적이기 때문에, 프로그램 객체 직렬화에 대한 다수의 공지기술들은 프로그램 객체가 직렬화된 시점에서 사용된 클래스 버전의 식별(identification)을 자동으로 생성시킨다. 이러한 기술의 예들은 상기한 베이스 디렉토리하의 웹페이지에서 논의되고 있다. 이 웹페이지의 서브디렉토리 및 명칭은 jw-03-1998/jw-03-beans_p.html이고, 이는 참조로써 본 명세서의 내용에 편입된다. 이것은 프로그램으로 하여금 객체들의 새로운 인스턴스들을 정의하는데 사용된 클래스의 현재 버전에 대항하여 상기 직렬화된 프로그램 객체의 상기 버전을 검사하는 것을 허용한다. 버전들이 동일하지 않다면, 상기 애플리케이션 프로그램에 대해 잠재적인 비호환성을 경고하기 위해 에러 또는 어떤 형태의 프로그램 예외가 발생된다.
변경이 호환적인 것으로 알려져 있다면, 공지기술은 클래스 설계자로 하여금, 새로운 클래스 버전에 대해 이전 클래스 버전을 위해 생성되었던 것과 동일한 버전 식별을 상기 직렬화 과정이 생성하도록 함으로써 자동 버전 식별 특징을 무시하는 것을 허용한다. 이러한 기술은, 서로 다르지만 호환적인 클래스 버전들을 이용한 프로그램들로 하여금 그 클래스에 대한 직렬화된 프로그램 객체들을 표현하는 직렬정보를 공유하는 것을 허용한다. 불행하게도, 어떤 공지기술도, 서로 다르면서 비호환적인 버전들을 이용한 프로그램들로 하여금 직렬화된 정보를 공유하는 것을 허용하지 않는다.
본 발명의 목적은, 프로그램들로 하여금 클래스의 비호환적인 버전들의 인스턴스들인 프로그램 객체들의 직렬화된 표현들을 공유하는 것을 가능하게 하는 방식으로 프로그램 객체의 직렬화 및 탈직렬화를 제공하는 것이다.
본 발명의 일국면에 따른 방법은, 상기 프로그램 객체의 버전 식별을 획득하고 상기 객체 클래스 및 상기 버전 식별의 함수로써 결정된 상기 프로그램 객체의 표현을 수반하는 직렬화된 정보를 생성하는 것에 의해 객체 클래스의 인스턴스화(instantiation)인 프로그램 객체를 직렬화한다.
본 발명의 또다른 국면에 따른 방법은, 상기 직렬화된 정보로부터 상기 객체 클래스 및 상기 프로그램 객체의 버전 식별을 획득하고 상기 객체의 하나 또는 그 이상의 속성들에 대한 값들을 설정하는 것에 의해 객체 클래스의 인스턴스화인 프로그램 객체의 표현을 수반하는 직렬화된 정보를 탈직렬화하며, 상기 하나 또는 그 이상의 속성들에 대한 상기 값들은 상기 객체 클래스 및 상기 버전 식별의 함수로써 정해진다.
본 발명의 이러한 국면들은 상기 방법들을 수행하는데 적응되는 장치에 의해 구현될 수 있다. 상기 국면들은 또한 명령들의 프로그램을 실행할 수 있는 컴퓨터 시스템과 같은 장치에 의해 판독가능한 매체에 의해 수반되는 명령들의 프로그램에 의해 구현될 수도 있다.
본 발명의 또다른 국면에 따라, 장치에 의해 판독가능한 매체는, 직렬화된 정보에 의해 표현되는 프로그램 객체들의 수의 지시(indication), 상기 객체 클래 스 명칭의 지시 및, 상기 직렬화된 정보에 의해 표현되는 각 개별 프로그램 객체에 대해, 상기 개별 프로그램 객체의 버전 식별 및 상기 개별 프로그램 객체의 하나 또는 그 이상의 속성들을 위한 개별 값을 포함하는 객체 클래스의 인스턴스화들인 하나 또는 그 이상의 상기 프로그램 객체들을 표현하는 상기 직렬화된 정보를 수반한다.
본 발명의 또다른 국면에 따라, 장치에 의해 판독가능한 매체는, 프로그램 클래스의 인스턴스화인 프로그램 객체를 직렬화하거나 탈직렬화하기 위한 메소드(method)를 수행하기 위해 상기 장치에 의하여 실행되는 명령들의 하나 또는 그 이상의 프로그램들을 수반한다. 명령들의 상기 하나 또는 그 이상의 프로그램들은, 개별 프로그램 객체의 버전 식별을 획득하기 위한 메소드를 포함하는 상기 객체 클래스의 정의 및 직렬화 또는 탈직렬화될 상기 개별 프로그램 객체의 하나 또는 그 이상의 속성들을 식별하기 위한 메소드를 포함하는 객체-기술자(object-descirptor) 클래스의 정의를 포함한다.
본 발명의 다양한 특징들 및 그 바람직한 실시예들은 후술할 논의 및 수반되는 도면의 참조에 의해 보다 잘 이해될 수 있으며, 몇몇 도면에서 동일한 참조번호는 동일한 구성요소를 지칭한다. 상기 후술할 논의 및 도면들의 내용은 단지 예제들로써 설명된 것이며 본 발명의 범주에 대한 제한을 표현하는 것은 아니라는 점이 이해되어야 한다.
A. 개괄
1. 구현
본 발명은 개인용 컴퓨터 시스템의 소프트웨어를 포함하는 매우 다양한 방법으로 구현될 수 있다. 도 1은 본 발명의 다양한 국면들을 구현하는 데 이용될 수 있는 컴퓨터 시스템(10)의 블록도이다. CPU(12)는 컴퓨팅 자원들을 제공한다. 입력제어기(13)는 키보드나 마우스와 같은 입력장치(14)에 대한 인터페이스를 표시한다. RAM(19)은 시스템 랜덤 액세스 메모리(RAM)이다. 저장제어기(15)는 마그네틱 테잎이나 디스크 또는 광학매체와 같은 저장매체를 포함하는 저장장치(16)에 대한 인터페이스를 표현하고 있다. 상기 저장매체는 운용체제, 유틸리티 및 애플리케이션들에 대한 명령들의 프로그램들을 기록하는 데 이용될 수 있으며 본 발명의 다양한 국면들을 구현하는 프로그램들의 실시예들을 포함할 수도 있다. 디스플레이 제어기(17)는 디스플레이 장치(18)에 대한 인터페이스를 제공한다. 통신 제어기(21)는 통신설비(20)에 접속하는 통신채널(22)에 대한 인터페이스를 표현하고 있다. 통신설비(20)는, 본질적으로, 컴퓨터 시스템(10)으로 하여금 다른 장치들과 통신하는 것을 허용하는 네트워크, 스위치 또는 포인트간(point-to-point) 통신경로와 같은 어떤 설비여도 된다.
도시된 실시예에서, 모든 주요한 시스템 구성요소들은 버스(11)에 접속해 있고, 상기 버스(11)는 하나 이상의 물리 버스를 표현할 수도 있다. 예를 들면, 일부 개인용 컴퓨터들은 소위 업계 표준 아키텍쳐(Industry Standard Architecture)라고 불리는 ISA나 그 변종에 합치하는 하나의 버스만을 결합시킨다. 다른 컴퓨터들은 PCI 로컬 버스 표준과 같은 일부 버스 표준에 합치하는 고대역폭 버스와 같은 추가 버스를 결합시킨다. 버스 아키텍쳐는 본 발명을 실현하는데 요구되는 것은 아니다.
본 발명의 다양한 국면들을 실현하는데 요구되는 특징들은 이산 논리 구성요소들, 하나 또는 그 이상의 ASIC 및/또는 프로그램-제어 프로세서들을 포함하여 아주 다양한 방법들로 구현되는 구성요소들에 의해 수행될 수 있다. 이러한 구성요소들이 구현되는 상기 방식은 본 발명에서 중요한 것은 아니다. 예를 들면, 본 발명을 실현하는데 요구되는 작동들은 컴퓨터 시스템(10)과 같은 컴퓨터 시스템에서 저장매체(16)에 저장되고 RAM(19)에 복사되어 CPU(12)에 의해 실행되는 명령들의 프로그램들에 의해 구현될 수 있다.
그러한 소프트웨어는 마그네틱 테잎, 마그네틱 디스크, 광학 디스크 및 초음파에서 자외선 주파수까지를 포함하는 스펙트럼에 걸친 베이스밴드 또는 변조된 통신경로들을 포함한 다양한 기계 판독가능한 매체들에 의해 수반될 수 있다. 다양한 국면들은 ASIC, 범용 집적회로, 다양한 형태의 판독-전용 메모리(ROM) 또는 RAM에 내장된 프로그램들에 의해 제어되는 마이크로프로세서 및 다른 기술들과 같은 프로세싱 회로소자에 의해 컴퓨터 시스템(10)의 다양한 구성요소들에서 역시 구현될 수 있다.
2. 직렬정보의 분산이용
도 2는 인터넷과 같은 네트워크의 형태로 통신설비(20)에 의해 상호접속된 몇몇의 컴퓨터 시스템들의 블록도이다. 도시된 특정 실시예에서, 컴퓨터 시스템들(8,9 및10)은 하나 또는 그 이상의 서버들(5,6)과 상기 네트워크를 통해 상호작용할 수 있는 클라이언트로서 역할을 한다. 본 특정 실시예는 컴퓨터 시스템들이 서로 통신하는 방법중 단지 하나의 예로써 도시되어 있다. 본 실시예의 어떤 특정 특징도 본 발명에 중요하지 않다.
컴퓨터 시스템(10)과 같은 장치는 저장장치(16)에 포함되는 것과 같은 저장매체 또는 통신설비(20)에 의해 제공되는 것과 같은 통신경로로부터 직렬정보를 쓰거나 읽는 것에 의해 본 발명의 다양한 국면들을 수행할 수 있다. 이러한 직렬정보는 어느 특정 시간 및 장소에서 작성된 프로그램 객체들로 하여금 다른 시간 및/또는 장소에서 재작성되는 것을 허용하면서, 하나 또는 그 이상의 프로그램 객체들을 표현하는 데 이용된다. 이러한 특징은 애플리케이션 프로세싱으로 하여금 시간 및/또는 장소적인 측면에서 분산되는 것을 허용한다.
본 명세서에서 사용된 바와 같이, "직렬정보"라는 용어는 임의의 직렬 방식으로 기록되거나 수반되는 정보를 말한다. 그러나, 이러한 정보는 본질적으로 어떤 형태로든 기록되거나 수반될 수 있다. 예를 들면, 상기 "직렬정보"는, 2진 비트들이 병렬방식으로 기록되거나 수반될 수도 있는 바이트들과 같은 정보 요소들로 구성될 수도 있다.
도 2에 도시된 실시예에서, 본 발명은 컴퓨터 시스템(10)으로 하여금 통신설비(20)에 접속된 다른 컴퓨터 시스템들의 자원을 활용하는 것을 허용함으로써 특정 애플리케이션을 수행하는 데 필요한 프로세싱을 분산시키는 데 이용될 수 있다. 이것은 컴퓨터 시스템(10)이 하나 또는 그 이상의 프로그램 객체들을 표현하는 직렬정보를 생성시키고 그 직렬정보를 클라이언트(8)와 같은 다른 컴퓨터 시스템으로 전송하게 함으로써 달성될 수도 있다. 서버(5 및/또는 6)는 컴퓨터 시스템들간의 직렬정보의 전송을 촉진하는데 이용될 수 있다. 클라이언트(8)상에서 실행되고 있 는 애플리케이션은 통신설비(20)로부터 수신된 상기 직렬정보로부터 컴퓨터 시스템(10)상에 존재해왔던 상기 하나 또는 그 이상의 프로그램 객체들에 대한 대응 프로그램 객체들을 작성하여 클라이언트(8)에게 유용한 자원들에 대해 적절한 작업들을 수행할 수도 있다. 이러한 작업들의 수행은 하나 또는 그 이상의 프로그램 객체들을 수정할 수도 있으며, 그 객체들은 클라이언트(8)에 의해 생성된 직렬정보에 의해 수반될 수 있다. 이러한 직렬정보는 후속 프로세싱을 위해 다른 컴퓨터 시스템으로 넘어갈 수 있다.
유사한 방식으로, 단일 컴퓨터 시스템이 하나 또는 그 이상의 프로그램 객체들을 표현하는 직렬정보를 생성시키고 그 직렬정보를 저장장치(16)에 씀으로써 제 시간에 프로세싱을 분산시킬 수도 있다. 계속해서, 애플리케이션은 저장장치(16)로부터 읽혀진 상기 직렬정보로부터 대응 프로그램 객체들을 작성할 수 있다.
이러한 메카니즘은 상기 클래스 구조나 상기 프로그램 객체들의 정의에 영향을 주는 변경들이 하나 또는 그 이상의 애플리케이션들에 도입되기 까지는 상당히 잘 작동한다. 상기 클래스 구조의 변경들에는 에러를 수정하거나 이러한 애플리케이션들에 대한 바람직한 새로운 특징들을 추가하는 것이 필요할 수도 있다. 특정 컴퓨터 시스템에서 실행되는 애플리케이션에 대한 그러한 변경들을 만드는 능력은 복수 컴퓨터 시스템에서 실행되는 애플리케이션들 사이에서 프로그램 객체들의 호환성을 보존할 필요에 의해 종종 저지된다. 호환성은 이러한 분산된 애플리케이션들이 이러한 프로그램 객체들을 표현하는 직렬정보를 공유할 수 있는데 필요하다. 본 발명은, 상기 프로그램 객체 정의에서의 각 변경에 대해 유일한 "버전" 식별을 제공하고 직렬화 또는 탈직렬화될 상기 프로그램 객체의 상기 특정 버전에 적응할 수 있는 직렬화 및 탈직렬화 특징들을 제공함으로써 이러한 어려움을 극복한다.
B. 직렬화
도 3은 프로그램 객체의 버전에 따라 상기 프로그램 객체를 표현하는 직렬정보를 생성시키기 위한 기본적인 버전-적응 과정의 단계들을 표현하고 있다. 이 특정 과정에서, 단계(110)는 상기 프로그램 객체의 버전을 획득하고, 단계(120)는 상기 버전에 따른 상기 프로그램 객체의 표현을 결정하고, 단계(130)는 이러한 표현을 수반하는 직렬정보를 생성시킨다. 이 특정 과정은 다양한 방식으로 구현될 수도 있다. 그러나, 바람직한 실시예들에서는, 직렬화될 프로그램 객체들은 상기 직렬화 과정을 촉진시키는 다양한 특징들을 정의하는 클래스의 인스턴스들이어야 한다. 그러한 클래스들은 "직렬화가능한" 클래스들로 간주된다.
도 4는 이러한 기본적인 직렬화 과정의 하나의 특정 실시예에 대한 부가적 상세를 제공한다. 이 특정 구현에서, 직렬화될 프로그램 객체의 상기 클래스는 상기 프로그램 객체의 버전을 획득하는 메소드를 정의한다. 단계(101)는 이 클래스의 프로그램 객체를 인스턴스화하고, 단계(110)는 상기 프로그램 객체 버전의 식별을 획득하기 위한 적당한 메소드를 호출한다. 단계(121)는 상기 프로그램 객체의 상기 직렬화된 표현에 포함되어야 하는 이 프로그램 객체 버전에 대한 속성들을 식별한다. 이것은, 예를 들면, 직렬화될 상기 프로그램 객체의 메소드, 직렬화될 상기 프로그램 객체의 상기 클래스에 임의의 방식으로 관련된 다른 클래스의 프로그램 객 체의 메소드 또는 속성들의 데이터베이스를 포함하여 다양한 방법으로 구현될 수 있다. 어떤 경우든, 직렬화할 속성들을 결정하는 과정의 구현은 상기 프로그램 객체 클래스 및 버전의 함수로 고려될 수도 있다. 단계(122)는 직렬화할 각 속성의 값을 확정하고, 단계(130)는 상기 프로그램 객체 클래스 및 버전을 수반하는 직렬정보 및 단계들(121 및 122)에서 식별된 각 개별 속성의 표현을 생성시킨다.
도 7은 하나 또는 그 이상의 프로그램 객체들을 표현하는 직렬정보를 생성하는 데 이용될 수 있는 하나의 과정의 구성을 묘사하고 있다. 이 과정에 따라, 단계(131)는 직렬화할 프로그램 객체들의 수를 정보의 직렬 스트림내에 쓴다. 직렬화할 각 개별 프로그램 객체를 위해, 단계(132)는 상기 직렬정보 스트림에 상기 개별 프로그램 객체의 상기 클래스의 식별을 쓰고 단계(133)는 상기 개별 프로그램 객체의 버전의 식별을 쓴다.
직렬화될 상기 개별 프로그램 객체의 각 개별 속성을 위해, 단계(134)는 상기 개별 속성을 직렬화할 적당한 과정을 호출한다. 단계(134)는 자체가 하나 또는 그 이상의 직렬화가능한 프로그램 객체들인 프로그램 객체 속성들을 직렬화하기 위해 순환적 과정을 구현할 수도 있다. 이러한 특징은 아래에서 보다 상세히 서술되어 있다. 단계(135)는 상기 개별 프로그램 객체에 대한 모든 속성들이 직렬화 되었는지를 결정하고, 그렇지 않다면, 상기 과정이 단계(134)로 돌아가서 다음 속성을 직렬화한다.
상기 개별 프로그램 객체에 대한 모든 속성들이 직렬화 되면, 상기 과정은 단계(136)로 계속되어 상기 개별 프로그램 객체의 상기 클래스가 직렬화되어야 할 임의의 기저 클래스로부터 도출되는가를 결정한다. 도 9는 선 마이크로 시스템즈사
(Sun Microsystems, Inc)로부터 입수가능한 자바 개발 킷(Java Development Kit, JDK)에 포함된 1.01 버전과 같은 "자바빈즈 API 명세(JavaBeansTM API specification)"에 합치하는 프로그램 객체들을 이용하는 애플리케이션들에서 단계(136)를 구현하는 데 이용될 수도 있는 하나의 과정에서의 단계들을 묘사한다. 이 명세의 1.01 버전은 인터넷의 URL 주소 http://java.sun.com/products/jdk/1.1/
docs/guide/beans/index.html 로부터 입수가능한 문서에서 제공되는 "자바빈(JavaBean)"으로 알려진 프로그램 구성요소를 직렬화하기 위한 명세를 포함하며, 상기 문서는 참조로써 본 명세서에 편입된다.
도 9에서 묘사된 구현은 리플렉션으로 알려진 자바 프로그래밍 언어의 특징을 활용한다. 단계(361)는 상기 프로그램 객체의 메소드를 호출하여 상기 프로그램 객체가 인스턴스로 되는 상기 클래스의 명칭을 획득한다. 단계(362)는 직렬화할 상기 프로그램 객체의 상기 클래스와 연관된 객체-기술자 클래스의 클래스 명칭을 식별한다. 바람직한 실시예에서는, 상기 객체-기술자 클래스의 상기 클래스 명칭은, 예를 들면, 문자열 "Descriptor"를 상기 클래스 명칭에 덧붙이는 것과 같은 임의의 방식으로 상기 프로그램 객체의 상기 클래스 명칭으로부터 도출된다. 이러한 예로서, "Widget" 클래스에 대한 상기 객체-기술자 클래스 명칭은 "WidgetDescriptor"가 된다. 단계(363)는 상기 객체-기술자 클래스의 객체를 인스턴스화하고 단계(364)는 자바 리플렉션 애플리케이션 프로그래밍 인터페이스(API)에 의해 제공된 이 객체의 메소드를 호출하여 이 객체-기술자 클래스가 도출된 상기 기저 클래 스의 명칭을 획득한다. 이 구현은 아래에서 보다 상세하게 서술된다.
이 객체-기술자 클래스가 객체-기술자 기저 클래스로부터 도출된다면, 상기 과정은 단계(133)로 계속되어 상기 직렬정보 스트림에 상기 기저 클래스에 속하는 상기 버전의 식별을 쓴다. 상기 과정은 그 기저 클래스의 적당한 속성들을 직렬화함으로써 계속된다. 이 과정은 단계(136)가 더 이상의 기저 클래스가 남아 있지 않다는 것을 결정할 때까지 계속 반복되고, 이 때 단계(137)가 직렬화될 프로그램 객체들이 남아 있는가를 결정한다. 만약 그렇다면, 상기 과정은 다음 개별 프로그램 객체를 위해 단계(132)로 계속된다. 그렇지 않다면, 상기 과정은 단계(138)로 끝난다.
도출된 프로그램 객체 클래스들의 계층과 관련 객체-기술자 클래스들의 계층과의 관계는 도 11에 묘사되어 있다. 프로그램 객체 클래스들(C1 내지 C5)은 박스(381 내지 385)로 각각 표현되며, 객체-기술자 클래스들(C3Descriptor, C4Descriptor 및 C5Descriptor)은 박스(483 내지 485)로 각각 표현된다. 클래스 C5는 C4로부터, C4는 C3로부터 차례로 도출된다. 도시된 예에서는, 클래스 C3가 XSerializable로 간주되는 최상위 프로그램 객체 클래스이다. 이 특정 구현에서 XSerializable이라는 표시는, 상기 클래스가 객체의 직렬화를 촉진시키는 특징들을 구현하기 때문에 프로그램 객체 클래스의 인스턴스들이 직렬화될 수 있다는 것을 가리킨다. 클래스 C5Descriptor는 클래스 C4Descriptor로부터, C4Descriptor는 C3Descriptor로부터 차례로 도출된 객체-기술자 클래스이다. 이들 각 객체-기술자 클래스들 각각은 개별 프로그램 객체 클래스에 관한 기술(記述) 정보를 획득하기 위해 호출될 수 있는 메소드들을 구현한다. 이 정보는 개별 클래스의 프로그램 객체들을 직렬화하는데 이용될 수 있다.
예를 들면, 상기 객체-기술자 클래스 C4Descriptor의 객체의 상기 메소드들은 직렬화될 상기 C4 클래스의 상기 속성들의 목록을 획득하기 위해 호출된다. 상기 자바 프로그래밍 언어에서의 구현을 위해, 상기 자바 리플렉션 메카니즘의 특징들은 이 정보를 획득하기 위해 상기 객체-기술자 클래스의 메소드들에 의해 이용될 수 있다. 클래스 C3는 XSerializable인 최상위 프로그램 객체 클래스이기 때문에, 그보다 더 상위인 프로그램 객체 클래스들인 C1 및 C2에 대해서는 대응 객체-기술자 클래스들이 정의되지 않는다.
C. 직렬정보 포맷
원칙적으로, 상기 직렬정보는 본질적으로 어떤 포맷으로 배열되어도 된다. 어떤 특정 포맷이라도 본 발명에 대해 중요하지 않다. 위에서 서술된 상기 과정들에 따라 생성된 직렬정보 스트림(300)의 내용의 개략적인 묘사가 도 10에 묘사되어 있다. 이 묘사된 포맷에 따르면, 세그먼트(301)는 상기 스트림의 정보에 의해 표현된 프로그램 객체들의 수의 지시를 제공하고, 세그먼트(302 및 303)는 클래스 명칭 및 상기 스트림에서 표현된 최초의 프로그램 객체의 버전의 지시를 각각 제공하며 세그먼트(304)는 상기 최초의 프로그램 객체의 하나 또는 그 이상의 속성들을 표현하는 직렬정보를 수반한다.
상기 최초의 프로그램 객체의 클래스가 직렬화된 기저 클래스로부터 도출된다면, 세그먼트(305 및 306)는 상기 기저 클래스의 버전 및 속성들을 표현한다. 이 기저 클래스가 직렬화된 하나 또는 그 이상의 부가 기저 클래스들로부터 도출된다면, 부가 세그먼트쌍들은 각 기저 클래스의 버전 및 속성들에 대한 정보를 수반하는 데 이용된다.
하나 이상의 프로그램 객체가 직렬정보 스트림(300)에 의해 표현된다면, 두번째 프로그램 객체의 표현은 상기 두번째 프로그램 객체에 대한 클래스 명칭의 지시를 제공하는 세그먼트(307)부터 시작한다. 부가 세그먼트들은 이 두번째 프로그램 객체의 정보 및 임의의 후속 프로그램 객체를, 상기 첫번째 프로그램 객체에 대해 정보가 세그먼트들(302 내지 306)에서 수반되는 것과 동일한 방식으로 수반한다.
하나 또는 그 이상의 직렬화된 속성들을 표현하는 정보를 수반하는 세그먼트(304)와 같은 세그먼트들은 필요에 따라 정보 유닛들로 분할될 수도 있다. 예를 들면, 복수의 특성들을 표현하는 세그먼트들의 정보는 각 특성에 대한 개별 유닛으로 분할될 수 있다. 자체로 직렬화가능한 객체들인 속성들에 대해서, 유닛은 세그먼트들로 더 분할될 수도 있다. 예를 들면, 세그먼트(304)가 복수의 직렬화가능한 객체들을 표현하는 정보를 수반한다면, 이 세그먼트의 정보는 도 10에 묘사된 바와 같이 세그먼트들(301 내지 307)의 포맷에 따라 분할될 수 있다.
D. 탈직렬화
도 5는 클래스의 특정 버전에 대한 프로그램 객체를, 그 클래스와 다를 가능성이 있는 버전에 대한 프로그램 객체를 표현하는 직렬정보로부터 작성하기 위한 기본적 과정에서의 단계들을 표현한다. 이 특정 과정에서, 단계(210)는 상기 직렬 정보를 판독하여 상기 직렬정보에 의해 표현된 상기 프로그램 객체의 버전을 획득하며, 단계(220)는 상기 직렬정보에서 표현된 상기 클래스의 버전에 따라 그리고 프로그램 객체가 작성될 상기 클래스의 버전에 따라 상기 프로그램 객체의 속성들에 대한 값을 정한다. 이 특정 과정은 다양한 방식으로 구현될 수 있다. 그러나, 바람직한 실시예에서는, 클래스가 상기 직렬화 과정을 촉진시킬 다양한 특징들을 정의하기 때문에, 직렬화될 프로그램 객체들은 직렬화가능할 것으로 간주되는 클래스의 인스턴스들이어야 한다.
도 6은 이 기본 직렬화 과정의 하나의 특정 구현에 대한 부가적인 상세를 제공한다. 이 구현에서는, 단계(201)는 단계(210)가 상기 직렬정보를 판독하여 상기 직렬정보에 의해 표현된 프로그램 객체의 식별을 획득하기 전에 클래스의 상기 프로그램 객체를 인스턴스화한다. 대안적인 구현에서는, 상기 프로그램 객체의 인스턴스는 후속 단계에서 작성될 수도 있다. 단계(221)는 상기 직렬정보에 포함된 이 프로그램 객체 버전에 대한 속성들을 식별한다. 이것은, 예를 들면, 탈직렬화될 상기 프로그램 객체의 메소드, 탈직렬화될 상기 프로그램 객체의 상기 클래스와 임의의 방식으로 관련된 클래스의 프로그램 객체의 메소드 또는 속성들의 데이터베이스를 포함하여 다양한 방식으로 구현될 수 있다. 어느 경우든, 탈직렬화할 속성들을 결정하는 과정의 구현은 상기 프로그램 객체 클래스 및 버전의 함수로 고려될 수 있다. 단계(222)는 하나 또는 그 이상의 속성들의 값을 상기 직렬정보로부터 획득하며 단계(223)는 상기 프로그램 객체의 새롭게 작성된 인스턴스의 대응하는 속성들에 대한 이들 값들을 정한다.
도 8은 하나 또는 그 이상의 프로그램 객체들을 표현하는 직렬정보를 판독하여 처리하는데 이용될 수 있는 하나의 과정의 구성을 묘사한다. 이 과정에 따라, 단계(231)는 상기 직렬정보를 판독하여 상기 직렬정보에서 표현된 프로그램 객체들의 수를 획득한다. 탈직렬화될 각 개별 프로그램 객체에 대해, 단계(232)는 상기 직렬정보로부터 상기 개별 프로그램 객체의 상기 클래스의 식별을 판독하며 단계(233)는 상기 개별 프로그램 객체의 버전의 식별을 판독한다.
탈직렬화될 상기 개별 프로그램 객체의 각 개별 특성에 대해, 단계(234)는 상기 개별 속성을 탈직렬화할 적당한 과정을 호출한다. 단계(234)는, 자체로 하나 또는 그 이상의 탈직렬화가능한 프로그램 객체들인 프로그램 객체 속성들을 탈직렬화하기 위해 순환적 과정을 구현할 수도 있다. 이 특징은 아래에서 보다 상세하게 서술된다. 단계(235)는 상기 개별 프로그램 객체에 대한 모든 속성들이 탈직렬화되었는가를 결정하고, 만약 아니라면, 상기 과정은 단계(234)로 돌아가서 다음 속성을 탈직렬화한다. 상기 개별 프로그램 객체에 대한 모든 속성들이 탈직렬화되면, 상기 과정은 단계(236)으로 계속되어 상기 개별 프로그램 객체의 클래스가 탈직렬화되어야 할 임의의 기저 클래스로부터 도출된 것인지를 결정한다. 도 9는 상기한 자바 객체 직렬화 명세(the Java Object Serialization Specification)에 합치하는 프로그램 객체들을 이용하는 애플리케이션들에서 단계(236)를 구현하는데 이용될 수도 있는 하나의 과정에서의 단계들을 묘사한다. 상술한 이 특정 구현은 리플렉션으로 알려진 자바 프로그래밍 언어의 특징을 활용한다.
만약 이 클래스가 기저 클래스로부터 도출되었다면, 상기 과정은 단계(233) 로 계속되어 상기 직렬정보로부터 상기 기저 클래스에 속하는 버전의 식별을 판독한다. 상기 과정은 그 기저 클래스의 적당한 속성들을 탈직렬화함으로써 계속된다. 이 과정은 단계(236)가 기저 클래스들이 더이상 남아 있지 않다는 것을 결정할 때까지 반복되고, 그 때 단계(237)가 탈직렬화될 프로그램 객체들이 더이상 남아 있는지를 결정한다. 만약 그렇다면, 상기 과정은 다음 개별 프로그램 객체를 위해 단계(232)로 계속된다. 그렇지 않다면, 상기 과정은 단계(238)로 끝난다.
E. 구현
1. 직렬화
a) 상위 프로시져
위에서 논의된 과정들의 다양한 국면들의 구현이 몇개의 프로그램 조각들로 아래에 도시되어 있다. 이 프로그램 조각들은 자바 프로그래밍 언어의 문법적 특징들을 포함하는 의사-코드(pseudo-code)로 표현된다. 본 명세서에서 제공되는 프로그램 조각들은 실제 실시예로의 컴파일에 적합하도록 의도된 것은 아니고 가능한 구현에 대한 몇 가지 고려를 보여주기 위해 제공되는 것이다. 예를 들면, 이들 프로그램 조각들은 실제 실시예에서는 요구되어져야 할 에러 상태 및 예외에 대한 검사들을 포함하지 않는다. 더욱이, 다양한 자바 규정 및 명세들에 합치하는 구현들에 대해 보다 많은 특별한 언급이 있음에도 불구하고, 본 발명은 본질적으로 어떤 프로그래밍 언어로도 구현될 수 있다. 그러나, 상기 자바 프로그래밍 언어는 아래에서 논의될 특정 구현을 촉진시키는 리플렉션 API와 같은 특징들을 제공한다.
다음의 프로그램 조각은 하나 또는 그 이상의 프로그램 객체들을 직렬화하기 위해 호출될 수 있는 serializeObjects 프로시져를 구현한다.
public void serializeObjects(ObjectOutputStream out, Vector objects){
int nObjects=0;
Object[]objArry=new Object[objects.size()];
objects.copyInto(objArry);
for(int=0;i<objArry.length;i++){
Object o=objArry[i];
if(o instanceof XSerializable)
nObjects++;
}
out.writeInt(nObjects); //객체들을 쓴다.
for(int i=0;i<objArry.length;i++){
Object o=objArry[i];
if(o instanceof XSerializable)
serializeObject(out,(XSerializable)o);
삭제
}
이 구현에서, serializeObjects 프로시져는 직렬화할 상기 하나 또는 그 이상의 프로그램 객체들을 식별하는 objects 배열을 받으며, 상기 직렬화된 표현이 쓰여질 직렬 스트림을 식별하는 참조 out을 받는다. 상기 프로시져는 변수 nObjects을 이용하여 직렬화될 수 있는 objects 배열에서 표현된 객체들의 수를 카운트한다. 상기한 바와 같이, 이 특정 구현에서 XSerializable 표시는, 프로그램 객체가 객체의 직렬화를 촉진시키는 특징들을 구현한 클래스에 속하기 때문에 프로그램 객체가 직렬화될 수 있다는 것을 가리킨다. 상기 객체 카운트 nObjects는 상기 직렬 스트림 out에 쓰여진다. 상기 프로시져의 for 루프는 serializeObject 프로시져를 호출하여 XSerializable한 것으로 지정된 상기 object 배열에서 식별된 각 프로그램 객체를 직렬화한다.
b) 하위 프로시져
다음의 프로그램 조각은 프로그램 객체를 직렬화하기 위하여 상기 serializeObjects 프로시져에 의해 호출된 serializeObject 프로시져를 구현한다. 이 프로시져는, 프로그램 객체의 클래스가 도출될 수도 있는 임의의 기저 클래스들의 속성들을 포함하여 프로그램 객체의 특유한 속성들을 직렬화한다. 속성은 정수와 같은 단일 엔티티(entity)일 수도 있고, 또는 엔티티들의 배열일 수도 있다. 만약 속성이 자체로 직렬화가능한 프로그램 객체 또는 직렬화가능한 프로그램 객체들의 배열이라면, 그들 프로그램 객체들을 직렬화하기 위해 serializeObject에 대해 하나 또는 그 이상의 순환적 호출이 이루어진다.
private void serializeObject(ObjectOutputStream out, XSerializable obj){
string className=obj.getClass().getName();
ObjectDescriptor desc=
(ObjectDescriptor)Class.forName(className+"Descriptor").newInstance();
Vector temp=new Vector(); // 기술자 클래스 계층으로 올라간다.
temp.addElement(desc.getClass());
Class c=desc.getClass();
while((c=c.getSuperclass())!=null)
temp.addElement(c);
out.writeUTF(className); //클래스 명칭을 쓴다.
Class[]descriptors=new Class[temp.size()];
temp.copyInto(descriptors);
for(int i=0;i<descriptors.length;i++){ //각 기술자 클래스에 대해...
Object descObj=descriptors[i].newInstance();
ObjectDescriptor descriptor=(ObjectDescriptor)descObj;
Class targetClass=Class.forName(descriptor.getClassName());
Object targetObj=targetClass.newInstance();
if(targetObj instanceof XSerializable){
float version=((XSerializable)targetObj).getXClassVersion();
out.writeFloat(version); //객체의 버전을 쓴다.
PropertyDescriptor[]props=descriptor.getProperties(version);
for(int j=0;j<props.length;j++){
//직렬화할 객체의 속성을 판독하기 위해 리플렉션을 이용한다.
String funcName="get"+
Character.toUpperCase(props[j].name.charAt(0))+
props[j].name.substring(1);
Class[]args=new Class[0];
Method m=targetClass.getMethod(funcName,args);
if(m!=null){
Object[]params=new Object[0];
Object retVal=m.invoke(obj,params);
if(retVal instanceof XSerializable)//속성을 쓴다.
this.serializeObject(out,(XSerializable)retVal);
else if(retVal instanceof XSerializableArray){
XSerializable[]data=
(XSerializableArray)retVal).getObjects();
if(data!=null){ //길이 및 객체들을 쓴다.
out.writeInt(data.length);
for(int h=0;h<data.length;h++)
this.serializeObject(out,data[h]);
}
else
out.writeInt(0); // 영 길이를 쓴다.
}
else if(retVal instanceof ByteArrayWrapper){
byte[]data=((ByteArrayWrapper)retVal).getBytes();
if(data!=null){
out.writeInt(data.length); //바이트 배열의
//길이를 쓴다.
out.write(data);
}
else
out.writeInt(0); //영 길이를 쓴다.
}
else if(retVal instanceof IntArrayWrapper){
int[]data=((IntArrayWrapper)retVal).getInts();
if(data!=null){ //길이 및 int 배열을 쓴다.
out.writeInt(data.length);
for(int h=0;h<data.length;h++)
out.writeInt(data[h]);
}
else
out.writeInt(0); //영 길이를 쓴다.
}
else
out.writeObject(retVal); //객체를 쓴다.
}
}
}
}
}
이 구현에서, serializeObject 프로시져는 직렬화가능한 객체에 대한 참조 obj 및 상기 직렬화된 표현이 쓰여질 직렬 스트림을 식별하는 참조 out을 받는다. 상기 프로시져는 상기 객체에 대한 클래스의 명칭을 획득하고 상기 클래스 명칭을 상기 직렬 스트림 out에 쓴다. 상기 프로시져는 또한 클래스들의 descriptors 배열을 구축한다. 상기 배열의 첫번째 인자는 직렬화될 프로그램 객체에 속하는 객체-기술자의 클래스이다. 상기 배열의 후속 항목들은, 만약 있다면, 상기 객체-기술자의 클래스가 도출될 기저 클래스들이다.
상기 프로시져는 for 루프로 계속되어 상기 descriptors 배열 전체에 걸쳐 반복된다. 상기 배열의 각 기술자 클래스에 대해, 그 클래스에 대한 개별 객체-기술자 객체는 descriptor로서 인스턴스화되고 상기 개별 객체-기술자 객체에 의해 기술된 프로그램 객체의 목표 클래스를 식별하는 데 이용된다. 예를 들면, 상기 descriptors 배열로부터 인스턴스화된 첫번째 객체-기술자 객체의 목표 클래스는 직렬화될 프로그램 객체 obj의 클래스이다. 만약 이 목표 클래스의 객체가 XSerializable이라고 간주된다면, 상기 목표 클래스의 버전의 식별을 획득하고 상기 버전 식별을 상기 직렬 스트림 out에 씀으로써 상기 프로시져는 계속된다. 그 다음에, 상기 객체-기술자 객체의 getProperties 메소드가 호출되어, 각 인자들이 직렬화될 속성을 기술하는 props 배열을 획득한다. 상기 getProperties 메소드는 목표 클래스 버전의 함수이고 상기 메소드를 구현하는 상기 과정은 각 개별 목표 클래스에 따라 다양할 수 있기 때문에, 직렬화할 속성들을 식별하는 상기 프로시져는 상기 목표 클래스와 상기 목표클래스의 버전 모두의 함수로 고려될 수도 있다.
상기 프로시져는 for 루프로 계속되어 상기 props 배열 전체에 걸쳐 반복된다. 상기 배열의 각 속성 기술자에 대해, 대응하는 속성 자체를 획득하기 위해 자바의 리플렉션 메카니즘이 이용된다. 만약 속성 자체가 XSerializable로 지정된다면, 이 객체를 직렬화하기 위해 serializeObject 프로시져에 대해 순환적 호출이 이루어진다. 만약 상기 속성이 XSerializable로 지정된 인자들의 배열이라면, 상기 인자들을 위해 data 배열이 구성되고, 상기 배열의 길이는 상기 직렬 스트림 out에 쓰여지며 상기 배열의 각 인자를 위해 serializeObject에 대한 순환적 호출이 이루어진다. 만약 상기 속성이 바이트 배열이나 정수 배열이라면, 상기 배열의 길이 및 상기 배열의 각 인자에 대한 표현은 상기 직렬 스트림 out에 쓰여진다. 그렇지 않다면, 상기 속성 자체의 표현이 상기 직렬 스트림 out에 쓰여진다.
2. 탈직렬화
a) 상위 프로시져
다음의 프로그램 조각은 하나 또는 그 이상의 프로그램 객체들을 탈직렬화 하기 위해 호출될 수 있는 deserializeObjects 프로시져를 구현한다.
public Vector deserializeObjects(ObjectInputStream in){
Vector objects=new Vector();
int nObjects=in.readInt(); //직렬화된 객체들의 수를 읽는다.
for(int i=0;i<nObjects;i++){ //각 객체를 읽는다.
Object o=deserializeObject(in);
if(o!=null)
objects.addElement(o);
}
}
이 구현에서, deserializeObjects 프로시져는, 하나 또는 그 이상의 프로그램 객체들의 직렬화된 표현이 탈직렬화될 직렬 스트림을 식별하는 참조 in을 받는다. 상기 프로시져는 상기 직렬 스트림에서 표현된 객체들의 수를 변수 nObjects에 읽어 넣는다. 상기 프로시져의 for 루프는 상기 직렬 스트림에서 표현된 각 프로그램 객체를 탈직렬화하기 위해 deserializeObject 프로시져를 반복적으로 호출한다.
b) 하위 프로시져
다음의 프로그램 조각은 프로그램 객체를 탈직렬화하기 위해 상기 deserializeObjects 프로시져에 의해 호출된 deserializeObject 프로시져를 구현한다. 이 프로시져는, 프로그램 객체의 클래스가 도출될 수도 있는 임의의 기저 클 래스들의 속성들을 포함하여 프로그램 객체의 특유한 속성들을 탈직렬화한다. 속성은 정수와 같은 단일 엔티티일 수도 있고, 또는 엔티티들의 배열일 수도 있다. 만약 속성 자체가 프로그램 객체나 프로그램 객체들의 배열이라면, 이들 프로그램 객체들을 탈직렬화하기 위해 deserializeObject에 대해 하나 또는 그 이상의 순환적 호출이 이루어진다.
private Object deserializeObject(ObjectInputStream in){
Object obj=null;
String className=in.readUTF(); //객체 클래스 명칭을 읽는다.
//클래스에 대한 객체 기술자를 가져온다.
ObjectDescriptor desc=
(ObjectDescriptor)Class.forName(className+"Descriptor").newInstance();
Class objClass=Class.forName(desc.getClassNmae());
obj=objClass.newInstance();
//기술자 클래스 계층으로 올라간다.
Vector temp=new Vector();
temp.addElement(desc.getClass());
Class c=desc.getClass();
while((c=c.getSuperclass())!=null)
temp.addElement(c);
Class[]descriptors=new Class[temp.size()];
temp.copyInto(descriptors);
for(int i=0;i<descriptors.length;i++){ //각 기술자에 대해...
Class d=descriptors[i];
Object theObj=d.newInstance();
float version=in.readFloat(); //객체의 버전을 읽는다.
ObjectDescriptor objDesc=(ObjectDescriptor)theObj;
PropertyDescriptor[]props=objDesc.getProperties(version);
Class[]args=new Class[1];
for(int j=0;j<props.length;j++){
Object propVal=null;
if(isXSerializable(props[j].type))
propVal=deserializeObject(in);
else if(props[j].type.getName()=="XSerializableArray"){
int length=in.readInt(); //바이트 배열의
//길이를 읽는다.
XSerializable[]data=new XSerializable[length];
for(int h=0;h<length;h++)
data[h]=(XSerializable)deserializeObject(in);
propVal=new XSerializableArray(data);
}
else if(props[j].type.getName()=="ByteArrayWrapper"){
int length=in.readInt(); //바이트 배열의
//길이를 읽는다.
byte[]data=new byte[length];
in.readFully(data,0,length);
propVal=new ByteArrayWrapper(data);
}
else if(props[j].type.getName()=="IntArrayWrapper"){
int length=in.readInt(); //바이트 배열의
//길이를 읽는다.
int[]data=new int[length];
for(int h=0;h<length;h++)
data[h]=in.readInt();
propVal=new IntArrayWrapper(data);
}
else
propVal=in.readObject();
args[0]=props[j].type;//속성을 설정하기 위해 메소드를 호출함.
String funcName="set"+
Character.toUpperCase(props[j].name.charAt(0))+
props[j].name.substring(1);
Method m=objClass.getMethod(funcName,args);
if(m!=null){
Object[]params=new Object[1];
params[0]=propVal;
m.invoke(obj,params);
}
}
}
return obj;
}
이 구현에서, deserializeObject 프로시져는 직렬 스트림을 식별하는 참조 in을 받는데, 프로그램 객체의 직렬화된 표현은 상기 직렬 스트림으로부터 탈직렬화된다. 상기 프로시져는 상기 직렬 스트림 in으로부터 상기 객체의 클래스의 명칭을 읽는다. 상기 프로시져는 또한 객체-기술자 클래스들의 descriptors 배열을 구축한다. 상기 배열의 첫번째 인자는 상기 직렬 스트림으로부터 읽혀졌던 상기 클래스에 속하는 객체-기술자의 클래스이다. 상기 배열의 후속 항목들은, 만약 있다면, 상기 객체-기술자의 클래스가 도출된 기저 클래스들이다.
상기 프로시져는 for 루프로 계속되어 상기 descriptors 배열 전체에 걸쳐 반복된다. 상기 배열의 각 기술자 클래스에 대해, 개별 버전 식별이 상기 직렬 스트림 in으로부터 읽혀지고, 그 클래스에 대한 개별 객체-기술자 객체가 objDesc로써 인스턴스화되며, 탈직렬화될 개별 목표 프로그램 객체는 theObj로써 인스턴스화된다. 상기 객체-기술자 객체 objDesc의 상기 getProperties 메소드가 호출되어, 각 인자들이, 상기 직렬 스트림에서 표현되어 있고 탈직렬화될 예정인 속성을 기술하는 props 배열을 획득한다. 이 메소드는 상기 직렬 스트림 in으로부터 읽혀진 상기 개별 버전 식별의 함수이다. 상술한 바와 같이, 탈직렬화될 상기 속성들의 결정은 목표 객체 클래스 및 버전 모두의 함수가 되는 것이 고려될 수도 있다.
상기 프로시져는 for 루프로 계속되어 각 개별 속성을 탈직렬화하기 위해 상기 props 배열 전체에 걸쳐 반복된다. 만약 상기 속성 자체가 XSerializable로 지정된다면, 이 객체를 탈직렬화하기 위해 deserializeObject 프로시져에 대해 순환적 호출이 이루어진다. 만약, 속성이 XSerializable로 지정된 인자들의 배열이라면, 상기 배열의 길이가 직렬 스트림 in으로부터 읽혀지고, data 배열이 구성되며 data 배열의 개별 인자로 각 속성을 탈직렬화하기 위해 deserializeObject에 대해 순환적 호출이 이루어진다. 만약 상기 속성이 바이트 배열이나 정수 배열이라면, 상기 배열의 길이가 상기 직렬 스트림 in으로부터 읽혀지고, data 배열이 구성되며 각 속성은 상기 직렬 스트림으로부터 읽혀져서 data 배열의 개별 인자로 배치된다. 지금까지 논의된 속성의 각 형식에 대해, 상기 직렬 스트림 in으로부터 획득된 상기 속성의 표현은 propVal이라는 객체로 배치된다. 만약 속성의 상기 형식이 위에서 언급한 어느 형식도 아니라면, 상기 속성의 값이 직렬 스트림 out으로부터 읽혀져서 변수 propVal로 직접 배치된다. 그 다음에, 탈직렬화되고 있는 상기 프로그램 객체에 적당한 메소드들이 호출되어 propVal에서 입수가능한 상기 표현에 기초하여 상기 프로그램 객체 속성을 정한다.
3. 다른 고려사항들
a) XSerializable 테스트
다음의 프로그램 조각은 특정 클래스가 XSerializable로 간주되는가를 결정하기 위해 위에서 보여준 상기 프로그램 조각들에 의해 이용된 isXSerializable 프로시져를 구현한다.
private boolean isXSerializable(Class c){
Class[]interfaces=c.getInterfaces();
for(int i=0;i<interfaces.length;i++){
if(interfaces[i].getName()=="XSerializable")
return true;
}
Class superClass=c;
while((superClass=superClass.getSuperclass())!=null){
interfaces=superClass.getInterfaces();
for(int i=0;i<interfaces.length;i++){
if(interfaces[i].getName()=="XSerializable")
return true;
}
}
return false;
}
이 구현에서, isXSerializable 프로시져는 클래스 c를 받고 상기 클래스의 인스턴스화들인 객체들이 XSerializable로 간주되는가를 결정한다. 만약 클래스 c 자체가 보여진 바와 같이 특정 명칭을 갖는 인터페이스를 구현한다면, 상기 클래스는 XSerializable로 간주된다. 그렇지 않다면, 클래스 c가 도출된 각 기저 클래스는 테스트되어 임의의 상기 기저 클래스들이 이것과 똑같은 인터페이스를 구현하는가를 결정한다. 임의의 기저 클래스가 이 인터페이스를 구현한다면, 클래스 cXSerializable로 간주된다. 그렇지 않으면, 클래스 cXSerializable로 간주되지 않는다.
b) 직렬화 킷
위에서 보여진 상기 프로그램 조각들 및 임의의 필요한 속성들은 본 명세서에서 킷(kit)이라고 지칭된 특별 클래스의 메소드들로써 간편하게 구현될 수 있다. 다음의 프로그램 조각이 어떻게 이렇게 될 수 있는지를 묘사했다.
public class XSerializationKit{//직렬화가능한 객체들을 (탈)직렬화하는 클래스
public XSerializationKit(){
}
//속성들 및 상기 킷의 메소드들
}
c) 직렬화가능한 프로그램 객체 클래스
다음의 프로그램 조각들은 상술한 상기 구현들에 따라 XSerializable 클래스가 어떻게 정의되는가를 묘사한다. 첫번째 예제는 버전1.0 클래스 정의를 보여준다.
public class Widget implements XSerializable{
private static Float _ver=1.0f;
privat String _name="";
public Float getXClassVersion(){
return _ver;
}
public void setName(String name){
_name=name;
}
}
다음 예제는 버전1.1 클래스 정의를 보여준다.
public class Widget implements XSerializable{
private static Float _ver=1.1f;
private String _name="";
private Color _color="";
public Float getXClassVersion(){
return _ver;
}
public void setName(String name){
_name=name;
}
public void setColor(Color color){
_color=color;
}
}
이들 구현들에서, _name _color 속성들과 setNamesetColor 메소드들은 임의로 정한 것들이다. 상기 메소드들은 아래의 예제들에서 이용된다.
XSerializable 클래스는 다른 XSerializable 기저 클래스를 확장할 수도 있다. 또한, XSerializable 클래스의 인스턴스를 참조하는 속성을 포함하거나 내장할 수도 있다.
"바이트(Byte)" 및 "정수(Integer)"와 같은 원시적인 변수 형식들의 배열들은 다양한 방식의 XSerializable 구조들로써 구현될 수 있다. 상술한 구현들과 모순되지 않는 구현의 예제는 다음의 프로그램 조각에서 소개된다. 이 조각은 바이트 및 정수 배열에 대해 두 개의 래퍼(wrappers)를 정의한다.
public class ArrayWrapper implements XSerializable{
private static Float _ver=1.0f;
Byte byteArray;
Int[]intArray;
public ArrayWrapper{
}
public Float getXClassVersion(){
return _ver;
}
public void setByteArray(ByteArrayWrapper wrapper){
byteArray=wrapper.getBytes();
}
public ByteArrayWrapper getByteArray(){
return new ByteArrayWrapper(byteArray);
}
public void setIntArray(IntArrayWrapper wrapper){
intArray=wrapper.getInts();
}
public IntArrayWrapper getIntArray(){
return new IntArrayWrapper(intArray);
}
}
d) 객체-기술자 클래스
다음의 프로그램 조각은 상술한 상기 구현들에 따라 객체-기술자 클래스가 어떻게 정의되는가를 묘사한다.
public class WidgetDescriptor implements ObjectDescriptor{
private String targetClass="X.Widget";
public WidgetDescriptor(){
}
public String getClassName(){
return targetClass;
}
public PropertyDescriptor[]getProperties(Float version){
PropertyDescriptor[]array=null;
if(version==1.0f){
array=new PropertyDescriptor[1];
array[0]=new PropertyDescriptor("name",java.lang.String.TYPE);
}
elseif(version==1.1f){
array=new PropertyDescriptor[2];
array[0]=new PropertyDescriptor("name",java.lang.String.TYPE);
array[1]=new PropertyDescriptor("color",java.awt.Color.class);
}
return array;
}
다음의 프로그램 조각은 객체-기술자 클래스가 상술한 상기 ArrayWrapper 클래스에 대해 어떻게 정의되는가를 묘사한다.
public class ArrayWrapperDescriptor implements ObjectDescriptor{
private String targetClass="ArrayWrapper";
public ArrayWrapperDescriptor(){
}
public String getClassName(){
return targetClass;
}
public PropertyDescriptor[]getProperties(Float version){
PropertyDescriptor[]array=null;
if(version==1.0f){
array=new PropertyDescriptor[2];
array[0]=new PropertyDescriptor("ByteArray",
Class.forName("ByteArrayWrapper"));
array[1]=new PropertyDescriptor("IntArray",
Class.forName("IntArrayWrapper"));
}
return array;
}
e) 예제 애플리케이션
다음의 프로그램 조각은 하나 또는 그 이상의 프로그램 객체들을 직렬화하기 위해 상술한 상기 직렬화 킷을 애플리케이션 프로그램이 어떻게 이용할 수 있는가를 묘사한다. 이 예제에서는, 상기 Widget 클래스의 1.0 버전의 두 개의 프로그램 객체 인스턴스들이 test.ser 파일내로 직렬화된다.
public class Example1{
public static void main(String[]args){
Widget widObj1=new Widget();
Widget widObj2=new Widget();
widObj1.setName("test1");
widObj2.setName("test2");
Vector vecObj=new Vector();
vecObj.addElement(widObj1);
vecObj.addElement(widObj2);
XSerializationKit kit=new XSerializationKit();
ObjectOutputStream out=
new ObjectOutputStream(new FileOutputStream("test.ser");
kit.serializeObjects(out,vecObj); //객체들을 직렬화한다.
out.close();
}
}
다음의 프로그램 조각은 하나 또는 그 이상의 프로그램 객체들을 탈직렬화하기 위해 상술한 상기 직렬화 킷을 애플리케이션 프로그램이 어떻게 이용할 수 있는가를 묘사한다. 이 예제에서는, 상기 Widget 클래스의 두 개의 인스턴스들이 상술한 상기 Example1 애플리케이션에 의해 생성된 상기 test.ser 파일로부터 탈직렬화된다. Example2 애플리케이션은, 프로그램 객체 widObj 1의 색속성을 부여하기 위해 setColor 메소드를 호출하는 프로그램 조각의 마지막 행에서 보여진 바대로, Widget 클래스의 버전1.1에 합치하는 프로그램 객체들을 작성한다. 위에서 보여진 바대로, 이 속성은 상기 Widget 클래스 정의의 버전1.1에 추가되었다.
public class Example2{
public static void main(String[]args){
XSerializationKit kit=new XSerializationKit();
ObjectInputStream in=
new ObjectInputStream(new FileInputStream("test.ser");
Vector vecObj=(Vector)kit.deserilaizeObjects(in);
in.close();
Widget widObj1=(Widget)vecObj[0];
Widget widObj2=(Widget)vecObj[1];
widObj1.setColor(Color.red);
}
}
상기한 바와 같이, 본 발명에 의하면 프로그램들로 하여금 클래스의 비호환적인 버전들의 인스턴스들인 프로그램 객체들의 직렬화된 표현들을 공유하는 것을 가능하게 하는 방식으로 프로그램 객체의 직렬화 및 탈직렬화를 구현할 수 있는 효과가 있다.

Claims (54)

  1. 객체 클래스의 인스턴스화인 프로그램 객체의 직렬화 방법에 있어서,
    상기 프로그램 객체의 버전 식별을 획득하는 단계; 및,
    상기 객체 클래스 및 상기 버전 식별의 함수로써 결정된 상기 프로그램 객체를 수반하는 직렬화된 정보를 생성하는 단계를;
    포함하는, 프로그램 객체의 직렬화 방법.
  2. 제 1 항에 있어서,
    상기 객체는:
    직렬화될 상기 프로그램 객체의 하나 또는 그 이상의 속성들을 식별하되, 상기 속성들은 상기 객체 클래스 및 상기 프로그램 객체 버전 식별에 따라 식별되는 단계;
    직렬화될 상기 프로그램 객체의 각 개별 속성에 대한 값을 확정하는 단계;
    상기 객체 클래스의 명칭, 상기 프로그램 객체의 상기 버전 식별 및 직렬화될 각 개별 속성의 상기 값을 포함하는 상기 객체를 생성하는 단계에 의해 결정되는, 프로그램 객체의 직렬화 방법.
  3. 제 2 항에 있어서,
    직렬화될 상기 프로그램 객체의 상기 하나 또는 그 이상의 속성들은, 상기 객체 클래스의 인스턴스화들이 어떻게 직렬화되는가를 기술하는 객체-기술자 인터페이스내에서 프로시져를 호출하는 것에 의해 식별되되,
    상기 프로시져는 상기 프로그램 객체의 상기 버전 식별에 응답하는, 프로그램 객체의 직렬화 방법.
  4. 제 3 항에 있어서,
    상기 객체-기술자 인터페이스는 상기 객체 클래스의 상기 명칭으로부터 도출된 명칭을 갖는, 프로그램 객체의 직렬화 방법.
  5. 제 3 항에 있어서,
    상기 프로그램 객체 및 상기 객체 클래스는 자바 프로그래밍 언어의 자바빈 명세에 합치하는, 프로그램 객체의 직렬화 방법.
  6. 제 2 항에 있어서,
    직렬화될 상기 프로그램 객체의 상기 하나 또는 그 이상의 속성들은, 상기 객체 클래스 및 상기 버전 식별에 따라 변화하는 속성 명칭들의 목록을 리턴하는 프로시져를 호출하는 것에 의해 식별되는, 프로그램 객체의 직렬화 방법.
  7. 제 6 항에 있어서,
    상기 프로시져는 객체의 메소드로서, 상기 객체는 직렬화될 상기 프로그램 객체의 직렬화가능한 특성을 정의하는 객체-기술자 클래스의 인스턴스인, 프로그램 객체의 직렬화 방법.
  8. 제 2 항에 있어서,
    상기 버전 식별은 상기 프로그램 객체의 메소드를 호출하는 것에 의해 획득되고;
    직렬화될 상기 프로그램 객체의 상기 하나 또는 그 이상의 속성들은 상기 객체 클래스 및 상기 프로그램 객체 버전 식별의 함수인 객체-기술자 객체의 메소드를 호출하는 것에 의해 식별되며;
    상기 직렬정보는 출력-스트림 객체의 메소드를 호출하는 것에 의해 생성되는, 프로그램 객체의 직렬화 방법.
  9. 객체 클래스의 인스턴스화인 프로그램 객체의 직렬화 장치에 있어서,
    랜덤 액세스 메모리; 및,
    상기 랜덤 액세스 메모리에 결합된 프로세싱 회로소자를; 포함하되,
    상기 프로세싱 회로소자는 상기 랜덤 액세스 메모리에 저장된 상기 프로그램 객체의 버전 식별을 획득하고, 상기 객체 클래스 및 상기 버전 식별의 함수로써 결정된 상기 프로그램 객체를 수반하는 직렬화된 정보를 생성하는, 프로그램 객체의 직렬화 장치.
  10. 제 9 항에 있어서,
    상기 객체는:
    직렬화될 상기 프로그램 객체의 하나 또는 그 이상의 속성들을 식별하고;
    직렬화될 상기 프로그램 객체의 각 개별 속성에 대한 값을 확정하며;
    상기 객체 클래스의 명칭, 상기 프로그램 객체의 상기 버전 식별 및 직렬화될 각 개별 속성의 상기 값을 포함하는 상기 객체를 생성함으로써 결정되되,
    상기 속성들은 상기 객체 클래스 및 상기 프로그램 객체 버전 식별에 따라 식별되는, 프로그램 객체의 직렬화 장치.
  11. 제 10 항에 있어서,
    직렬화될 상기 프로그램 객체의 상기 하나 또는 그 이상의 속성들은 상기 객체 클래스의 인스턴스화들이 어떻게 직렬화되는가를 기술하는 객체-기술자 인터페이스내에서 프로시져를 호출하는 것에 의해 식별되되,
    상기 프로시져는 상기 프로그램 객체의 상기 버전 식별에 응답하는, 프로그램 객체의 직렬화 장치.
  12. 제 11 항에 있어서,
    상기 객체-기술자 인터페이스는 상기 객체 클래스의 상기 명칭으로부터 도출된 명칭을 갖는, 프로그램 객체의 직렬화 장치.
  13. 제 11 항에 있어서,
    상기 프로그램 객체 및 상기 객체 클래스는 자바 프로그래밍 언어의 자바빈 명세에 합치하는, 프로그램 객체의 직렬화 장치.
  14. 제 10 항에 있어서,
    직렬화될 상기 프로그램 객체의 상기 하나 또는 그 이상의 속성들은, 상기 객체 클래스 및 상기 버전 식별에 따라 변화하는 속성 명칭들의 목록을 리턴하는 프로시져를 호출하는 것에 의해 식별되는, 프로그램 객체의 직렬화 장치.
  15. 제 14 항에 있어서,
    상기 프로시져는 객체의 메소드로서, 상기 객체는 직렬화될 상기 프로그램 객체의 직렬화가능한 특성을 정의하는 객체-기술자 클래스의 인스턴스인, 프로그램 객체의 직렬화 장치.
  16. 제 10 항에 있어서,
    상기 버전 식별은 상기 프로그램 객체의 메소드를 호출하는 것에 의해 획득되고;
    직렬화될 상기 프로그램 객체의 상기 하나 또는 그 이상의 속성들은 상기 객체 클래스 및 상기 프로그램 객체 버전 식별의 함수인 객체-기술자 객체의 메소드 를 호출하는 것에 의해 식별되며;
    상기 직렬정보는 출력-스트림 객체의 메소드를 호출하는 것에 의해 생성되는, 프로그램 객체의 직렬화 장치.
  17. 장치에 의해 판독가능하고, 객체 클래스의 인스턴스화인 프로그램 객체를 직렬화하기 위한 메소드를 수행하기 위해 상기 장치에 의하여 실행되는 명령들의 프로그램을 수반하는 매체에 있어서,
    상기 메소드는:
    상기 프로그램 객체의 버전 식별을 획득하며;
    상기 객체 클래스 및 상기 버전 식별의 함수로써 결정된 상기 프로그램 객체를 수반하는 직렬화된 정보를 생성하는 것을 특징으로 하는, 명령들의 프로그램을 수반하는 매체.
  18. 제 17 항에 있어서,
    상기 객체는:
    직렬화될 상기 프로그램 객체의 하나 또는 그 이상의 속성들을 식별하되, 상기 속성들은 상기 객체 클래스 및 상기 프로그램 객체 버전 식별에 따라 식별되며;
    직렬화될 상기 프로그램 객체의 각 개별 속성에 대한 값을 확정하며;
    상기 객체 클래스의 명칭, 상기 프로그램 객체의 상기 버전 식별 및 직렬화될 각 개별 속성의 상기 값을 포함하는 상기 객체를 생성하는 것에 의해 결정되는, 명령들의 프로그램을 수반하는 매체.
  19. 제 18 항에 있어서,
    직렬화될 상기 프로그램 객체의 상기 하나 또는 그 이상의 속성들은 상기 객체 클래스의 인스턴스화들이 어떻게 직렬화되는가를 기술하는 객체-기술자 인터페이스내에서 프로시져를 호출하는 것에 의해 식별되되,
    상기 프로시져는 상기 프로그램 객체의 상기 버전 식별에 응답하는, 명령들의 프로그램을 수반하는 매체.
  20. 제 19 항에 있어서,
    상기 객체-기술자 인터페이스는 상기 객체 클래스의 상기 명칭으로부터 도출된 명칭을 갖는, 명령들의 프로그램을 수반하는 매체.
  21. 제 19 항에 있어서,
    상기 프로그램 객체 및 상기 객체 클래스는 자바 프로그래밍 언어의 자바빈 명세에 합치하는, 명령들의 프로그램을 수반하는 매체.
  22. 제 18 항에 있어서,
    직렬화될 상기 프로그램 객체의 상기 하나 또는 그 이상의 속성들은, 상기 객체 클래스 및 상기 버전 식별에 따라 변화하는 속성 명칭들의 목록을 리턴하는 프로시져를 호출하는 것에 의해 식별되는, 명령들의 프로그램을 수반하는 매체.
  23. 제 22 항에 있어서,
    상기 프로시져는 객체의 메소드로서, 상기 객체는 직렬화될 상기 프로그램 객체의 직렬화가능한 특성을 정의하는 객체-기술자 클래스의 인스턴스인, 명령들의 프로그램을 수반하는 매체.
  24. 제 18 항에 있어서,
    상기 버전 식별은 상기 프로그램 객체의 메소드를 호출하는 것에 의해 획득되고;
    직렬화될 상기 프로그램 객체의 상기 하나 또는 그 이상의 속성들은 상기 객체 클래스 및 상기 프로그램 객체 버전 식별의 함수인 객체-기술자 객체의 메소드를 호출하는 것에 의해 식별되며;
    상기 직렬정보는 출력-스트림 객체의 메소드를 호출하는 것에 의해 생성되는, 명령들의 프로그램을 수반하는 매체.
  25. 객체 클래스의 인스턴스화인 프로그램 객체를 수반하는 직렬화된 정보의 탈직렬화 방법에 있어서,
    상기 직렬화된 정보로부터 상기 객체 클래스 및 상기 프로그램 객체의 버전 식별을 획득하며;
    상기 객체의 하나 또는 그 이상의 속성들에 대한 값들을 상기 직렬화된 정보로부터 설정하되,
    상기 하나 또는 그 이상의 속성들에 대한 상기 값들은 상기 객체 클래스 및 상기 버전 식별의 함수로서 정해지는, 직렬화된 정보의 탈직렬화 방법.
  26. 제 25 항에 있어서,
    상기 하나 또는 그 이상의 속성값들에 대한 상기 값들은:
    탈직렬화될 상기 프로그램 객체의 하나 또는 그 이상의 속성들을 식별하되, 상기 속성들은 상기 객체 클래스 및 상기 프로그램 객체 버전 식별에 따라 식별되며;
    탈직렬화될 상기 프로그램 객체의 하나 또는 그 이상의 개별 특성들에 대한 값들을 상기 직렬화된 정보로부터 획득하며;
    상기 직렬화된 정보로부터 획득된 상기 값들에 응답하여 상기 프로그램 객체의 상기 하나 또는 그 이상의 속성들에 대한 상기 값들을 설정하는 것에 의해 설정되는, 직렬화된 정보의 탈직렬화 방법.
  27. 제 26 항에 있어서,
    탈직렬화될 상기 하나 또는 그 이상의 속성들은,상기 객체 클래스의 인스턴스화들이 어떻게 탈직렬화되는가를 기술하는 객체-기술자 인터페이스내에서 프로시져를 호출하는 것에 의해 식별되되,
    상기 프로시져는 상기 프로그램 객체의 상기 버전 식별에 응답하는, 직렬화된 정보의 탈직렬화 방법.
  28. 제 26 항에 있어서,
    상기 객체-기술자 인터페이스는 상기 객체 클래스의 상기 명칭으로부터 도출된 명칭을 갖는, 직렬화된 정보의 탈직렬화 방법.
  29. 제 27 항에 있어서,
    상기 프로그램 객체 및 상기 객체 클래스는 자바 프로그래밍 언어의 자바빈 명세에 합치하는, 직렬화된 정보의 탈직렬화 방법.
  30. 제 26 항에 있어서,
    탈직렬화될 상기 프로그램 객체의 상기 하나 또는 그 이상의 속성들은, 상기 객체 클래스 및 상기 버전 식별에 따라 변화하는 속성 명칭들의 목록을 리턴하는 프로시져를 호출하는 것에 의해 식별되는, 직렬화된 정보의 탈직렬화 방법.
  31. 제 30 항에 있어서,
    상기 프로시져는 객체의 메소드로서, 상기 객체는 탈직렬화될 상기 프로그램 객체의 탈직렬화가능한 특성을 정의하는 객체-기술자 클래스의 인스턴스인, 직렬화된 정보의 탈직렬화 방법.
  32. 제 26 항에 있어서,
    상기 객체 클래스 및 상기 버전 식별은 입력-스트림 객체의 메소드를 호출하는 것에 의해 획득되며;
    탈직렬화될 상기 프로그램 객체의 상기 하나 또는 그 이상의 속성들은 상기 객체 클래스 및 상기 프로그램 객체 버전 식별의 함수인 객체-기술자 객체의 메소드를 호출하는 것에 의해 식별되는, 직렬화된 정보의 탈직렬화 방법.
  33. 객체 클래스의 인스턴스화인 프로그램 객체를 수반하는 직렬화된 정보의 탈직렬화 장치에 있어서,
    랜덤 액세스 메모리; 및,
    상기 랜덤 액세스 메모리에 결합된 프로세싱 회로소자를; 포함하되,
    상기 프로세싱 회로소자는 상기 직렬화된 정보로부터 상기 객체 클래스 및 상기 프로그램 객체의 버전 식별을 획득하며 상기 직렬화된 정보로부터 상기 객체의 하나 또는 그 이상의 속성들에 대한 값들을 상기 랜덤 액세스 메모리에 설정하되, 상기 하나 또는 그 이상의 속성들에 대한 상기 값들은 상기 객체 클래스 및 상기 버전 식별의 함수로써 설정되는, 직렬화된 정보의 탈직렬화 장치.
  34. 제 33 항에 있어서,
    상기 하나 또는 그 이상의 속성값들에 대한 상기 값들은:
    탈직렬화될 상기 프로그램 객체의 하나 또는 그 이상의 속성들을 식별하되, 상기 속성들은 상기 객체 클래스 및 상기 프로그램 객체 버전 식별에 따라 식별되며;
    탈직렬화될 상기 프로그램 객체의 하나 또는 그 이상의 개별 특성들에 대한 값들을 상기 직렬화된 정보로부터 획득하며;
    상기 직렬화된 정보로부터 획득된 상기 값들에 응답하여 상기 프로그램 객체의 상기 하나 또는 그 이상의 속성들에 대한 상기 값들을 설정하는 것에 의해 설정되는, 직렬화된 정보의 탈직렬화 장치.
  35. 제 34 항에 있어서,
    탈직렬화될 상기 하나 또는 그 이상의 속성들은, 상기 객체의 인스턴스화들이 어떻게 탈직렬화되는가를 기술하는 객체-기술자 인터페이스내에서 프로시져를 호출하는 것에 의해 식별되되,
    상기 프로시져는 상기 프로그램 객체의 상기 버전 식별에 응답하는, 직렬화된 정보의 탈직렬화 장치.
  36. 제 34 항에 있어서,
    상기 객체-기술자 인터페이스는 상기 객체 클래스의 상기 명칭으로부터 도출된 명칭을 갖는, 직렬화된 정보의 탈직렬화 장치.
  37. 제 35 항에 있어서,
    상기 프로그램 객체 및 상기 객체 클래스는 자바 프로그래밍 언어의 자바빈 명세에 합치하는, 직렬화된 정보의 탈직렬화 장치.
  38. 제 34 항에 있어서,
    탈직렬화될 상기 프로그램 객체의 상기 하나 또는 그 이상의 속성들은 상기 객체 클래스 및 상기 버전 식별에 따라 변화하는 속성 명칭들의 목록을 리턴하는 프로시져를 호출하는 것에 의해 식별되는, 직렬화된 정보의 탈직렬화 장치.
  39. 제 38 항에 있어서,
    상기 프로시져는 객체의 메소드로서, 상기 객체는 탈직렬화될 상기 프로그램 객체의 탈직렬화가능한 특성을 정의하는 객체-기술자 클래스의 인스턴스인, 직렬화된 정보의 탈직렬화 장치.
  40. 제 34 항에 있어서,
    상기 객체 클래스 및 상기 버전 식별은 입력-스트림 객체의 메소드를 호출하는 것에 의해 획득되며;
    탈직렬화될 상기 프로그램 객체의 상기 하나 또는 그 이상의 속성들은, 상기 객체 클래스 및 상기 프로그램 객체 버전 식별의 함수인 객체-기술자 객체의 메소드를 호출하는 것에 의해 식별되는, 직렬화된 정보의 탈직렬화 장치.
  41. 장치에 의해 판독가능하고, 객체 클래스의 인스턴스화인 프로그램 객체를 수반하는 직렬화된 정보를 탈직렬화하기 위한 메소드를 수행하기 위해 상기 장치에 의하여 실행을 위한 명령들의 프로그램을 수반하는 매체에 있어서,
    상기 메소드는:
    상기 직렬화된 정보로부터 상기 객체 클래스 및 상기 프로그램 객체의 버전 식별을 획득하며;
    상기 직렬화된 정보로부터 상기 객체의 하나 또는 그 이상의 속성들에 대한 값들을 설정하되,
    상기 하나 또는 그 이상의 속성들에 대한 상기 값들은 상기 객체 클래스 및 상기 버전 식별의 함수로써 설정되는, 명령들의 프로그램을 수반하는 매체.
  42. 제 41 항에 있어서,
    상기 하나 또는 그 이상의 속성값들에 대한 상기 값들은:
    탈직렬화될 상기 프로그램 객체의 하나 또는 그 이상의 속성들을 식별하되, 상기 속성들은 상기 객체 클래스 및 상기 프로그램 객체 버전 식별에 따라 식별되며;
    탈직렬화될 상기 프로그램 객체의 하나 또는 그 이상의 개별 속성들에 대한 값들을 상기 직렬화된 정보로부터 획득하며;
    상기 직렬화된 정보로부터 획득된 상기 값들에 응답하여 상기 프로그램 객체 의 상기 하나 또는 그 이상의 속성들에 대한 상기 값들을 설정하는 것에 의해 설정되는, 명령들의 프로그램을 수반하는 매체.
  43. 제 42 항에 있어서,
    탈직렬화될 상기 하나 또는 그 이상의 속성들은, 상기 객체 클래스의 인스턴스화들이 어떻게 탈직렬화되는가를 기술하는 객체-기술자 인터페이스내에서 프로시져를 호출하는 것에 의해 식별되되,
    상기 프로시져는 상기 프로그램 객체의 상기 버전 식별에 응답하는, 명령들의 프로그램을 수반하는 매체.
  44. 제 42 항에 있어서,
    상기 객체-기술자 인터페이스는 상기 객체 클래스의 상기 명칭으로부터 도출된 명칭을 갖는, 명령들의 프로그램을 수반하는 매체.
  45. 제 43 항에 있어서,
    상기 프로그램 객체 및 상기 객체 클래스는 자바 프로그래밍 언어의 자바빈 명세에 합치하는, 명령들의 프로그램을 수반하는 매체.
  46. 제 42 항에 있어서,
    탈직렬화될 상기 프로그램 객체의 상기 하나 또는 그 이상의 속성들은, 상기 객체 클래스 및 상기 버전 식별에 따라 변화하는 속성 명칭들의 목록을 리턴하는 프로시져를 호출하는 것에 의해 식별되는, 명령들의 프로그램을 수반하는 매체.
  47. 제 46 항에 있어서,
    상기 프로시져는 객체의 메소드로서, 상기 객체는 탈직렬화될 상기 프로그램 객체의 탈직렬화가능한 특성을 정의하는 객체-기술자 클래스의 인스턴스인, 명령들의 프로그램을 수반하는 매체.
  48. 제 42 항에 있어서,
    상기 객체 클래스 및 상기 버전 식별은 입력-스트림 객체의 메소드를 호출하는 것에 의해 획득되며;
    탈직렬화될 상기 프로그램 객체의 상기 하나 또는 그 이상의 속성들은, 상기 객체 클래스 및 상기 프로그램 객체 버전 식별의 함수인 객체-기술자 객체의 메소드를 호출하는 것에 의해 식별되는, 명령들의 프로그램을 수반하는 매체.
  49. 장치에 의해 판독가능하고, 객체 클래스의 인스턴스화들인 하나 또는 그 이상의 프로그램 객체들을 표현하는 직렬화된 정보를 수반하는 매체에 있어서,
    상기 직렬화된 정보는:
    상기 직렬화된 정보에 의해 표현된 프로그램 객체들의 수의 지시;
    상기 객체 클래스 명칭의 지시; 및,
    상기 직렬화된 정보에 의해 표현된 각 개별 프로그램 객체에 대하여, 상기 개별 프로그램 객체의 버전 식별 및 상기 개별 프로그램 객체의 하나 또는 그 이상의 속성들에 대한 개별 값을;
    포함하는, 직렬화된 정보를 수반하는 매체.
  50. 제 49 항에 있어서,
    상기 매체는, 상기 객체 클래스의 수퍼클래스의 인스턴스화들인 하나 또는 그 이상의 제 2 프로그램 객체들을 표현하는 직렬화된 정보를 수반하되,
    상기 직렬화된 정보는, 각 개별 제 2 프로그램 객체에 대하여, 상기 개별 제 2 프로그램 객체의 버전 식별 및 상기 개별 제 2 프로그램 객체의 하나 또는 그 이상의 속성들에 대한 개별 값을 포함하는 것을 특징으로 하는, 직렬화된 정보를 수반하는 매체.
  51. 장치에 의해 판독가능하고, 프로그램 클래스의 인스턴스화인 프로그램 객체를 직렬화하거나 탈직렬화하기 위한 메소드를 수행하기 위해 상기 장치에 의한 실행을 위한 명령들의 하나 또는 그 이상의 프로그램들을 수반하는 매체에 있어서,
    명령들의 상기 하나 또는 그 이상의 프로그램들은:
    개별 프로그램 객체의 버전 식별을 획득하기 위한 메소드를 포함하는 상기 객체 클래스의 정의; 및,
    직렬화되거나 탈직렬화될 상기 개별 프로그램 객체의 하나 또는 그 이상의 속성들을 식별하기 위한 메소드를 포함하는 객체-기술자 클래스의 정의를;
    포함하는, 명령들의 하나 또는 그 이상의 프로그램들을 수반하는 매체.
  52. 제 51 항에 있어서,
    상기 객체-기술자 클래스의 상기 정의는, 직렬화되거나 탈직렬화될 상기 개별 프로그램 객체의 상기 하나 또는 그 이상의 속성들에 대한 명칭들의 지시를 리턴하는 메소드를 포함하는, 명령들의 하나 또는 그 이상의 프로그램들을 수반하는 매체.
  53. 제 51 항에 있어서, 상기 객체-기술자 클래스의 상기 정의는, 상기 객체 클래스에 대한 명칭을 리턴하는 메소드를 포함하는, 명령들의 하나 또는 그 이상의 프로그램들을 수반하는 매체.
  54. 제 51 항에 있어서,
    명령들의 상기 하나 또는 그 이상의 프로그램들은, 직렬화되거나 탈직렬화될 상기 개별 프로그램 객체의 하나 또는 그 이상의 속성 형식들의 지시를 획득하기 위한 메소드를 포함하는 속성-기술자 클래스의 정의를 포함하는, 명령들의 하나 또는 그 이상의 프로그램들을 수반하는 매체.
KR1020000053559A 1999-09-30 2000-09-08 프로그램 객체들의 버전-적응가능한 직렬화 및 탈직렬화 KR100639167B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US09/410,363 US6477701B1 (en) 1999-09-30 1999-09-30 Version-adaptive serialization and deserialization of program objects in an object-oriented environment
US9/410,363 1999-09-30
US09/410,363 1999-09-30

Publications (2)

Publication Number Publication Date
KR20010050408A KR20010050408A (ko) 2001-06-15
KR100639167B1 true KR100639167B1 (ko) 2006-10-27

Family

ID=23624399

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020000053559A KR100639167B1 (ko) 1999-09-30 2000-09-08 프로그램 객체들의 버전-적응가능한 직렬화 및 탈직렬화

Country Status (6)

Country Link
US (1) US6477701B1 (ko)
EP (1) EP1100005A3 (ko)
JP (1) JP2001125787A (ko)
KR (1) KR100639167B1 (ko)
CN (1) CN1242326C (ko)
HK (1) HK1037250A1 (ko)

Families Citing this family (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7120863B1 (en) * 1999-11-15 2006-10-10 International Business Machines Corporation Method, system, and program for interfacing with elements in a document
US6629227B1 (en) * 2000-05-04 2003-09-30 Scientific-Atlanta, Inc. System and method for a communication terminal to manage memory and maintain a current application version for multiple applications
GB2363866B (en) * 2000-05-31 2002-11-06 Intamission Ltd Data processing apparatus, method and system
US6877162B1 (en) * 2000-07-31 2005-04-05 Hewlett-Packard Company Method and system for extendable class-based shared data-types
US7191196B2 (en) * 2001-06-28 2007-03-13 International Business Machines Corporation Method and system for maintaining forward and backward compatibility in flattened object streams
US6983448B2 (en) * 2001-07-12 2006-01-03 International Business Machines Corporation Open framework for the definition of metadata
FR2836568A1 (fr) * 2002-02-28 2003-08-29 Bull Sa Procede iteratif de serialisation d'objets logiciels structures
US7150004B2 (en) * 2002-08-21 2006-12-12 International Business Machines Corporation Programmatically serializing complex objects using self-healing techniques
CA2419904A1 (en) * 2003-02-26 2004-08-26 Ibm Canada Limited - Ibm Canada Limitee Version-insensitive serialization and deserialization of program objects
US7404186B2 (en) * 2003-05-28 2008-07-22 Microsoft Corporation Signature serialization
US7386836B2 (en) * 2003-06-09 2008-06-10 International Business Machines Corporation Maintaining multiple valid concurrent serialized object versions
US7325226B2 (en) * 2003-06-19 2008-01-29 Microsoft Corporation Modular object serialization architecture
US7293253B1 (en) * 2003-09-12 2007-11-06 Nortel Networks Limited Transparent interface migration using a computer-readable mapping between a first interface and a second interface to auto-generate an interface wrapper
US7207002B2 (en) * 2003-11-13 2007-04-17 International Business Machines Corporation Serialization and preservation of objects
US7698359B2 (en) * 2004-01-16 2010-04-13 Microsoft Corporation Remote system administration using command line environment
US7770181B2 (en) * 2004-01-16 2010-08-03 Microsoft Corporation System and method for transferring computer-readable objects across a remote boundary
US7730041B2 (en) * 2004-08-25 2010-06-01 Microsoft Corporation Data abstraction based serialization
US7464082B2 (en) * 2004-11-29 2008-12-09 International Business Machines Corporation Methods for de-serializing data objects on demand
US7543002B2 (en) * 2004-12-02 2009-06-02 Bea Systems, Inc. Mechanism to load first version classes into a runtime environment running a second version of the class
US20060218538A1 (en) * 2005-03-22 2006-09-28 Van Kesteren Tom A System, method and computer program product for converting a serialized object between different software versions
US7954088B2 (en) * 2005-03-23 2011-05-31 Microsoft Corporation Method and apparatus for executing unit tests in application host environment
US20070299863A1 (en) * 2006-04-27 2007-12-27 Qualcomm Incorporated Portable object serialization
US20080046874A1 (en) * 2006-08-21 2008-02-21 International Business Machines Corporation Data reporting application programming interfaces in an xml parser generator for xml validation and deserialization
KR100866603B1 (ko) * 2007-01-03 2008-11-03 삼성전자주식회사 디시리얼라이징과 시리얼라이징을 수행하는 데이터 처리 방법 및 데이터 처리 장치
CN100456238C (zh) * 2007-03-12 2009-01-28 华为技术有限公司 实现分布式对象持久化的方法、装置及编译单元
US8006253B2 (en) * 2007-08-30 2011-08-23 Ixia Version-adaptive serialization and deserialization
US8626720B2 (en) 2008-02-11 2014-01-07 International Business Machines Corporation System and method of reconstructing complex custom objects
US8055619B2 (en) * 2008-06-05 2011-11-08 Novell, Inc. Mechanisms to support object-oriented version control operations
US8495659B1 (en) 2012-05-01 2013-07-23 International Business Machines Corporation Eliminating redundancy in instance data of different versioned classes in communication between object request brokers using a common class definition
US10025702B1 (en) * 2014-12-10 2018-07-17 Amazon Technologies, Inc. Browser capable of saving and restoring content item state
KR101707649B1 (ko) * 2015-09-24 2017-02-20 (주)에스아이티 중앙 집중식 데이터 송수신 장치 및 그 방법
US10467321B2 (en) 2017-09-07 2019-11-05 Mastercard International Incorporated Systems and methods for dynamic C# serialization
US10922024B1 (en) * 2019-06-28 2021-02-16 Amazon Technologies, Inc. Self-protection against serialization incompatibilities
US11477258B2 (en) * 2020-03-30 2022-10-18 Oracle International Corporation Serialization of objects using multiple serialization algorithms
US11599551B2 (en) * 2020-03-30 2023-03-07 Oracle International Corporation Deserialization of stream objects using multiple deserialization algorithms
US11288045B1 (en) 2021-02-09 2022-03-29 Oracle International Corporation Object creation from structured data using indirect constructor invocation
US11256480B1 (en) 2021-02-09 2022-02-22 Oracle International Corporation Deserialization of stream objects using constant-foldable method handles
CN113191124B (zh) * 2021-05-20 2023-03-21 上海曼恒数字技术股份有限公司 一种基于3d引擎的运行时编辑方法及系统

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5867708A (en) * 1995-11-20 1999-02-02 International Business Machines Corporation System, method, and article of manufacture for adding concurrency to a binary class in an object oriented system
US6212673B1 (en) * 1997-03-31 2001-04-03 International Business Machines Corporation Component-neutral builder interface
US6256771B1 (en) * 1997-10-16 2001-07-03 At&T Corp. Method and apparatus for providing a dynamic service composition software architecture
US6151700A (en) * 1997-10-20 2000-11-21 International Business Machines Corporation Object oriented distributed programming system for computer controlled networks with selective capture of program property data identifying a particular program version
US6272521B1 (en) * 1997-12-08 2001-08-07 Object Technology Licensing Corporation Apparatus and method for allowing object-oriented programs created with different framework versions to communicate
US6032152A (en) * 1997-12-31 2000-02-29 Intel Corporation Object factory template
US6085198A (en) * 1998-06-05 2000-07-04 Sun Microsystems, Inc. Integrated three-tier application framework with automated class and table generation
US6272677B1 (en) * 1998-08-28 2001-08-07 International Business Machines Corporation Method and system for automatic detection and distribution of code version updates
US6298353B1 (en) * 1998-11-19 2001-10-02 International Business Machines Corporation Checking serialization compatibility between versions of java classes
US6298478B1 (en) * 1998-12-31 2001-10-02 International Business Machines Corporation Technique for managing enterprise JavaBeans (™) which are the target of multiple concurrent and/or nested transactions
US6385769B1 (en) * 1999-02-03 2002-05-07 International Business Machines Corporation Text based object oriented program code with a visual program builder and parser support for predetermined and not predetermined formats
US6301585B1 (en) * 1999-03-17 2001-10-09 Sun Microsystems, Inc. Redundancy elimination in the persistence of object graphs
US6031747A (en) * 1999-08-02 2000-02-29 Lockheed Martin Missiles & Space Company Interleaved synchronous flyback converter with high efficiency over a wide operating load range

Also Published As

Publication number Publication date
EP1100005A2 (en) 2001-05-16
US6477701B1 (en) 2002-11-05
JP2001125787A (ja) 2001-05-11
CN1242326C (zh) 2006-02-15
HK1037250A1 (en) 2002-02-01
CN1290889A (zh) 2001-04-11
EP1100005A3 (en) 2004-06-30
KR20010050408A (ko) 2001-06-15

Similar Documents

Publication Publication Date Title
KR100639167B1 (ko) 프로그램 객체들의 버전-적응가능한 직렬화 및 탈직렬화
US4953080A (en) Object management facility for maintaining data in a computer system
US6546553B1 (en) Service installation on a base function and provision of a pass function with a service-free base function semantic
US6959307B2 (en) Process and system for a client object to perform a remote method invocation of a method in a server object
JP3072709B2 (ja) 要求伝達方法
US6415435B1 (en) Method and apparatus for determining compatibility of parent classes in an object oriented environment using versioning
US6298353B1 (en) Checking serialization compatibility between versions of java classes
US6078743A (en) Generic IDE interface support for scripting
US7269792B2 (en) System and method for generating high-function browser widgets with full addressability
US5857197A (en) System and method for accessing data stores as objects
US6549955B2 (en) System and method for dynamic generation of remote proxies
US5493680A (en) Method for creating an object subclass with selective inheritance
US5692195A (en) Parent class shadowing
US5339438A (en) Version independence for object oriented programs
US5361350A (en) Object oriented method management system and software for managing class method names in a computer system
US5421016A (en) System and method for dynamically invoking object methods from an application designed for static method invocation
US6466973B2 (en) Method and system for managing storage devices over a network
US6854123B1 (en) Method, system, and program for mapping standard application program interfaces (APIs) to user interface APIs
US6263498B1 (en) Method and apparatus for enabling server side distributed object modification
US20040073828A1 (en) Transparent variable state mirroring
GB2326255A (en) Automatic object distribution enables remote running of objects using local method calls
US6779172B1 (en) Bean scripting framework
US6345311B1 (en) Method and system of dynamically moving objects between heterogeneous execution environments
US6983448B2 (en) Open framework for the definition of metadata
US6223227B1 (en) Method for providing stand-in objects

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20121002

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20130924

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20141002

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20150917

Year of fee payment: 10

LAPS Lapse due to unpaid annual fee