KR19990077560A - 데이터처리방법,기록매체및데이터처리장치 - Google Patents

데이터처리방법,기록매체및데이터처리장치 Download PDF

Info

Publication number
KR19990077560A
KR19990077560A KR1019990006981A KR19990006981A KR19990077560A KR 19990077560 A KR19990077560 A KR 19990077560A KR 1019990006981 A KR1019990006981 A KR 1019990006981A KR 19990006981 A KR19990006981 A KR 19990006981A KR 19990077560 A KR19990077560 A KR 19990077560A
Authority
KR
South Korea
Prior art keywords
processing
server
side object
data area
result
Prior art date
Application number
KR1019990006981A
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 KR19990077560A publication Critical patent/KR19990077560A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • 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/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • 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/953Organization of data
    • Y10S707/955Object-oriented
    • 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/99941Database schema or data structure
    • Y10S707/99944Object-oriented database structure
    • 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

Abstract

서버측 오브젝트가 복수의 오브젝트에 의해 구성되는 경우에서, 또한 처리의 요구의 수구와 출구가 동일하지는 않는 경우에도 메시지패싱을 적절히 행하도록 한다.
클라이언트측 오브젝트에서 서버측 오브젝트에 메시지를 보낼때에 서버측 오브젝트에 의한 처리의 결과가 격납되는 데이터영역을 확보하여 놓는다. 그리고 서버측 오브젝트에 의해 처리를 행할때에 서버측 오브젝트를 구성하는 오브젝트사이에서 처리결과를 클라이언트측 오브젝트에 반환하는 권한의 위양을 행하고, 상기 권한을 최후에 위양된 오브젝트에 의한 처리의 결과를 상기 데이터영역에 격납한다. 그리고 클라이언트측 오브젝트는 상기 데이터영역에 격납된 데이터를 독출함으로써 서버측 오브젝트에 의한 처리의 결과를 수취하도록 한다.

Description

데이터처리방법, 기록매체 및 데이터처리장치{Data processing method, recording medium and data processing apparatus}
본 발명은 클라이언트측 오브젝트와 복수의 오브젝트에 의해 구성되는 서버측 오브젝트와의 사이에서 메시지를 교환할때의 데이터처리방법에 관한 것이다. 또 본 발명은 상기 데이터처리방법을 실현하는 오퍼레이팅 시스템이 기록된 기록매체, 및 당해 기록매체를 갖춘 데이터처리장치에 관한 것이다.
종래, 어플리케이션 프로그램등의 소프트웨어는 함수호출을 이용해서 기술되는 것이 많았다. 함수독출의 기본적인 동작을 도 9에 나타낸다. 도 9에서는 함수를 호출하는 측을 클라이언트, 호출되는 측을 서버로서 나타내고 있다.
함수호출에서는 도 9중 화살표 A1에 나타내는 바와같이, 클라이언트에 의해 서버의 함수가 호출되고, 이것에 의해 도 9중 실선 A2에 나타내는 바와같이, 서버에 의해 당해 함수가 실행된다. 이때 클라이언트는 도 9중 점선 A3에 나타내는 바와같이 대기상태로 된다. 그리고 서버에 의한 처리가 완료한다던지, 도 9중 화살표 A4에 나타내는 바와같이 서버에서 클라이언트에 되돌리는 값이 반환되고, 이것에 의해 도 9중 실선 A5에 나타내는 바와같이 클라이언트의 처리가 재개된다.
그런데 소프트웨어 프로그래밍기술의 발전에 의해, 오브젝트 지향기술에 의거거한 소프트웨어의 개발이 가능하게 되어 있다. 오브젝트 지향을 적용하였을 때, 어플리케이션 프로그램 등의 소프트웨어의 기능은, 오브젝트에 의해 모듈화 된다. 오브젝트는 서로 필요한 정보를 메시지로서 교환하는 것으로, 모듈로서의 기능을 실현한다. 이와 같은 메시지의 교환은 메시지패싱이라고 불리운다.
메시지패싱을 실현하는 방법으로서는, 다양한 방법이 제안되어 실현되어 오고 있고, 그 하나로 퓨처를 사용한 메시지패싱이 있다. 퓨처를 사용한 메시지패싱의 기본적인 동작을 도 10에 나타낸다.
퓨처를 사용한 메시지패싱에서는, 먼저 도 10중 화상표 B1에 나타내는 바와 같이 클라이언트측 오브젝트에서 서버측 오브젝트에 대하여 어떤 처리를 요구하는 메시지가 보내진다. 이때, 서버측 오브젝트에 의한 처리의 결과가 격납되는 데이터영역이 확보된다. 이 데이터영역은 클라이언트측 오브젝트가 장래 수취하는 결과가 격납되는 영역이고, 퓨처(future)라고 불리운다.
서버측 오브젝트는 도 10중 실선 B2에 나타내는 바와 같이, 클라이언트측 오브젝트에서 보내져 온 메시지의 요구에 따른 처리를 행하고, 당해 처리가 완료하면, 도 10중 화살표 B3에 나타내는 바와같이, 당해 처리의 결과를 퓨처에 격납한다.
한편, 클라이언트측 오브젝트는 도 10중 실선 B4에 나타내는 바와 같이, 상기기 메시지를 서버측 오브젝트에 보낸 후도 처리를 계속하여 실행하고, 그후 서버측 오브젝트에 의한 처리의 결과가 필요하게 되었을 때에, 도 10중 화살표 B5에 나타내는 바와 같이, 퓨처에 격납되어 있는 데이터의 독출을 행한다.
이때, 서버측 오브젝트에 의한 처리의 결과가 퓨처에 아직 격납되어 있지 않은 경우는, 도 10중 점선 B6에 나타내는 바와 같이 클라이언트측 오브젝트는 대기 상태로 된다. 그리고, 서버측 오브젝트에 의한 처리의 결과가 퓨처에 격납되면, 도 10중 화살표 B7에 나타내는 바와 같이, 서버측 오브젝트에 의한 처리의 결과가 퓨처에서 클라이언트측 오브젝트에 수도된다.
즉, 클라이언트측 오브젝트는 서버측 오브젝트에 의한 처리의 결과가 퓨처에 격납되어 있는 경우에는 바로 결과를 수취하고, 서버측 오브젝트에 의한 처리의 결과가 퓨처에 아직 격납되어 있지 않은 경우에는, 결과가 퓨처에 격납되기까지 대기상태로 된다.
그런데 오브젝트지향의 소프트웨어 개발에서는 상술한 바와같이 어플리케이션 프로그램등의 소프트웨어의 기능은 오브젝트에 의해 모듈화된다. 여기서 어플리케이션 프로그램등의 소프트웨어는 하나의 오브젝트로 실현되는 것도 있고, 이들이 기능마다 또한 모듈화 되고, 복수의 오브젝트에서 실현되는 것도 있다.
그리고 상술과 같은 메시지패싱을 행하는데 있어서, 서버측 오브젝트가 다만 하나의 오브젝트에 의해 실현되고 있었던 경우에는 서버측 오브젝트는 클라이언트측 오브젝트에서 메시지를 보낸 오브젝트 자체에 의해 클라이언트측 오브젝트에서 요구된 처리를 실행하고, 그 결과를 클라이언트측 오브젝트에 배송한다. 이것은 처리의 요구의 수구와 출구가 동일한 오브젝트라는 점에서 도 9에 나타낸 함수호출의 고려하는 방법과 동일하게 취급할 수 있다. 또 서버측 오브젝트가 복수의 오브젝트에 의해 구성되어 있었던 경우에 있어서도, 처리의 요구의 수구와 출구가 동일하다면 함수호출의 고려하는 방법과 동일하게 취급할 수 있다.
그렇지만 서버측 오브젝트가 복수의 오브젝트에 의해 구성되고, 단 처리의 요구의 수고와, 출구가 동일하지는 않는 경우에는 함수호출때와 같은 취급은 할 수 없다. 그때문에 이와같은 경우에는 예를들면 서버측 오브젝트의 처리의 요구의 수구와 출구가 다른 것을 클라이언트측 오브젝트의 측에서 고려하는 등의 연구가 필요하게 된다. 그렇지만 이와같은 것을 클라이언트측 오브젝트의 측에서 고려하지 않으면 아니된다는 것은 프로그래밍상의 큰 부담으로 된다.
본 발명은 이상과 같은 종래의 실정에 감안해서 제안된 것이고, 서버측 오브젝트가 복수의 오브젝트에 의해 구성되고, 단 처리의 요구의 수구와 출구가 동일하지 않은 경우에도, 서버측 오브젝트의 처리의 요구의 수구와 출구가 다른 것을 클라이언트측 오브젝트의 측에서 고려하는 등의 연구를 행하지 않고, 클라이언트측 오브젝트와 서버측 오브젝트와의 사이에서의 메시지패싱을 행하는 것이 가능한 데이터처리방법을 제공하는 것을 목적으로 하고 있다. 또 본 발명은 이와같은 데이터처리방법을 실현하는 오퍼레이팅 시스템이 기록된 기록매체 및 당해 기록매체를 갖춘 데이터처리장치를 제공하는 것도 목적으로 하고 있다.
도 1은 본 발명을 적용한 텔레비전장치의 일예에 대해서 그 개략 구성을 나타내는 도면이다.
도 2는 상기 텔레비전장치에 탑재된 오퍼레이팅 시스템을 설명하기 위한 도면이다.
도 3은 메소드「SendWithRBox」를 이용해서 행하는 메시지패싱에 대해서 정상으로 처리가 진행된 경우의 시나리오의 일예를 나타내는 도면이다.
도 4는 메소드「SendWithRBox」를 이용해서 행하는 메시지패싱에 대해서 예외사상이 발생한 경우의 시나리오의 일예를 나타내는 도면이다.
도 5는 서버측 오브젝트에 의한 처리의 요구의 수구와 출구가 다른 구성에 있어서의 메시지패싱의 시나리오의 일예를 나타내는 도면이다.
도 6은 메소드「SendWithContinuation」을 이용해서 행하여지는 메시지패싱의 시나리로의 일예를 나타내는 도면이다.
도 7은 다른 메타스페이스 사이에서의 메시지패싱의 시나리오의 일예를 나타내는 도면이다.
도 8은 서버측 오브젝트에 의한 처리의 요구의 수구와 출구가 다른 구성에 있어서의 메시지패싱의 시나리오의 다른 예를 나타내는 도면이다.
도 9는 함수독출의 기본적인 동작을 나타내는 도면이다.
도 10은 퓨처를 사용한 메시지패싱의 기본적인 동작을 나타내는 도면이다.
* 도면의 주요부분에 대한 부호설명
1. 버스/IO브리지 2. 버스
3. 텔레비전 기능부 4. 버스/메모리브리지
5. 프로세서 6. ROM
7. RAM 8. 조작패널
9. 외부기억장치 10. 통신장치
11. 그래픽스장치
본 발명에 관계되는 데이터처리방법은 클라이언트측 오브젝트에서 2이상의 오브젝트에 의해 구성되는 서버측 오브젝트에 메시지를 보내고, 당해 메시지가 요구하는 처리를 서버측 오브직트에 의해 행하고, 당해 처리의 결과를 서버측 오브젝트에서 클라이언트측 오브젝트에 반환할때의 데이터처리방법에 관한 것이다.
그리고, 본 발명에 관계되는 데이터처리방법에서는 클라이언트측 오브젝트에서 서버측 오브젝트에 메시지를 보내는 동시에 서버측 오브젝트에 의한 처리의 결과가 격납되는 데이터영역을 확보하여 놓는다. 그리고 상기 메시지가 요구하는 처리를 서버측 오브젝트에 의해 행할때에 서버측 오브젝트를 구성하는 오브젝트사이에서 서버측 오브젝트에 의한 처리의 결과를 클라이언트측에서 오브젝트에 반환하는 권한의 위양을 행하고, 상기 권한을 최후에 위양된 오브젝트에 의한 처리의 결과를 상기 데이터영역에 격납한다. 그리고 클라이언트측 오브젝트는 상기 데이터영역에 격납된 데이터를 독출함으로써 서버측 오브젝트에 의한 처리의 결과를 수취하도록 한다.
이상과 같은 데이터처리방법에서는 서버측 오브젝트를 구성하는 오브젝트사이에서 서버측 오브젝트에 의한 처리의 결과를 클라이언트측 오브젝트에 반환하는 권한의 위양을 행하고, 상기 권한을 최후에 위양된 오브젝트에 의한 처리의 결과를 상기 데이터영역에 격납하도록 하고 있다. 따라서 서버측 오브젝트에 의한 처리의 요구의 수구와 출구가 동일하지 않더라도 서버측 오브젝트에 의한 처리의 결과를 상기 데이터영역을 거쳐서 클라이언트측 오브젝트에 적절히 수도할 수 있다.
또 본 발명에 관계되는 기록매체는 오브젝트의 기술에 사용되는 어플리케이션 프로그램 인터페이스로서, 클라이언트측 오브젝트에서 서버측 오브젝트에 메시지를 보내는 처리를 행하기 위한 메시지송신용 메소드와, 오브젝트 사이에서의 권한의 위양의 처리를 행하기 위한 권한 위양용 메소드와를 갖는 오퍼레이팅 시스템이 기록된 기록매체이다.
상기 오퍼레이팅 시스템은 상기 메시지송신용 메소드의 실행이 요구되면 클라이언트측 오브젝트에서 서버측 오브젝트에 메시지를 보내는 처리를 행하는 동시에 서버측 오브젝트에 의한 처리의 결과가 격납되는 데이터영역을 확보하는 처리를 행한다. 또 상기 오퍼레이팅 시스템은 상기 권한 위양용 메소드의 실행이 요구되면 서버측 오브젝트를 구성하는 오브젝트에서 서버측 오브젝트를 구성하는 다른 오브젝트에, 서버측 오브젝트에 의한 처리의 결과를 클라이언트측 오브젝트에 반환하는 권한을 위양하는 처리를 행한다. 또 상기 오퍼레이팅 시스템은 상기 메시지송신용 메소드에 의해 서버측 오브젝트에 보낸 메시지에 의거해서 서버측 오브젝트에 의한 처리가 완료한다던지 상기 권한위양용 메소드에 의해 상기 권한이 최후에 위양된 오브젝트에 의한 처리의 결과를 상기 데이터영역에 격납한다.
상기와 같은 기록매체에 기록된 오퍼레이팅 시스템은 상기 메시지 송신용 메소드에 의해 서버측 오브젝트에 의한 처리가 완료한다던지, 상기 권한위양용 메소드에 의해 상기 권한이 최후에 위양된 오브젝트에 의한 처리의 결과를 상기 데이터영역에 격납한다. 이때 클라이언트측 오브젝트는 서버측 오브젝트내에서의 상기 권한의 위양에 불구하고, 상기 데이터영역에 격납되어 있는 데이터를 독출하는 것으로, 서버측 오브젝트에 의한 처리의 결과를 수취할 수 있다. 따라서 이 오퍼레이팅 시스템을 이용함으로써 서버측 오브젝트에 의한 처리의 요구의 수구와 출구가 동일하지 않아도 서버측 오브젝트에 의한 처리의 결과를 상기 데이터영역을 거쳐서 클라이언트측 오브젝트에 적절히 수도하는 것이 가능하게 된다.
또 본 발명에 관계되는 처리장치는 오브젝트의 기술에 사용되는 어플리케이션 프로그램 인터페이스로서 클라이언트측 오브젝트에서 서버측 오브젝트에 메시지를 보내는 처리를 행하기 위한 메시지송신용 메소드와, 오브젝트 사이에서의 권한의 위양의 처리를 행하기 위한 권한위양용 메소드와를 갖는 오퍼레이팅 시스템이 기록된 기록매체를 갖춘 데이터처리장치이다.
상기 오퍼레이팅 시스템은 상기 메시지송신용 메소드의 실행이 요구되면 클라이언트측 오브젝트에서 서버측 오브젝트에 메시지를 보내는 처리를 행하는 동시에 서버측 오브젝트에 의한 처리의 결과가 격납되는 데이터영역을 확보하는 처리를 행한다. 또 상기 오퍼레이팅 시스템은 상기 권한위양용 메소드의 실행이 요구되면 서버측 오브젝트를 구성하는 오브젝트에서 서버측 오브젝트를 구성하는 다른 오브젝트에 서버측 오브젝트에 의한 처리의 결과를 클라이언트측 오브젝트에 반환하는 권한을 위양하는 처리를 행한다. 또 상기 오퍼레이팅 시스템은 상기 메시지송신용 메소드에 의해 서버측 오브젝트에 보낸 메시지에 의거하여 서버측 오브젝트에 의한 처리가 완료한다던지, 상기 권한위양용 메소드에 의해 상기 권한이 최후에 위양된 오브젝트에 의한 처리의 결과를 상기 데이터영역에 격납한다.
이상과 같은 데이터처리장치에 갖추어진 기록매체에 기록된 오퍼레이팅 시스템은 상기 메시지송신용 메소드에 의행 서버측 오브젝트에 보낸 메시지에 의거하여 서버측 오브젝트에 의한 처리가 완료한다던지, 상기 권한위양용 메소드에 의해 상기 권한이 최후에 위양된 오브젝트에 의한 처리의 결과를 상기 데이터영역에 격납한다. 이때 클라이언트측 오브젝트는 서버측 오브젝트내에서의 상기 권한의 위양에 불구하고, 상기 데이터영역에 격납되어 있는 데이터를 독출하는 것으로, 서버측 오브젝트에 의한 처리의 결과를 수취할 수 있다. 따라서 이 오퍼레이팅 시스템을 이용함으로써 서버측 오브젝트에 의한 처리의 요구의 수구와 출구가 동일하지 않아도 서버측 오브젝트에 의한 처리의 결과를 상기 데이터영역을 거쳐서 클라이언트측 오브젝트에 적절히 수도하는 것이 가능하게 된다.
또한 본 명세서에서는, 어플리케이션 프로그램의 실행을 관리하는 소프트웨어의 것을 널리 오퍼레이팅 시스템이라고 칭하고 있다. 즉, 본 명세서에 있어서의 오퍼레이팅 시스템에는 소프트웨어의 관리까지도 행하는 기본 소프트뿐만 아니라, 소프트웨어의 관리를 행하는 기본 소프트 상에서 동작하여, 어플리케이션 프로그램의 실행을 관리하는 소위 미들웨어 등도 포함된다. 또한, 본 명세서에 있어서의 오퍼레이팅 시스템에는, 복수의 프로그램 실행환경을 1대의 컴퓨터 상에서 실현함으로써, 사용자에게 복수의 컴퓨터가 가동하고 있는 것같이 보이고 싶은, 소위 가상계산기 시스템을 실현하는 소프트웨어 등도 포함된다.
이하, 본 발명의 실시의 형태에 대해서 도면을 참조하면서 상세하게 설명한다.
1. 하드웨어환경
먼저, 본 발명을 적용한 데이터처리장치의 일예에 대해서 도 1을 참조하여 설명한다. 또한 여기서는, 본 발명의 실시의 형태의 일에로서 데이터처리기능을 갖춘 텔레비전장치에 본 발명을 적용한 예를 들으나, 당연한 일이지만 본 발명은 기타의 데이터처리장치에도 적용가능하다. 즉, 본 발명은 오퍼레이팅 시스템이 동작하는 데이터처리장치에 대하여 널리 적용가능하고, 예를 들면 텔레비전장치 이외의 오디오·비쥬얼기기(소위 AV기기)나, 각종의 사무기기나, 일반의 컴퓨터장치 등에도 적용가능하다.
본 발명이 적용된 데이터처리장치인 도 1에 나타내는 텔레비전장치는, 안테나 또는 케이블 등에 의해 방송국으로부터의 신호를 수신하고, 당해 신호에 의거해서 브라운관 또는 액정패널 등으로 이루는 화상표시장치에 영상을 표시하는 동시에 스피커에서 음성을 출력한다.
이 텔레비전장치는 통상의 텔레비전전기능을 갖추고 있을뿐 아니라, 외부에서 프로그램이나 데이터를 받는 것이 가능하게 되어 있고, 도 1에 나타내는 바와 같이 버스/10브리지(1)를 거쳐서 버스(2)에 접속된 텔레비전기능부(3)와, 버스/메모리브리지(4)를 거쳐서 버스(2)에 접속된 프로세서(5)와, 버스/메모리브리지(4)를 거쳐서 프로세서(5)에 접속된 ROM(Read Only memory)(6) 및 RAM(Random Access Memory)(7)과, 버스(2)에 접속된 조작패널(8), 외부기억장치(9), 통신장치(10) 및 그래픽스장치(11)와를 갖추고 있다.
텔레비전기능부(3)는, 안테나 또는 케이블 등에 의해 수신한 신호에 의거해서, 영상이나 음성을 재생하는 기능을 갖추고 있다. 이 텔레비전전기능부(3)는 버스/IO브리지(1)를 거쳐서 버스(2)에 접속되어 있고, 이것에 의해 다른 부분과의 신호의 교환이 가능하게 되어 되어있다.
프로세서(5)는 이 텔레비전장치의 각부의 제어를 행하기 위한 연산처리장치이고, 버스/메모리브리지(4)를 거쳐서 버스(2)에 접속되어 있다. 또 프로세서(5)에는 버스/메모리브치지(4)를 거쳐서 ROM(6) 및 ROM(7)이 접속되어 있다.
ROM(6)은. 프로세서(5)에 의한 제어를 행하기 위한 오퍼레이팅 시스템이나 어플리케이션 프로그램 등을 기억하고 있다. 여기서 오퍼레이팅 시스템은, 오브젝트 지향이 적용되어서 이루는 오브젝트지향형 오퍼레이팅 시스템이다.
RAM(7)은 프로세서(5)의 워크영역으로서 사용된다. 즉, 프로세서(5)는 ROM(6)에 기억되어 있는 오퍼레이팅 시스템이나 어플리케이션 프로그램 등을 RAM(7)을 워크영역으로서 사용하여 실행함으로써, 이 텔레비전장치를 구성하는 각부를 제어한다.
조작패널(8)은, 사용자로부터의 조작입력을 받아들이기 위한 입력장치이고, 이 조작패널(8)에서 예를 들면 텔레비전의 채널이나 볼륨 등의 전환을 지시하는 신호가 입력된다. 이 조작패널(8)은, 구체적으로는 각종 신호를 입력하기 위한 복수의 버튼을 갖춘 입력장치나, 소위 마우스라고 칭하는 포인팅디바이스 등으로 이룬다. 이 조작패널(8)에 의해 입력된 신호는, 버스(2) 및 버스/메모리브리지(4)를 거쳐서 프로세서(5)에 입력된다. 그리고, 프로세서(5)는 조작패널(8)에 의해 입력된 신호에 의거해서 소정의 연산처리를 행해서 각부를 제어한다.
외부기억장치(9)는, 예를 들면 하드디스크장치로 이루고, 영상이나 음성등의 데이터나, 이 텔레비전장치를 제어하기 위해 필요한 제어데이터나, 외부에서 통신장치(10)를 거쳐서 다운로드된 어플리케이션 프로그램 등을 기억하는데 사용된다.
통신장치(10)는, 외부와의 사이에서 데이터통신을 행하기 위한 입력부이고, 에를 들면 모뎀이나 터미널어뎁터 등으로 이룬다.
그래픽스장치(11)는, 외부기억장치(9)에 기록되어 있는 데이터나 통신장치(10)를 거쳐서 외부에서 수신한 데이터 등을 가공하여 표시하기 위한 것이다.
이 텔레비전장치는, 텔레비전기능부(3)에 의해 제공되는 통상의 텔레비전기능을 갖추고 있을 뿐 아니라, 통신장치(10)를 거쳐서 외부에서 데이터를 수취하는 것이 가능하게 되어 있다. 즉, 이 텔레비전장치에서는 예를 들면 외부의 네트워크에서 통신장치(10)를 거쳐서 신규 소프트웨어 모듈을 수취함으로써, 오퍼레이팅 시스템이나 어플리케이션 프로그램의 버전업을 행하는 것이 가능하게 되어 있다.
또 이 텔레비전장치에서는, 프로세서(5)에 의해 ROM(6)에 기억되어 있는 오퍼레이팅 시스템을 실행하는 동시에, 당해 오퍼레이팅 시스템 상에서 ROM(6)이나 외부기억장치(9)에 기억되어 있는 어플리케이션 프로그램을 실행함으로써, 각부의 제어를 행한다. 즉, 이 텔레비전장치는 오퍼레이팅 시스템이 기록된 컴퓨터 독해가능한 기록매체로서 ROM(6)을 갖추고 있다.
또한 오퍼레이팅 시스템은, RAM(7)이나 외부기억장치(9)에 기록하여 놓도록 하여도 좋다. 특히, 오퍼레이팅 시스템의 고쳐쓰기를 행하도록 하고 싶은 경우에는, RAM(7)이나 외부기억장치(9)에 기록하여 놓도록 한다.
2. 소프트웨어환경
다음에, 상기 텔레비전장치에 있어서의 소프트웨어환경에 대하여 설명한다.
2-1. 오퍼레이팅 시스템의 개략구성
상기 텔레비전장치에서 사용되는 오퍼레이팅 시스템은, 오브젝트지향을 채용하고 있다. 환언하면, 이 오퍼레이팅 시스템 상에서 동작하는 어플리케이션 프로그램 등의 소프트웨어는 오브젝트로서 모듈화되고, 오브젝트간의 교환은 메시지 패싱에 의해 이루어진다.
이 오퍼레이팅 시스템은, 도 2에 나타내는 바와 같이 이 오퍼레이팅 시스템으로서의 기본적인 기능을 제공하는 마이크로커넬을 갖추고 있고, 당해 마이크로커넬 상에서 복수의 프로그램 실행환경을 동시에 제공하는 것이 가능하게 되어 있다. 또한 이하의 설명에서는, 이 오퍼레이팅 시스템에 의해 제공되는 프로그램 실행환경의 것을 메타스페이스라고 부른다.
그리고 이 오퍼레이팅 시스템은, 메타스페이스로서 구체적으로는 복수의 오브젝트에 의해 구축되는 mCOOP 메타스페이스와, 복수의 오브젝트에 의해 구축되는 mDrive 메타스페이스와를 제공하고 있고, 이들의 메타스페이스마다 어플리케이션 프로그램 등을 구성하는 오브젝트의 기술에 사용되는 어플리케이션 프로그램 인터페이스(이하, API라고 칭한다)를 제공하고 있다. 또한 이하의 설명에서는, 메타스페이스를 구성하는 오브젝트의 것을 메타오브젝트라고 칭한다.
mCOOP 메타스페이스는, 주로 오브젝트 지향형의 어플리케이션 프로그램(예를 들면, 조작채널(8)을 제어하기 위한 그레피칼·유저·인터페이스를 실현하는 어플리케이션 프로그램 등)을 동작시키기 위한 메타스페이스이다. 또한, mCOOP 메타스페이스의 「m」은 메타스페이스인 뜻을 나타내고 있고, 「COOP」는 Concurrent Object Oriented Programming의 약자이다.
한편, mDrive 메타스페이스는, 주로 하드웨어의 제어를 담당하는 디바이스 드라이브(예를 들면, 그래픽스장치(11)를 제어하기 위한 디바이스 드라이브나, 네트워크를 거친 데이터의 교환을 행하도록 통신장치(10) 등을 제어하기 위한 디바이스 드라이버 등)를 동작시키기 위한 메타스페이스이다. 또한, mDrive 메타스페이스의 「m」은 메타스페이스인 뜻을 나타내고 있고, 「Drive」는 디바이스 드라이버(Device Driver)를 동작시키는 메타스페이스인 뜻을 나타내고 있다.
즉, 이 오퍼레이팅 시스템에서는, 마이크로커넬 상에서 mCOOP 메타스페이스 및 mDrive 메타스페이스가 동작하고, 또 mCOOP 메타스페이스 상에서 오브젝트로서 모듈화 된 어플리케이션 프로그램이 동작하고, 또 mDrive 메타스페이스 상에서 오브젝트로서 모듈화 된 디바이스 드라이버가 동작한다.
또한, 이 오퍼레이팅 시스템에서는, 마이크로커넬 상에서 동작하는 메타스페이스로서 mCOOP 메타스페이스나 mDrive 메타스페이스 이외에도, 예를 들면 수속형의 어플리케이션 프로그램(예를 들면, 텔레비전기능부(3)에 동화상을 표시하기 위한 어플리케이션 프로그램 등)를 동작시키기 위한 메타스페이스 등도 제공가능하게 되어 있다.
mCOOP 메타스페이스를 구성하는 메타오브젝트에는, 예를 들면 오브젝트 「mCOOPMailer」와 오브젝트 「mCOOPFaultHandler」와가 있다. 오브젝트 「mCOOPMailer」는, mCOOP 메타스페이스 상에서 동작하는 어플리케이션 프로그램간에서의 메시지패싱을 행할 때에 사용되는 메타오브젝트이고, 오브젝트 「mCOOPFaultHandler」는 예외처리를 담당하는 메타오브젝트이다. 또한 mCOOP 메타스페이스는, 실제에는 이들의 메타오브젝트외 여러가지의 메타오브젝트에 의해 구성된다.
mDrive 메타스페이스를 구성하는 메타오브젝트에는, 예를 들면 오브젝트 「mDriveMailer」와, 오브젝트 「mDriveFaultHandler」가 있다. 오브젝트 「mDriveMailer」는, mDrive 메타스페이스 상에서 동작하는 디바이스 드라이버간에서의 메시지패싱을 행할 때에 사용되는 메타오브젝트이고, 오브젝트 「mDriveFaultHandler」는 예외처리를 담당하는 메타오브젝트이다. 또한 mDrive 메타스페이스도, 실제에는 이들의 메타오브젝트외 여러가지의 메타오브젝트에 의해 구성된다.
그리고, 이 오퍼레이팅 시스템은, 퓨처를 이용한 메시지패싱의 기능을 제공하고 있다. 이하, 이 기능에 대하여 상세히 설명한다. 또한 이하의 설명에서는, 퓨처를 이용한 메시지패싱에 있어서 다른 오브젝트에 대하여 메시지를 보내서 처리를 요구하는 측의 오브젝트의 것을 클라이언트측 오브젝트라고 칭한다. 또,클라이언트측 오브젝트에서 메시지를 수취하여, 당해 메시지에 의거한 처리를 행하는 측의 오브젝트의 것을 서버측 오브젝트라고 칭한다.
2-2. mCOOP 메타스페이스의 API
상기 오퍼레이팅 시스템은, mCOOP 메타스페이스에 있어서 퓨처를 이용한 메시지패싱을 행하기 위해, mCOOP 메타스페이스 상에서 동작하는 오브젝트의 기술에 사용되는 API로서 이하의 메소드를 제공하고 있다. 또한 여기서는, API를 OMG IDL(Object Management Group Interface Definition Language)에서의 기술방법에 준하여 나타내고 있다.
sError SendWithRBox(in o1D destObjID,in Selector meth,in any msg,in size_t sizeOfMsg,out RID rBoxID)
sError Receive(in RID rBoxID, in any msg,in size_t sizeOfMsg)
sError Reply(in any resultMsg, in size_t sizeOfResultMsg)
sError Delegate(in OID destObjID, in Selector meth, in any msg,in size_t sizeOfMsg)
이하, 이들의 에 대하여 상세히 설명한다.
2-2-1. SendWithRBox()
sError SendWithRBox(in OID destObjID, in Selector meth, in any msg,in size_t sizeOfMsg, out RID rBoxID)
메소드「SendWithRBox」는, 클라이언트측 오브젝트에서 서버측 오브젝트에 메시지를 보내는 처리를 행하는 메시지송신용 메소드이다. 즉 이 메소드 「SendWithRBox」는, 클라이언트측 오브젝트가 메시지를 서버측 오브젝트에 송신한 후, 서버측 오브젝트에서의 처리의 결과를 클라이언트측 오브젝트가 필요로 하는 경우에 사용된다.
인수「destObjID」는, 오브젝트를 특정하기 위한 데이터형인 「OID」형의 인수이며, 이 인수「destObjID」에는, 서버측 오브젝트를 특정하는 값을 설정한다.
인수「meth」는, 메소드를 특정하기 위한 데이터형인 「Selector」형의 인수이며, 이 인수「meth」에는 요구하는 처리가 기술된 서버측 오브젝트의 메소드를 특정하는 값을 설정한다.
인수「msg」는, 임의의 데이터형인 「any」형의 인수이며, 인수「msg」에는 서버측 오브젝트에 대하여 수도하는 메시지가 격납되어 있는 영역에의 포인터를 설정한다.
인수「sizeOfMsg」는, 데이터의 사이즈를 특정하기 위한 데이터형인 「size_t」형의 인수이며, 이 인수 「sizeOfMsg」에는 서버측 오브젝트에 대하여 수도하는 메시지의 사이즈를 나타내는 값을 설정한다.
이 메소드「SendWithRBox」가 발행되면, 후술하는 바와 같이 서버측 오브젝트에 의한 처리의 결과가 격납되는 데이터영역「RBox」가 오브젝트 「mCOOPMailer」에 의해 확보된다. 이 데이터영역「RBox」은, 클라이언트측 오브젝트가 장래 수취하는 결과가 격납되는 여역이며, 퓨처(future)라고 불리는 것이다.
그리고, 이 메소드「SendWithRBox」는 서버측 오브젝트에 메시지를 보낸 후에, 데이터영역「RBox」을 특정하기 위한 데이터형인 「RID」형의 식별자「rBoxID」를 얻는다. 이 식별자「rBoxID」는, 메소드「SendWithRBox」가 발행되었을 때에 오브젝트 「mCOOPMailer」에 의해 확보된 데이터영역「RBox」을 특정하는 식별자이다.
이 메소드「SendWithRBox」는, 에러코드를 나타내는 데이터형인 「sError」형의 값을 되돌리는 값으로서 얻는다. 즉 메소드「SendWithRBox」가 발행되었을 때에, 당해 메소드「SendWithRBox」의 처리가 정상적으로 완료하지 않은 경우에는, 그 원인을 나타내는 에러코드가 되돌리는 값으로서 반환되어 온다. 또한 처리가 정상적으로 완료한 경우에는, 정상적으로 처리가 완료한 것을 나타내는 값이 되돌리는 값으로서 반환되어 온다.
2-2-2. Receive()
sError Receive(in RID rBoxID, in any msg,in size_t sizeOfMsg)
메소드「Receive」는, 데이터영역「RBox」에 격납되어 있는 데이터를 독출하는 데이터독출용 메소드이다. 즉 이 메소드「Receive」는, 클라이언트측 오브젝트가 메소드「SendWithRBox」를 발행한 후에, 클라이언트측 오브젝트가 서버측 오브젝트에 의한 처리의 결과를 수취하는 경우에 사용된다.
인수 「rBoxID」는 데이터영역「RBox」을 특정하기 위한 데이터형인 「RID」형의 인수이며, 이 인수「rBoxID」에는 서버측 오브젝트에 의한 처리의 결과가 격납되는 데이터영역「RBox」을 특정하는 식별자를 설정한다. 즉, 이 인수「rBoxID」에는, 메소드「SendWithRBox」를 발행하였을 때에 얻은 식별자「rBoxID」의 값을 설정한다.
인수 「msg」는 임의의 데이터형인 「any」형의 인수이며, 이 인수 「msg」에는 수취한 메시지를 격납하는 영역에의 포인터를 설정한다.
인수「sizeOfMsg」는, 데이터의 사이즈를 특정하기 위한 데이터형인 「size_t」형의 인수이며, 이 인수 「sizeOfMsg」에는 수취한 메시지를 격납하는 영역의 사이즈를 나타내는 값을 설정한다.
이 메소드「Receive」는, 에러코드를 나타내는 데이터형인 「sError」형의 값을 되돌리는 값으로서 얻는다. 즉, 이 메소드「Receive」가 발행되었을 때에 당해 메소드「Receive」의 처리가 정상적으로 완료하지 않았을 경우에는, 그 원인을 나타내는 에러코드가 되돌리는 값으로서 반환되어 온다. 또한 처리가 정상적으로 완료한 경우에는, 정상적으로 처리가 완료한 것을 나타내는 값이 되돌리는 값으로서 반환되어 온다.
2-2-3. Reply()
sError Reply(in any resultMsg,in size_t sizeOfResultMsg)
메소드「Reply」는, 클라이언트측 오브젝트에 의해 메소드「SendWithRBox」가 발행된 후에, 서버측 오브젝트가 클라이언트측 오브젝트에 처리의 결과를 반환하는 경우에 사용된다.
인수 「resultMsg」는, 임의의 데이터형인 「any」형의 인수이며, 이 인수 「resultMsg」에는 클라이언트측 오브젝트에 수도하는 메시지가 격납된 영역에의 포인터를 설정한다.
인수 「sizeOfResultMsg」는, 데이터의 사이즈를 특정하기 위한 데이터형인 「size_t」형의 인수이며, 이 인수 「sizeOfResultMsg」에는, 클라이언트측 오브젝트에 수도하는 메시지의 사이즈를 나타내는 값을 설정한다.
이 메소드「Reply」는, 에러코드를 나타내는 데이터형인 「sError」형의 값을 되돌리는 값으로서 얻는다. 즉, 이 메소드「Reply」가 발행되었을 때에, 당해 메소드「Reply」의 처리가 정상적으로 완료하지 않았을 경우에는, 그 원인을 나타내는 에러코드가 되돌리는 값으로서 반환되어 온다. 또한, 처리가 정상적으로 완료하였을 경우에는, 정상적으로 처리가 완료한 것을 나타내는 값이 되돌리는 값으로서 반환되어 온다.
2-2-4. Delegate()
sError Delegate(in OID destObjID, in Selector meth, in any msg,in size_t sizeOfMsg)
메소드「Delegate」는, 오브젝트간에서의 권한의 위양의 처리를 행하기 위한 권한위양용 메소드이다. 즉 이 메소드「Delegate」는 서버측 오브젝트가 복수의 오브젝트로 구성되는 경우에, 서버측 오브젝트를 구성하는 오브젝트간에서 서버측 오브젝트에 의한 처리의 결과를 클라이언트측 오브젝트에 반환하는 권한의 위양을 행하는 경우에 사용된다.
또한 이하의 설명에서는, 상기 권한의 것을 회답권한이라고 칭한다. 또 서버측 오브젝트를 구성하는 오브젝트중, 회답권한을 위양하는 측의 오브젝트의 것을 권한위양원 오브젝트라고 칭하고, 회답권한이 위양되는 측의 오브젝트의 것을 권한위양선 오브젝트라고 칭한다.
인수 「destObjID」는 오브젝트를 특정하기 위한 데이터형인 「OID」형의 인수이며, 이 인수 「destObjID」에는 권한위양선 오브젝트를 특정하는 값을 설정한다.
인수 「meth」는, 메소드를 특정하기 위한 데이터형인 「Selector」형의 인수이며, 이 인수 「meth」에는 요구하는 처리가 기술된 권한위양선 오브젝트의 메소드를 특정하기 위한 값을 설정한다.
인수 「msg」는, 임의의 데이터형인 「any」형의 인수이며, 이 인수 「msg」에는 권한위양선 오브젝트에 대하여 수도하는 메시지가 격납되어 있는 영역에의 포인터를 설정한다.
인수 「sizeOfMsg」는, 데이터의 사이즈를 특정하기 위한 데이터형인 「size_t」형의 인수이며, 이 인수 「sizeOfMsg」에는 권한위양선 오브젝트에 대하여 수도하는 메시지의 사이즈를 나타내는 값을 설정한다.
이 메소드「Delegate」는, 에러코드를 나타내는 데이터형인 「sError」형의 값을 되돌리는 값으로서 얻는다. 즉, 이 메소드「Delegate」가 발행되었을 때에, 당해 메소드「Delegate」의 처리가 정상적으로 완료하지 않았을 경우에는, 그 원인을 나타내는 에러코드가 되돌리는 값으로서 반환되어 온다. 또한, 처리가 정상적으로 완료하였을 경우에는, 정상적으로 처리가 완료한 것을 나타내는 값이 되돌리는 값으로서 반환되어 온다.
2-3. mDrive 메타스페이스의 API
상기 오퍼레이팅 시스템은, mDrive 메타페이스에 있어서 퓨처를 사용한 메시지패싱을 행하기 위해, mDrive 메타페이스 상에서 동작하는 오브젝트의 기술에 사용되는 API로서, 이하의 메소드를 제공하고 있다. 여기서는 API를 IDL에서의 기술방법에 준하여 나타내고 있다.
sError SendWithContinuation(in OID destObjID, in Selector meth, in any msg, in size_t sizeOfMsg, in Selector contMeth)
sError Kick(in ContID, in any msg, in size_t sizeOfMsg)
이하, 이들의 메소드에 대하여 상세히 설명한다.
2-3-1. SendWithContinuation()
sError SendWithContinuation(in OID destObjID, in Selector meth, in any msg, in size_t sizeOfMsg, in Selector contMeth)
메소드「SendWithContinuation」는, 클라이언트측 오브젝트에서 서버측 오브젝트에 메시지를 보내는 처리를 행하는 메시지송신용 메소드이다. 이 메소드「SendWithContinuation」는, 클라이언트측 오브젝트가 서버측 오브젝트에 메시지를 송신한 후, 서버측 오브젝트에서의 처리의 결과를 받아서, 클라이언트측 오브젝트가 특정의 메소드(이하, 계속메소드라고 칭한다)를 실행할 필요가 있는 경우에 사용된다.
인수「destObjID」는, 오브젝트를 특정하기 위한 데이터형인 「OID」형의 인수이며, 이 인수 「destObjID」에는 서버측 오브젝트를 특정하는 값을 설정한다.
인수「meth」는, 메소드를 특정하기 위한 데이터형인 「Selector」형의 인수이며, 이 인수 「meth」에는 요구하는 처리가 기술된 서버측 오브젝트의 메소드를 특정하는 값을 설정한다.
인수「msg」는, 임의의 데이터형인 「any」형의 인수이며, 이 인수 「msg」에는 서버측 오브젝트에 대하여 수도하는 메시지가 격납되어 있는 영역에의 포인터를 설정한다.
인수「sizeOfMsg」는, 데이터의 사이즈를 특정하기 위한 데이터형인 「size_t」형의 인수이며, 이 인수 「sizeOfMsg」에는 서버측 오브젝트에 대하여 수도하는 메시지의 사이즈를 나타내는 값을 설정한다.
인수「contMeth」는, 메소드를 특정하기 위한 데이터형인 「Selector」형의 인수이며, 이 인수 「contMeth」에는 계속 메소드를 특정하는 값을 설정한다.
이 메소드「SendWithContinuation」이 발행되면, 후술하는 바와 같이 오브젝트 「mDriveMailer」에 의해 데이터영역「Continuation」이 확보되고, 당해 데이터영역「Continuation」에 계속메소드에 대한 정보가 격납된다. 이 데이터영역「Continuation」은, 클라이언트측 오브젝트가 장래 실행할 계속메소드에 대한 정보가 격납되는 영역이며, 퓨처(future)라고 불리는 것이다.
이 메소드「SendWithContinuation」는, 에러코드를 나타내는 데이터형인 「sError」형의 값을 되돌리는 값으로서 얻는다. 즉, 이 메소드「SendWithContinuation」가 발행되었을 때에, 당해 메소드「SendWithContinuation」의 처리가 정상적으로 완료하지 않았던 경우에는, 그 원인을 나타내는 에러코드가 되돌리는 값으로서 반환되어 온다. 또한 처리가 정상적으로 완료한 경우에는, 정상적으로 처리가 완료한 것을 나타내는 값이 되돌리는 값으로서 반환되어 온다.
2-3-2. Kick()
sError Kick(in ContID, in any msg, in size_t sizeOfMsg)
메소드 「Kick」는, 클라이언트측 오브젝트에 의해 메소드「SendWithContinuation」가 발행된 후에, 서버측 오브젝트가 클라이언트측 오브젝트에 계속메소드를 실행시키는 경우에 사용된다.
인수「contID」는, 데이터영역「Continuation」을 특정하기 위한 데이터형인 「contID」형의 인수이며, 이 인수 「contID」에는 메소드「SendWithContinuation」가 발행되었을 때에 오브젝트 「mDriveMailer」에 의해 확보된 데이터영역「Continuation」을 특정하는 식별자를 설정한다.
인수「msg」는, 임의의 데이터형인 「any」형의 인수이며, 이 인수 「msg」에는 클라이언트측 오브젝트에 수도하는 메시지가 격납된 영역에의 포인터를 설정한다.
인수「sizeOfMsg」는, 데이터의 사이즈를 특정하기 위한 데이터형인 「size_t」형의 인수이며, 이 인수 「sizeOfMsg」에는 클라이언트측 오브젝트에 수도하는 메시지의 사이즈를 나타내는 값을 설정한다.
이 메소드 「Kick」는, 에러코드를 나타내는 데이터형인 「sError」형의 값을 되돌리는 값으로서 얻는다. 즉, 이 메소드「Kick」가 발행되었을 때에, 당해 메소드「Kick」의 처리가 정상적으로 완료하지 않았던 경우에는, 그 원인을 나타내는 에러코드가 되돌리는 값으로서 반환되어 온다. 또한 처리가 정상적으로 완료한 경우에는, 정상적으로 처리가 완료한 것을 나타내는 값이 되돌리는 값으로서 반환되어 온다.
2-4. 메시지패싱에 사용되는 데이터영역
상기 오퍼레이팅 시스템은, mCOOP 메타스페이스로 메시지패싱을 행할 때에, 퓨처로서 데이터영역「RBox」을 사용하는 동시에, 클라이언트측 오브젝트에서 서버측 오브젝트에 정보를 수도하기 위해 데이터영역「DeliveryBoxA」을 사용한다.
또, 상기 오퍼레이팅 시스템은, mDrive 메타스페이스로 메시지패싱을 행할 때에, 퓨처로서 데이터영역「Continuation」을 사용하는 동시에, 클라이언트측 오브젝트에서 서버측 오브젝트에 정보를 수도하기 위해 데이터영역「DeliveryBoxB」을 사용한다.
또, 상기 오퍼레이팅 시스템은, 오브젝트의 실행상태 등을 관리하기 위한 정보가 격납되는 데이터영역「Thread」을 오브젝트마다 확보하고, 당해 데이터영역「Thread」에 퓨처에 대한 정보도 격납한다. 또한 mCOOP 메타스페이스 및 mDrive 메타스페이스 상에서는, 소위 싱글스레드로서 오브젝트가 동작하도록 되어 있고, 하나의 오브젝트에 대하여 하나의 스레드가 대응한다. 그리고, 당해 스레드의 정보가 오브젝트의 실행상태 등을 관리하기 위한 정보로서 데이터영역「Thread」에 격납된다.
또한, 이들의 데이터영역「RBox」 「DeliveryBoxA」 「Continuation」 「DeliveryBoxB」 「Thread」는, 메시지패싱의 기능을 제공하거나, 오브젝트를 관리하거나 하기 위해 오퍼레이팅 시스템이 사용하는 데이터영역이며, 어플리케이션 프로그램이나 디바이스 드라이버 등에 의해 직접 액세스되는 일이 없도록, 오퍼레이팅 시스템에 의해 관리된다.
이하, 이들의 데이터영역에 대하여 상세히 설명한다.
2-4-1. RBox
데이터영역「RBox」은, 메소드「SendWithRBox」가 발행되었을 때에, 오브젝트「mCOOPMailer」에 의해 확보된다. 오브젝트「mCOOPMailer」에 의한 데이터영역「RBox」의 확보는, 구체적으로는 표 1에 나타내는 속성을 갖는 클래스(이하, 클래스「RBox」라고 칭한다)의 인스턴스를 생성함으로써 행해진다. 또한 표 1에서는 클래스「RBox」의 속성중, mCOOP 메타스페이스에서의 메시지패싱의 기본형을 실현하기 위해 필요한 속성중, 최소한의 것만을 나타내고 있고, 이 이외의 속성을 포함시키도록 하여도 좋은 것은 말할 것도 없다.
RBox
ThreadID creatorbool readyvoid* reusltMsgt_size sizeOFResultMsgsError status
표 1에 나타내는 바와 같이 클래스「RBox」는, 오브젝트마다 설정되는 데이터영역 「Thread」을 특정하기 위한 데이터형인 「ThreadID」형의 속성「creator」을 갖는다.
또 클래스「RBox」는, 서버측 오브젝트에 의한 처리의 결과의 데이터인 결과데이터가 격납되는 영역으로서, 논리값을 위한 데이터형인 「bool」형의 속성「ready」과, 포인터를 나타내는 데이터인 「void*」형의 속성「resultMsg」과, 데이터의 사이즈를 특정하기 위한 데이터형인 「size_t」형의 속성「sizeOfResultMsg」과를 갖는다.
또 클래스「RBox」는, 서버측 오브젝트의 상태를 나타내는 상태데이터가 격납되는 영역으로서, 에러코드를 나타내는 데이터형인 「sError」형의 속성「status」을 갖는다.
속성「creator」에는, 이 데이터영역 「RBox」의 생성의 기본이 된 오브젝트(즉, 메소드「SendWithRBox」를 발행한 클라이언트측 오브젝트)에 대응한 데이터영역 「Thread」을 특정하는 식별자가 설정된다. 또한 mCOOP 메타스페이스 상에서는, 상술한 바와 같이 싱글스레드로서 오브젝트가 동작하도록 되어 있고, 하나의 오브젝트에 대하여 하나의 데이터영역 「Thread」이 대응한다. 따라서 속성「creator」에 의해 데이터영역 「Thread」이 특정되면, 이것에 대응하고 있는 클라이언트측 오브젝트가 특정되게 된다.
속성「ready」에는, 서버측 오브젝트에 의한 처리의 결과로서 클라이언트측 오브젝트에 수도하는 메시지가 격납된 영역에의 포인터가 설정된다. 환언하면 속성「ready」는, 서버측 오브젝트에서 클라이언트측 오브젝트에 반환하는 결과메시지의 준비가 되어 있는지 아닌지를 나타내는 프래그이다.
속성「resultMsg」에는, 서버측 오브젝트에 의한 처리의 결과로서 클라이언트측 오브젝트에 수도하는 메시지가 격납된 영역에의 포인터가 설정된다.
속성「sizeOfResultMsg」에는, 서버측 오브젝트에 의한 처리의 결과로서 클라이언트측 오브젝트에 수도하는 메시지의 사이즈를 나타내는 값이 설정된다.
속성「status」에는, 클라이언트측 오브젝트에 알려야할 정보로서, 서버측 오브젝트의 상태를 나타내는 코드가 설정된다. 즉, 예를 들면 서버측 오브젝트의 정상적인 실행을 방해하는 예외사상이 발생하여, 서버측 오브젝트의 처리가 정상적으로 완료하지 않은 것이, 오브젝트「mCOOPFaultHandler」에서 오브젝트「 mCOOPMailer」에 통지되고, 오브젝트「 mCOOPMailer」에 의해 서버측 오브젝트의 상태를 나타내는 에러코드가 속성「status」에 설정된다. 또한, 서버측 오브젝트에 의한 처리가 정상적으로 행해지고 있는 경우, 속성「status」에는 서버측 오브젝트가 정상적인 상태인 것을 나타내는 값이 설정된다.
또한, 클라이언트측 오브젝트에 의해 메소드「Receive」가 발행되면 속성「ready」가 참조되고, 이것에 의해 서버측 오브젝트에 의한 처리의 결과가 반한되어 오고 있는지 아닌지가 판단된다. 그리고, 서버측 오브젝트에 의한 처리의 결과가 반한되어 오고 있는 경우에는 속성「resultMsg」이 참조되고, 이것에 의해 서버측 오브젝트에 의한 처리의 결과로서 클라이언트측 오브젝트에 수도하는 메시지가 격납되어 있는 영역이 특정되고, 당해 영역에서 속성「sizeOfResultMsg」이 나타내는 사이즈만큼의 데이터가 독출된다. 이것에 의해 서버측 오브젝트에 의한 처리의 결과로서 클라이언트측 오브젝트에 수도하는 메시지가 독출되고, 당해 메시지가 클라이언트측 오브젝트에 수도되게 된다.
2-4-2. DeliveryBoxA
데이터영역「DeliveryBoxA」은, 메소드「SendWithRBox」가 발행되었을 때에, 클라이언트측 오브젝트에 정보를 수도하기 위해 오브젝트「 mCOOPMailer」에 의해 확보된다. 오브젝트「 mCOOPMailer」에 의한 데이터영역「DeliveryBoxA」의 확보는, 구체적으로는 표 2에 나타내는 속성을 갖는 클래스(이하, 클래스「DeliveryBoxA」라고 칭한다)의 인스턴스를 생성함으로써 행해진다. 또한 표 2에서는 클래스「DeliveryBoxA」의 속성중, mCOOP 메타스페이스에서의 메시지패싱의 기본형을 실현하기 위해 필요한 속성중, 최소한의 것만을 나타내고 있고, 이 이외의 속성을 포함시키도록 하여도 좋은 것은 말할 것도 없다.
DeliveryBoxA
RID rBoxIDvoid* msgt_size sizeOfMsg
표 2에 나타내는 바와 같이, 클래스「DeliveryBoxA」는 데이터영역「RBox」을 특정하기 위한 데이터형인 「RID」형의 속성「rBoxID」과, 포인터를 나타내는 데이터형인 「void*」형의 속성「msg」과, 데이터의 사이즈를 특정하기 위한 데이터형인 「size_t」형의 속성「sizeOfMsg」과를 갖는다.
속성「rBoxID」에는, 이 데이터영역 「DeliveryBoxA」을 이용하여 행해지는 메시지패싱에 사용되는 데이터영역「RBox」을 특정하는 식별자가 설정된다.
속성「msg」에는, 클라이언트측 오브젝트에서 서버측 오브젝트에 수도하는 메시지가 셕납된 영역에의 포인터가 설정된다.
속성「sizeOfMsg」에는, 클라이언트측 오브젝트에서 서버측 오브젝트에 수도하는 메시지의 사이즈를 나타내는 값이 설정된다.
이와 같은 클래스「DeliveryBoxA」의 인스턴스를 생성함으로써 확보되는 데이터영역 「DeliveryBoxA」을 이용함으로써, 오퍼레이팅 시스템은 클라이언트측 오브젝트에서 서버측 오브젝트에 메시지를 보낼 때에, 당해 메시지와 함께 데이터영역「RBox」에 대한 정보를 서버측 오브젝트에 보내는 것이 가능하게 된다. 환언하면, 데이터영역 「DeliveryBoxA」을 이용함으로써, 오퍼레이팅 시스템은 mCOOP 메타스페이스에 있어서, 메시지와 퓨처와를 동시에 취급하는 것이 가능하게 된다.
2-4-3. Continuation
데이터영역 「Continuation」은, 메소드「SendWithContinuation」가 발행되었을 때에, 계속 메소드에 대한 정보를 격납하기 위해, 오브젝트「mDriveMailer」에 의한 데이터영역 「Continuation」의 확보는, 구체적으로는 표 3에 나타내는 속성을 갖는 클래스(이하, 클래스「Continuation」이라고 칭한다)의 인스턴스를 생성함으로써 행해진다. 또한 표 3에서는 클래스「Continuation」의 속성중, mDrive 메타스페이스에서의 메시지패싱의 기본형을 실현하기 위해 필요한 속성중, 최소한의 것만을 나타내고 있고, 이 이외의 속성을 포함시키도록 하여도 좋은 것은 말할 것도 없다.
Continuation
ThreadID creatorSelector meth
표 3에 나타내는 바와 같이, 클래스「Continuation」는 오브젝트마다 설정되는 데이터영역「Thread」을 특정하기 위한 데이터형인「ThreadID」형의 속성「creator」과, 메소드를 특정하기 위한 데이터형인「Selection」형의 속성「meth」과를 갖는다.
속성「creator」에는, 데이터영역「Continuation」의 생성의 기본이 된 오브젝트(즉, 메소드「SendWithContinuation」를 발행한 클라이언트측 오브젝트)에 대응한 데이터영역「Thread」을 특정하는 식별자가 설정된다. 또한 mDrive 메타스페이스에서는, 상술한 바와 같이 싱글스레드로서 오브젝트가 동작하도록 되어 있고, 하나의 오브젝트에 대하여 하나의 데이터영역「Thread」이 대응한다. 속성「creator」에 의해 데이터영역「Thread」이 특정되면, 이것에 대응하고 있는 클라이언트측 오브젝트가 특정되게 된다.
속성「meth」에는, 클라이언트측 오브젝트의 계속메소드를 특정하는 값이 설정된다.
또한, 서버측 오브젝트에 의해 메소드「Kick」가 발행되면, 속성「meth」가 참조되고, 이것에 의해 클라이언트측 오브젝트의 계속메소드가 특정되고, 당해 계속메소드가 기동되게 된다.
2-4-4. DeliveryBoxB
데이터영역「DeliveryBoxB」은, 메소드「SendWithContinuation」이 발행되었을 때에, 클라이언트측 오브젝트에서 서버측 오브젝트에 정보를 수도하기 위해, 오브젝트「 mDriveMailer」에 의해 확보된다. 오브젝트「mDriveMailer」에 의한 데이터영역「DeliveryBoxB」의 확보는, 구체적으로는 표 4에 나타내는 속성을 갖는 클래스(이하, 클래스「DeliveryBoxB」라고 칭한다)의 인스턴스를 생성함으로써 행해진다. 또한 표 4에서는 클래스「DeliveryBoxB」의 속성중, mDrive 메타스페이스에서의 메시지패싱의 기본형을 실현하기 위해 필요한 속성중, 최소한의 것만을 나타내고 있고, 이 이외의 속성을 포함시키도록 하여도 좋은 것은 말할 것도 없다.
DeliveryBoxB
ContID contIDvoid* msgt_size sizeOfMsg
표 4에 나타내는 바와 같이, 클래스「DeliveryBoxB」는 데이터영역「Continuation」을 특정하기 위한 데이터형인 「contID」와, 포인터를 나타내는 데이터형인 「void*」형의 속성「msg」과, 데이터의 사이즈를 특정하기 위한 데이터형인 「size_t」형의 속성「sizeOfMsg」과를 갖는다.
속성「contID」에는, 데이터영역「DeliveryBoxB」을 이용하여 행해지는 메시지패싱에 사용되는 데이터영역「Continuation」을 특정하는 식별자가 설정된다.
속성「msg」에는, 클라이언트측 오브젝트에서 서버측 오브젝트에 수도하는 메시지가 격납된 영역에의 포인터가 설정된다.
속성「sizeOfMsg」에는, 클라이언트측 오브젝트에서 서버측 오브젝트에 수도하는 메시지의 사이즈를나타내는 값이 설정된다.
이와 같은 클래스「DeliveryBoxB」의 인스턴스를 생성함으로써 확보되는 데이터영역「DeliveryBoxB」을 이용함으로써, 오퍼레이팅 시스템은 클라이언트측 오브젝트에서 서버측 오브젝트에 메시지를 보낼 때에, 당해 메시지와 함께 데이터영역「Continuation」에 대한 정보를 서버측 오브젝트에 보내는 것이 가능하게 된다. 환언하면, 데이터영역「DeliveryBoxB」을 이용함으로써, 오퍼레이팅 시스템은 mDrive 메타스페이스에 있어서 메시지와 퓨처와를 동시에 취급하는 것이 가능하게 된다.
2-4-5. Thread
상술한 바와 같이, mCOOP 메타스페이스 및 mDrive 메타스페이스 상에서는, 싱글스레드로서 오브젝트가 동작하도록 되어 있고, 하나의 오브젝트에 대하여 하나의 스레드가 대응하고 있다. 그리고, 각 스레드의 정보가 오브젝트의 실행상태 등을 관리하기 위한 정보로서, 데이터영역「Thread」에 격납된다. 즉 오퍼레이팅 시스템은, 각 오브젝트마다 오브젝트의 실행상태 등을 관리하기 위한 정보가 격납되는 데이터영역「Thread」을 확보한다.
이 데이터영역「Thread」에는, 오브젝트의 실행상태 등을 관리하기 위한 정보로서, 예를 들면 오브젝트가 대기상태인지 혹은 실행가능상태인지에 대한 정보 등이 격납된다. 또, 이 데이터영역「Thread」에는, 정보가 격납된다.
구체적으로는, mCOOP 메타스페이스 상에서 동작하는 오브젝트의 경우, 퓨처를 이용한 메시지패싱을 행할 때에, 당해 퓨처에 대응한 데이터영역「Thread」에, 메시지패싱에 사용하는 데이터영역「RBox」를 특정하기 위한 식별자「rBoxID」가 퓨처에 대한 정보로서 오브젝트「mCOOPMailer」에 의해 격납된다.
또, mDrive 메타스페이스 상에서 동작하는 오브젝트의 경우, 퓨처를 이용한 메시지패싱을 행할 때에, 당해 오브젝트에 대응한 데이터영역「Thread」에, 메시지패싱에 사용하는 데이터영역「Continuation」을 특정하기 위한 식별자「contID」가오브젝트「 mDriveMailer」에 의해 격납된다.
2-5. 메시지패싱
이하, 이상과 같은 메소드 및 데이터영역을 사용하여 행해지는 메시지패싱에 대하여, 구체적인 시나리오를 예로 들어서 상세히 설명한다.
또한, 이하의 설명에서 참조하는 도 3 내지 도 7은, 메시지패싱시의 처리의 천이나 메시지의 교환 등을 나타낸 도면이며, 이들의 도면에 있어서 점선 화살표는, 오퍼레이팅 시스템 내에서의 처리의 천이나 메시지의 교환을 나타내고 있고, 실선 화살표는 어플리케이션 프로그램측에서 보았을 때의 처리의 천이나 메시지의 교환을 나타내고 있다.
2-5-1. sendWithRBox()를 이용한 메시지패싱
mCOOP 메타스페이스에 있어서, 메소드「sendWithRBox」를 사용하였을 때의 메시지패싱에 대하여, 정상적으로 처리가 진행된 경우와, 예외사상이 발생한 경우에 대하여 설명한다.
2-5-1-1. 정상처리시
mCOOP 메타스페이스에 있어서, 메소드「sendWithRBox」를 사용하였을 때의 메시지패싱에 대하여, 예외사상이 발생하지 않고 정상적으로 처리가 진행된 경우에 대하여, 도 3을 참조하여 설명한다.
도 3은, mCOOP 메타스페이스에서의 메시지패싱의 기본적인 시나리오로서. mCOOP 메타스페이스 상에서 어플리케이션 프로그램으로서 동작하는 오브젝트A와, mCOOP 메타스페이스 상에서 어플리케이션 프로그램으로서 동작하는 오브젝트B와의 사이에서, 메소드「sendWithRBox」를 사용하여 메시지패싱을 행할 때의 시나리오를 나타내고 있다. 즉, 본 예에서는 오브젝트A가 클라이언트측 오브젝트이며, 오브젝트B가 서버측 오브젝트이다.
ST1-1에 나타내는 바와 같이, 오브젝트A가 메소드「sendWithRBox」를 발행하면, 점선 화살표 ST1-2에 나타내는 바와 같이, 오브젝트 「mCOOPMailer」에 의해 처리가 천이하고, ST1-3에 있어서 오브젝트 「mCOOPMailer」에 의해 메소드「sendWithRBox」에 따른 처리가 행해진다.
여기서, 오브젝트 「mCOOPMailer」는, 먼저 서버측 오브젝트(본 예에서는 오브젝트B)에 의한 처리의 결과가 격납되는 데이터영역「RBox」을 확보하여, 당해 데이터영역「RBox」의 속성「creator」에 오브젝트A에 대응한 당해 데이터「Thread」를 특정하는 식별자를 설정한다.
다음에, 오브젝트 「mCOOPMailer」는 데이터영역「DeliveryBoxA」을 확보하여, 당해 데이터영역「DeliveryBoxA」에 데이터영역「RBox」을 특정하기 위한 식별자「rBoxID」와, 메소드「sendWithRBox」에 의해 보내져온 메시지와를 격납한다.
여기서, 데이터영역「DeliveryBoxA」에 데이터영역「RBox」을 특정하기 위한 식별자「rBoxID」를 격납한다는 것은, 구체적으로 데이터영역「DeliveryBoxA」의 속성「rBoxID」에 데이터영역「RBox」을 특정하기 위한 식별자「rBoxID」의 값을 설정한다는 것이다.
또, 데이터영역「DeliveryBoxA」에 메소드「sendWithRBox」에 의해 보내져온 메시지를 격납한다는 것은, 구체적으로 데이터영역「DeliveryBoxA」의 속성「msg」에 메소드「sendWithRBox」의 인수「msg」의 값을 설정하는 동시에, 데이터영역「DeliveryBoxA」의 속성「sizeOfMsg」에 메소드「sendWithRBox」의 인수「sizeOfMsg」의 값을 설정한다는 것이다.
그후, 오브젝트 「mCOOPMailer」는 데이터영역「DeliveryBoxA」에 격납한 데이터, 즉, 메소드「sendWithRBox」에 의해 보내져온 메시지와, 확보한 데이터영역「RBox」을 특정하기 위한 식별자「rBoxID」와를 점선 화살표 ST1-4에 나타내는 바와 같이 오브젝트B에 배송하고, 오브젝트B의 메소드를 기동한다.
이때, 오브젝트B의 메소드에는 메시지만이 수도되고, 식별자「rBoxID」는 오브젝트B에 대응한 데이터영역「Thread」에 격납된다. 환언하면, 오브젝트B에 수도되는 식별자「rBoxID」는 오퍼레이팅 시스템의 관리하에 있고, 어플리케이션 프로그램측에서 보았을 때 오브젝트B에 배송되어 온 것은 메시지뿐이다.
또한, 데이터영역「DeliveryBoxA」에 격납된 데이터를 오브젝트 「mCOOPMailer」에서 오브젝트B에 배송하여 오브젝트B의 메소드를 기동할 때, 오브젝트B는 메소드「sendWithRBox」의 인수「destObjID」에 의해 특정되고, 오브젝트B의 메소드는 메소드「sendWithRBox」의 인수「meth」에 의해 특정된다.
이들의 처리가 종료하면, 오브젝트 「mCOOPMailer」는 점선 화살표 ST1-5에 나타내는 바와 같이, 확보한 데이터영역「RBox」을 특정하기 위한 식별자「rBoxID」를 오브젝트A에 반환하는 동시에, 정상적으로 처리가 완료한 것을 나타내는 값을 메소드「sendWithRBox」에 대한 되돌리는 값으로서 오브젝트A에 반환한 위에서, 오브젝트A를 계속하여 실행가능상태인 것같이 한다. 이것에 의해 오브젝트A는 실행가능상태가 되고, 행하여야 할 처리가 나머있는 경우에는 당해 처리를 계속하여 실행한다.
이상의 처리에 의해, 어플리케이션 프로그램측에서 보았을 때에는, 점선 화살표 ST1-6에 나타내는 바와 같이 오브젝트A에서 오브젝트B에 메시지가 배송되고, 오브젝트A와 오브젝트B가 병행동작하고 있는 것같은 상태가 된다.
그후, ST1-7에 나타내는 바와 같이 오브젝트A가 메소드「Receive」를 발행하면, 점선 화살표 ST1-8에 나타내는 바와 같이 오브젝트 「mCOOPMailer」에 의해 메소드「Receive」에 따른 처리가 행해진다. 구체적으로는 오브젝트 「mCOOPMailer」는, 메소드「Receive」의 인수「rBoxID」에 의해 특정되는 데이터영역「RBox」를 참조하고, 오브젝트B에 의한 처리의 결과가 당해 데이터영역「RBox」에 격납되어 있으면 그 결과를 오브젝트A에 수도하고, 오브젝트B에 의한 처리의 결과가 당해 데이터영역「RBox」에 격납되어 있지 않으면, 오브젝트A를 실행가능상태에서 대기상태로 한다.
본 예에서는, 오브젝트A가 메소드「Receive」를 발행한 단계에서는, 오브젝트B가 메소드「Reply」를 발행하고 있지 않으므로, 오브젝트B에 의한 처리의 결과는 아직 데이터영역「RBox」에 격납되어 있지 않다, 따라서 오브젝트 「mCOOPMailer」는, 점선 화살표 ST1-10에 나타내는 바와 같이 오브젝트B에 의한 처리의 결과가 아직 데이터영역「RBox」에 격납되어 있지 않은 것을 오브젝트A에 알려서, 오브젝트A를 실행가능상태에서 대기상태로 한다.
그후, ST1-11에 나타내는 바와 같이 오브젝트B가 메소드「Reply」를 발행하면, 점선 화살표 ST1-12에 나타내는 바와 같이 오브젝트 「mCOOPMailer」에 처리가 천이하고, ST1-13에 있어서 오브젝트 「mCOOPMailer」에 의해 메소드「Reply」에 따른 처리가 행해진다. 구체적으로는, 오브젝트 「mCOOPMailer」는 오브젝트A가 이미 메소드「Receive」를 발행하고 있다면, 오브젝트B에 의한 처리의 결과를 오브젝트A에 수도하고, 오브젝트A가 이미 메소드「Receive」를 발행하고 있지 않다면, 오브젝트B에 의한 처리의 결과를 데이터영역「RBox」에 격납한다.
본 예에서는, 오브젝트B가 메소드「Reply」를 발행한 단계에서, 이미 오브젝트A가 이미 메소드「Receive」를 발행하고 있다. 따라서 오브젝트 「mCOOPMailer」는 점선 화살표 ST1-14에 나타내는 바와 같이 오브젝트B에 의한 처리의 결과를 데이터영역「RBox」에 격납하지 않고, 오브젝트A에 바로 수도한다. 그리고 오브젝트 「mCOOPMailer」는, 오브젝트B에 의한 처리의 결과의 오브젝트A에 의 수도의 처리가 정상적으로 완료하면, 점선 화살표 ST1-15에 나타내는 바와 같이 당해 처리가 정상적으로 완료한 것을 나타내는 값을 메소드「Reply」에 대한 되돌리는 값으로서 오브젝트B에 반환한 위에서, 오브젝트B를 계속하여 실행가능상태인 것같이 한다. 이것에 의해 오브젝트B는 실행가능상태가 되고, 행하여야 할 처리가 남아있는 경우에는, 당해 처리를 계속하여 실행한다.
이상의 처리에 의해, 어플리케이션 프로그램측에서 보았을 때에는, 실선 화살표 ST1-16에 나타내는 바와 같이 오브젝트B에 의한 처리의 결과가 오브젝트A에 수도되고, 다시 오브젝트A와 오브젝트B가 병행동작하고 있는 것같은 상태가 된다.
또한 도 3의 예에서는, 메소드「Reply」가 발행되기 전에 메소드「Receive」가 발행된 경우를 나타내었으나, 메소드「Reply」가 발행된 후에 메소드「Receive」가 발행되는 경우도 있을 수 있다. 메소드「Reply」가 발행된 후에 메소드「Receive」가 발행된 경우에는, 오브젝트A는 대기상태가 되지 않고 오브젝트B에 의한 처리의 결과를 바로 수취하게 된다.
즉, 오브젝트B가 메소드「Reply」를 발행한 후에 오브젝트A가 메소드「Receive」를 발행한 경우, 오브젝트 「mCOOPMailer」는 오브젝트B가 메소드「Reply」를 발행한 단계에서는, 오브젝트B에 의한 처리의 결과를 데이터영역「RBox」에 격납하여 놓고, 오브젝트A가 메소드「Receive」를 발행한 단계에서 바로, 오브젝트B에 의한 처리의 결과를 데이터영역「RBox」에서 독출하여 오브젝트A에 수도한다.
또한, 오브젝트B에 의한 처리의 결과를 데이터영역「RBox」에 격납한다는 것은, 구체적으로는 데이터영역「RBox」의 속성「ready」에, 오브젝트B에 의한 처리의 결과가 반환되어 오고 있는 것을 나타내는 값을 설정하고, 또한 데이터영역「RBox」의 속성「resultMsg」에, 오브젝트B에 의한 처리의 결과로서 오브젝트A에 수도하는 메시지가 격납된 영역에의 포인터, 즉 메소드 「Reply」의 인수 「resultMsg」로 표시되는 포인터를 설정하고, 또한 데이터영역「RBox」의 속성「sizeOfResultMsg」에, 오브젝트B에 의한 처리의 결과로서 오브젝트A에 수도하는 메시지의 사이즈를 나타내는 값, 즉 메소드 「Reply」의 인수「sizeOfResultMsg」가 나타내는 값을 설정한다는 것이다.
그리고, 오브젝트B에 의한 처리의 결과를 데이터영역「RBox」에서 독출하여 오브젝트A에 수도할 때 오브젝트 「mCOOPMailer」는, 먼저 메소드「Receive」의 인수 「rBoxID」에 의해 특정되는 데이터영역「RBox」에서, 당해 데이터영역「RBox」의 속성「resultMsg」및 속성「sizeOfResultMsg」를 독출하고, 속성「resultMsg」이 지시하는 영역에서 속성「sizeOfResultMsg」이 나타내는 사이즈만큼의 데이터를 독출한다. 이 데이터가 오브젝트B에서 오브젝트A에 수도하는 메시지가 된다. 그리고 오브젝트 「mCOOPMailer」는, 이와 같이 독출한 데이터를 메소드「Receive」 의 인수「msg」가 지시하는 영역에 격납한다. 여기서 메소드「Receive」의 인수「msg」가 지시하는 영역의 사이즈는, 메소드「Receive」의 인수「sizeOfResultMsg」에 의해 설정되어 있다.
이상의 처리에 의해, 메소드 「Reply」가 발행된 후에 메소드「Receive」가 발행된 경우도, 메소드 「Reply」가 발행되기 전에 메소드「Receive」가 발행된 경우와 동일하게, 오브젝트B에 의한 처리의 결과가 오브젝트A에 수도되고, 다시 오브젝트A와 오브젝트B가 병행동작하고 있는 것같은 상태가 된다.
2-5-1-2. 예외사상 발생시
mCOOP 메타스페이스에 있어서, 메소드「sendWithRBox」를 사용하였을 때의 메시지패싱에 대하여, 서버측 오브젝트에 의한 처리중에 서버측 오브젝트의 정상적인 처리의 실행을 방해하는 예외사상이 발생한 경우에 대하여, 또 4를 참조하여 설명한다.
도 4는, mCOOP 메타스페이스에서의 메시지패싱의 기본적인 시나리오로서, mCOOP 메타스페이스 상에서 어플리케이션 프로그램으로서 동작하는 오브젝트A와 mCOOP 메타스페이스 상에서 어플리케이션 프로그램으로서 동작하는 오브젝트B와의 사이에서, 메소드「sendWithRBox」를 사용하여 메시지패싱을 행할 때의 시나리오를 나타내고 있다. 즉, 본 예에서는 오브젝트A가 클라이언트측 오브젝트이며, 오브젝트B가 서버측 오브젝트이다. 그리고 본 시나리오에서는, 오브젝트A에 의해 메소드「Receive」가 발행된 후, 오브젝트B에 예외사상이 발생하여 오브젝트B가 동작불능으로 된 것으로 하고 있다.
본 시나리오에 있어서, 도 4에 나타낸 각 스텝중, ST2-1, ST2-2, ST2-3, ST2-4, ST2-5, ST2-6, ST2-7, ST2-8, ST2-9, ST2-10까지의 스텝은, 도 3에 나타낸 스텝 ST1-1, ST1-2, ST1-3, ST1-4, ST1-5, ST1-6, ST1-7, ST1-8, ST1-9, ST1-10과 각각 같으므로 설명을 생략한다.
그리고 본 시나리오에서는, ST2-10까지의 스텝을 거쳐서 오브젝트A가 대기상태이고, 오브젝트B가 처리를 실행하고 있는 상태가 되어 있을 때에, 오브젝트B에 의한 정상적인 처리의 실행을 방해하는 예외사상이 발생한 것으로 하고 있다.
ST2-11에 나타내는 바와 같이, 오브젝트B의 정상적인 처리의 실행을 방해하는 예외사상이 발생하면, 점선 화살표 ST2-12에 나타내는 바와 같이, 오브젝트 「mCOOPFaultHandler」에 처리가 천이하고, ST2-13에 있어서 오브젝트 「mCOOPFaultHandler」에 의해, 소정의 예외처리가 행해진다. 그리고, 오브젝트 「mCOOPFaultHandler」는 점선 화살표 ST2-14에 나타내는 바와 같이, 오브젝트 「mCOOPMailer」에 오브젝트B가 예외사상의 발생에 의해 동작불능으로 된 것을 통지한다.
이때, 오브젝트A는 메소드「Receive」를 이미 발행하여 대기상태로 되어 있다. 그래서, 오브젝트 「mCOOPMailer」는 점선 화살표 ST2-15에 나타내는 바와 같이, 오브젝트A에 대하여 오브젝트B가 예외사상의 발생에 의해 동작불능으로 된 것을 나타내는 에러코드를 메소드「Receive」에 대한 되돌리는 값으로서 오브젝트A에 반환한 위에서, 오브젝트A를 계속하여 실행가능상태에 있는 것같이 한다. 이것에 의해 오브젝트A는 실행가능상태가 되고, 행하여야 할 처리가 남아 있는 경우에는 당해 처리를 계속하여 실행한다.
이상의 처리에 의해, 오브젝트A는 오브젝트B에서 얻어진다고 기대하고 있던 결과메시지를 수취할 수는 없으나, 오브젝트B가 동작불능으로 된 것을 나타내는 에러코드를 되돌리는 값으로서 수취하고, 다시 실행가능상태가 된다. 이때 오브젝트A는 그 상태에 따른 계속된 처리를 행하도록 한다.
그래서, 그 상태에 따른 계속처리로서는, 예를 들면 오브젝트B에 예외사상이 생긴 뜻을 화상표시장치에 표시하여, 사용자에게 리세트를 요구하는 처리나, 혹은 예를 들면 오브젝트B대신이 되는 오브젝트를 네트워크을 거쳐서 외부에서 다운로드하여, 다시 메시지패싱의 처리를 시도하는 처리 등을 들 수 있다.
또한, 도 4의 시나리오에서는 오브젝트B에 있어서의 예외사상의 발생이, 오브젝트A에 의한 메소드「Receive」의 발행보다도 후에 발생한 경우를 예로 들었으나, 오브젝트B에 있어서의 예외사상의 발생이 오브젝트A에 의한 메소드「Receive」의 발행보다도 후에 발생한 경우도 고려된다.
오브젝트B에 있어서의 예외사상의 발생이 오브젝트A에 의한 메소드「Receive」의 발행보다도 먼저 발생한 경우, 오브젝트 「mCOOPMailer」는 데이터영역「RBox」의 속성「status」에, 예외사상의 발생에 의해 오브젝트B가 동작불능상태가 된 것을 나타내는 에러코드를 설정한다.
그리고, 오브젝트A가 메소드「Receive」를 발행한 단계에서, 오브젝트 「mCOOPMailer」는 데이터영역「RBox」의 속성「status」에 설정된 에러코드를 독출하여, 당해 에러코드를 메소드「Receive」에 대한 되돌리는 값으로서 오브젝트A에 반환한 위에서, 오브젝트A를 계속하여 실행가능상태인 것같이 한다. 이것에 의해 상술의 시나리오와 동일하게, 오브젝트A는 실행가능상태가 되고, 행하여야 할 처리가 남아있는 경우에는 당해 처리를 계속하여 실행한다.
이와 같이, 데이터영역「RBox」의 속성「status」에, 예외사상의 발생에 의해 오브젝트B가 동작불능상태가 된 것을 나타내는 에러코드를 설정하여 놓도록 함으로써, 오브젝트A는 메소드「Receive」를 발행하였을 때에 불필요한 대기상태가 되지 않고, 예외사상의 발생에 의해 오브젝트B가 동작불능상태가 된 것을 바로 알 수 있다.
또 이상의 시나리오에서는, 오브젝트B에 예외사상이 발생한 경우를 예로 들었으나, 이들 이외의 경우라도 어떠한 원인에 의해 오브젝트A에 결과메시지가 반환되지 않게된 경우에는, 데이터영역「RBox」의 속성「status」에 에러코드를 설정하도록 하여 놓는다. 이것에 의해 어떠한 원인에 의해 오브젝트A에 결과메시지가 반환되지 않게된 경우에, 오브젝트A에 대하여 에러코드를 반환하여 오브젝트A를 대기상태에서 실행가능상태로 복귀시키는 것이 가능하게 되고, 오브젝트A가 대기상태로 되어 시스템이 정지하게 되는 상황을 회피할 수 있다.
2-5-2. Deligate()를 이용한 메시지패싱
mCOOP 메타스페이스에 있어서, 메소드「Deligate」를 사용하여 행해지는, 서버측 오브젝트에 의한 처리의 요구의 수구와 출구가 다른 구성에 있어서의 메시지패싱에 대하여, 도 5를 참조하여 설명한다.
도 5는, mCOOP 메타스페이스에서의 메시지패싱의 시나리오로서, mCOOP 메타스페이스 상에서 어플리케이션 프로그램으로서 동작하는 오브젝트A, 오브젝트B 및 오브젝트C의 사이에서의 메시지패싱이며, 오브젝트B 가 회답권한을 오브젝트C에 위양한 경우의 시나리오를 나타내고 있다.
즉, 본 예에서는 오브젝트A가 클라이언트측 오브젝트이며, 오브젝트B 및 오브젝트C가 서버측 오브젝트이다. 그리고, 오브젝트A에 처리의 셜과를 반환하는 권한이 오브젝트B에서 오브젝트C에 위양된다. 즉, 오브젝트B는 서버측 오브젝트인 동시에 권한이양원 오브젝트이기도 하며, 또 오브젝트C는 서버측 오브젝트인 동시에 권한이양선 오브젝트이기도 하다.
ST3-1에 나타내는 바와 같이, 오브젝트A가 메소드「sendWithRBox」를 발행하면, 점선 화살표 ST3-2에 나타내는 바와 같이, 오브젝트 「mCOOPMailer」에 의해 메소드「sendWithRBox」에 따른 처리가 행해진다.
여기서, 오브젝트 「mCOOPMailer」는, 먼저 서버측 오브젝트에 의한 처리의 결과가 격납되는 데이터영역「RBox」을 확보하여, 당해 데이터영역「RBox」의 속성「creator」에, 오브젝트A에 대응한 데이터영역「Thread」을 특정하는 식별자를 설정한다.
다음에, 오브젝트 「mCOOPMailer」는 데이터영역「DeliveryBoxA」을 확보하여, 당해 데이터영역「DeliveryBoxA」에, 데이터영역「RBox」을 특정하기 위한 식별자 「rBoxID」와, 메소드「sendWithRBox」에 의해 보내져온 메시지와를 격납한다.
여기서, 데이터영역「DeliveryBoxA」에 데이터영역「RBox」을 특정하기 위한 식별자 「rBoxID」를 격납한다는 것은, 구체적으로는 데이터영역「DeliveryBoxA」의 속성「rBoxID」에, 데이터영역「RBox」을 특정하기 위한 식별자 「rBoxID」의 값을 설정한다는 것이다.
또, 데이터영역「DeliveryBoxA」에 메소드「sendWithRBox」에 의해 보내져온 메시지를 격납한다는 것은, 구체적으로는 데이터영역「DeliveryBoxA」의 속성「msg」에, 메소드「sendWithRBox」의 인수 「msg」의 값을 설정하는 동시에, 데이터영역「DeliveryBoxA」의 속성「sizeOfMsg」에, 메소드「sendWithRBox」의 인수 「sizeOfMsg」의 값을 설정한다는 것이다.
그후, 오브젝트 「mCOOPMailer」는 데이터영역「DeliveryBoxA」에 격납한 데이터, 즉 메소드「sendWithRBox」에 의해 보내져온 메시지와, 확보한 데이터영역「RBox」을 특정하기 위한 식별자 「rBoxID」와를 점선 화살표 ST3-4에 나타내는 바와 같이, 오브젝트B에 배송하고 오브젝트B의 메소드를 기동한다.
이때 오브젝트B의 메소드에는, 메시지만이 수도되고 식별자 「rBoxID」는 오브젝트B에 대응한 데이터영역「Thread」에 격납된다. 환언하면 오브젝트B에 수도되는 식별자 「rBoxID」는 오퍼레이션 시스템의 관리하에 있고, 어플리케이션 프로그램측에서 보았을 때 오브젝트B에 배송되어 온 것은 메시지뿐이다.
또한, 데이터영역「DeliveryBoxA」에 격납된 데이터를 오브젝트 「mCOOPMailer」에서 오브젝트B에 배송하여, 오브젝트B의 메소드를 기동할 때 오브젝트B는, 메소드「sendWithRBox」의 인수「destObjID」에 특정되고, 오브젝트B의 메소드는 메소드「sendWithRBox」의 인수「meth」에 의해 특정되고, 오브젝트B의 메소드는 메소드「sendWithRBox」의 인수「meth」에 의해 특정된다.
이들의 처리가 종료하면, 오브젝트 「mCOOPMailer」는 점선 화살표 ST3-5에 나타내는 바와 같이, 확보한 데이터영역「RBox」을 특정하기 위한 식별자 「rBoxID」를 오브젝트A에 반환하는 동시에, 정상적으로 처리가 완료한 것을 나타내는 값을 메소드「sendWithRBox」에 대한 되돌리는 값으로서 오브젝트A에 반환한 위에서, 오브젝트A를 계속하여 실행가능상태인 것같이 한다. 이것에 의해 오브젝트A는 실행가능상태가 되고, 행하여야 할 처리가 남아 있는 경우에는, 당해 처리를 계속하여 실행한다.
이상의 처리에 의해서, 어플리케이션 프로그램측의 보았을 때에는, 실선 화살표 ST3-6에 나타내는 바와 같이, 오브젝트A에서 오브젝트B에 메시지가 배송되고, 오브젝트A와 오브젝트B와가 병행 동작하고 있는 것같은 상태가 된다.
그후, ST3-7에 나타내는 바와 같이, 오브젝트A가 메소드「Receive」를 발행하면, 점선 화살표 ST3-8에 나타내는 바와 같이, 오브젝트 「mCOOPMailer」에 처리가 천이하고, ST3-8에 있어서 오브젝트 「mCOOPMailer」에 의해 메소드「Receive」에 따른 처리가 행해진다. 구체적으로는, 오브젝트 「mCOOPMailer」는 메소드「Receive」의 인수「rBoxID」에 의해 특정되는 데이터영역「RBox」에 격납되어 있다면, 그 결과를 오브젝트A에 수도하고 서버측 오브젝트에 의한 처리의 결과가 당해 데이터영역「RBox」에 격납되어 있지 않다면, 오브젝트A를 실행가능상태에서 대기상태로 한다.
본 예에서는, 오브젝트A가 메소드「Receive」를 발행한 단계에서는, 서버측 오브젝트가 메소드「Reply」를 발행하고 있지 않으므로, 서버측 오브젝트에 의한 처리의 결과는 아직 데이터영역「RBox」에 격납되어 있지 않다. 따라서 오브젝트 「mCOOPMailer」는 점선 화살표 ST3-10에 나타내는 바와 같이, 서버측 오브젝트 에 의한 처리의 결과가 아직 데이터영역「RBox」에 격납되어 있지 않은 것을 오브젝트A에 알려서, 오브젝트A를 실행가능상태에서 대기상태로 한다.
그후, ST3-11에 나타내는 바와 같이, 오브젝트B가 메소드「Delegate」를 발행하면, 점선 화살표 ST3-12에 나타내는 바와 같이 오브젝트 「mCOOPMailer」에 처리가 천이하고, ST3-13에 있어서 오브젝트 「mCOOPMailer」에 의해 메소드「Deligate」에 따른 처리가 행해진다.
구체적으로는, 오브젝트 「mCOOPMailer」는 먼저 데이터영역「DeliveryBoxA」를 확보한다. 그리고 오브젝트 「mCOOPMailer」는, 오브젝트B에 대응한 데이터영역「Thread」에 격납되어 있는 식별자「rBoxID」를 독출하여, 당해 식별자 「rBoxID」의 값을 데이터영역「DeliveryBoxA」의 속성「rBoxID」에 설정한다.
이때, 오브젝트B에 대응한 데이터영역「Thread」에 격납되어 있던 식별자「rBoxID」는 소거되고, 이것에 의해 오브젝트B는 회답권한을 잃는다. 즉 오브젝트B는 메소드「Delegate」를 발행함으로써 회답권한을 잃고, 당해 회답권한은 오브젝트C에 위양된다. 또한, 오브젝트B는 회답권한을 잃었으므로, 메소드「Reply」를 발행할 수는 없다. 환언하면, 오브젝트B는 메소드「Reply」대신에 메소드「Delegate」를 발행한 것으로 된다.
또, 오브젝트 「mCOOPMailer」는 데이터영역「DeliveryBoxA」에, 메소드「Delegate」에 의해 보내져온 메시지도 격납한다. 여기서 데이터영역「DeliveryBoxA」에 메소드「Delegate」에 의해 보내져온 메시지도 격납한다는 것은, 구체적으로는 데이터영역「DeliveryBoxA」의 속성「msg」에 메소드「Delegate」의 인수「msg」의 값을 설정하는 동시에, 데이터영역「DeliveryBoxA」의 속성「sizeOfMsg」에 메소드「Delegate」의 인수「sizeOfMsg」의 값을 설정한다는 것이다.
그후, 오브젝트 「mCOOPMailer」는 데이터영역「DeliveryBoxA」에 격납한 데이터, 즉 메소드「Delegate」에 의해 보내져온 메시지와, 데이터영역「RBox」을 특정하기 위한 식별자「rBoxID」와를 점선 화살표 ST3-14에 나타내는 바와 같이, 오브젝트C에 배송하고, 오브젝트C의 메소드를 기동한다.
이때 오브젝트C의 메소드에는 메시지만이 수도되고, 식별자「rBoxID」는 오브젝트C에 대응한 데이터영역「Thread」에 격납된다. 환언하면, 오브젝트C에 수도되는 식별자「rBoxID」는 오퍼레이팅 시스템의 관리하에 있고, 어플리케이션 프로그램측에서 보았을 때, 오브젝트B에 배송되어 온 것은 메시지뿐이다.
또한, 데이터영역「DeliveryBoxA」에 격납된 데이터를 오브젝트 「mCOOPMailer」에서 오브젝트C에 배송하여, 오브젝트C의 메소드를 기동할 때 오브젝트C는 메소드「Delegate」의 인수「destObjID」에 의해 특정되고, 오브젝트C의 메소드는 메소드「Delegate」의 인수「meth」에 의해 특정된다.
이들의 처리가 종료하면, 오브젝트 「mCOOPMailer」는 점선 화살표 ST3-15에 나타내는 바와 같이, 정상적으로 처리가 완료한 것을 나타내는 값을 메소드「Delegate」에 대한 되돌리는 값으로서 오브젝트B에 반환한 위에서, 오브젝트B를 계속하여 실행가능상태인 것같이 한다. 이것에 의해 오브젝트B는 실행가능상태가 되고, 행하여야 할 처리가 남아있는 경우에는, 당해 처리를 계속하여 실행한다.
이상의 처리에 의해, 어플리케이션 프로그램측에서 보았을 때에는, 실선 화살표 ST3-16에 나타내는 바와 같이 회답권한이 오브젝트B에서 오브젝트C에 위양되고, 오브젝트B와 오브젝트C와가 병행 동작하고 있는 것같은 상태가 된다.
그후, ST3-17에 나타내는 바와 같이 오브젝트C가 메소드 「Reply」를 발행하면, 점선 화살표 ST3-18에 나타내는 바와 같이 오브젝트 「mCOOPMailer」에 처리가 천이하고, ST3-19에 있어서 오브젝트 「mCOOPMailer」에 의해 메소드 「Reply」에 따른 처리가 행해진다. 구체적으로는 오브젝트 「mCOOPMailer」는, 오브젝트A가 이미 메소드「Receive」를 발행하고 있다면, 오브젝트C에 의한 처리의 결과를 오브젝트A에 수도하고, 오브젝트A가 아직 메소드「Receive」를 발행하고 있지 않다면, 오브젝트C에 의한 처리의 결과를 데이터영역「RBox」에 격납한다.
본 예에서는, 오브젝트C가 메소드 「Reply」를 발행한 단계에서, 이미 오브젝트A가 메소드「Receive」를 발행하고 있다. 따라서 오브젝트 「mCOOPMailer」는, 점선 화살표 ST3-20에 나타내는 바와 같이 오브젝트C에 의한 처리의 결과를 데이터영역 「RBox」에 격납하지 않고, 오브젝트A에 바로 수도한다. 그리고 오브젝트 「mCOOPMailer」는 오브젝트C에 의한 처리의 결과의 오브젝트A에의 수도의 처리가 정상적으로 완료하면, 점선 화살표 ST3-21에 나타내는 바와 같이 당해 처리가 정상적으로 완료한 것을 나타내는 값을 메소드 「Reply」에 대한 되돌리는 값으로서 오브젝트C에 반환한 위에서, 오브젝트C를 계속하여 실행가능상태인 것같이 한다. 이것에 의해 오브젝트C는 실행가능상태가 되고, 행하여여 할 처리가 남아있는 경우에는 당해 처리를 계속하여 실행한다.
이상의 처리에 의해, 어플리케이션 프로그램측에서 보았을 때에는, 실선 화살표 ST3-22에 나타내는 바와 같이 오브젝트C에 의한 처리의 결과가 오브젝트A에 수도되고,오브젝트A와 오브젝트C가 병행 동작하고 있는 것같은 상태가 된다.
또한 도 5의 예에서는, 메소드 「Reply」가 발행되기 전에 메소드 「Receive」가 발행된 경우를 나타내었으나, 메소드 「Reply」가 발행된 경우에는 오브젝트A는 대기상태가 되지 않고, 오브젝트C에 의한 처리의 결과를 바로 수취하게 된다,
즉, 오브젝트C가 메소드 「Reply」를 발행한 후에 오브젝트A가 메소드 「Receive」를 발행한 경우, 오브젝트 「mCOOPMailer」는 오브젝트C가 메소드 「Reply」를 발행한 단계에서는, 오브젝트C에 의한 처리의 결과를 데이터영역 「RBox」에 격납하여 놓고, 오브젝트A가 메소드 「Receive」를 발행한 단계에서 바로 오브젝트C에 의한 처리의 결과를 데이터영역 「RBox」에서 독출하여 오브젝트A에 수도한다,
또한, 오브젝트C에 의한 처리의 결과를 데이터영역 「RBox」에 격납한다는 것은, 구체적으로는 데이터영역 「RBox」의 속성「ready」에 오브젝트C에 의한 처리의 결과가 반환하여 오고 있는 것을 나타내는 값을 설정하고, 또한 데이터영역 「RBox」의 속성「resultMsg」에, 오브젝트C에 의한 처리의 결과로서 오브젝트A에 수도하는 메시지가 격납된 영역에의 포인터, 즉 메소드 「Reply」의 인수「resultMsg」로 표시되는 포인터를 설정하고, 또한 데이터영역 「RBox」의 속성「sizeOfResultMsg」에, 오브젝트C에 의한 처리의 결과로서 오브젝트A에 수도하는 메시지의 사이즈를 나타내는 값, 즉 메소드 「Reply」의 인수 「sizeOfResultMsg」가 나타내는 값을 설정한다는 것이다.
그리고, 오브젝트C에 의한 처리의 결과를 데이터영역 「RBox」에서 독출하여 오브젝트A에 수도할 때, 오브젝트 「mCOOPMailer」는 먼저 메소드「Receive」의 인수「rBoxID」에 의해 특정되는 데이터영역 「RBox」에서 속성「resultMsg」및 속성「sizeOfResultMsg」을 독출하고, 속성「resultMsg」이 지시하는 영역에서 속성「sizeOfResultMsg」이 나타내는 사이즈만큼의 데이터를 독출한다. 이 데이터 가 오브젝트C에서 오브젝트A에 수도하는 메시지가 된다. 그리고 오브젝트 「mCOOPMailer」는, 이와 같이 독출한 데이터를 메소드「Receive」의 인수「msg」가 지시하는 영역에 격납한다. 여기서 메소드「Receive」의 인수「msg」가 지시하는 영역의 사이즈는, 메소드「Receive」의 인수「sizeOfMsg」에 의해 설정되어 있다.
이상의 처리에 의해 메소드「Reply」가 발행된 후에 메소드「Receive」가 발행된 경우도, 메소드「Reply」가 발행되기 전에 메소드「Receive」가 발행된 경우와 동일하게 오브젝트C에 의한 처리의 결과가 오브젝트A에 수도되고, 오브젝트A와 오브젝트C가 병행 동작하고 있는 상태가 된다.
이상과 같이, 오브젝트의 기술에 사용하는 API로서 메소드「Delegate」를 도입함으로써, 서버측 오브젝트가 복수의 오브젝트에서 구성되고 있는 경우는 그들의 오브젝트 사이에서 회답권한의 위양을 행하는 것이 가능하게 된다. 환언하면, 메소드「Delegate」를 도입함으로써 서버측 오브젝트가 복수의 오브젝트에 의해 구성되고, 또한 처리의 요구의 수구와 출구가 같지는 않은 경우라도, 메시지패싱을 적절히 행하는 것이 가능하게 된다.
더구나, 메소드「Delegate」를 도입한 경우에는, 서버측 오브젝트를 구성하는 오브젝트 사이에서 회답권한의 위양을 행할 때에, 어플리케이션 프로그램측은 데이터영역「RBox」 및 당해 데이터영역「RBox」을 특정하는 식별자「RBoxID」를 의식할 필요가 없다. 따라서, 메소드「Delegate」를 도입함으로써 어플리케이션 프로그램의 개발이 용이하게 된다.
또한, 메소드「Delegate」에 의해 회답권한이 위양된 오브젝트(상기의 예에서는 오브젝트C)가 예외사상의 발생 등에 의해 동작불능상태로 되어서 결과를 구할 수 없게 되었을 경우에는, 도 4에 나타낸 시나리오와 동일한 시나리오에 의해 예외처리가 행해진다.
즉, 도 5에 도시한 예에 있어서 메소드「Delegate」에 의해 회답권한이 위양된 오브젝트C의 실행 중에, 당해 오브젝트C가 예외사상의 발생 등에 의해 동작불능상태로 되어서 결과를 구할 수 없게 된 경우에는, 오브젝트「mCOOPFaultHandler」에 처리가 천이하고, 오브젝트「mCOOPFaultHandler」에 의해 소정의 예외처리가 행해지고, 오브젝트 「mCOOPFaultHandler」에서 오브젝트 「mCOOPMailer」에 오브젝트C가 예외사상의 발생에 의해 동작불능으로 된 것이 통지된다.
이때, 오브젝트A가 메소드「Receive」를 이미 발행하여 대기상태가 되어 있으면, 오브젝트「mCOOPMailer」는 오브젝트A에 대하여 오브젝트C가 에외사상의 발생에 의해 동작불능상태로 된 것을 나타내는 에러코드를 메소드「Receive」에 대하여 되돌리는 값으로서 오브젝트A에 반환한 위에서, 오브젝트A를 계속하여 실행가능상태인 것같이 한다. 이것에 의해 오브젝트A는 실행가능상태로 되고, 행하여야 할 처리가 남아 있는 경우에는 당해 처리를 계속하여 실행한다.
또, 오브젝트A가 메소드「Receive」를 발행하기 전에 오브젝트C에 예외사상이 발생한 경우에는, 오브젝트「mCOOPMailer」는 데이터영역「RBox」의 속성「status」에, 예외사상의 발생에 의해 오브젝트C가 동작불능상태로 된 것을 나타내는 에러코드를 설정한다. 그리고, 오브젝트A가 메소드「Receive」를 발행한 단계에서 오브젝트「mCOOPMailer」는, 데이터영역「RBox」의 속성「status」에 설정된 에러코드를 독출하여 당해 에러코드를 메소드「Receive」에 대한 되돌리는 값으로서 오브젝트A에 반환한 위에서, 오브젝트A를 계속하여 실행가능상태에 있도록 한다. 이것에 의해 오브젝트A는 실행가능상태로 되고, 행하여야 할 처리가 남아 있는 경우에는 당해 처리를 계속하여 실행한다.
이상과 같은 처리를 실행함으로써, 메소드「Delegate」에 의해 회답권한이 위양된 오브젝트C가 어떠한 원인에 의해 오브젝트A에 결과메시지를 반환할 수 없게 되었어도, 오브젝트A를 대기상태에서 실행가능상태로 복귀시키는 것이 가능하게 되고, 오브젝트A가 대기상태로 되어서 시스템이 정지하게 되는 상황을 회피할 수 있다.
2-5-3. SendWithContinuation()을 이용한 메시지패싱
mDrive 메타스페이스에 있어서, 메소드「SendWithContinuation」을 사용하였을 때의 메소드패싱에 대해서 도 6을 참조하여 설명한다.
도 6은, mDrive 메타스페이스의 메지시패싱의 기본적인 시나리오로서, mDrive 메타스페이스 상에서 디바이스 드라이버로서 동작하는 오브젝트A와, mDrive 메타스페이스 상에서 디바이스 드라이버로서 동작하는 오브젝트B와의 사이에서 메시지패싱을 행할 때의 시나리오를 나타내고 있다. 즉, 본 예에서는 오브젝트A가 클라이언트측 오브젝트이고, 오브젝트B가 서버측 오브젝트이다.
또한 도 6에서는, 메소드「SendWithContinuation」을 발행하는 오브젝트A의 메소드의 것을 「A::A1」로서 나타내고 있다. 또, 메소드「SendWithContinuation」에 의해 기동되는 동시에, 메소드「Kick」을 발행하는 오브젝트B의 메소드의 것을 「B::B1」로서 나타내고 있다. 또 메소드「Kick」에 의해 기동되는 오브젝트A의 메소드, 즉 계속메소드의 것을 「A::A2」로서 나타내고 있다.
ST4-1에 나타내는 바와 같이, 오브젝트A가 메소드「A::A1」 중에서 메소드「SendWithContinuation」을 발행하면, 점선 화살표 ST4-2에 나타내는 바와 같이 오브젝트「mDriveMailer」에 처리가 천이하고, ST4-3에 있어서 오브젝트「mDriveMailer」에 의해 메소드「SendWithContinuation」에 따른 처리가 행해진다.
여기서, 오브젝트「mDriveMailer」는, 먼저 데이터영역「Continuation」을 확보하고, 당해 데이터영역「Continuation」에 계속메소드에 대한 정보를 격납한다. 여기서, 데이터영역「Continuation」에 계속메소드에 대한 정보를 격납한다는 것은, 구체적으로는 데이터영역「Continuation」의 속성「creator」에 오브젝트A에 데응한 데이터영역「Thread」를 특정하는 식별자의 값을 설정하는 동시에, 데이터영역「Continuation」의 속성「meth」에 메소드「SendWithContinuation」의 인수「contMeth」의 값을 설정한다는 것이다.
또, 오브젝트「mDriveMailer」는 데이터영역「DeliveryBoxB」을 확보하고, 당해 데이터영역「DeliveryBoxB」에 데이터영역「Continuation」을 특정하기 위한 식별자「contID」와, 메소드「SendWithContinuation」에 의해 보내져 온 메시지와를 격납한다. 여기서, 데이터영역「DeliveryBoxB」에 데이터영역「Continuation」을 특정하기 위한 식별자「contID」를 격납한다는 것은, 구체적으로는 데이터영역「DeliveryBoxB」의 속성「contID」에 데이터영역「Continuation」을 특정하기 위한 식별자「contID」의 값을 설정한다는 것이다. 또, 데이터영역「DeliveryBoxB」에 메소드「SendWithContinuation」에 의해 보내져 온 메시지를 격납한다는 것은, 구체적으로는 데이터영역「DeliveryBoxB」의 속성「msg」에 메소드「SendWithContinuation」의 인수「msg」의 값을 설정하는 동시에, 데이터영역「DeliveryBoxB」의 속성「sizeOfMsg」에 메소드「SendWithContinuation」의 인수「sizeOfMsg」의 값을 설정한다는 것이다.
그 후, 오브젝트「mDriveMailer」는 데이터영역「DeliveryBoxB」에 격납한 데이터, 즉 메소드「SendWithContinuation」에 의해 보내져 온 메시지와, 메소드「SendWithContinuation」에 의해 보내져 온 메시지와, 데이터영역「Continuation」을 특정하기 위한 식별자「contID」와를 점선 화살표 ST4-4에 나타내는 것같이 오브젝트B에 배송하고, 오브젝트B의 메소드「B:B:B1」를 기동한다.
또한, 데이터영역「DeliveryBoxB」에 격납된 데이터를 오브젝트「mDriveMailer」에서 오브젝트B에 배송하여, 오브젝트B의 메소드「B:B:B1」를 기동할 때, 오브젝트B는 메소드「SendWithContinuation」의 인수「destObjID」에 의해 특정되고, 오브젝트B의 메소드「B:B:B1」는 메소드「SendWithContinuation」의 인수「meth」에 의해 특정된다.
이들의 처리가 종료하면, 오브젝트「mDriveMailer」는 점선 화살표 ST4-5에 나타내는 바와 같이, 정상적5으로 처리가 완료한 것을 나타내는 값을 메소드「SendWithContinuation」에 대한 되돌리는 값으로서 오브젝트A에 반환한 위에서, 오브젝트A를 계속하여 실행가능상태에 있도록 한다. 이것에 의해 오브젝트A는 실행가능상태로 되고, 행하여야 할 처리가 남아있는 경우에는 당헤 처리를 계속하여 실행한다.
이상의 처리에 의해, 디바이스드라이브측에서 보았을 때에는 실선 화살표 ST4-6에 나타내는 바와 같이 오브젝트A에서 오브젝트B에 메시지가 배송되고, 오브젝트A와 오브젝트B와가 병행 동작하고 있는 상태가 된다.
그 후 오브젝트B는, 메소드「B:B:B1」을 실행하고, 오브젝트A에서 요구되고 있던 처리가 완료하면, ST4-7에 나타내는 바와 같이 메소드「Kick」를 발행된다. 메소드「Kick」가 발행되면, 점선 화살표 ST4-8에 나타내는 바와 같이 오브젝트「mDriveMailer」에 처리가 천이하고, ST4-9에 있어서 오브젝트「mDriveMailer」에 의해 메소드「Kick」에 따른 처리가 행해진다.
구체적으로는, 오브젝트「mDriveMailer」는 먼저 메소드「Kick」의 인수「contID」에 의거하여 데이터영역「Continuation」을 특정하고, 당해 데이터영역「Continuation」에 격납되어 있는 정보를 독출한다.
이때, 데이터영역「Continuation」에는 속성「creator」으로서, 오브젝트A에 대응한 데이터영역「Thread」을 특정하는 식별자의 값이 설정되어 있다. 이것에 의해 오브젝트「mDriveMailer」는, 메소드「Kick」에 따라서 기동하여야 할 오브젝트로서 오브젝트A를 특정한다. 또, 데이터영역「Continuation」에는 속성「meth」으로서 메소드「SendWithContinuation」의 인수「contMeth」의 값, 즉 계속메소드「A::A2」를 특정하는 값이 설정되어 있다. 이것에 의해 오브젝트「mDriveMailer」는 메소드「Kick」에 따라서 기동해야 할 계속메소드로서 메소드「A::A2」를 특정한다.
그리고 오브젝트「mDriveMailer」는, 점선 화살표 ST4-10에 나타내는 바와 같이 데이터영역「Continuation」에 격납되어 있던 정보에 의해 특정된 오브젝트의 메소드, 즉 오브젝트A의 메소드「A::A2」를 계속메소드로서 기동한다.
또한 계속 메소드「A::A2」를 기동할 때, 당해 계속메소드「A::A2」에 수도되는 메시지는, 메소드「Kick」의 인수「msg」「sizeOfMsg」에 의해 특정된다.
그리고, 오브젝트「mDriveMailer」는 오브젝트A의 계속메소드「A::A2」의 기동이 정상적으로 완료하면, 점선 화살표 ST4-11에 나타내는 바와 같이 메소드「Kick」의 처리가 정상적으로 완료한 것을 나태는 값을 메소드「Kick」에 대한 되돌리는 값으로서 오브젝트B에 반환한 위에서, 오브젝트B를 계속하여 실행가능상태에 있도록 한다. 이것에 의해 오브젝트B는 실행가능상태로 되고, 행해야 할 처리가 남아있는 경우에는 당해 처리를 계속하여 실행한다.
이상의 처리에 의해, 디바이스 드라이버측에서 보았을 때에는, 실선 화살표 ST4-12에 나타내는 바와 같이 오브젝트B에 의해 오브젝트A의 계속메소드 「A::A2」가 기동되고, 다시 오브젝트A와 오브젝트B와가 병행 동작하고 있는 상태로 된다.
2-5-4. 다른 메타스페이스 사이에서의 메시지 패싱
mCOOP 메타스페이스와 mDrive 메타스페이스와의 사이에서, 메소드「Delegate」를 사용하여 행하여지는 메시지 패싱에 대해서 도 7을 참조하여 설명한다.
도 7은, 다른 메타스페이스 사이에서의 메시지패싱의 시나리오로서, mCOOP 메타스페이스 상에서 어플리케이션 프로그램으로서 동작하는 오브젝트A와, mCOOP 메타스페이스 상에서 어플리케이션 프로그램으로써 동작하는 오브젝트B와, mDrive메타스페이스 상에서 디바이스 드라이버로서 동작하는 오브젝트C와의 사이에서의 메시지패싱이며, 오브젝트B가 회답권한을 오브젝트C 위양한 경우의 시나리오를 나타내고 있다.
즉, 본예에서는 오브젝트A가 클라이언트측 오브젝트이고, 오브젝트B 및 오브젝트C가 서버측 오브젝트이다. 그리고 오브젝트A에 처리의 결과를 반환하는 권한이 오브젝트B에서 오브젝트C에 위양된다. 즉, 오브젝트B는 서버측 오브젝트인 동시에 권한위양원 오브젝트이기도 하고, 또 오브젝트C는 서버측 오브젝트인 동시에 권한위양선 오브젝트이기도 있다.
본 시나리오에 있어서, 도 7에 나타낸 각 스텝중, ST5-1, ST5-2, ST5-3, ST5-4, ST5-5, ST5-6, ST5-7, ST5-8, ST5-9, ST5-10까지의 스텝은, 도 5에 나타낸 스텝 ST3-1, ST3-2, ST3-3, ST3-4, ST3-5, ST3-6, ST3-7, ST3-8, ST3-9, ST3-10과 각각 동일하므로 설명을 생략한다.
그리고 본 시나리오에서는, ST5-10까지의 스텝을 거쳐서 오브젝트A가 대기상태이고, 오브젝트B가 처리를 실행하고 있는 상태로 되어있을 때에 오브젝트B가 회답권한을 위양하기 위해 메소드「Delegate」를 발행한 것으로 하고 있다.
ST5-11에 나타내는 바와 같이 오브젝트B가 메소드「Delegate」를 발행하면, 점선 화살표 ST5-12에 나타내는 바와 같이 오브젝트「mCOOPMailer」에 처리가 천이하고, ST5-13에 있어서, 오브젝트「mCOOPMailer」에 의해 메소드「Delegate」에 따른 처리가 행하여진다.
이때 오브젝트「mCOOPMailer」는, 권한위양선 오브젝트가 mCOOP 메타스페이스 상에서 동작하는 오브젝트인지 아닌지를 판단한다. 그리고 권한위양선 오브젝트가 mCOOP 메타스페이스 상에서 동작하는 오브젝트인 경우에는, 도 5에 나타내는 바와 같이 시나리오에 따라서 처리가 진행된다. 그렇지만 본 예에서는, 권한위양선 오브젝트가 mCOOP 메타스페이스 상에서 동작하는 오브젝트는 아니고, mDrive 메타스페이스 상에서 동작하는 오브젝트C이므로, 점선 화살표 ST5-14에 나타내는 바와 같이 오브젝트「mCOOPMailer」 에서 오브젝트「mDriveMailer」에 처리가 천이한다.
또한, 오브젝트「mCOOPMailer」에서 오브젝트「mDriveMailer」에의 퍼리의 천이는 마이크로커넬을 거쳐서 행하여진다. 구체적으로는 먼저 오브젝트「mCOOPMailer」 는 메소드「Delegate」의 인수 「destObjID」에 의거해서 권한이양선 메소드가 동작하는 메타스페이스가 mDrive 메타스페이스라고 판단한다. 그후 오브젝트「mCOOPMailer」는 마이크로커넬의 기능을 사용해서, mDrive 메타스페이스 상에서 동작하는 오브젝트에 대한 메시지패싱을 담당하는 메타오브젝트인 오브젝트「mDriveMailer」에 처리를 의뢰한다. 이것에 의해, 오브젝트「mCOOPMailer」에서 오브젝트「mDriveMailer」에 처리가 천이하게 된다.
이상과 같이하여, 오브젝트「mCOOPMailer」에서 오브젝트「mDriveMailer」에 처리가 천이하면, ST5-15에 있어서 오브젝트「mDriveMailer」에 의해 메소드「Delegate」에 따른 처리가 행하여진다.
구체적으로는, 오브젝트「mDriveMailer」는 먼저 데이터영역「DeliveryBoxB」을 확보한다. 그리고 오브젝트「mDriveMailer」는, 오브젝트B에 대응한 데이터영역「Thread」에 격납되어 있는 식별자「rBoxID」를 독출하고, 당해 식별자「rBoxID」를 데이터영역「DeliverBoxB」의 속성「contID」에 설정한다.
이때, 오브젝트B에 대응한 데이터영역「Thread」에 격납되어 있던 식별자「rBoxID」는 소거되고, 이것에 의해 오브젝트B는 회답권한을 잃는다. 즉, 오브젝트B는 메소드「Delegate」를 발행함으로써 회답권한을 잃고, 당해 회답권한은 오브젝트C에 위양된다. 또한, 오브젝트B는 회답권한을 잃었으므로 메소드「Reply」를 발행하는 것은 할 수 없다. 환원하면 오브젝트B는 메소드「Reply」대신에 메소드「Delegate」를 발행한 것으로 된다.
또 오브젝트「mDriveMailer」는, 데이터영역「DeliveryBoxB」에 메소드「Delegate」에 의해 보내져 온 메시지도 격납한다. 여기서 데이터영역「DeliveryBoxB」에 메소드「Delegate」에 의해 보내져 온 메시지를 격납한다는 것은, 구체적으로는 데이터영역「DeliverBoxB」의 속성「msg」에, 메소드「Delegate」의 인수「msg」의 값을 설정하는 동시에, 데이터영역「DeliverBoxB」의 속성 「sizeOfMsg」에 메소드 「Delegate」의 인수「sizeOfMsg」 값을 설정한다는 것이다.
그 후 오브젝트「mDriveMailer」는, 데이터영역「DeliveryBox」에 격납한 데이터, 즉 메소드「Delegate」에 의해 보내져 온 메시지와 데이터영역 「RBox」을 특정하기 위한 식별자「rBoxID」와를, 점선 화살표 ST5-16에 나타내는 것과 같이 오브젝트C에 배송하고, 오브젝트C의 메소드를 기동한다.
이때, 오브젝트C의 메소드에는 메시지만이 수도되고, 식별자 「rBoxID」는 오브젝트C에 대응한 데이터영역 「Thread」에 격납된다. 환언하면, 오브젝트C에 수도되는 식별자「rBoxID」는 오퍼레이팅 시스템의 관리 하에 있고, 어플레케이션 프로그램측에서 보았을 때, 오브젝트C에 배송되어 온 것은 메소드뿐이다.
또한, 데이터영역「DeliveryBoxB」에 격납된 데이터를 오브젝트「mDriveMailer」에서 오브젝트C로 배송하고, 오브젝트C의 메소드를 기동할 때, 오브젝트C는 메소드「Delegate」의 인수「destObjID」에 의해 특정되고, 오브젝트C의 메소드는, 메소드「Delegate」의 인수「meth」에 의해 특정된다.
이들의 처리가 종료하면, 오브젝트 「mDriveMailer」는 점선 화살표 ST5-17, ST5-18에 나타내는 바와 같이 오브젝트「mCOOPMailer」를 거쳐서 정상적으로 처리가 완료한 것을 나타내는 값을 메소드 「Delegate」에 대한 되돌리는 값으로서 오브젝트B에 반환한 위에서, 오브젝트B를 계속하여 실행가능상태에 있도록 한다. 이것에 의해 오브젝트B는 실행가능상태로 되고, 행해야 할 처리가 남아 있는 경우에는 당해 처리를 계속하여 실행한다.
이상의 처리에 의해, 어플리케이션 프로그램측에서 보았을 때에는, 실선 화살표 ST5-19에 나타내는 바와 같이 회답권한이 오브젝트B에서 오브젝트C로 위양되고, 오브젝트B와 오브젝트C와가 병행 동작하고 있는 상태가 된다.
그후, 오브젝트C는 오브젝트A에서 요구되고 있는 처리가 완료하면 ST5-20에 나타내는 바와 같이 메소드「Kick」를 발행한다. 메소드「Kick」가 발행되면 점선 화살표 ST5-21에 나타내는 바와 같이 오브젝트「mDriveMailer」에 처리가 천이하고, ST5-22에 있어서 오브젝트 「mDriveMailer」에 의해 메소드 「Kick」에 따른 처리가 행해진다.
이때, 오브젝트「mDriveMailer」는 오브젝트C에 대응한 데이터영역 「Thread」에 격납되어 있는 정보를 독출한다. 그리고 데이터영역 「Thread」에 데이터 영역 「Continuation」을 특정하는 식별자「contID」가 격납되어 있는 경우에는, 도 6에 나타낸 바와 같은 시나리오에 따라서 계속메소드를 기동하는 처리가 진행된다. 그렇지만, 본예에서는 데이터영역「Thread」에 데이터영역 「Continuation」을 특정하는 식별자「contID」는 아니고, 데이터영역「RBox」을 특정하는 식별자「rBoxID」가 격납되어 있다.
그리고, 이와 같이 데이터영역「Thread」에 데이터영역「RBox」을 특정하는 식별자「rBoxID」가 격납되어 있는 경우에는, 오브젝트 「mDriveMailer」에 의해 계속메소드를 기동하는 것은 아니고, 점전 화살표 ST5-23에 나타내는 바와 같이 오브젝트 「mDriveMailer」에서 오브젝트「mCOOPMailer」에 처리가 천이한다.
또한, 오브젝트 「mDriveMailer」에서 오브젝트「mCOOPMailer」에의 처리의 천이는, 마이크로커넬을 거쳐서 행해진다.
구체적으로는, 먼저 오브젝트「mDriveMailer」에 의해 오브젝트C에 대응한 데이터영역「Thread」에 격납되어 있는 식별자가 mDrive 메타스페이스에서 사용되는 데이터영역「Continuation」을 특정하는 식별자「ContID」인지 아닌지가 판단된다. 본 예에서는 오브젝트C에 대응한 데이터영역「Thread」에 격납되어 있는 식별자가 데이터영역「Continuation」을 특정하는 식별자「ContID」는 아니라고 판단된다.
여기서 각 오브젝트에 대응한 데이터영역「Thread」에는, 메시지패싱의 상대편 오브젝트가 존재하고 있는 메타스페이스를 판별하기 위해 정보도 격납되어 있다. 그래서 오브젝트C에 대응한 데이터영역「Thread」에 격납되어 있는 식별자가 데이터영역「Continuation」을 특정하는 식별자「ContID」가 아니라고 판단된다면, 다시 오브젝트C의 데이터영역「Thread」을 조사하고, 메세지패싱의 상대편 오브젝트가 존재하고 있는 메타스페이스를 판별한다. 이 결과, 본 예의 경우, 메시지패싱의 상태편 오브젝트가 존재하고 있는 메타스페이스가 mCOOP 메타스페이스라고 판별된다.
그래서, 오브젝트「mDriveMailer」는 마이크로커넬의 기능을 사용하여, mcoop 메타스페이스 상에서 동작하는 오브젝트에 대한 메시지패싱을 담당하는 메타오브젝트인 오브젝트「mCOOPMailer」에 처리를 의뢰한다. 이것에 의해, 오브젝트 「mDriveMailer」에서 오브젝트「mCOOPMailer」에 처리가 천이하게 된다.
이상과 같이하여, 오브젝트「mDriveMailer」에서 오브젝트「mCOOPMailer」에 처리가 천이하면, ST5-24에 있어서 오브젝트「mCOOPMailer」에 의해 메소드「Kick」에 따른 처리가 행해진다.
구체적으로는, 오브젝트「mCOOPMailer」는 오브젝트A가 이미 메소드「Receive」를 발행하고 있으면 오브젝트C에 의해 처리의 결과를 오브젝트A에 수도하고, 오브젝트A가 아직 메소드「Receive」를 발행하고 있지 않으면, 오브젝트C에 의한 처리의 결과를 데이터영역「RBox」에 격납한다.
본 예에서는, 오브젝트C가 메소드「Kick」를 발행한 단계에서, 이미 오브젝트A가 메소드「Receive」를 발행하고 있다. 따라서 오브젝트「mCOOPMailer」는 점선 화살표 ST5-25에 나타내는 바와 같이, 오브젝트C에 의한 처리의 결과를 데이터영역「RBox」에 격납하지 않고, 오브젝트A에 바로 수도한다. 그리고 오브젝트 「mCOOPMailer」는 오브젝트C에 의한 처리의 결과의 오브젝트A에의 수도처리가 정상적으로 완료하면, 점선 화살표 ST5-26,ST5-27에 나타내는 바와 같이 오브젝트「mDriveMailer」를 거쳐서 정상적으로 처리가 완료한 것을 나타내는 값을 메소드「Kick」에 대한 되돌리는 값으로서 오브젝트C에 반환한 위에서, 오브젝트C를 계속하여 실행가능상태에 있도록 한다. 이것에 의해 오브젝트C는 실행가능상태가 되고, 행해야 할 처리가 남아 있는 경우에는 당해 처리를 계속하여 실행한다.
이상의 처리에 의해, 어플리케이션 프로그램측에서 보았을 때에는, 실선 화살표 ST5-28에 나타내는 바와 같이 오브젝트C에 의한 처리의 결과가 오브젝트A에 수도되고, 오브젝트A와 오브젝트C와가 병행 동작하고 있는 상태가 된다.
또한, 도 7의 예에서는 메소드「Kick」가 발행되기 전에 메소드「Receive」가 발행된 경우를 나타내었지만, 메소드「Kick」가 발행된 후에 메소드「Receive」가 발행되는 경우도 있을 수 있다. 메소드「Kick」가 발행된 후에 메소드「Receive」가 발행된 경우에는, 오브젝트A는 대기상태로 되지 않고, 오브젝트C에 의한 처리의 결과를 바로 수취하게 된다.
즉, 오브젝트C가 메소드「Kick」를 발행한 후에 오브젝트A가 메소드「Receive」를 발행한 경우, 오브젝트「mCOOPMailer」는 오브젝트C가 메소드「Kick」를 발행한 단계에서는, 오브젝트C에 의한 처리의 결과를 데이터영역「RBox」에 격납하여 놓고, 오브젝트A가 메소드「Receive」를 발행한 단계에서 바로 오브젝트C에 의한 처리의 결과를 데이터영역「RBox」에서 독출하여 오브젝트A에 수도한다.
또한, 오브젝트C에 의한 처리의 결과를 데이터영역「RBox」에 격납한다는 것은, 구체적으로는 데이터영역「RBox」의 속성「ready」에 오브젝트C에 의한 처리에 결과가 반환되어 오고 있는 것을 나타내는 값을 설정하고, 또한 데이터영역「RBox」의 속성 「resultMsg」에 오브젝트C에 의한 처리의 결과로서 오브젝트A에 수도하는 메시지가 격납된 영역에의 포인터, 즉 메소드「Kick」의 인수「msg」로 나타내는 포인터를 설정하고, 또한 데이터영역「RBox」의 속성「sizeOfResult」에 오브젝트C에 의한 처리의 결과로서 오브젝트A에 수도하는 메시지의 사이즈를 나타내는 값, 즉 메소드「Kick」의 인수「sizeOfMsg」가 나타내는 값을 설정한다는 것이다.
그리고, 오브젝트C에 의한 처리의 결과를 데이터영역「RBox」에서 독출하여 오브젝트A에 수도할 때, 오브젝트「mCOOPMailer」는 먼저 메소드「Receive」의 인수「rBoxID」에 의해 특정되는 데이터영역「RBox」에서, 속성「resultMsg」 및 속성 「sizeOfResultMsg」을 독출하고, 속성「sizeOfResultMsg」이 지시하는 영역에서 속성 「sizeOfResultMsg」가 나타내는 사이즈만큼의 데이터를 독출한다. 이 데이터가 오브젝트C에서 오브젝트A에 수도하는 메시지가 된다. 그리고 오브젝트「mCOOPMailer」는 이와 같이 독출한 데이터를 메소드「Receive」의 인수「msg」가 지시하는 영역의 사이즈는, 메소드「Receive」의 인수「sizeOfMsg」에 의해 설정되어 있다.
이상의 처리에 의해, 메소드「Kick」가 발행된 후에 메소드「Receive」가 발행된 경우도, 메소드「Kick」가 발행되기 전에 메소드「Receive」가 발행된 경우와 동일하게, 오브젝트C에 의한 처리의 결과가 오브젝트A에 수도되고, 오브젝트A와 오브젝트C와가 병행 동작하고 있는 상태로 된다.
또한, 메소드「Delegate」에 의해 회답권한이 위양된 오브젝트(상기의 예에서는 오브젝트C)가 예외 사상의 발생 등에 의해 동작불능상태로 되어서, 결과를 구할 수 없게 된 경우에는 도 4에 나타낸 시나리오와 거의 동일한 시나리오에 의해 예외처리가 행해진다.
즉, 도 7에 나타낸 예에서는, 메소드「Delegate」에 의해 회답권한이 위양된 오브젝트C의 실행 중에, 당해 오브젝트C가 예외사상의 발생 등에 의해 동작불능상태가 되고, 결과를 구할 수 없는 경우에는 오브젝트「mDriveFaultHandler」에 처리가 천이하고, 오브젝트「mDriveFaultHandler」에 의해 소저의 예외처리가 행해지고, 오브젝트「mDriveFaultHandler」에서 오브젝트「mCOOPMailer」에 오브젝트「mDriveMailer」를 거쳐서 오브젝트C가 예외사상의 발생에 의해 동작불능으로 된 것이 통지된다.
이때, 오브젝트A가 메소드「Receive」를 이미 발행하여 대기상태로 되어 있으면, 오브젝트「mCOOPMailer」는 오브젝트A에 대하여 오브젝트C가 예외사상의 발생에 의해 동작불능으로 된 것을 나타내는 에러코드를, 메소드「Receive」에 대한 되돌리는 값으로서 오브젝트A에 반환한 위에서, 오브젝트A를 계속하여 실행가능상태인 것같이 한다. 이것에 의해 오브젝트A는 실행가능상태로 되고, 행해야 할 처리가 남아 있는 경우에는 당해 처리를 계속하여 실행한다.
또, 오브젝트A가 메소드「Receive」를 발행하기 보다도 먼저 오브젝트C에 예외사상이 발행한 경우에는, 오브젝트「mCOOPMailer」는 데이터영역「RBox」의 속성「status」에 예외사상의 발생에 의해 오브젝트C가 동작불능상태로 된 것을 나타내는 에러코드를 설정한다. 그리고 오브젝트A가 메소드「Receive」를 발행한 단계에서 오브젝트「mCOOPMailer」는 데이터영역「RBox」의 속성「status」에 설절된 에러코드를 독출하여, 당해 에러코드를 메소드「Receive」로 되돌리는 값으로서 오브젝트A에 반환한 위에서 오브젝트A를 계속하여 실행가능상태에 있도록 한다. 이것에 의해 오브젝트A는 실행가능상태로 되고, 행하여야야 할 처리가 남아 있는 경우에는 당해 처리를 계속하여 실행한다.
이상과 같은 처리를 행함으로써, 메소드「Delegate」에 의해 회답권한이 위양된 오브젝트C가 어떠한 원인에 의해 오브젝A에 결과메시지를 반환하지 않게 되었어도, 오브젝트 A를 대기상태에서 실행가능상태로 복귀시키는 것이 가능하게 되고, 오브젝트A가 대기상태로 되어서 시스템이 정지하게 되는 상황을 회피할 수 있다.
2-6. 기타 예
상기 실시의 형태에서는 서버측 오브젝트에 의한 처리의 요구의 수구와 출구가 다른 구성에 있어서의 메지지패싱을 실현하기 위해 서버측 오브젝트 내에 있어서 회답권한의 위양을 행하는 메소드「Delegate」 를 이용하였다. 그러나 메소드「Delegate」와 같이 회답권한의 위양을 행하는 메소드를 이용하지 않아도 서버측 오브젝트에 의한 처리의 요구의 수구와 출구가 다른 구성에 있어서의 메시지패싱을 실현하는 것은 가능하다.
이하, 메소드「Delegate」를 이용하지 않고, 서버측 오브젝트에 의한 처리의 요구의 수구와 출구가 다른 구성에 있어서의 메시지패싱을 실현하는 방법의 일예로서 어떤 퓨처를 경유하여 클라이언트 측 오브젝트에 결과를 배송하면 좋은지를 식별하기 위한 식별자를 설치하여 메지지패싱을 행하는 방법에 대해서 설명한다.
2-6-1. mCOOP메타스페이스의 API
본예에서는 mCOOP메타스페이스 상에서 동작하는 오브젝트의 기술에 사용되는 API로서 하기의 메소드「Send」 및 메소드「GetReplyID」를 도입하는 동시에 상술한 메소드「Reply」에 대신하여 하기의 메소드「ReplyWithReplyID」를 도입한다. 또한, 여기서는 API를 OMG IDL에서의 기술방법에 준하여 나타내고 있다.
sError Send(in OID destObjID, in Selector meth, in any msg, in size_t sizeOfMsg)
sError GetReplyID(out ReplyID replyID)
sError ReplyWithReplyID(in ReplyID replyID, in any resultMsg, in size _t sizeOfResultMsg)
상기 메소드「Send」, 「GetReplyID」 및 「ReplyWithReplyID」를 도입함으로써 메소드「Delegate」를 사용하지 않고, 서버측 오브젝트에 의한 처리의 요구의 수구와 출구가 다른 구성에 있어서의 메시지패싱을 실현하는 것이 가능으로 된다.
이하, 이들 메소드에 대해서 상세하게 설명한다.
2-6-1-1. Send()
sError Send(in OID destObjID, in Selector meth, in any msg, in size_t sizeOfMsg)
메소드「Send」는 클라이언트측 오브젝트에서 서버측 오브젝트에 메시지를 보내는 처리를 행하는 메지시송신용 메소드이다. 이 메소드「Send」는 클라이언트측 오브젝트가 메시지를 서버측 오브젝트에 송신한 후, 서버측 오브젝트에서의 처리의 결과를 클라이언트측 오브젝트가 필요로 하지 않는 경우에 이용된다.
인수「destObjID」는 오브젝트를 특정하기 위해 데이터형인 「OID」형의 인수이고, 이 인수「destObjID」에는 서버측 오브젝트를 특정하는 값을 설정한다.
인수「meth」는 메소드를 특정하기 위한 데이터형인 「Selector」형의 인수이고, 이 인수「meth」에는 요구하는 처리가 기술된 서버측 오브젝트의 메소드를 측정하는 값을 설정한다.
인수「msg」는 임의의 데이터형인 「any」형의 인수이고, 인수「msg」에는 서버측 오브젝트에 대하여 수도하는 메시지가 격납되어 있는 영역에의 포인터를 설정한다.
인수「sizeOfMsg」는 데이터의 사이즈를 특정하기 위한 데이터형인 「size_t」형의 인수이고, 이 인수「sizeOfMsg」에는 서버측 오브젝트에 대하여 수도하는 메시지의 사이즈를 나타내는 값을 설정한다.
이 메소드「Send」는 에러코드를 나타내는 데이터형인 「sError」형의 값을 되돌리는 값으로서 얻는다. 즉, 이 메소드「Send」가 발행된 때에 당해 메소드「Send」의 처리가 정상으로 완료하지 않은 경우에는, 그 원인을 나타내는 에러코드가 되돌리는 값으로서 반환하여 온다. 또한, 처리가 정상으로 완료한 경우에는 정상으로 처리가 완료한 것을 나타내는 값을 되돌리는 값으로서 반환하여 온다.
2-6-1-2. GetReplyID()
sError GetReplyID(out ReplyID replyID)
상술한 바와 같이 메소드「Reply」가 발행된 경우는 퓨처(즉, 데이터영역「RBox」를 경유하여 클라이언트측 오브젝트에 결과가 배송된다. 메소드「GetReplyID」는 이와 같은 메소드「Reply」 대신에 사용된 것이고, 서버측 오브젝트를 구성하는 오브젝트가 식별자「ReplyID」를 얻기 위해 사용된다. 여기서 식별자「ReplyID」는 거기서 다른 오브젝트가 결과를 배송할 때에 어떤 퓨처를 경유하여 클라이언트 측 오브젝트에 결과를 배송하면 좋은지를 식별하기 위한 식별자이다.
즉, 이 메소드「GetReplyID」는 결과의 배송에 사용하는 퓨처를 특정하기 위한 데이터형인 「ReplyID」를 되돌리는 값으로서 얻는다. 이 식별자「ReplyID」는 어떤 퓨처를 경유하여 클라이언트 측 오브젝트에 결과를 배송하면 좋은지를 식별하기 위한 식별자이고, 환언하면 메소드「SendWithRBox」가 발행된 때에 오브젝트「mCOOPMailer」에 의해 확보된 퓨처를 특정하는 식별자이다.
또한 이 식별자「ReplyID」는 상술한 식별자「rBoxID」와 실질적으로 같은 것이고, 식별자「rBoxID」와 동일한 것으로 하여도 좋다. 그렇지만 식별자「ReplyID」는 식별자「rBoxID」와는 사용 목적이 다르기 때문에, 본예에서는 식별자「replyID」의 것을, 굳이 식별자「rBoxID」와는 다른 데이터형의 식별자로서 그들의 사용목적의 차이를 명확하게 하고 있다.
이 메소드「GetReplyID」는 에러코드를 나타내는 데이터형인 「sError」형의 값을 되돌리는 값으로서 얻는다. 즉, 이 메소드「GetReplyID」가 발행된 때에 당해 메소드「GetReplyID」의 처리가 정상적으로 완료하지 않은 경우에는 그 원인을 나타내는 에러코드가 되돌리는 값으로서 반환하여 온다. 또한 처리가 정상적으로 완료한 경우에는 정상적으로 처리가 완료한 것을 나타내는 값이 되돌리는 값으로서 반환하여 온다.
2-6-1-3. ReplyWithReplyID()
sError ReplyWithReplyID(in ReplyID replyID, in any resultMsg, in size _t sizeOfResultMsg)
메소드「ReplyWithReplyID」는 클라이언트측 오브젝트에 의해 메소드「SendWithRBox」가 발행된 후에 서버측 오브젝트에서 클라이언트측 오브젝트에 처리의 결과를 반환하는 경우에 이용된다. 이 메소드「ReplyWithReplyID」는 서버측 오브젝트를 구성하는 오브젝트에 의해 메소드「Reply」를 발행하여 결과를 반환하는 대신에 이용된다.
상술한 바와 같이 메소드「Reply」가 발행된 경우는 퓨처(즉, 데이터영역「RBox」)를 경유하여 클라이언트측 오브젝트에 결과가 배송된다. 메소드「ReplyWithReplyID」는 이와 같은 메소드「Reply」 대신에 사용된 것이고, 서버측 오브젝트를 구성하는 오브젝트에서 클라이언트측 오브젝트에 식별자「replyID」에 의해 특정되는 퓨처를 경유하여 결과를 배송하기 위해 사용된다.
인수「replyID」는 결과의 배송에 사용하는 퓨처를 특정하기 위한 데이터형인 「ReplyID」형의 인수이고, 이 인수「replyID」에는 메소드「SendWithRBox」가 발행된 때에 오브젝트「mCOOPMailer」에 의해 확보된 퓨쳐를 특정하는 식별자를 설정한다. 환언하면 이 인수「replyID」에는 메소드「GetReplyID」를 발행함으로써 얻어진 식별자「replyID」의 값을 설정한다.
인수「resultMsg」는 임의의 데이터형인 「any」형의 인수이고, 이 인수「resultMsg」에는 클라이언트측 오브젝트에 수도하는 메시지가 격납된 영역에의 포인터를 설정한다.
인수「sizeOfResultMsg」는 데이터의 사이즈를 특정하기 위한 데이터형인 「size_t」형의 인수이고, 이 인수「sizeOfResultMsg」에는 클라이언트측 오브젝트에 수도하는 메시지의 사이즈를 나타내는 값을 설정한다.
이 메소드「ReplyWithReplyID」는 에러코드를 나타내는 데이터형인 「sError」형의 값을 되돌리는 값으로서 얻는다. 즉, 이 메소드「ReplyWithReplyID」가 발행된 때에, 당해 메소드「ReplyWithReplyID」의 처리가 정상으로 완료하지 않은 경우에는 그 원인을 나타내는 에러코드가 되돌리는 값으로서 반환하여 온다. 또한, 처리가 정상으로 완료한 경우에는 정상으로 처리가 완료한 것을 나타내는 값이 되돌리는 값으로서 반환하여 온다.
이 메소드「ReplyWithReplyID」는 상술한 메소드「Reply」에 비하여 「ReplyID」형의 인수「replyID」가 많이 이루어져 있다. 그리고 이 인수「replyID」를 이용하는 것으로, 후술하는 바와 같이, 오브젝트「mCOOPMailer」는 클라이언트측 오브젝트에 결과를 반환하는 데 사용하는 퓨처를 특정하는 것이 가능하게 되고, 그 결과, 서버측 오브젝트는 최초에 클라이언트측 오브젝트에서 메시지를 수취한 오브젝트 이외의 오브젝트에서 클라이언트측 오브젝트에 결과를 반환하는 것이 가능하게 된다.
2-6-2. 메시지패싱
이하, 이상과 같은 메소드「Send」, 「GetReplyID」 및 「ReplyWithReplyID」를 사용하여 행해지는, 서버측 오브젝트에 의한 처리의 요구의 수구와 출구가 다른 구성에 있어서의 메시지패싱에 대해서 구체적인 시나리오를 예로 들어 도 8을 참조하면서 상세하게 설명한다.
또한, 이하의 설명에서 참조하는 도 8은 도 3 내지 도 7과 동일하게 메지시패싱시의 처리의 천이나 메시지의 교환 등을 나타낸 도면이고, 도면 중의 점선 화살표는 오퍼레이팅 시스템 내에서의 처리의 천이나 메지지의 교환을 나타내고 있고, 도면 중의 실선 화살표는 어플리케이션 프로그램 측에서 본 때의 처리의 천이나 메시지의 교환을 나타내고 있다.
도 8은 mCOOP메타스페이스의 메지시패싱의 시나리오로서 mCOOP메타스페이스 상에서 어플리케이션 프로그램으로서 동작하는 오브젝트A, 오브젝트B 및 오브젝트C의 사이에서의 메지시패싱으로서, 오브젝트B가 오브젝트A에서 메시지를 수취하고, 오브젝트C가 오브젝트A에 처리의 결과를 반환하는 경우의 시나리오를 나타내고 있다. 즉, 본 예에서는 오브젝트A가 클라이언트측 오브젝트이고, 오브젝트B 및 오브젝트C가 서버측 오브젝트이다.
ST6-1에 나타내는 것과 같이, 오브젝트A가 메소드「SendWithRBox」를 발행하면 점선 화살표ST6-2에 나타내는 것과 같이, 오브젝트「mCOOPMailer」에 처리가 천이하고, ST6-3에 있어서 오브젝트「mCOOPMailer」에 의해 메소드「SendWithRBox」에 따른 처리가 행해진다.
여기서 오브젝트「mCOOPMailer」는 먼저 서버측 오브젝트에 의해 처리의 결과가 격납되는 데이터영역「RBox」을 확보하여 당해 데이터영역「RBox」의 속성「creator」에 오브젝트A에 대응한 데이터영역「Thread」를 특정하는 식별자를 설정한다.
다음에 오브젝트「mCOOPMailer」는 데이터영역「DeliveryBoxA」를 확보하여 당해 데이터영역「DeliveryBoxA」에 데이터영역「RBox」를 특정하기 위한 식별자「rBoxID」와, 메소드「SendWithRBox」에 의해 보내져 온 메시지와를 격납한다.
여기서 데이터영역 「DeliveryBoxA」에 데이터영역「RBox」를 특정하기 위한 식별자「rBoxID」를 격납한다는 것은 구체적으로는 데이터영역「DeliveryBoxA」의 속성「rBoxID」에 데이터영역「RBox」를 특정하기 위한 식별자「rBoxID」의 값을 설정한다는 것이다.
또 데이터영역「DeliveryBoxA」에 메소드「SendWithRBox」에 의해 보내져 온 메시지를 격납한다는 것은 구체적으로는 데이터영역「DeliveryBoxA」의 속성「msg」에 메소드「SendWithRBox」의 인수「msg」의 값을 설정하는 동시에. 데이터영역「DeliveryBoxA」의 속성「sizeOfMsg」에 메소드「SendWithRBox」의 인수「sizeOfMsg」의 값을 설정한다는 것이다.
그후 오브젝트「mCOOPMailer」는 데이터영역「DeliveryBoxA」에 격납한 데이터, 즉 메소드「SendWithRBox」에 의해 보내져 온 메시지와, 확보한 데이터영역「RBox」를 특정하기 위한 식별자「RBoxID」와를 점선 화살표 ST6-4에 나타내는 바와같이 오브젝트(B)에 배송하고, 오브젝트(B)의 메소드를 기동한다.
이때 오브젝트(B)의 메소드에는 메시지만이 수도되고, 식별자「rBoxID」는 오브젝트(B)에 대응한 데이터영역「Thread」에 격납된다. 환원하면 오브젝트(B)에 수도되는 식별자「rBoxID」는 오퍼레이팅 시스템의 관리하에 있고, 어플리케이션 프로그램의 측에서 본 때 오브젝트(B)에 배송되어 온 것은 메시지 만이다.
또한 데이터영역「DeliveryBoxA」에 격납된 데이터를 오브젝트「mCOOPMailer」에서 오브젝트B에 배송하고, 오브젝트B의 메소드를 기동할때 오브젝트B는 메소드「SendWithRBox」의 인수「destObjID」에 의해 특정되고, 오브젝트B의 메소드는 메소드「SendWithRBox」의 인수「meth」에 의해 특정된다.
이들의 처리가 종료하면 오브젝트「mCOOPMailer」는 점선 화살표 ST6-5에 나타내는 바와같이, 확보한 데이터영역「RBox」를 특정하기 위한 식별자「rBoxID」를 오브젝트A에 반환하는 동시에 정상적으로 처리가 완료한 것을 나타내는 값을 메소드「SendWithRBox」에 대한 되돌리는 값으로서 오브젝트A에 반환한 위에서 오브젝트A를 계속해서 실행가능상태이도록 한다. 이것에 의해 오브젝트A는 실행가능상태로 되고, 행하여야 할 처리가 남아있는 경우에는 당해 처리를 계속해서 실행한다.
이상의 처리에 의해 어플리케이션 프로그램의 측에서 보았을때에는 실선 화살표 ST6-6에 나타내는 바와같이, 오브젝트A에서 오브젝트B에 메시지가 배송되고, 오브젝트A와 오브젝트B가 병행 동작하고 있는 상태로 된다.
그후 ST6-8에 나타내는 바와같이, 오브젝트B가 메소드「GetReplyID」를 발행하면 점선 화살표 ST6-9에 나타내는 바와같이, 오브젝트「mCOOPMailer」에 처리가 천이 하고, ST6-10에 있어서 오브젝트「mCOOPMailer」에 의해 메소드「GetReplyID」에 따른 처리가 행하여진다.
구체적으로는 오브젝트「mCOOPMailer」는 오브젝트(B)에 대응한 데이터영역「Thread」에 격납되어 있는 식별자「rBoxID」를 독출하고, 당해 식별자「rBoxID」의 값을 메소드「GetReplyID」에 대한 되돌리는 값으로서 반환한다.
이 처리가 종료하면 오브젝트「mCOOPMailer」는 점선 화살표 ST6-11에 나타내는 바와같이 정상적으로 처리가 완료한 것을 나타내는 값을 메소드「GetReplyID」에 대한 되돌리는 값으로서 오브젝트B에 반환한 위에서 오브젝트B를 계속해서 실행가능상태이도록 한다. 이것에 의해 오브젝트B는 실행가능상태로 되고 행하여야 할 처리가 남아있는 경우에는 당해 처리를 계속해서 실행한다.
그후 ST6-12에 나타내는 바와같이, 오브젝트A가 메소드「Receive」를 발행하면, 점선 화살표 ST6-13에 나타내는 바와같이, 오브젝트「mCOOPMailer」에 처리가 천이하고, ST6-14에 있어서 오브젝트「mCOOPMailer」에 의해 메소드「Receive」에 따른 처리가 행하여진다.
구체적으로는 오브젝트「mCOOPMailer」는 메소드「Receive」의 인수「rBoxID」에 의해 특정되는 데이터영역「RBox」을 참조하고, 서버측 오브젝트에 의한 처리의 결과가 당해 데이터영역「RBox」에 격납되어 있지 않으면, 그 결과를 오브젝트A에 수도하고, 서버측 오브젝트에 의한 처리의 결과가 당해 데이터영역「RBox」에 격납되어 있지 않게 되면 오브젝트A를 실행 가능상태에서 대기상태로 한다.
본 예에서는 오브젝트A가 메소드「Receive」를 발행한 단계에서는 서버측 오브젝트에 의한 처리의 결과는 아직 데이터영역「RBox」에 격납되어 있지 않다. 따라서 오브젝트「mCOOPMailer」는 점선 화살표 ST6-15에 나타내는 바와같이, 서버측 오브젝트에 의한 처리의 결과가 아직 데이터영역「RBox」에 격납되어 있지 않는 것을 오브젝트A에 알리고, 오브젝트A를 실행가능상태에서 대기상태로 한다.
그후 ST6-16에 나타내는 바와같이, 오브젝트B가 메소드「Send」를 발행하면 점선 화살표 ST6-17에 나타내는 바와같이, 오브젝트「mCOOPMailer」에 처리가 천이하고, ST6-18에 있어서, 오브젝트「mCOOPMailer」에 의해 메소드「Send」에 따른 처리가 행하여진다.
구체적으로는 오브젝트「mCOOPMailer」는 먼저 메소드「Send」의 인수「msg」가 지시하는 영역에서 인수「sizeOfMsg」가 나타내는 사이즈분의 데이터를 독출한다. 이 데이터가 오브젝트B에서 오브젝트C에 수도하는 메시지로 된다. 그리고 오브젝트「mCOOPMailer」는 ST6-19에 나타내는 바와같이, 상기 메시지를 오브젝트C에 배송하고, 오브젝트C의 메소드를 기동한다.
여기서 오브젝트C는 메소드「Send」의 인수「destObjID」에 의해 특정되고 오브젝트C7의 메소드는 메소드「Send」의 인수「meth」에 의해 특정된다. 또 메소드「Send」를 발행할때에 메소드「Send」에 의해 오브젝트C에 수도하는 메시지의 중에는 메소드「GetReplyID」를 발행함으로써 얻은 식별자「replyID」에 대해서의 정보를 포함하여 놓는다. 이것에 의해 클라이언트측 오브젝트에 결과를 배송할때에 사용하는 퓨처를 특정하기 위해 필요한 정보가 오브젝트B에서 오브젝트C에 수도되는 것으로 된다.
이들의 처리가 종료하면 오브젝트「mCOOPMailer」는 점선 화살표 ST6-20에 나타내는 바와같이, 정상적으로 처리가 완료한 것을 나타내는 값을 메소드「Send」에 대한 되돌리는 값으로서 오브젝트B에 반환하는 위에서 오브젝트B를 계속해서 실행가능상태이도록 한다. 이것에 의해 오브젝트B는 실행가능상태로 되고, 행하여야 할 처리가 남아있는 경우에는 당해 처리를 계속해서 실행한다.
이상의 처리에 의해 어플리케이션 프로그램의 측에서 본 때에는 실선 화살표 ST6-21에 나타내는 바와같이, 메시지가 오브젝트B에서 오브젝트C에 배송되고 오브젝트B와 오브젝트C가 병행동작하고 있는 상태로 된다.
그후 ST6-22에 나타내는 바와같이, 오브젝트C가 메소드「ReplyWithReplyID」를 발행하면, 점선 화살표 ST6-23에 나타내는 바와같이, 오브젝트「mCOOPMailer」에 처리가 천이한다. 여기서 메소드「ReplyWithReplyID」의 인수「ReplyID」에는 클라이언트측 오브젝트에 결과를 배송할때에 사용하는 퓨처를 특정하기 위한 식별자「replyID」의 값이 설정되고, 이것에 의해 클라이언트측 오브젝트에 결과를 배송할때에 사용하는 데이터영역「RBox」이 특정된다.
그리고 ST6-24에 있어서 오브젝트「mCOOPMailer」에 의해 메소드「ReplyWithReplyID」에 따른 처리가 행하여진다. 구체적으로는 오브젝트「mCOOPMailer」는 오브젝트A가 이미 메소드「Receive」를 발행하고 있게 된다면 오브젝트C에 의한 처리의 결과를 오브젝트A에 수도하고 오브젝트A가 아직 메소드「Receive」를 발행하고 있지 않게 되면, 오브젝트C에 의한 처리의 결과를 데이터영역「RBox」에 격납한다.
본 예에서는 오브젝트C가 메소드「ReplyWithReplyID」를 발행한 단계에서 이미 오브젝트A가 메소드「Receive」를 발행하고 있다. 따라서 오브젝트「mCOOPMailer」는 점선 화살표 ST6-25에 나타나는 바와 같이, 오브젝트C에 의한 처리의 결과를 데이터영역 「RBox」에 격납하지 않고, 오브젝트A에 직접 수도한다. 그리고 오브젝트「mCOOPMailer」는 오브젝트C에 의한 처리의 결과의 오브젝트A에의 수도의 처리가 정상적으로 완료하면, 점선 화살표 ST6-26에 나타나는 바와 같이, 당해 처리가 정상적으로 완료한 것을 나타내는 값을 메소드「ReplyWithReplyID」에 대한 되돌리는 값으로서 오브젝트C에 반환한 위에서 오브젝트C를 계속해서 실행가능한 상태이도록 한다. 이것에 의해 오브젝트C는 실행 가능한 상태로 되고, 행하여야 할 처리가 남아있는 경우에는 당해 처리를 계속해서 실행한다.
이상의 처리에 의해 어플리케이션 프로그램의 측에서 본 때에는 실선 화살표 ST6-27에 나타내는 바와 같이, 오브젝트C에 의한 처리결과가 오브젝트A에 수도되고, 오브젝트A와 오브젝트C가 병행 동작하고 있는 상태로 된다.
또한 도8의 예에서는 메소드「ReplyWithReplyID」가 발행되기 전에 메소드「Receive」가 발행된 경우를 나타내었으나, 메소드「ReplyWithReplyID」가 발행된 후에 메소드「Receive」가 발행되는 경우도 있을 수 있다. 메소드「ReplyWithReplyID」가 발행된 후에 「Receive」가 발행된 경우에는 오브젝트A는 대기상태로 되지 않고, 오브젝트C에 의한 처리 결과를 직접 수도하게 된다.
즉, 오브젝트C가 메소드「ReplyWithReplyID」를 발행한 후에서 오브젝트A가메소드「Receive」를 발행한 경우 오브젝트「mCOOPMailer」는 오브젝트C가 메소드「ReplyWithReplyID」를 발행한 단계에서는, 오브젝트C에 의한 처리의 결과를 데이터영역「RBox」에 격납하여 놓고, 오브젝트A가 메소드「Receive」를 발행한 단계에서 직접 오브젝트C에 의한 처리의 결과를 데이터영역「RBox」에서 독출하여 오브젝트A에 수도한다.
이때 오브젝트C에 의한 처리 결과를 격납하는 데이터영역「RBox」은 메소드 「ReplyWithReplyID」의 인수 「replyID」에 의해 특정된다. 즉, 상술한 바와 같이 메소드「ReplyWithReplyID」의 인수「replyID」에는 클라이언트측 오브젝트에 결과를 배송할 때 사용하는 퓨처를 특정하기 위한 식별자「replyID」의 값이 설정되고, 이것에 의해 클라이언트측 오브젝트에 결과를 배송할 때 사용하는 데이터영역「RBox」dl 특정된다.
또한 오브젝트C에 의한 처리의 결과를 데이터영역「RBox」에 격납한다는 것은 구체적으로는 데이터영역「RBox」의 속성「ready」에 오브젝트C에 의한 처리의 결과가 반송하여 오는 것을 나타내는 값을 설정하고, 또한 데이터영역「RBox」의 속성「resultMsg」에 오브젝트C에 의한 처리의 결과로써 오브젝트A에 수도하는 메시지가 격납된 영역에의 포인터, 즉 메소드「ReplyWithReplyID」의 인수「resultMsg」에서 나타내는 포인터를 설정하고, 또한, 데이터영역「RBox」의 속성「sizeOfResultMsg」에 오브젝트C에 의한 처리의 결과로서 오브젝트A에 수도하는 매시지의 사이즈를 나타내는 값, 즉, 메소드「ReplyWithReplyID」의 인수「sizeOfResultMsg」가 나타내는 값을 설정한다는 것이다.
그리고 오브젝트C에 의한 처리의 결과를 데이터영역「RBox」에서 독출하고오브젝트A에 인도할 때, 오브젝트「mCOOPMailer」는 먼저 메소드「Receive」의 인수「rBoxID」에 의해 설정되는 데이터영역「RBox」에서 속성「resultMsg」및 속성「sizeOfResultMsg」을 독출하고, 속성「resultMsg」가 지시하는 영역에서 속송「sizeOfResultMsg」가 나타내는 사이즈분의 데이터를 독출한다. 이 데이터가 오브젝트C에서 오브젝트A에 수도하는 메시지로 된다. 그리고 오브젝트「mCOOPMailer」는 이와 같이 독출한 데이터를 메소드「Receive」의 인수 「msg」가 지시하는 영역에 격납한다. 여기서 메소드「Receive」의 인수「msg」가 지시하는 영역의 사이즈는 메소드「Receive」의 인수「sizeOfMsg」<에 의해 설정되어 있다.
이상의 처리에 의해메소드「ReplyWithReplyID」가 발행된 후에 메소드「Receive」가 발행된 경우도 메소드「ReplyWithReplyID」가 발행되기 전에메소드「Receive」가 발행된 경우와 동일하게 오브젝트C에 의한 처리의 결과가 오브젝트A에 tn도되고 오브젝트A와 오브젝트C가 병행동작하고 있는 상태로 된다.
이상과 같이 오브젝트의 기술에 사용하는 API로써 메소드「Send」,「GetReplyID」및 「ReplyWithReplyID」를 도입함으로써 서버측 오브젝트가 복수의 오브젝트에 의해 구성되고, 또한 처리의 요구의 수구와 출구가 동일하지 않는 경우라도 메시지패싱을 행하는 것이 가능하게 된다.
2-6-3. Delegate()를 사용한 메시지 패싱과의 비교
상술과 같이 메소드「Send」,「GetreplyID」,「ReplyWithReplyID」를 도입함으로써, 서버측 오브젝트가 복수의 오브젝트에 의해 구성되고, 또한 처리의 요구의 수구와 출구가 동일하지 않는 경우라도, 메시지패싱을 행하는 것이 가능하게 된다. 그렇지만 이 방법은 오퍼레이팅 시스템 상에서 어플리케이션 프로그램을 동작시키기 위한 구조로서는 문제가 있다.
메소드「GetReplyID」나 메소드「ReplyWithReplyID」가 도입되기 전은 메시지를 송신한 클라이언트측 오브젝트와 퓨처와의 관계나, 퓨처와 메시지가 배송된 서버측 오브젝트와의 관계는, 항상 오퍼레이팅 시스템에 의해 파악되고 있었다.
그러나 메소드「GetReplyID」나 메소드「ReplyWithReplyID」를 도입하면, 오퍼레이팅 시스템이 알지 않고, 어플리케이션 프로그램을 구성하는 오브젝트 사이에서의 메시지의 수도에 의해 퓨처에 대해서의 정보를 오브젝트 사이에서 교환하는 것이 가능하게 된다. 즉 메소드「GetReplyID」를 발행하여 식별자「ReplyID」를 얻은 후는 퓨처에 대해서의 정보(즉 식별자 「ReplyID」)를 메시지로서 교환하는 것이 가능하게 되기때문에, 오퍼레이팅 시스템이 알지 않고, 퓨처에 대해서의 정보를 어플리케이션 프로그램을 구성하는 오브젝트 사이에서 교환하는 것이 가능하게 된다.
이와같이 오퍼레이팅 시스템이 알지 않는 데는, 퓨처에 대해서의 정보를 어플리케이션 프로그램을 구성하는 오브젝트 사이에서 교환할 수 있도록 되면, 클라이언트측 오브젝트와 퓨처와의 관계나 퓨처와 서버측 오브젝트와의 관계를 오퍼레이팅 시스템이 파악 할 수 없게 된다.
그리고 클라이언트측 오브젝트와 퓨처와의 관계나, 퓨처와 서버측 오브젝트와의 관계를 오퍼레이팅 시스템이 파악하고 있지 않는 상태에서 메시지패싱이 행하여지면, 예를들면 예외사상이 생긴때에 시스템을 복귀할 수 없는 경우가 일어난다.
예를들면 서버측 오브젝트에 의한 처리의 결과가 퓨처를 거쳐서 보내져 오는 것을 기다리고, 클라이언트측 오브젝트가 대기상태로 되어 있을때에 오브젝트「mCOOPMailer」에 예외사상이 발생하고, 서버측 오브젝트에 의한 처리의 결과를 클라이언트측 오브젝트에 반환할 수 없게 되었다고 한다.
이와같은 상태일때에 오퍼레이팅 시스템이 그들의 오브젝트 사이의 관계를 파악하고 있지 않으면, 오브젝트 「mCOOPMailer」에 예외사상이 생긴 것을 대기상태로 되어 있는 클라이언트측 오브젝트에 통지할 수 없고, 클라이언트측 오브젝트는 대기상태인채로 된다.
이와같이 대기상태로 되어 있는 오브젝트를 복귀시킬 수 없게 되면, 사용자에 의해서는 시스템이 원인불명으로 정지하여 버린 상태로 된다. 오퍼레이팅 시스템에는 당해 오퍼레이팅 시스템상에서 동작하는 소프트웨어가 안정하게 동작을 계속하는 구조를 제공하는 것이 바람직하고, 사용자에 의해 시스템이 원인불명으로 정지하여 버린 상태로 되는 것은 대단한 문제이다.
그리고 상기 문제의 원인은 서버측 오브젝트에 의한 처리의 요구의 수구와 출구가 동일하지 않는 경우에, 클라이언트측 오브젝트와 퓨처와의 관계나, 퓨처와 서버측 오브젝트와의 관계를, 오퍼레이팅 시스템이 파악할 수 없게 되는 것에 있다. 따라서 상기 문제를 해소하는데는 클라이언트측 오브젝트와 퓨처와의 관계나, 퓨처와 서버측 오브젝트와의 관계를 항상 오퍼레이팅 시스템이 파악 할 수 있도록 하면 좋다.
구체적으로는 API로서 메소드「GetReplyID」나 메소드「ReplyWithReplyID」와 같이 퓨처에 대해서의 정보를 직접 취급하는 API를 제공하는 것이 아니고, 결과의 배송의 권한을 다른 오브젝트에 위양하는 메소드「Delegate」를 제공하도록 하면 좋다.
메소드「GetReplyID」나 메소드「ReplyWithReplyID」에서는 없고, 메소드「Delegate」를 이용함으로써 서버측 오브젝트가 복수의 오브젝트에 의해 구성되고, 또한 처리의 요구의 수구와 출구가 동일하지 않는 경우라도 클라이언트측 오브젝트와 퓨처와의 관계나, 퓨처와 서버측 오브젝트와의 관계를 오퍼레이팅 시스템이 항상 파악 하는 것이 가능하게 되어 상술과 같은 문제는 해소된다.
메소드「Delegate」를 도입한 경우 어플리케이션 프로그램을 구성하는 오브젝트 사이에서의 메시지의 수도에 의해 퓨처에 대해서의 정보를 교환하는 것은 없게 되고, 퓨처에 대해서의 정보의 교환은 오퍼레이팅 시스템의 관리하에서 데이터영역「DeliverBoxA」를 이용해서 행하여진다. 따라서 메소드「Delegate」를 도입한 경우 퓨처에 대해서의 정보의 수도는, 항상 오퍼레이팅 시스템의 관리하에 있고, 클라이언트측 오브젝트와 퓨처와의 관계나, 퓨처와 서버측 오브젝트와의 관계를 오퍼레이팅 시스템이 파악할 수 없게 되는 것은 없게 된다. 그 결과 예를들면 어떤 것의 예외사상의 발생에 의해 클라이언트측 오브젝트가 대기상태인채로 정지하여 버리는 것은 없게 되고, 시스템을 보다 강고한 것으로 하는 것이 가능하게 된다.
더구나 메소드「Delegate」를 도입한 경우에는 서버측 오브젝트를 구성하는 오브젝트 사이에서 회답권한의 위양을 행할때에 어플리케이션 프로그램의 측은 데이터영역「RBox」및 당해 데이터영역「RBox」을 특정하는 식별자「rBoxID」를 의식할 필요가 없다. 따라서 메소드「Delegate」를 도입함으로써 어플리케이션 프로그램의 개발이 용이하게 된다는 이점도 있다.
이상 상세히 설명한 바와같이 본 발명에서는 퓨처를 기본으로 한 메시지 패싱에 있어서, 결과의 기술의 권한을 다른 오브젝트에 위양할 수 있도록 하고 있다. 따라서 본 발명에 의하면 서버측 오브젝트가 복수의 오브젝트로 구성되고, 또한 요구의 수구와 출구가 다른 경우라도 메시지패싱을 적절히 행하는 것이 가능하게 된다.

Claims (8)

  1. 클라이언트측 오브젝트에서 2이상의 오브젝트에 의해 구성되는 서버측 오브젝트에 메시지를 보내고, 당해 메시지가 요구하는 처리를 서버측 오브젝트에 의해 행하고, 당해 처리의 결과를 서버측 오브젝트에서 클라이언트측 오브젝트에 반환하는데 있어서,
    클라이언트측 오브젝트에서 서버측 오브젝트에 메시지를 보낼때에 서버측 오브젝트에 의한 처리의 결과가 격납되는 데이터영역을 확보하고,
    상기 메시지가 요구하는 처리를 서버측 오브젝트에 의해 행할때에 서버측 오브젝트를 구성하는 오브젝트사이에서 서버측 오브젝트에 의한 처리의 결과를 클라이언트측에 반환하는 권한의 위양을 행하고,
    상기 권한을 최후에 위양된 오브젝트에 의한 처리의 결과를 상기 데이터영역에 격납하고, 클라이언트측 오브젝트는 상기 데이터영역에 격납된 데이터를 독출함으로써 서버측 오브젝트에 의한 처리의 결과를 수취하는 것을 특징으로 하는 데이터처리방법.
  2. 제 1항에 있어서,
    클라이언트측 오브젝트는 서버측 오브젝트에 메시지를 보낸후도 처리를 계속하여 행하고, 서버측 오브젝트에 의한 처리의 결과가 필요로 된 단계에서 상기 데이터역역에 격납된 데이터의 독출을 행하는 동시에,
    클라이언트측 오브젝트가 상기 데이터영역에 격납된 데이터의 독출을 행한때에 당해 데이터영역에 서버측 오브젝트에 의한 처리의 결과가 격납되어 있지 않은 경우에는 당해 데이터영역에 서버측 오브젝트에 의한 처리의 결과가 격납도기가지 클라이언트측은 대기상태로 되는 것을 특징으로 하는 데이터처리방법.
  3. 오퍼레이팅 시스템이 기록된 기록매체로서,
    상기 오퍼레이팅 시스템은
    오브젝트의 기술에 사용되는 어플리케이션 프로그램 인터페이스로서, 클라이언트측 오브젝트에서 서버측 오브젝트에 메시지를 보내는 처리를 행하기 위한 메시지 송신용 메소드와, 오브젝트 사이에서의 권한의 위양의 처리를 행하기 위한 권한위양용 메소드를 가지며,
    상기 메시지 송신용 메소드의 실행이 요구되면 클라이언트측 오브젝트에서 서버측 오브젝트에 메시지를 보내는 처리를 행하는 동시에, 서버측 오브젝트에 의한 처리의 결과가 격납되는 데이터영역을 확보하는 처리를 행하고,
    상기 권한위양용 메소드의 실행이 요구되면 서버측 오브젝트를 구성하는 오브젝트에서, 서버측 오브젝트를 구성하는 다른 오브젝트에 서버측 오브젝트에 의한 처리의 결과를 클라이언트측 오브젝트에 반환하는 권한을 위양하는 처리를 행하고,
    상기 메시지 송신용 메소드에 의해 서버측 오브젝트에 보낸 메시지에 의거하여 서버측 오브젝트에 의한 처리가 완료한다던지, 상기 권헌위양용 메소드에 의해 상기 권한이 최후에 위양된 오브젝트에 의한 처리르ㅣ 결과를 상기 데이터영역에 격납하는 것을 특징으로 하는 기록매체.
  4. 제 3항에 있어서,
    상기 어퍼레이팅 시스템은 오브젝트의 기술에 사용되는 어플리케이션 프로그램 인터페이스로서 상기 데이터 영역에 격납되어 있는 데이터를 덕출하는 데이터독출용 메소드를 갖추고 있는 것을 특징으로 하는 기록매체.
  5. 제 4항에 있어서,
    상기 오퍼레이팅시스템은 상기 클라이언트측 오브젝트가 상기 데이터독출용 메소드에 의해 상기 데이터영역에 격납된 데이터를 독출하고자 한때에 당해 데이터영역에 서버측 오브젝트에 의한 처리의 결과가 격납되어 있지 않은 경우에는 당해 데이터여역에 서버측 오브젝트에 의해 처리의 결과가 격납되기가지 클라이언트측 오브젝트를 대기상태로 하는 것을 특징으로 하는 기록매체.
  6. 오퍼레이팅 시스템이 기록된 기록매체를 갖춘 데이터처리장치로서,
    상기 오퍼레이팅 시스템은
    오브젝트의 기술에 사용되는 어플리케이션 프로그램 인터페이스로서, 클라이언트측 오브젝트에서 서버측 오브젝트에 메시지를 보내는 처리를 행하기 위한 메시지 송신용 메소드와, 오브젝트사이에서의 권헌의 위양의 처리를 행하기 위한 권한위양용 메소드를 가지며,
    상기 메시지 송신용 메소드의 실행이 요구되면, 클라이언트측 오브젝트에서 서버측 오브젝트에 메시지를 보내는 처리를 행하는 동시에 서버측 오브젝트에 의한 처리의 결과가 격납되는 데이터영역을 확보하는 처리를 행하고, 상기 권한위양용 메소드의 실행이 요구되면 서버측 오브젝트를 구성하는 오브젝트에서 서버측 오브젝트를 구성하는 다른 오브젝트에 서버측 오브젝트에 의한 처리의 결과를 클라이언트 오브젝트에 반환하는 권한을 위양하는 처리를 행하고,
    상기 메시지 송신용 오브젝트에 의해 서버측 오브젝트에 보낸 메시지에 의거해서 서버측 오브젝트에 의한 처리가 완료한다던지, 상기 권한위양용 메시지에 의해 상기 권한이 최후에 위양된 오브젝트에 의한 처리의 결과를 상기 데이터영역에 격납하는 것을 특징으로 하는 데이터처리장치.
  7. 제 6항에 있어서,
    상기 오퍼레이팅시스템은 오브젝트의 기술에 사용되는 어플리케이션 프로그램 인터페이스로서, 상기 데이터영역에 격납되어 있는 데이터를 독출하는 데이터독출용 메소드를 갖추고 있는 것을 특징으로 하는 데이터처리장치.
  8. 제 7항에 있어서,
    상기 오퍼레이팅 시스템은 상기 클라이언트측 오브젝트가 상기 데이터독출용 메소드에 의해 상기 데이터영역에 격납된 데이터 독출하고자 하였을때에 당해 데이터영역에 서버측 오브젝트에 의한 처리의 결과가 격납되기까지 클라이언트측 오브젝트를 대기상태로 하는 것을 특징으로 하는 데이터처리장치.
KR1019990006981A 1998-03-04 1999-03-03 데이터처리방법,기록매체및데이터처리장치 KR19990077560A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP10052493A JPH11249898A (ja) 1998-03-04 1998-03-04 データ処理方法、記録媒体及びデータ処理装置
JP98-052493 1998-03-04

Publications (1)

Publication Number Publication Date
KR19990077560A true KR19990077560A (ko) 1999-10-25

Family

ID=12916249

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019990006981A KR19990077560A (ko) 1998-03-04 1999-03-03 데이터처리방법,기록매체및데이터처리장치

Country Status (7)

Country Link
US (1) US6513049B1 (ko)
EP (1) EP0940749B1 (ko)
JP (1) JPH11249898A (ko)
KR (1) KR19990077560A (ko)
CN (1) CN1237731A (ko)
CA (1) CA2264234A1 (ko)
DE (1) DE69936744T2 (ko)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6938251B1 (en) * 2000-09-29 2005-08-30 Sprint Communications Company L.P. Deferred-Synchronous messaging software in a non-threaded environment
US7290039B1 (en) * 2001-02-27 2007-10-30 Microsoft Corporation Intent based processing
JP2003186855A (ja) * 2001-12-20 2003-07-04 Fujitsu Ltd 型照合によるオブジェクト連携システムおよび方法
US7523220B2 (en) * 2003-09-17 2009-04-21 Microsoft Corporation Metaspace: communication middleware for partially connected mobile ad hoc networks
US7549151B2 (en) * 2005-02-14 2009-06-16 Qnx Software Systems Fast and memory protected asynchronous message scheme in a multi-process and multi-thread environment
GB2426839B (en) * 2005-06-03 2011-02-23 Jacobs Rimell Ltd Automated provisioning system
US7840682B2 (en) * 2005-06-03 2010-11-23 QNX Software Systems, GmbH & Co. KG Distributed kernel operating system
US8667184B2 (en) * 2005-06-03 2014-03-04 Qnx Software Systems Limited Distributed kernel operating system
US7680096B2 (en) * 2005-10-28 2010-03-16 Qnx Software Systems Gmbh & Co. Kg System for configuring switches in a network
US10896271B1 (en) 2020-03-31 2021-01-19 Mirmex Motor Sa Optimized development of electro-mechanical devices

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5377350A (en) * 1993-04-30 1994-12-27 International Business Machines Corporation System for cooperative communication between local object managers to provide verification for the performance of remote calls by object messages
US6253252B1 (en) * 1996-07-11 2001-06-26 Andrew Schofield Method and apparatus for asynchronously calling and implementing objects
US5884316A (en) * 1996-11-19 1999-03-16 Microsoft Corporation Implicit session context system with object state cache

Also Published As

Publication number Publication date
EP0940749A3 (en) 2003-11-26
DE69936744T2 (de) 2008-04-30
EP0940749A2 (en) 1999-09-08
DE69936744D1 (de) 2007-09-20
CN1237731A (zh) 1999-12-08
US6513049B1 (en) 2003-01-28
JPH11249898A (ja) 1999-09-17
CA2264234A1 (en) 1999-09-04
EP0940749B1 (en) 2007-08-08

Similar Documents

Publication Publication Date Title
US10540351B2 (en) Query dispatch and execution architecture
US6418464B1 (en) Method and apparatus for coordination of client/server processes
US5949998A (en) Filtering an object interface definition to determine services needed and provided
US7058950B2 (en) Callback event listener mechanism for resource adapter work executions performed by an application server thread
US6101527A (en) System for managing and processing distributed object transactions and process implemented by said system
US20020038390A1 (en) Method and apparatus for fast, local corba object references
JPH08339305A (ja) サーバの非活動化と遮断を管理する方法および装置
JP2006260588A (ja) 分散コンポーネントアプリケーションでの待機メソッド呼び出し方法
JPH08502841A (ja) 分散適用業務処理ネットワーク
KR20020022085A (ko) 응용프로그램 라이프사이클에 따른 응용프로그램 관리방법 및 장치
KR19990077560A (ko) 데이터처리방법,기록매체및데이터처리장치
US6857085B1 (en) Method and system for handling an unexpected exception generated by an application
KR19990077559A (ko) 데이터처리방법,기록매체및데이터처리장치
US8390631B2 (en) Synchronizing queued data access between multiple GPU rendering contexts
US6289394B1 (en) Agent management system capable of readily monitoring and controlling agent
US7774749B2 (en) GUI-supplying management beans
CA1244142A (en) Distributed data management mechanism
CA2213213A1 (en) Method and apparatus for performing efficient corba transactions
US7010793B1 (en) Providing an exclusive view of a shared resource
US7418717B1 (en) Smart card framework
CA2255131A1 (en) Method and apparatus for enforcing locking invariants in multi-threaded systems
US6829766B1 (en) Data processing method and apparatus and recording medium, for implementing a schedule managing mechanism when a context switch has occurred
JP3823468B2 (ja) データ処理方法、記録媒体及びデータ処理装置
JPH0221354A (ja) コンピュータネットワークシステムにおける遠隔機能実行方式
Karman The Use of Tryllian Mobile Agent Technology in Military Applications

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid