KR20190108581A - 원격 객체에 대한 호출 요청의 연기 - Google Patents

원격 객체에 대한 호출 요청의 연기 Download PDF

Info

Publication number
KR20190108581A
KR20190108581A KR1020197022036A KR20197022036A KR20190108581A KR 20190108581 A KR20190108581 A KR 20190108581A KR 1020197022036 A KR1020197022036 A KR 1020197022036A KR 20197022036 A KR20197022036 A KR 20197022036A KR 20190108581 A KR20190108581 A KR 20190108581A
Authority
KR
South Korea
Prior art keywords
call
call request
proxy
server
computing system
Prior art date
Application number
KR1020197022036A
Other languages
English (en)
Other versions
KR102473967B1 (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 KR20190108581A publication Critical patent/KR20190108581A/ko
Application granted granted Critical
Publication of KR102473967B1 publication Critical patent/KR102473967B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • 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/547Remote procedure calls [RPC]; Web services
    • 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/547Remote procedure calls [RPC]; Web services
    • G06F9/548Object oriented; Remote method invocation [RMI]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/02Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
    • H04L67/025Protocols based on web technology, e.g. hypertext transfer protocol [HTTP] for remote control or remote monitoring of applications
    • H04L67/2804
    • H04L67/2833
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • H04L67/561Adding application-functional data or data for application control, e.g. adding metadata
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • H04L67/566Grouping or aggregating service requests, e.g. for unified processing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Library & Information Science (AREA)
  • Computer And Data Communications (AREA)
  • Multi Processors (AREA)
  • Information Transfer Between Computers (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Pharmaceuticals Containing Other Organic And Inorganic Compounds (AREA)
  • Pyrrole Compounds (AREA)
  • Storage Device Security (AREA)

Abstract

클라이언트에서 실행 중인 애플리케이션이 서버의 원격 객체에 호출 요청을 전송하기 위한 시스템이 제공된다. 각각의 호출 요청은 애플리케이션이 원객 객체 클래스의 원격 객체에 대응하는 애플리케이션의 프록시 클래스의 프록시를 호출할 때 생성된다. 각각의 호출 요청에 대해, 호출 요청이 연기 가능할 때, 시스템은 호출 요청을 저장한다. 호출 요청이 연기 가능하지 않을 때, 시스템은 이전에 전송되지 않은 각각의 저장된 호출 요청 및 현재의 호출 요청을 포함하는 호출 요청 메시지를 서버에 전송한다. 시스템은 서버로부터 호출 응답 메시지를 수신한다. 수신된 호출 응답 메시지의 각각의 호출 응답에 대해, 시스템은 호출 응답이 수신되었다는 표시를 애플리케이션에 제공한다.

Description

원격 객체에 대한 호출 요청의 연기
클라우드 기반 서비스는 종종 웹 브라우저를 통해 실행되는 애플리케이션을 통해 제공된다. 이러한 애플리케이션을 개발하기 위해, 프로그래머는 클라이언트의 웹 브라우저에 의해 실행되고 클라우드 데이터 센터의 서버의 서비스에 액세스하는 애플리케이션을 개발할 수 있다. 애플리케이션(또는 클라이언트 코드)은 전형적으로 사용자가 애플리케이션의 기능에 액세스할 수 있는 사용자 인터페이스를 제공한다. 예를 들어, 애플리케이션이 워드 프로세서이면, 애플리케이션은 편집 중인 문서의 내용, 워드 프로세서의 기능(예를 들어, 문서 열기 및 각주 삽입)에 액세스하기 위한 메뉴 바 등을 디스플레이한다. 편집 중인 문서는 서버에 저장된다. 따라서, 사용자가 문서를 열 것을 요청할 때, 애플리케이션은 서버에 열기 요청을 전송하고 문서의 적어도 일부의 사본을 수신한다. 애플리케이션은 문서의 내용을 디스플레이 한다. 사용자가 문서를 변경할 때, 애플리케이션은 디스플레이된 내용을 업데이트하고 서버에 메시지를 전송할 수 있다. 그 다음에 서버는 문서를 변경한다. 클라이언트와 서버 사이의 통신은 전형적으로 하이퍼텍스트 전송 프로토콜(Hypertext Transport Protocol)("HTTP") 요청 메시지(예를 들어, GET 메소드) 및 응답 메시지와 같은 표현 상태 전송(Representational State Transfer)("REST") 또는 RESTful 모델을 기초로 한다.
이러한 애플리케이션은 대부분의 브라우저가 자바스크립트(JavaScript) 애플리케이션의 실행을 지원하기 때문에 전형적으로 자바 스크립트로 작성된다. 이와 대조적으로, 자바스크립트는 해석된 언어이고 C# 및 C++는 실행 파일에서 컴파일되기 때문에, 전형적으로 서버 코드는 효율성을 이유로 자바스크립트 이외의 프로그래밍 언어, 예컨대, C# 또는 C++로 작성된다. 자바스크립트 및 C# 및 C++는 객체 지향 프로그래밍 언어이다. 객체 지향 프로그래밍 언어는 프로그램이 인스턴스화될 수 있는 객체의 타입을 정의하는 클래스를 명시하는 프로그래밍 모델을 지원한다. 클래스는 그 클래스의 객체에 대한 데이터 멤버 및 메소드(멤버 함수라고도 지칭함)를 정의한다. 각각의 메소드는 메소드의 이름, 메소드에 전달될 입력 파라미터의 타입 및 메소드에 의해 반환될 출력 파라미터의 타입을 명시하는 시그니처를 갖는다. 예를 들어, 문서 클래스는 문서를 열고, 문서를 수정하고, 문서를 저장하기 위한 메소드를 포함하도록 정의될 수 있다. 애플리케이션을 실행하는 동안, 특정 클래스의 객체가 인스턴스화된 이후에 애플리케이션은 객체로의 참조, 호출할 메소드의 표시 및 메소드에 전달될 입력 파라미터(만일 있다면)를 명시함으로써 객체의 메소드를 호출할 수 있다. 메소드가 완료될 때, 메소드는 출력 파라미터(만일 있다면)를 반환한다.
이러한 애플리케이션은 이전에는 웹 서비스 서술 언어(Web Services Description Language)("WSDL")에 의해 정의되는 웹 서비스 인터페이스를 사용하거나 또는 일부 다른 타입의 원격 프로시저 콜(remote procedure call)("RPC") 메커니즘을 사용하여 서버의 서비스에 액세스 해왔다. 불행하게도, 이러한 애플리케이션으로부터 서버에 이르기까지, 원격 메소드 호출(remote method invocation)(RMI)이라고도 지칭되는 객체 지향 RPC를 위한 지원은 거의 없다. 그 결과, 이러한 애플리케이션은 서버에 의해 호스팅되는 객체에 액세스할 때 종종 객체 지향 접근 방식을 사용하지 않는다.
서버에 의해 호스팅되는 원격 객체 클래스의 원격 객체의 원격 객체 메소드를 호출하기 위해 클라이언트에 의해 실행되는 애플리케이션을 위한 시스템이 제공된다. 애플리케이션은 원격 객체 멤버 함수와 동일한 시그니처를 가진 프록시 멤버 함수를 포함하는 프록시 클래스의 프록시를 인스턴스화한다. 애플리케이션은 객체 식별자를 프록시와 연관시킨다. 애플리케이션은 프록시의 프록시 멤버 함수를 호출한다. 호출된 프록시 멤버 함수의 제어하에, 애플리케이션은 프록시와 연관된 객체 식별자 및 원격 객체 멤버 함수의 식별자를 포함하는 호출 요청 메시지를 서버에 전송한다. 애플리케이션은 애플리케이션을 실행할 때 브라우저가 애드-온 기능성에 액세스할 필요 없이 브라우저에 의해 제공되는 기능성에 의존한다.
클라이언트의 애플리케이션의 프록시와 서버의 대응하는 원격 객체 사이의 속성 값을 동기화하기 위한 시스템이 제공된다. 애플리케이션은 원격 객체 클래스의 원격 객체에 대응하는 프록시 클래스의 프록시를 인스턴스화하며, 프록시 클래스는 프록시 게터(proxy getter)를 가진 속성을 명시한다. 애플리케이션은 호출 요청 메시지를 서버로 전송하여 원격 객체의 원격 객체 멤버 함수를 호출하고 호출 응답 메시지를 수신한다. 호출 응답 메시지가 속성 업데이트를 포함할 때, 애플리케이션은 호출 응답 메시지로부터 속성 업데이트의 속성 값을 추출하여 추출된 값을 프록시에 저장한다. 속성에 대한 프록시 게터가 호출될 때, 호출 요청 메시지를 서버에 보낼 필요없이 속성 값이 프록시로부터 검색될 수 있다.
클라이언트에서 실행 중인 애플리케이션이 서버의 원격 객체에 호출 요청을 전송하기 위한 시스템이 제공된다. 각각의 호출 요청은 애플리케이션이 원객 객체 클래스의 원격 객체에 대응하는 애플리케이션의 프록시 클래스의 프록시를 호출할 때 생성된다. 각각의 호출 요청에 대해, 호출 요청이 연기 가능할 때, 시스템은 호출 요청을 저장한다. 호출 요청이 연기 가능하지 않을 때, 시스템은 이전에 전송되지 않은 각각의 저장된 호출 요청 및 현재의 호출 요청을 포함하는 호출 요청 메시지를 서버에 전송한다. 시스템은 서버로부터 호출 응답 메시지를 수신한다. 수신된 호출 응답 메시지의 각각의 호출 응답에 대해, 시스템은 호출 응답이 수신되었다는 표시를 애플리케이션에 제공한다.
이러한 요약은 아래의 상세한 설명에서 더 자세히 설명되는 개념의 선택을 간략한 형태로 소개하기 위해 제공된다. 이러한 요약은 청구된 주제의 주요 특징 또는 필수 특징을 식별하려는 것이 아니며, 청구된 주제의 범위를 제한하는 데 사용하려는 것도 아니다.
도 1은 일부 실시예에서 애플리케이션 및 서버 컴포넌트의 데이터 구조를 도시하는 블록도이다.
도 2는 일부 실시예에서 동기적으로 호출되는 프록시의 메소드의 프로세싱을 도시하는 흐름도이다.
도 3은 일부 실시예에서 서버 컴포넌트의 요청 수신 컴포넌트(receive request component)의 프로세싱을 도시하는 흐름도이다.
도 4는 일부 실시예에서 클라이언트 컴포넌트의 응답 객체(response object)에 대한 응답 객체 클래스(response object class)의 파라미터 추출 메소드(extract parameters method)의 프로세싱을 도시하는 흐름도이다.
도 5는 일부 실시예에서 서버 컴포넌트의 응답 객체에 대한 응답 객체 클래스의 파라미터 저장 메소드(store parameters method)의 프로세싱을 도시하는 흐름도이다.
도 6은 일부 실시예에서 ID 테이블 객체 클래스(ID table object class)의 ID 검색 메소드(retrieve ID method)의 프로세싱을 도시하는 흐름도이다.
도 7은 일부 실시예에서 ID 테이블 객체의 참조 검색 메소드(retrieve reference method)의 프로세싱을 도시하는 흐름도이다.
도 8은 일부 실시예에서 참조를 전달 받는 ID 테이블 객체의 엔트리 추가 메소드(add entry method)의 프로세싱을 도시하는 흐름도이다.
도 9는 일부 실시예에서 엔트리를 전달 받는 ID 데이블 객체의 엔트리 추가 메소드(add entry method)의 프로세싱을 도시하는 흐름도이다.
도 10은 일부 실시예에서 원격 객체의 피어 호스팅을 지원하는 OORPC 시스템의 구현예를 도시하는 블록도이다.
도 11은 일부 실시예에서 OORPC 시스템에 의한 속성의 값의 동기화를 지원하는 데이터 구조를 도시하는 블록도이다.
도 12는 일부 실시예에서 서버 컴포넌트의 속성 값 겟 컴포넌트(get property values component)의 프로세싱을 도시하는 흐름도이다.
도 13은 일부 실시예에서 클라이언트 컴포넌트의 속성 값 저장 컴포넌트(store property values component)의 프로세싱을 도시하는 흐름도이다.
도 14는 일부 실시예에서 프록시 클래스를 위한 코드를 자동으로 생성하기 위한 OORPC 시스템의 코드 생성기를 도시하는 흐름도이다.
도 15는 일부 실시예에서 코드 생성기의 프록시 속성 처리 컴포넌트(process proxy properties component)의 프로세싱을 도시하는 흐름도이다.
도 16은 일부 실시예에서 클라이언트 컴포넌트의 요청 전송 컴포넌트(send request component)의 프로세싱을 도시하는 흐름도이다.
도 17은 일부 실시예에서 서버 컴포넌트의 요청 수신 컴포넌트(receive request component)의 프로세싱을 도시하는 흐름도이다.
서버 또는 다른 원격 디바이스에 의해 객체 지향 방식으로 원격으로 호스팅되는 객체에 액세스하기 위해 클라이언트에 의해 실행되는 애플리케이션을 위한 코드를 자동적으로 생성하기 위한 방법 및 시스템이 제공된다. "클라이언트"라는 용어는 컴퓨팅 디바이스를 지칭하고, "서버"라는 용어는 컴퓨팅 디바이스를 지칭한다. 일부 실시예에서, 객체 지향 원격 프로시저 콜(Object-Oriented Remote Procedure Call)("OORPC") 시스템은 서버에 의해 원격으로 호스팅되는 객체("원격 객체")의 원격 객체 클래스에 대한 인터페이스의 정의를 입력한다. 각각의 원격 객체 클래스에 대해, OORPC 시스템은 원격 객체 클래스의 프록시로서의 역할을 하는 프록시 클래스를 자동으로 생성한다. "프록시"는 주로 메소드가 대응하는 원격 객체를 호스트하는 서버에 호출 요청 메세지를 전송하는 객체이다. 전형적으로 프록시와 원격 객체 사이에는 일 대 일 대응 관계가 있다. 프록시 클래스는 대응하는 원격 객체 클래스와 동일한 인터페이스(즉, 동일한 메소드 및 메소드 시그니처)를 갖지만, 원격 객체 클래스의 코드와 상이한 코드를 갖는다. 프록시 클래스의 각 메소드에 대해, OORPC 시스템은 호출될 때, 프록시 클래스의 프록시에 대응하는 원격 객체를 호스트하는 서버에 호출 요청 메시지를 전송하는 그 메소드를 위한 코드를 생성한다. 호출 요청 메세지는 원격 객체, 메소드 및 메소드에 전달된 임의의 입력 파라미터를 식별한다. 또한, OORPC 시스템은 호출 응답 메시지가 원격 디바이스로부터 수신된 이후에, 호출 응답 메시지에서 식별된 임의의 출력 파라미터를 가진 메소드를 호출함으로써 반환되는 메소드를 위한 코드를 생성한다. 대안적으로, 메소드의 호출이 비동기적 호출이면, OORPC 시스템은 메소드의 일부가 아니고, 오히려 애플리케이션에게 메소드의 실행이 완료되었음을 신호하기 위해 호출되는 콜백 메소드의 일부일 수 있는 호출 응답 메시지를 처리하는 클라이언트 컴포넌트를 포함한다.
일부 실시예에서, OORPC 시스템은 각각의 프록시를 그에 대응하는 원격 객체에 매핑시키는 클라이언트 컴포넌트를 애플리케이션에 제공한다. 애플리케이션은 원격 객체를 인스턴스화하는 데 사용되는 생성 원격 객체(create remote object)에 대응하는 생성 프록시(create proxy)를 가질 수 있다. 생성 프록시의 각각의 메소드는 특정의 원격 객체 클래스의 원격 객체를 인스턴스화하기 위해 호출될 수 있다. 각각의 메소드는 생성 원격 객체에 관한 대응하는 메소드를 호출하여 원격 객체 클래스의 원격 객체를 인스턴스화하기 위해, "스텁(stub)"이라고 지칭되는 서버 컴포넌트에 호출 요청 메세지를 전송한다. 또한, 각각의 메소드는 원격 객체에 대한 프록시를 인스턴스화하고 그 프록시로의 참조를 반환한다. 예를 들어, 생성 프록시는 문서 원격 객체(document remote object)를 인스턴스화하기 위해 생성 원격 객체의 문서 생성 메소드(create document method)의 호출을 요청하는 호출 요청 메시지를 서버 컴포넌트에 전송하는 문서 생성 메소드를 가질 수 있다. 인스턴스화된 문서 원격 객체에는 (애플리케이션 또는 서버 코드에 의해) 객체 식별자가 할당될 수 있다. 생성 프록시의 문서 생성 메소드는 또한 문서 원격 객체에 대응하는 문서 프록시를 인스턴스화하고 문서 프록시로의 참조(예를 들어, 문서 프록시의 주소)를 객체 식별자에 매핑한다. 그런 다음 생성 프록시의 문서 생성 메소드는 문서 프록시로의 참조를 반환한다. 이어서 애플리케이션이 참조에 의해 표시된 대로 문서 프록시의 메소드를 호출할 때, 그 메소드는 그 참조를 사용하여 문서 원격 객체의 객체 식별자를 검색한다. 그런 다음 그 메소드는 객체 식별자를 포함하는 위에서 설명한 바와 같은 호출 요청 메시지를 서버 컴포넌트에 전송하여 서버 컴포넌트에게 문서 원격 객체를 식별시킨다.
서버 컴포넌트가 호출 요청 메시지를 수신할 때, 서버 컴포넌트는 호출 요청 메시지로부터 객체 식별자, 메소드 식별자 및 임의의 입력 파라미터를 추출한다. 서버 컴포넌트는 객체 식별자에 의해 식별되는 원격 객체로의 참조를 검색하고 입력 파라미터를 전달하는 식별된 메소드를 호출한다. 메서드가 반환될 때, 서버 컴포넌트는 객체 식별자, 메소드 식별자 및 임의의 출력 파라미터를 포함하는 호출 응답 메시지를 클라이언트에 전송한다.
일부 실시예에서, 생성 프록시 및 생성 원격 객체는 애플리케이션 및 서버 컴포넌트의 초기화 동안 각각 다른 것과 독립적으로 인스턴스화된다. 즉, 애플리케이션은 서버 컴포넌트와 통신하지 않고 생성 프록시를 인스턴스화하고 서버 컴포넌트는 애플리케이션과 통신하지 않고 생성 원격 객체를 인스턴스화한다. 애플리케이션 및 서버 컴포넌트는 둘 모두 생성 프록시 및 생성 원격 객체를 식별하기 위해 (예를 들어, 미리 정의된) 동일한 객체 식별자를 할당하여, 애플리케이션이 생성 프록시의 메소드를 호출할 때, 서버로 전송되는 호출 요청 메시지에 생성 원격 객체의 객체 식별자가 포함되도록 한다. 서버 컴포넌트가 생성 원격 객체의 메소드를 호출한 이후에, 서버 컴포넌트는 새로 생성된 원격 객체로의 참조를 반환한다. 그런 다음 서버 컴포넌트는 새로 생성된 원격 객체의 객체 식별자를 생성하고, 객체 식별자를 참조에 매핑시키며, 객체 식별자 및 호출되었던 메소드의 메소드 식별자를 포함하는 호출 응답 메시지를 전송한다. 애플리케이션이 호출 응답 메시지를 수신할 때, 애플리케이션은 대응하는 프록시로의 참조에 객체 식별자를 매핑한다. 이러한 방식으로, 대응하는 프록시의 메소드가 나중에 호출될 때, 메소드는 원격 객체의 객체 식별자를 호출 요청 메시지에 포함시킬 수 있다.
일부 실시예에서, OORPC 시스템은 호출 요청 메시지 기준 전송(send invocation request message criterion)이 만족될 때까지 호출 요청을 전송하지 않을 수 있다. 호출 요청 메시지 기준 전송이 만족될 때, OORPC 시스템은 아직 전송되지 않은 각각의 호출 요청을 포함하는 호출 요청 메시지를 전송한다. 예를 들어, 프록시 클래스의 메소드는 (예를 들어, 원격 객체 클래스의 인터페이스와 연관된 메타데이터를 통해) 연기 가능한 또는 연기 가능하지 않은 것으로 지정될 수 있다. 애플리케이션이 연기 가능한 메소드를 호출하면, OORPC 시스템은 객체 식별자, 메소드 식별자 및 임의의 입력 파라미터를 포함하는 호출 요청을 생성하고 호출 요청을 큐에 넣는다(queue). 애플리케이션이 연기 가능하지 않은 메소드를 호출할 때, OORPC 시스템은 큐에 넣어진 호출 요청 및 현재 호출에 대한 호출 요청을 포함하는 호출 요청 메시지를 전송한다. 호출 요청 메시지 기준 전송은 연기 가능하지 않은 메소드가 호출될 때 만족될 수 있다. 호출 요청 메시지 전송은 호출 요청이 특정 기간 동안 큐에 넣어졌을 때, 특정 개수의 호출 요청이 큐에 넣어졌을 때, 및/또는 애플리케이션이 호출 요청 메시지가 전송될 것을 지시할 때 등일 때 유사하게 만족될 수 있다.
서버 컴포넌트가 다수의 호출 요청이 있는 호출 요청 메시지를 수신할 때, 서버 컴포넌트는 호출 요청을 이들 호출 요청이 큐에 넣어졌던 순서로 처리한다. 호출 요청의 완료 이후에, 서버 컴포넌트는 호출 요청 메시지의 각 호출 요청에 대한 호출 응답을 포함하는 호출 응답 메시지를 전송한다. 애플리케이션이 호출 응답 메시지를 수신할 때, 애플리케이션은 호출 응답을 이에 대응하는 호출 요청 순서로 처리한다.
일부 실시예에서, OORPC 시스템은 클라이언트에서 로컬로 원격 객체의 속성의 값을 저장하기 위한 지원을 제공한다. OORPC 시스템이 원격 객체 클래스에 대한 프록시 클래스를 생성할 때, OORPC 시스템은 다른 메소드와 상이하게 속성에 대한 게터 메소드("getter")를 생성한다. OORPC 시스템은 속성의 값을 검색하기 위해 호출 요청 메시지를 서버에 전송하기 보다는, 로컬로 저장된 속성의 값을 검색하고 그 값을 반환하는 게터 메소드를 생성한다. 로컬로 저장된 프록시의 속성의 값이 대응하는 원격 객체에 의해 저장된 값과 동기화되는 것을 보장하기 위해, 서버 컴포넌트는 마지막 호출 응답 메시지가 전송되었기 때문에 그 값이 변경된 원격 객체의 각 속성에 대한 속성 업데이트를 각 호출 응답 메세지에 첨부할 수 있다. 서버 컴포넌트는 각 속성에 대해 마지막으로 전송되었던 값의 리스트를 유지할 수 있으며, 호출 응답 메세지를 전송할 때, 서버 컴포넌트는 각 원격 객체의 각 속성에 대한 게터 메소드를 호출하여 변경되었던 값을 식별할 수 있다.
애플리케이션이 속성 업데이트를 가진 호출 응답 메시지를 수신할 때, 애플리케이션은 속성 업데이트의 새로운 값을 대응하는 프록시에 저장한다. OORPC 시스템이 원격 객체 클래스의 인터페이스로부터 프록시 클래스를 생성할 때, OORPC 시스템은 각각의 프록시 클래스에 대한 저장 클래스(store class)를 생성할 수 있다. 저장 클래스는 각 속성의 식별자(예를 들어, 속성 이름의 해시)를 속성의 타입(예를 들어, 정수) 및 그 속성의 값을 저장하기 위한 저장 클래스의 메소드에 매핑하는 테이블을 포함할 수 있다. OORPC 시스템은 그 프록시 클래스에 대한 인스턴스 저장 클래스(instance store class)인 저장 객체로의 참조인 정적 데이터 멤버(static data member)를 프록시 클래스에 추가할 수 있다. OORPC 시스템은 속성에 대한 새로운 값을 수신할 때, 호출 응답 메시지 내의 속성 업데이트로부터 원격 객체의 객체 식별자, 속성의 식별자 및 속성의 값을 검색한다. OORPC 시스템은 객체 식별자를 사용하여 대응하는 프록시로의 참조를 검색하고 그 프록시로부터 저장 객체로의 참조를 검색한다. 그런 다음 OORPC 시스템은 프록시로의 참조 및 값을 전달하는 속성에 대응하는 저장 객체의 저장 메소드를 호출한다. 저장 메소드는 값을 프록시에 저장한다.
도 1은 일부 실시예에서 애플리케이션 및 서버 컴포넌트의 데이터 구조를 도시하는 블록도이다. 클라이언트(110)는 애플리케이션(111)을 실행하고, 서버(120)는 서버 컴포넌트(121)를 실행한다. 애플리케이션 및 서버 컴포넌트는 의사 코드로 표현된다. 초기화 동안, 클라이언트에서 실행 중인 OORPC 시스템의 클라이언트 컴포넌트(119)는 ID 테이블 객체(113)를 인스턴스화할 수 있고, OORPC 시스템의 컴포넌트인 서버 컴포넌트는 ID 테이블 객체(123)를 인스턴스화할 수 있다. ID 테이블 객체는 프록시 및 원격 객체의 객체 식별자와 ID 테이블 객체의 ID 테이블에 있는 이들의 대응하는 참조와의 맵핑을 저장하고 검색하는 메소드를 제공한다. 애플리케이션은 생성 프록시(112)를 인스턴스화하고, 서버 컴포넌트는 대응하는 생성 원격 객체(122)를 인스턴스화한다. 클라이언트 컴포넌트는 생성 프록시에 대한 객체 식별자(예를 들어, 1)와 생성 프록시로의 참조("S")(예를 들어, 그의 주소)의 매핑을 ID 테이블 객체(113)에 추가하고, 서버 컴포넌트는 생성 원격 객체에 대한 객체 식별자와 생성 원격 객체로의 참조의 매핑을 ID 테이블 객체(123)에 추가한다. 서버 컴포넌트는 클라이언트로부터 호출 요청을 수신하기를 기다린다. 클라이언트의 프록시에 대한 객체 식별자 및 서버의 대응하는 원격 객체에 대한 객체 식별자는 동일한 값을 갖는다.
원격 객체 클래스의 원격 객체를 생성하기 위해, 애플리케이션은 원격 객체 클래스의 원격 객체를 생성하기 위한 생성 프록시의 메소드를 호출한다. 예를 들어, 원격 객체 클래스가 "X"라고 명명되면, 애플리케이션은 생성 프록시의 X생성 메소드를 호출하여 원격 객체 클래스 X의 원격 객체를 생성할 수 있다. 생성 프록시의 X생성 메소드는 생성 원격 객체의 객체 식별자("req.ID"), X생성 메소드의 메소드 식별자("req.method") 및 임의의 입력 파라미터("req.inparam")를 포함하는 호출 요청 메시지("req")를 서버에 전송한다. 클라이언트 컴포넌트는 전송될 호출 요청 메시지의 데이터를 저장할 요청 객체(117) 및 수신된 호출 응답 메시지의 데이터를 저장할 응답 객체(118)를 인스턴스화할 수 있다. 유사하게, 서버 컴포넌트는 수신된 호출 요청 메시지의 데이터를 저장할 요청 객체(127) 및 전송될 호출 응답 메시지의 데이터를 저장할 응답 객체(128)를 인스턴스화할 수 있다.
호출 요청 메시지를 수신하면, 서버 컴포넌트는 호출 요청 메시지로부터 객체 식별자를 추출하고, 객체 식별자를 전달하는 자신의 ID 테이블 객체의 참조 검색 메소드(retrieve reference method)("retrievalf)를 호출하여 생성 원격 객체로의 참조를 검색한다. 그 다음에 서버 컴포넌트는 요청 객체의 추출 메소드(extract method)("extract")를 호출하여 임의의 입력 파라미터("inparam")를 추출한다. 그런 다음 서버 컴포넌트는 요청 객체로부터 X생성 메소드의 메소드 식별자를 추출한다. 그 다음에 서버 컴포넌트는 생성 원격 객체로의 참조 및 X생성 메소드의 식별자를 사용하여 입력 파라미터를 전달하는 생성 원격 객체의 X생성 메소드를 호출한다. X생성 메소드는 클래스 X의 원격 객체("X2 객체")를 인스턴스화하고 원격 객체(124)로의 참조인 출력 파라미터를 반환한다. 의사 코드로 도시되지는 않았지만, 서버 컴포넌트는 또한 ID 테이블 객체(123)의 엔트리 추가 메소드(add entry method)를 호출하여 자신의 ID 테이블에다 원격 객체(124)에 대한 객체 식별자("2")를 원격 객체(124)로의 참조("X2")에 매핑하고 응답 객체("res")에다 객체 식별자("res.ID") 및 X생성 메소드의 식별자("res.method")를 추가한다. 그 다음에 서버 컴포넌트는 응답 객체의 저장 메소드(store method)("store")를 호출하여 임의의 출력 파라미터를 저장한다. 그런 다음 서버 컴포넌트는 응답 객체에 기초하여 호출 응답 메시지를 클라이언트에 전송한다.
호출 응답 메시지를 수신하면, 클라이언트 컴포넌트는 호출 응답 메시지에 기초하여 응답 객체를 인스턴스화한다. 그런 다음 클라이언트 컴포넌트는 프록시(114)("X2 프록시")를 인스턴스화하고 ID 테이블 객체(113)의 엔트리 추가 메소드를 호출하여 자신의 ID 테이블에다 프록시(114)에 대한 객체 식별자("2")와 프록시(114)로의 참조("X2")의 맵핑을 추가한다. X생성 메소드의 호출이 동기화되었다면, X생성 메소드는 프록시(114)로의 참조와 함께 반환한다.
원격 객체(124) 및 그에 대응하는 프록시(114)가 인스턴스화된 이후에, 애플리케이션은 입력 파라미터("in")의 표시를 전달하는 프록시(114)의 메소드를 호출한다. 호출된 메소드는 클라이언트 컴포넌트를 호출하여 프록시(114)의 객체 식별자("2"), 메소드 식별자 및 입력 파라미터를 포함하는 요청 객체를 생성하고 요청 객체에 기초하여 호출 요청 메시지를 서버에 전송할 수 있다. 호출 응답 메시지를 수신하면, 서버 컴포넌트는 ID 테이블 객체로부터 원격 객체(124)로의 참조를 검색하고, 입력 파라미터를 전달하는 식별된 원격 객체(124)의 식별된 메소드를 호출한다. 메소드가 반환할 때, 서버 컴포넌트는 원격 객체(124)의 객체 식별자("2"), 메소드 식별자 및 임의의 출력 파라미터를 포함하는 응답 객체를 생성한다. 그런 다음 서버 컴포넌트는 응답 객체에 기초하여 호출 응답 메시지를 클라이언트에 전송한다. 호출 응답 메시지를 수신하면, 클라이언트 컴포넌트는 메소드가 반환하였던 출력 파라미터 및 신호를 추출하여 동기 또는 비동기 호출 프로세싱에 영향을 준다.
그 다음, 애플리케이션은 서버에서 원격 객체(125)("X3 객체") 및 원격 객체(126)("Y4 객체")의 생성을 수행하고, 클라이언트에서 대응하는 프록시(115)("X3 프록시") 및 대응하는 프록시(116)("Y4 프록시")를 수행하는 생성 프록시의 X생성 메소드 및 생성Y 메소드를 호출할 수 있다. 그 다음, 애플리케이션은 프록시(115) 및 프록시(116)의 대응하는 메소드를 호출함으로써 원격 객체(125) 및 원격 객체(126)의 메소드를 호출할 수 있다.
OORPC 시스템이 구현될 수 있는 컴퓨팅 시스템(예를 들어, 클라이언트, 서버, 클라이언트 디바이스, 서버 디바이스)은 중앙 프로세싱 유닛, 입력 디바이스, 출력 디바이스(예를 들어, 디스플레이 디바이스 및 스피커), 저장 디바이스(예를 들어, 메모리 및 디스크 드라이브), 네트워크 인터페이스, 그래픽 프로세싱 유닛, 가속도계, 셀룰러 무선 링크 인터페이스, 글로벌 포지셔닝 시스템 디바이스 등을 포함할 수 있다. 컴퓨팅 시스템은 데이터 센터의 서버, 대용량 병렬 시스템 등을 포함할 수 있다. 컴퓨팅 시스템은 컴퓨터 판독 가능 저장 매체 및 데이터 전송 매체를 포함하는 컴퓨터 판독 가능 매체에 액세스할 수 있다. 컴퓨터 판독 가능 저장 매체는 일시적인 전파 신호를 포함하지 않는 유형의 저장 수단이다. 컴퓨터 판독 가능 저장 매체의 예는 1차 메모리, 캐시 메모리, 및 2차 메모리(예를 들어, DVD) 및 다른 저장소와 같은 메모리를 포함한다. 컴퓨터 판독 가능 저장 매체는 그 위에 기록될 수 있거나 OORPC 시스템을 구현하는 컴퓨터 실행 가능 명령어 또는 로직으로 인코딩될 수 있다. 데이터 전송 매체는 유선 또는 무선 연결을 통해 일시적 전파 신호 또는 반송파(예를 들어, 전자기)를 통해 데이터를 전송하는 데 사용된다.
OORPC 시스템은 하나 이상의 컴퓨터, 프로세서, 또는 다른 디바이스에 의해 실행되는 프로그램 모듈 및 컴포넌트와 같은 컴퓨터 실행 가능 명령어의 일반적인 맥락에서 설명될 수 있다. 일반적으로, 프로그램 모듈 또는 컴포넌트는 특정 작업을 수행하거나 특정 데이터 타입을 구현하는 루틴, 프로그램, 객체, 데이터 구조 등을 포함한다. 전형적으로, 프로그램 모듈의 기능성은 다양한 실시예에서 요구되는 바와 같이 결합되거나 분산될 수 있다. OORPC 시스템의 양태는 예를 들어 주문형 집적 회로(application-specific integrated circuit)(ASIC)를 사용하여 하드웨어로 구현될 수 있다.
도 2는 일부 실시예에서 동기적으로 호출되는 프록시의 메소드의 프로세싱을 도시하는 흐름도이다. OORPC 시스템의 코드 생성기에 의해 자동으로 생성되는 메소드(200)는 하나 이상의 입력 파라미터를 전달 받고 하나 이상의 출력 파라미터를 반환한다. 메소드는 호출 요청 메시지를 서버에 전송하고 호출 응답 메시지를 수신한다. 블록(202)에서, 방법은 프록시로의 참조("this")를 전달하는 ID 테이블 객체의 식별자 검색 메소드를 호출하여 프록시의 객체 식별자를 검색한다. 메소드는 프록시의 객체 식별자를 요청 객체에 저장한다. 블록(204)에서, 메소드는 메소드 식별자를 요청 객체에 추가한다. 블록(206)에서, 메소드는 요청 객체의 파라미터 저장 메소드(store parameters method)를 호출하여 입력 파라미터를 저장한다. 블록(208)에서, 메소드는 요청 객체에 기초하는 호출 요청 메시지를 서버에 전송한다. 블록(210)에서, 메소드는 서버로부터 호출 응답 메시지를 수신하고 응답 객체를 생성한다. 블록(212)에서, 메소드는 응답 객체의 파라미터 추출 메소드를 호출하여 입력 파라미터를 추출한다. 그 다음에 방법은 완료된다. 일부 실시예에서, 메소드는 클라이언트 컴포넌트를 호출하여 블록(202 내지 212)의 프로세싱을 수행할 수 있다.
도 3은 일부 실시예에서 서버 컴포넌트의 요청 수신 컴포넌트(receive request component)의 프로세싱을 도시하는 흐름도이다. 요청 수신 컴포넌트(300)는 클라이언트로부터 호출 요청 메시지가 수신되고 호출 요청 메시지에 기초한 요청 객체를 전달 받을 때 호출된다. 컴포넌트는 원격 객체의 메소드를 호출하고 호출 응답 메세지를 클라이언트에 전송한다. 블록(302)에서, 컴포넌트는 요청 객체로부터 원격 객체의 객체 식별자를 추출하고 객체 식별자를 전달하는 ID 테이블 객체의 참조 검색 메소드를 호출하며, 원격 객체로의 참조를 수신한다. 블록(304)에서, 컴포넌트는 요청 객체로부터 메소드 식별자를 추출한다. 블록(306)에서, 컴포넌트는 요청 객체의 파라미터 추출 메소드를 호출하여 입력 파라미터를 추출한다. 블록(308)에서, 컴포넌트는 입력 파라미터를 전달하고 반환이 오면 임의의 출력 파라미터를 수신하는, 원격 객체의 식별자 메소드를 호출한다. 블록(310)에서, 컴포넌트는 객체 식별자, 메소드 식별자 및 출력 파라미터를 포함하는 응답 객체를 생성한다. 블록(312)에서, 컴포넌트는 응답 객체에 기초하는 호출 응답 메시지를 클라이언트에 전송한 다음 완료된다.
도 4는 일부 실시예에서 클라이언트 컴포넌트의 응답 객체에 대한 응답 객체 클래스의 파라미터 추출 메소드의 프로세싱을 도시하는 흐름도이다. 파라미터 추출 메소드(400)는 클라이언트 컴포넌트에 의해 호출되어 호출된 메소드에 의해 반환되는 출력 파라미터를 추출한다. 블록(402)에서, 메소드는 첫 번째로 시작하는 다음 출력 파라미터를 선택한다. 결정 블록(404)에서, 모든 출력 파라미터가 이미 선택되었다면, 메소드는 완료되고, 그렇지 않으면 메소드는 블록(406)에서 계속된다. 결정 블록(406)에서, 선택된 출력 파라미터가 원격 객체의 식별자이면, 메소드는 블록(410)에서 계속되고, 그렇지 않으면 메소드는 블록(408)에서 계속된다. 블록(408)에서, 컴포넌트는 선택된 출력 파라미터를 출력 파라미터로서 저장한 다음, 블록(402)으로 루프하여 다음 출력 파라미터를 선택한다. 블록(410)에서, 메소드는 ID 테이블 객체의 참조 검색 메소드를 호출하여 응답 객체에서 식별된 원격 객체로의 참조를 검색한다. 결정 블록(412)에서, 참조가 널(null)이면, 원격 객체의 프록시가 인스턴스화되지 않은 것이고 메소드는 블록(414)에서 계속되며, 그렇지 않으면 메소드는 블록(422)에서 계속된다. 블록(414)에서, 메소드는 원격 객체의 클래스에 대한 프록시를 인스턴스화한다. OORPC 시스템의 코드 생성기는 호출된 메소드의 시그니처로부터, 원격 객체의 클래스 및 보다 일반적으로는 임의의 파라미터의 타입을 식별할 수 있다. 블록(416 및 418)에서, 메소드는 ID 테이블에 대한 엔트리를 생성한다. 블록(420)에서, 메소드는 ID 테이블 객체의 엔트리 추가 메소드를 호출하여 엔트리를 저장하고, 그런 다음 블록(422)에서 계속된다. 블록(422)에서, 컴포넌트는 출력 파라미터를 반환된 참조에 설정한 다음 블록(402)으로 루프하여 응답 객체의 다음 출력 파라미터를 선택한다.
도 5는 일부 실시예에서 서버 컴포넌트의 응답 객체에 대한 응답 객체 클래스의 파라미터 저장 메소드의 프로세싱을 도시하는 흐름도이다. 파라미터 저장 메소드(500)는 응답 객체에 저장될 출력 파라미터를 전달 받는다. 블록(502)에서, 메소드는 다음 출력 파라미터를 선택한다. 결정 블록(504)에서, 모든 출력 파라미터가 이미 선택되었다면, 방법은 완료되고, 그렇지 않으면 방법은 블록(506)에서 계속된다. 결정 블록(506)에서, 출력 파라미터가 객체로의 참조이면, 컴포넌트는 블록(508)에서 계속되고, 그렇지 않으면 컴포넌트는 블록(510)에서 계속된다. 블록(508)에서, 컴포넌트는 ID 테이블 객체의 ID 검색 메소드를 호출하여 참조에 대응하는 객체 식별자를 검색하고 출력 파라미터를 참조에 설정한다. 블록(510)에서, 컴포넌트는 출력 파라미터를 응답 객체에 저장한 다음, 블록(502)으로 루프하여 다음 출력 파라미터를 선택한다. 도시되지는 않았지만, 요청 객체는 또한 응답 객체의 방식과 유사한 방식으로 기능하는 파라미터 추출 메소드 및 파라미터 저장 메소드를 갖는다.
도 6 내지 도 9는 일부 실시예에서 ID 테이블 객체 클래스의 메소드를 도시하는 흐름도이다. 도 6은 일부 실시예에서 ID 테이블 객체 클래스의 ID 검색 메소드의 프로세싱을 도시하는 흐름도이다. ID 검색 메소드(600)는 객체로의 참조를 전달 받고 그 참조에 대응하는 객체 식별자를 반환한다. 블록(602)에서, 메소드는 ID 테이블의 다음 엔트리를 선택한다. 결정 블록(604)에서, 모든 엔트리가 이미 선택되었다면, 메소드는 참조에 대한 엔트리가 ID 테이블에 존재하지 않음을 표시하기 위해 널 값을 반환하고, 그렇지 않으면 메소드는 블록(606)에서 계속된다. 결정 블록(606)에서, 선택된 엔트리의 참조가 전달된 참조와 매칭하면, 메소드는 그 엔트리의 객체 식별자의 표시를 반환하고, 그렇지 않으면 메소드는 블록(602)으로 루프하여 ID 테이블의 다음 엔트리를 선택한다.
도 7은 일부 실시예에서 ID 테이블 객체의 참조 검색 메소드의 프로세싱을 도시하는 흐름도이다. 참조 검색 메소드(700)는 객체 식별자를 전달 받고 그 객체 식별자에 대응하는 참조를 반환한다. 블록(702)에서, 메소드는 ID 테이블의 다음 엔트리를 선택한다. 결정 블록(704)에서, 모든 엔트리가 이미 선택되었다면, 메소드는 객체 식별자에 대한 엔트리가 ID 테이블에 존재하지 않음을 표시하기 위해 널 값을 반환하고, 그렇지 않으면 메소드는 블록(706)에서 계속된다. 결정 블록(706)에서, 선택된 엔트리의 객체 식별자가 전달된 객체 식별자와 매칭하면, 메소드는 선택된 엔트리의 참조를 반환하고, 그렇지 않으면 메소드는 블록(702)으로 루프하여 ID 테이블의 다음 엔트리를 선택한다.
도 8는 일부 실시예에서 참조를 전달 받는 ID 테이블 객체의 엔트리 추가 메소드의 프로세싱을 도시하는 흐름도이다. 엔트리 추가 메소드(800)는 객체(즉, 프록시 또는 원격 객체)로의 참조를 전달 받고 ID 테이블이 이미 그 참조에 대한 엔트리를 포함하고 있지 않으면 그 참조에 대한 엔트리를 ID 테이블에다 추가한다. 블록(802)에서, 메소드는 ID 테이블이 참조에 대응하는 엔트리를 가지고 있다면 참조를 전달하는 이러한 ID 테이블 객체의 ID 검색 메소드를 호출하여 객체 식별자를 호출한다. 결정 블록(804)에서, 반환된 객체 식별자가 널이면, ID 테이블에는 대응하는 엔트리가 포함되어 있지 않은 것이고 메소드는 블록(806)에서 계속되며, 그렇지 않으면 메소드는 객체 식별자를 반환한다. 블록(806)에서, 메소드는 객체 식별자를 ID 테이블 객체의 다음 객체 식별자 필드에 설정하고 다음 객체 식별자 필드를 증가시킨다. 블록(808 및 810)에서, 메소드는 참조에 대한 엔트리를 초기화한다. 블록(812)에서, 메소드는 엔트리를 ID 테이블에 첨부한 다음, 객체 식별자의 표시를 반환한다.
도 9은 일부 실시예에서 엔트리를 전달 받는 ID 데이블 객체의 엔트리 추가 메소드의 프로세싱을 도시하는 흐름도이다. 엔트리 추가 메소드(900)는 엔트리가 이미 ID 테이블에 존재하지 않으면 ID 테이블에 추가될 엔트리를 전달 받는다. 블록(902)에서, 메소드는 엔트리의 참조를 전달하는 이러한 ID 테이블 객체의 ID 검색 메소드를 호출한다. 결정 블록(904)에서, 엔트리가 널이면, ID 테이블에는 그 엔트리가 포함되어 있지 않은 것이고 메소드는 블록(906)에서 계속되며, 그렇지 않으면 메소드는 반환한다. 블록(906)에서, 메소드는 엔트리를 ID 테이블에 추가한 다음 반환한다.
일부 실시예에서, OORPC 시스템은 클라이언트 및 서버가 둘 모두 다른 것에 의해 원격으로 액세스되는 원격 객체를 호스팅할 수 있게 한다. 따라서 클라이언트와 서버는 둘 다 원격 객체를 호스팅하는 의미에서 피어라고 간주될 수 있다. 예를 들어, 문서가 여러 클라이언트에 의해 협업 환경에서 처리 중이면, 각 클라이언트는 객체를 서버에 등록하여 문서의 변경 사항에 관한 이벤트 통지를 수신할 수 있다. 이 경우, 클라이언트는 클라이언트에 의해 인스턴스화되는 이벤트 청취자 객체(event listener object)를 전달하는 문서 프록시의 등록 메소드를 호출할 수 있다. 클라이언트는 서버에서 원격으로 호스팅되는 객체에 대한 프록시로의 참조에 객체 식별자를 매핑하기 위한 프록시 ID 테이블 및 클라이언트에 의해 로컬로 호스팅되는 객체로의 참조에 객체 식별자를 매핑하는 객체 ID 테이블을 유지할 수 있다. 유사하게, 서버는 클라이언트에 의해 원격으로 호스팅되는 객체에 대한 프록시로의 참조에 객체 식별자를 매핑하기 위한 프록시 ID 테이블 및 객체 식별자를 서버에 의해 로컬로 호스팅되는 객체로의 참조에 객체 식별자를 매핑하는 객체 ID 테이블을 유지할 수 있다. 문서 프록시의 등록 메소드는 이벤트 청취자 객체에 대한 엔트리를 객체 ID 테이블에 추가하고, 엔트리의 객체 식별자를 입력 파라미터로서 등록 메소드에 대한 호출 요청 메시지에 포함시킬 수 있다. 서버가 호출 요청 메시지를 수신하면, 서버 컴포넌트는 객체 식별자 테이블 및 프록시 ID 테이블을 둘 모두 검색하여 매칭하는 객체 식별자를 갖는 엔트리를 찾을 수 있다. 그러한 엔트리가 발견되면, 서버 컴포넌트는 객체 식별자를 등록 메소드로의 입력 파라미터로서 엔트리의 참조로 대체한다. 그러한 엔트리가 발견되지 않으면, 서버 컴포넌트는 이벤트 청취자 객체에 대한 이벤트 청취자 프록시를 인스턴스화하고 객체 식별자를 이벤트 청취자 객체 프록시로의 참조에 매핑하는 프록시 ID 테이블에 엔트리를 추가한다. 그 다음에 서버 컴포넌트는 청취자 프록시로의 참조를 전달하는 문서 원격 객체의 등록 메소드를 호출한다. 서버 컴포넌트가 이벤트를 애플리케이션에 전송할 때, 서버 코드는 호출 요청 메시지를 클라이언트에 전송하는, 청취자 프록시의 이벤트 메소드를 호출한다. 클라이언트가 호출 요청 메시지를 수신할 때, 클라이언트 컴포넌트는 서버의 서버 컴포넌트가 호출 요청 메시지를 처리하는 것과 거의 동일한 방식으로 호출 요청 메시지를 처리한다. 이러한 방법으로, 클라이언트와 서버는 둘 모두 다른 것에 의해 원격으로 호스팅되는 원격 객체의 메소드를 호출할 수 있다.
일부 실시예에서, 원격 객체의 객체 메소드는 값으로 전달되는 입력 파라미터 및/또는 출력 파라미터를 가질 수 있다. 입력 파라미터를 값으로 전달하기 위해, 원격 객체에 대응하는 프록시의 프록시 메소드는 입력 파라미터의 값을 검색하고 검색된 값을 호출 요청 메시지에 추가한다. 입력 파라미터 자체가 서버에 의해 호스팅되는 원격 객체라면, 프록시 메소드는 서버에 호출 요청 메세지를 전송하여 그 값을 검색할 수 있다. 유사하게, 출력 파라미터를 값으로 반환할 때, 객체 메소드는 출력 파라미터의 값을 검색하고 검색된 값을 호출 응답 메시지에 추가한다. 일부 실시예에서, 입력 파라미터 또는 출력 파라미터는 다수의 객체를 포함하는 데이터 구조일 수 있다. 이러한 데이터 구조인 입력 파라미터를 전달하기 위해, 프록시 메소드는 데이터 구조 내 각 객체의 객체 식별자를 검색하고 각 객체 식별자를 호출 요청 메시지에 추가한다. 예를 들어, 데이터 구조가 에레이라면, 어레이의 각 원소에 대한 프록시 메소드는 원소를 선택하고, 선택된 원소의 객체 식별자를 검색한 다음, 검색된 객체 식별자를 호출 요청 메시지에 추가한다. 어레이인 출력 파라미터를 전달하기 위해, 객체 메서드는 유사한 방식으로 어레이의 원소를 처리한다. 입력 파라미터 또는 출력 파라미터의 데이터 구조는 서버 상에서 호스팅되는 객체 및 클라이언트 상에서 호스팅되는 객체를 포함할 수 있다. 이러한 입력 파라미터를 처리할 때, 프록시 메소드는 각 객체의 객체 식별자를 호출 요청 메시지에 추가한다. 호출 요청 메시지를 수신하면, 서버 컴포넌트는 객체 식별자 테이블 또는 프록시 식별자 테이블로부터 객체로의 참조를 검색하고, 검색된 참조를 전달하는 객체 메소드를 호출한다. 서버 컴포넌트는 아직 인스턴스화되지 않았다면 대응하는 객체 또는 프록시를 인스턴스화할 수 있다.
도 10은 일부 실시예에서 원격 객체의 피어 호스팅을 지원하는 OORPC 시스템의 구현예를 도시하는 블록도이다. 클라이언트(1010)는 프록시 ID 테이블 객체(1011)와 객체 ID 테이블 객체(1015)를 포함한다. 프록시 ID 테이블 객체(1011)는 프록시(1012)에 대한 엔트리를 포함하는 ID 테이블을 포함하고, 객체 ID 테이블 객체(1015)는 원격 객체(1016)에 대한 엔트리를 포함하는 ID 테이블을 포함한다. 서버(1020)는 객체 ID 테이블 객체(1021) 및 프록시 ID 테이블 객체(1025)를 포함한다. 객체 ID 테이블 객체(1021)는 각 객체(1022)에 대한 엔트리를 포함하는 ID 테이블을 포함하고, 프록시 ID 테이블 객체(1025)는 각 프록시(1026)에 대한 엔트리를 포함하는 ID 테이블을 포함한다.
도 11은 일부 실시예에서 OORPC 시스템에 의한 속성 값의 동기화를 지원하는 데이터 구조를 도시하는 블록도이다. 클라이언트(1110)는 원격 객체 클래스 X의 원격 객체에 대한 프록시(1112 및 1113)에 대한 엔트리를 포함하고 원격 객체 클래스 Y의 원격 객체에 대한 프록시(1114)에 대한 엔트리를 포함하는 ID 테이블을 갖는 ID 테이블 객체(1111)를 포함한다. 각 프록시는 자신의 원격 객체 클래스에 대한 저장 객체를 참조하기 위한 정적 데이터 멤버를 포함한다. 프록시(1112 및 1113)는 원격 객체 클래스 X에 대한 저장 객체(1115)로의 참조를 포함하고, 프록시(1114)는 원격 객체 클래스 Y에 대한 저장 객체(1116)로의 참조를 포함한다. 원격 객체 클래스에 대한 저장 객체는 속성의 값을 프록시에 로컬로 저장하는 원격 객체 클래스의 각각의 게터 메소드에 대한 메소드를 포함할 수 있다. 서버(1120)는 원격 객체 클래스 X의 원격 객체(1122 및 1123)에 대한 엔트리를 포함하고 원격 객체 클래스 Y의 객체(1124)에 대한 엔트리를 포함하는 ID 테이블을 갖는 ID 테이블 객체(1121)를 포함한다. 서버는 또한 각 원격 객체의 각 속성에 대한 엔트리를 포함하는 속성 테이블을 갖는 속성 테이블 객체(1125)를 포함한다. 각 엔트리는 원격 객체의 객체 식별자, 원격 객체의 각 속성의 최종 검색된 값, 및 원격 객체의 원격 객체 클래스에 대한 게터 테이블로의 참조를 포함한다. 일부 실시예에서, 각 엔트리는 원격 객체에 대해 최종 검색된 값을 저장하는 데이터 구조로의 참조를 포함할 수 있다. 또한, ID 테이블 및 속성 테이블은 단일 테이블로 결합될 수 있다. 도시된 바와 같이, 속성 테이블의 제 1 엔트리는 원격 객체(1122)에 대응하고 원격 객체 클래스 X에 대한 게터 테이블(1126)로의 포인터를 포함한다. 게터 테이블(1126)은 원격 객체 클래스 X의 각 게터 메소드(1128 및 1129)에 대한 엔트리를 포함한다. 게터 테이블(1127)은 원격 객체 클래스 Y의 각각의 게터 메소드(1130 및 1131)에 대한 엔트리를 포함한다. 엔트리는 원격 객체의 대응하는 게터 메소드를 호출하여 속성의 값을 검색하는 코드를 가리킨다.
응답 호출 메시지를 전송하기 전에, 서버 컴포넌트는 속성 테이블의 각 엔트리를 선택하고 각 엔트리의 원격 객체의 게터 메소드를 호출하여 각 속성의 값을 검색할 수 있다. 객체에 대한 게터 메소드에 의해 반환된 속성의 값이 속성 테이블에 저장된 그 속성의 값과 상이하면, 서버 컴포넌트는 속성 업데이트를 호출 응답 메시지에 추가한다. 속성 업데이트는 객체 식별자, 속성 식별자 및 새로운 값을 포함한다. 클라이언트가 호출 응답 메시지를 수신할 때, 클라이언트 컴포넌트는 각 속성 업데이트를 처리한다. 각 속성 업데이트에 대해, 클라이언트 컴포넌트는 속성 업데이트의 객체 식별자에 대응하는 프록시로의 참조를 검색한다. 클라이언트 컴포넌트는 프록시로부터 저장 객체로의 참조를 검색하고 참조의 표시를 전달하는 저장 객체의 그 속성에 대한 대응하는 저장 메소드를 호출한다. 그 다음에 저장 메소드는 속성의 값을 프록시에 저장한다. 일부 실시예에서, 각 속성 업데이트는 원격 객체의 모든 변경된 속성에 대한 값을 포함할 수 있다. 즉, 호출 응답 메세지는 원격 객체의 각각의 변경된 속성에 대한 별개의 속성 업데이트라기 보다는, 원격 객체에 대한 단 한번의 속성 업데이트를 포함한다.
도 12은 일부 실시예에서 서버 컴포넌트의 속성 값 겟 컴포넌트(get property values component)의 프로세싱을 도시하는 흐름도이다. 속성 값 겟 컴포넌트(1200)는 값이 변경된 각 원격 객체의 각 속성에 대한 호출 응답 메시지에 속성 업데이트를 추가하기 위해 호출된다. 블록(1202)에서, 컴포넌트는 속성 테이블의 다음 엔트리를 선택한다. 결정 블록(1204)에서, 엔트리가 이미 선택되었다면, 컴포넌트는 완료되고, 그렇지 않으면 컴포넌트는 블록(1206)에서 계속된다. 블록(1206)에서, 컴포넌트는 ID 테이블 객체의 참조 검색 메소드를 호출하여 선택된 엔트리의 객체 식별자에 대응하는 참조를 검색한다. 블록(1208 내지 1218)에서, 컴포넌트는 루프하여 참조된 원격 객체의 각 속성을 처리한다. 블록(1208)에서, 컴포넌트는 선택된 엔트리에 의해 참조되는 게터 테이블로부터 다음의 게터 메소드를 선택한다. 결정 블록(1210)에서, 모든 게터 메소드가 이미 선택되었다면, 컴포넌트는 블록(1202)으로 루프하여 속성 테이블에서 다음 엔트리를 선택하고, 그렇지 않으면 컴포넌트는 블록(1212)에서 계속된다. 블록(1212)에서, 컴포넌트는 참조된 원격 객체의 선택된 게터 메소드를 호출한다. 결정 블록(1214)에서, 속성의 현재 값이 속성에 대해 선택된 엔트리 내의 값과 동일하면, 컴포넌트는 블록(1208)으로 루프하여 다음 게터 메소드를 선택하고, 그렇지 않으면 컴포넌트는 블록(1216)에서 계속된다. 블록(1216)에서, 컴포넌트는 엔트리 내의 속성에 대한 값을 현재 값으로 설정한다. 블록(1218)에서, 컴포넌트는 객체 식별자, 속성 식별자 및 속성의 현재 값을 갖는 속성 업데이트를 호출 응답 메시지에 추가한 다음 블록(1208)으로 루프하여 다음 게터 메소드를 선택한다.
도 13은 일부 실시예에서 클라이언트 컴포넌트의 속성 값 저장 컴포넌트의 프로세싱을 도시하는 흐름도이다. 속성 값 저장 컴포넌트(1300)는 속성 업데이트를 포함하는 호출 응답 메시지가 수신되고 로컬로 저장된 속성의 값을 업데이트할 때 호출된다. 블록(1302)에서, 컴포넌트는 호출 응답 메시지의 다음 속성 업데이트를 선택한다. 결정 블록(1304)에서, 모든 속성 업데이트가 이미 선택되었다면, 컴포넌트는 완료되고, 그렇지 않으면 컴포넌트는 블록(1306)에서 계속된다. 블록(1306)에서, 컴포넌트는 선택된 엔트리의 객체 식별자를 전달하는 ID 테이블 객체의 검색 참조 메소드를 호출하고, 대응하는 프록시로의 참조를 수신한다. 블록(1308)에서, 컴포넌트는 엔트리의 값을 전달하는 프록시의 정적 데이터 멤버에 의해 참조되는 저장 객체의 저장 메소드를 호출한다. 그 다음에 컴포넌트는 블록(1302)으로 루프하여 응답 호출 메시지의 다음 속성 업데이트 엔트리를 선택한다. 저장 객체는 각 속성을 처리하기 위해 생성된 별개의 저장소 메소드를 가질 수 있다. 대안적으로, 저장 객체는 객체의 타입 및 속성의 이름과 같은 정보를 가진 각 속성에 대한 엔트리가 있는 테이블에 액세스하는 단일의 저장 메소드를 가질 수 있다.
도 14는 일부 실시예에서 프록시 클래스를 위한 코드를 자동으로 생성하기 위한 OORPC 시스템의 코드 생성기를 도시하는 흐름도이다. 프록시 코드 컴포넌트(1400)는 서버에 의해 호스팅되는 객체의 각각의 클래스에 대한 인터페이스를 전달 받고 프록시 클래스(예를 들어, 자바스크립트)를 생성한다. 블록(1402)에서, 컴포넌트는 다음 인터페이스를 선택한다. 결정 블록(1404)에서, 모든 인터페이스가 이미 선택되었다면, 컴포넌트는 완료되고, 그렇지 않으면 컴포넌트는 블록(1406)에서 계속된다. 블록(1406)에서, 컴포넌트는 클래스의 이름, 클래스의 시작 및 종료 심볼(예를 들어, 괄호) 등을 포함하는 클래스 템플릿을 포함할 수 있는 프록시 클래스를 위한 초기 코드를 생성한다. 블록(1408 내지 1412)에서, 컴포넌트는 루프하여 게터 메소드가 아닌 인터페이스의 각 메소드를 처리한다. 블록(1408)에서, 컴포넌트는 다음 메소드를 선택한다. 결정 블록(1410)에서, 모든 메소드가 이미 선택되었다면, 컴포넌트는 블록(1414)에서 계속되고, 그렇지 않으면 컴포넌트는 블록(1412)에서 계속된다. 블록(1412)에서, 컴포넌트는 프록시 클래스의 선택된 메소드를 위한 코드를 생성한 다음, 블록(1408)으로 루프하여 다음 메소드를 선택한다. 블록(1414)에서, 컴포넌트는 선택된 인터페이스의 표시를 전달하는 코드 생성기의 프록시 속성 처리 컴포넌트(process proxy properties component)를 호출하여 프록시 클래스에 대한 저장 클래스를 위한 코드를 생성한다. 그 다음에 컴포넌트는 블록(1402)으로 루프하여 다음 인터페이스를 선택한다.
도 15는 일부 실시예에서 코드 생성기의 프록시 속성 처리 컴포넌트의 프로세싱을 도시하는 흐름도이다. 프록시 속성 처리 컴포넌트(1500)는 호출되어, 프록시 클래스에 대한 저장 클래스를 생성하고 프록시 클래스에 대한 저장 객체로의 참조를 저장하기 위해 프록시 클래스에 정적 데이터 멤버를 추가한다. 블록(1502)에서, 컴포넌트는 저장 클래스를 위한 초기 코드를 생성한다. 블록(1504)에서, 컴포넌트는 저장 객체를 참조하기 위한 정적 데이터 멤버를 프록시 클래스에 추가한다. 블록(1506)에서, 컴포넌트는 인터페이스의 다음 속성을 선택한다. 결정 블록(1508)에서, 인터페이스의 모든 속성이 이미 선택되었다면, 컴포넌트는 완료되고, 그렇지 않으면 컴포넌트는 블록(1510)에서 계속된다. 블록(1510)에서, 컴포넌트는 호출 요청 메시지를 서버에 전송하는 선택된 속성에 대한 프록시 클래스의 세터 메소드(setter method)를 위한 코드를 생성한다. 블록(1512)에서, 컴포넌트는 속성의 로컬 값을 검색하는 선택된 속성에 대한 프록시 클래스의 게터 메소드(getter method)를 위한 코드를 생성한다. 블록(1514)에서, 컴포넌트는 호출 응답 메시지에서 수신된 선택된 속성의 값을 프록시에 저장하기 위해 저장 클래스의 저장 메소드를 위한 코드를 생성한 다음 블록(1506)으로 루프하여 인터페이스의 다음 속성을 선택한다.
일부 실시예에서, OORPC 시스템의 코드 생성기는 서버가 원격 객체의 호출을 지원하는 서버 컴포넌트를 자동으로 생성할 수 있다. 코드 생성기는 서버에 의해 호스팅되는 원격 객체에 대한 인터페이스를 제공받을 수 있다. 코드 생성기는 클라이언트로부터 호출 요청 메시지를 수신하고 식별된 입력 파라미터를 전달하는 식별된 원격 객체의 식별된 원격 객체 메소드를 호출하는 코드를 생성한다. 또한 코드 생성기는 호출된 원격 객체 메소드가 반환된 이후에, 원격 객체의 객체 식별자, 원격 객체 메소드의 메소드 식별자 및 호출된 원격 객체 메소드에 의해 반환된 출력 파라미터를 가진 호출 응답 메시지를 클라이언트에 전송하는 코드를 생성한다. 코드 생성기는 인터페이스에 기초하여 속성 값의 동기화를 지원하는 코드를 자동으로 생성할 수도 있다.
도 16 및 도 17은 일부 실시예에서 호출 요청의 연기를 도시하는 흐름도이다. 도 16은 일부 실시예에서 클라이언트 컴포넌트의 요청 전송 컴포넌트(send request component)의 프로세싱을 도시하는 흐름도이다. 원격 객체의 메소드를 호출하는 (예를 들어, 요청 객체를 통해) 호출 요청을 전달하는 요청 전송 컴포넌트(1600)가 호출된다. 컴포넌트는 메소드의 호출이 연기 가능하지 않을 때 임의의 큐에 넣어진 호출 요청을 갖는 호출 요청 메시지를 서버로 전송한다. 블록(1602)에서, 컴포넌트는 호출 요청을 호출 큐에 첨부한다. 결정 블록(1604)에서, 메소드의 호출이 연기 가능하면, 컴포넌트는 완료되고, 그렇지 않으면 컴포넌트는 블록(1606)에서 계속된다. 블록(1606)에서, 컴포넌트는 호출 요청 큐의 호출 요청을 호출 요청 메시지에 추가한다. 블록(1608)에서, 컴포넌트는 호출 요청 메시지를 서버에 전송한다. 블록(1610)에서, 컴포넌트는 요청 큐를 비운 다음 완료된다.
도 17은 일부 실시예에서 서버 컴포넌트의 요청 수신 컴포넌트(receive request component)의 프로세싱을 도시하는 흐름도이다. 요청 수신 컴포넌트(1700)는 서버 컴포넌트가 호출 요청 메시지를 수신할 때 호출된다. 블록(1702)에서, 컴포넌트는 호출 응답 메시지의 다음 호출 요청을 선택한다. 결정 블록(1704)에서, 모든 호출 요청이 이미 선택되었다면, 컴포넌트는 완료되고, 그렇지 않으면 컴포넌트는 블록(1706)에서 계속된다. 블록(1706)에서, 컴포넌트는 호출 요청에 의해 식별된 원격 객체의 메소드를 호출함으로써 선택된 호출 요청을 처리한다. 그 다음에 컴포넌트는 블록(1702)으로 루프하여 다음 호출 요청을 선택한다.
다음의 단락은 OORPC 시스템의 양태의 다양한 실시예를 설명한다. OORPC 시스템의 구현예는 실시예의 임의의 조합을 이용할 수 있다. 아래에서 설명되는 프로세싱은 OORPC 시스템을 구현하는 컴퓨터 판독 가능 저장 매체 상에 저장된 컴퓨터 실행 가능 명령어를 실행하는 프로세서를 가진 컴퓨팅 디바이스에 의해 수행될 수 있다.
일부 실시예에서, 원격 객체 클래스의 원격 객체의 원격 객체 멤버 함수를 호출하기 위해 클라이언트에 의해 수행되는 방법이 제공되며, 원격 객체는 서버에 의해 호스팅된다. 브라우저의 제어하에, 방법은 다음을 수행한다. 방법은 애플리케이션을 포함하는 웹 페이지를 검색한다. 애플리케이션의 제어하에, 방법은 프록시 클래스의 프록시를 인스턴스화하며, 프록시 클래스는 원격 객체 멤버 함수와 동일한 시그니처를 가진 프록시 멤버 함수를 포함한다. 방법은 객체 식별자를 프록시와 연관시키며, 객체 식별자는 원격 객체를 서버에 식별시키는 데 사용하기 위한 것이다. 방법은 프록시 객체의 프록시 멤버 함수를 호출한다. 호출된 프록시 멤버 함수의 제어하에, 방법은 프록시와 연관된 객체 식별자 및 원격 객체 멤버 함수의 식별자를 포함하는 호출 요청 메시지를 서버에 전송한다. 애플리케이션은 애플리케이션을 실행할 때 브라우저가 애드-온 기능성에 액세스할 필요 없이 브라우저에 의해 제공되는 기능성에 의존한다. 일부 실시예에서, 방법은 또한 생성 원격 객체의 멤버 함수를 호출하도록 요청하는 호출 요청 메시지를 서버에 전송하여 원격 객체를 인스턴스화한다. 일부 실시예에서, 방법은 또한, 애플리케이션의 제어하에, 서버로부터 원격 객체가 인스턴스화되었음을 표시하는 호출 응답 메시지를 수신한다. 일부 실시예에서, 호출 응답 메시지는 서버에 의해 원격 객체에 할당된 객체 식별자를 포함한다. 일부 실시예에서, 호출 요청 메시지는 클라이언트에 의해 원격 객체에 할당된 객체 식별자를 포함한다. 일부 실시예에서, 호출 요청 메시지는 프록시 멤버 함수에 전달되는 입력 파라미터를 포함한다. 일부 실시예에서, 호출 응답 메시지는 프록시 멤버 함수에 의해 반환될 출력 파라미터를 포함한다. 일부 실시예에서, 프록시는 프록시 참조에 의해 식별되고 프록시 참조를 객체 식별자와 연관시키는 단계를 더 포함한다. 일부 실시예에서, 연관시키는 단계는 프록시 참조 및 객체 식별자를 포함하는 엔트리를 객체 식별자 테이블에 추가하는 단계를 포함한다. 일부 실시예에서, 원격 객체 클래스 및 프록시 클래스는 상이한 프로그래밍 언어로 구현된다. 일부 실시예에서, 프록시 클래스는 원격 객체 클래스에 대한 인터페이스 정의에 기초하여 자동으로 생성되며, 프록시 클래스는 프록시 멤버 함수의 구현을 포함한다. 일부 실시예에서, 프록시 멤버 함수의 호출은 비동기적 호출이다.
일부 실시예에서, 클라이언트에서 애플리케이션을 실행하여 서버에 의해 호스팅되는 원격 객체 클래스의 원격 객체에 액세스하는 프록시 클래스를 생성하기 위해 컴퓨팅 시스템에 의해 수행되는 방법이 제공된다. 방법은 원격 객체 클래스의 인터페이스에 액세스하며, 각각의 인터페이스는 원격 클래스의 원격 객체 멤버 함수의 시그니처를 포함한다. 각각의 원격 객체 클래스에 대해, 방법은 원격 객체 클래스의 프록시 클래스를 자동으로 생성한다. 프록시 클래스는 원격 객체 클래스의 각각의 원격 객체 멤버 함수에 대한 프록시 멤버 함수를 포함한다. 프록시 클래스의 각각의 프록시 멤버 함수는 프록시 멤버 함수의 호출 시, 원격 객체의 객체 식별자, 원격 객체 멤버 함수의 멤버 함수 식별자 및 프록시 멤버 함수에 전달되는 입력 파라미터를 호출 요청 메시지를 서버에 전송하기 위해 생성된다. 방법은 서버로부터 호출 응답 메시지가 수신된 이후에, 호출 응답 메시지로부터 원격 객체의 객체 식별자, 원격 객체 멤버 함수의 멤버 함수 식별자 및 출력 파라미터를 추출하고, 원격 객체 멤버 함수의 호출이 완료되었음을 표시하는 코드를 제공한다. 일부 실시예에서, 방법은 또한 서버에 대한 서버 컴포넌트를 생성하며, 서버 컴포넌트는 호스팅되는 원격 객체의 인터페이스에 기초하여, 클라이언트로부터 호출 요청 메시지를 수신하고, 식별된 입력 파라미터를 전달하는 식별된 원격 객체의 식별된 원격 객체 멤버 함수를 호출하며, 호출된 원격 객체 멤버 함수가 반환된 이후에, 호출된 원격 객체 멤버 함수에 의해 반환된 원격 객체의 객체 식별자, 원격 객체 멤버 함수의 멤버 함수 식별자 및 출력 파라미터를 가진 호출 응답 메시지를 클라이언트에 전송하기 위해 생성된다. 일부 실시예에서, 애플리케이션의 코드는 애플리케이션을 실행할 때 브라우저가 애드-온 기능성에 액세스할 필요 없이 브라우저에 의해 제공되는 기능성에 의존한다.
일부 실시예에서, 프로그램의 애플리케이션 실행 엔진에 의해 실행되어 서버에 의해 호스팅되는 원격 객체 클래스의 원격 객체의 원격 객체 멤버 함수를 호출하는 애플리케이션을 인에이블하도록 구성된 클라이언트가 제공된다. 클라이언트는 컴퓨터 실행 가능 명령어를 실행하는 프로세서 및 프로세서에 의해 실행될 때, 클라이언트가 다음과 같은 프로세싱을 수행하도록 제어하는 컴퓨터 실행 가능 명령어를 저장하는 컴퓨터 판독 가능 저장 매체를 포함한다. 프로세싱은 프록시 클래스의 프록시를 인스턴스화하며, 프록시 클래스는 원격 객체 멤버 함수와 동일한 시그니처를 가진 프록시 멤버 함수를 포함한다. 프로세싱은 객체 식별자를 프록시와 연관시키며, 객체 식별자는 원격 객체를 서버에 식별시키는데 사용하기 위한 것이다. 프로세싱은 프록시의 프록시 멤버 함수를 호출한다. 호출된 프록시 멤버 함수의 제어하에, 프로세싱은 원격 객체를 식별하는 객체 식별자 및 원격 객체 멤버 함수를 식별하는 멤버 함수 식별자를 포함하는 호출 요청 메시지를 서버에 전송한다. 일부 실시예에서, 애플리케이션은 애플리케이션을 실행할 때 프로그램이 애드-온 기능성에 액세스할 필요 없이 프로그램에 의해 제공되는 기능성에 의존하며, 애플리케이션의 프록시 클래스는 원격 객체 클래스의 인터페이스로부터 자동 생성되어 원격 객체의 클라이언트에 의한 액세스를 지원한다. 일부 실시예에서, 프로세싱은 또한 원격 객체 클래스의 인스턴스를 인스턴스화하고 서버로부터 원격 객체가 인스턴스화되었음을 표시하는 호출 응답 메시지를 수신하도록 요청하는 호출 요청 메시지를 서버에 전송한다. 일부 실시예에서, 프로세싱은 호출될 때 프록시의 인스턴스화 및 호출 요청 메시지의 전송을 지시하는 멤버 함수를 가진 생성 프록시를 인스턴스화한다. 일부 실시예에서, 호출 응답 메시지는 객체 식별자를 포함한다. 일부 실시예에서, 프로그램은 브라우저로서, 그리고 애플리케이션은 사용자가 브라우저를 통해 웹 페이지에 액세스하는 데 응답하여 다운로드되고 실행된다.
일부 실시예에서, 애플리케이션 실행 엔진을 가진 프로그램에 의해 실행되어 서버에 의해 호스팅되는 원격 객체 클래스의 원격 객체의 원격 객체 멤버 함수를 호출하고, 클라이언트에 의해 호스팅되는 로컬 객체 클래스의 로컬 객체의 로컬 객체 멤버 함수의 서버에 의한 호출을 지원하는 애플리케이션을 인에이블하도록 구성된 클라이언트가 제공된다. 클라이언트는 컴퓨터 실행 가능 명령어를 실행하는 프로세서 및 프로세서에 의해 실행될 때, 클라이언트가 다음과 같은 프로세싱을 수행하도록 제어하는 컴퓨터 실행 가능 명령어를 저장하는 컴퓨터 판독 가능 저장 매체를 포함한다. 프로그램에 의해 실행되는 애플리케이션의 제어하에, 프로세싱은 프록시 클래스의 프록시를 인스턴스화하며, 프록시 클래스는 원격 객체 멤버 함수와 동일한 시그니처를 가진 프록시 멤버 함수를 포함한다. 프로세싱은 로컬 객체 클래스의 로컬 객체를 인스턴스화한다. 프로세싱은 원격 객체 식별자를 프록시로의 프록시 참조와 연관시키고 로컬 객체 식별자를 로컬 객체로의 로컬 객체 참조와 연관시킨다. 호출된 프록시 멤버 함수의 제어하에, 프로세싱은 원격 객체를 식별하는 원격 객체 식별자 및 원격 객체 멤버 함수를 식별하는 멤버 함수 식별자를 포함하는 호출 요청 메시지를 서버에 전송한다. 서버로부터 로컬 객체 식별자를 포함하고 로컬 객체 멤버 함수를 식별하는 호출 요청 메시지를 수신하면, 프로세싱은 포함된 로컬 객체 식별자와 연관된 로컬 객체 참조를 검색하고, 참조된 로컬 객체 참조에 의해 참조된 로컬 객체의 로컬 객체 멤버 함수를 호출한다.
일부 실시예에서, 속성 값을 동기화하기 위해 클라이언트에 의해 수행되는 방법이 제공된다. 방법은 원객 객체 클래스의 원격 객체에 대응하는 프록시 클래스의 프록시를 인스턴스화한다. 원격 객체는 서버에서 인스턴스화된다. 프록시 클래스는 프록시 게터를 가진 속성을 명시한다. 프록시에 대한 프록시 게터는 프록시에 저장된 속성의 값을 검색하기 위한 것이다. 방법은 호출 요청 메시지를 서버에 전송하여 원격 객체의 원격 객체 멤버 함수를 호출한다. 방법은 서버로부터 호출 요청 메시지에 대한 호출 응답 메시지를 수신한다. 호출 응답 메시지가 속성 업데이트를 포함할 때, 방법은 호출 응답 메시지로부터 속성 업데이트로부터의 속성의 값을 추출하고 추출된 값을 프록시에 저장한다. 속성에 대한 프록시 게터가 호출될 때, 방법은 호출 요청 메시지를 서버에 전송할 필요 없이 속성의 값이 프록시로부터 검색될 수 있게 한다. 일부 실시예에서, 프록시는 브라우저에 의해 실행되는 애플리케이션의 일부이다. 일부 실시예에서, 서버로의 전송 및 서버로부터의 수신은 HTTP 메시지를 통해 이루어진다. 일부 실시예에서, 프록시 클래스는 속성에 대한 저장 멤버 함수(store member function)를 가진 저장 클래스의 저장 객체로의 정적 참조를 포함하며, 추출 및 저장은 저장 멤버 함수에 의해 수행된다. 일부 실시예에서, 저장 클래스는 프록시 클래스의 각 속성에 대한 저장 멤버 함수를 포함한다. 일부 실시예에서, 저장 클래스는 속성의 식별자를 추출된 값을 저장하기 위한 그 속성에 대한 저장 클래스의 저장 멤버 함수의 식별자 및 속성의 타입의 식별자에 매핑하는 게터 테이블을 포함한다. 일부 실시예에서, 저장 멤버 함수는 프록시로의 참조를 전달 받고, 속성의 타입에 기초하여 속성의 값을 추출하는 단계 및 그 값을 참조된 프록시에 저장하는 단계를 포함한다. 일부 실시예에서, 저장 멤버 함수는 프록시의 식별자를 전달 받는다. 일부 실시예에서, 호출 응답 메시지는 프록시의 다수의 특성에 대한 값을 포함한다. 일부 실시예에서, 호출 응답 메시지는 상이한 프록시의 다수의 속성에 대한 값을 포함한다. 일부 실시예에서, 호출 응답 메시지는 이전 호출 응답 메시지가 서버에 의해 전송된 이래로 값이 변경된 그러한 속성 만에 대한 값을 포함한다.
일부 실시예에서, 클라이언트에 저장된 속성 값을 동기화하기 위해 서버에 의해 수행되는 방법이 제공된다. 방법은 클라이언트로부터 서버에 의해 호스팅되는 원격 객체의 원격 객체 멤버 함수를 호출하라는 요청을 수신한다. 방법은 원격 객체의 프록시 멤버 함수를 호출한다. 원격 객체의 원격 객체 멤버 함수를 호출한 이후에, 방법은 원격 객체의 속성에 대한 값을 검색한다. 검색된 값이 속성에 대해 최종 검색된 값과 동일하지 않을 때, 방법은 원격 객체의 객체 식별자, 속성의 속성 식별자, 및 검색된 값을 호출 응답 메세지에 추가한다. 방법은 원격 객체 멤버 함수가 호출되었고 속성에 대한 값이 변경되었기에 원격 객체에 대한 클라이언트의 프록시의 속성에 대한 게터 멤버 함수가 서버에 액세스할 때 속성의 값을 로컬로 검색할 수 있음을 표시하는 호출 응답 메세지를 클라이언트에 전송한다. 일부 실시예에서, 검색 및 추가는 다수의 속성에 대해 수행된다. 일부 실시예에서, 다수의 속성은 상이한 원격 객체의 속성을 포함한다. 일부 실시예에서, 검색 및 추가는 원격 객체의 원격 객체 멤버 함수가 호출되었음을 표시하기 위해 전송될 각각의 호출 응답 메시지에 대해 수행된다.
일부 실시예에서, 원격 객체 클래스의 원격 객체의 속성의 값과 프록시 클래스의 프록시의 속성의 값의 동기화를 지원하기 위해 컴퓨팅 시스템에 의해 수행되는 방법이 제공된다. 방법은 각각의 원격 객체 클래스에 대해 인터페이스에 대한 설명을 입력한다. 원격 객체 클래스의 각 인터페이스에 대해, 방법은 프록시 클래스를 위한 코드를 생성한다. 방법은 프록시 클래스의 각 프록시 멤버 함수에 대한 코드를 생성하여 대응하는 원격 객체 상의 대응하는 원격 객체 멤버 함수를 호출하는 호출 요청 메시지를 전송한다. 방법은 프록시 클래스의 속성의 각 프록시 게터 멤버 함수에 대한 코드를 생성하여 대응하는 원격 객체에 액세스하지 않고 프록시 클래스의 프록시에 로컬로 저장된 속성의 값을 검색하고 반환한다. 프록시 클래스의 속성의 값을 저장하기 위한 코드를 생성하는 방법은 프록시 클래스의 속성의 각 프록시 게터 멤버 함수가 로컬로 저장된 속성의 값을 검색할 수 있도록 서버로부터 수신된다. 일부 실시예에서, 방법은 또한 각 프록시 클래스에 대해, 속성의 값을 저장하기 위한 코드로의 정적 참조를 프록시 클래스에 추가한다. 일부 실시예에서, 속성의 값을 저장하기 위한 코드는 저장 클래스의 일부로서 구현된다. 일부 실시예에서, 저장 클래스는 프록시 클래스의 각 속성에 대해, 속성의 식별자를 그 속성에 대한 값을 저장하기 위한 저장 멤버 함수에 매핑하여 값이 그 속성의 프록시 게터 멤버에 의해 검색될 수 있도록 하는 테이블을 포함한다. 일부 실시예에서, 속성의 식별자는 또한 서버로부터 수신된 호출 응답 메시지로부터 속성의 값을 추출하는 데 사용하기 위한 속성의 타입의 표시에 매핑된다.
일부 실시예에서, 애플리케이션의 호출 요청을 서버의 원격 객체에 전송하기 위해 클라이언트에 의해 수행되는 방법이 제공된다. 방법은 호출 요청을 수신한다. 각각의 호출 요청은 원객 객체 클래스의 원격 객체에 대응하는 애플리케이션의 프록시 클래스의 프록시로부터 나온다. 각각의 수신된 호출 요청에 대해, 호출 요청이 연기 가능할 때, 방법은 호출 요청을 저장한다. 호출 요청이 연기 가능하지 않을 때, 방법은 이전에 전송되지 않은 각각의 저장된 호출 요청 및 수신된 호출 요청을 포함하는 호출 요청 메시지를 서버에 전송한다. 방법은 서버로부터 호출 응답 메시지를 수신한다. 각각의 호출 응답 메시지는 하나 이상의 호출 요청을 포함하는 호출 요청 메시지에 대한 응답이다. 적어도 하나의 호출 응답 메시지는 다수의 호출 응답을 포함한다. 수신된 호출 응답 메시지의 각각의 호출 응답에 대해, 호출 응답이 출력 파라미터를 포함할 때, 방법은 호출 응답으로부터 출력 파라미터를 추출한다. 방법은 호출 응답이 수신되었다는 표시 및 임의의 추출된 출력 파라미터를 애플리케이션에 제공한다. 일부 실시예에서, 호출 요청 메시지는 호출 요청이 수신된 순서를 표시한다. 일부 실시예에서, 호출 응답 메시지의 호출 응답은 대응하는 호출 요청이 수신된 순서로 처리된다. 일부 실시예에서, 호출 요청은 비동기적 호출 요청이다. 일부 실시예에서, 호출 요청이 지정된 시간 양보다 많은 시간 동안 저장되었을 때, 방법은 호출 요청을 포함하는 호출 요청 메시지를 전송한다. 일부 실시예에서, 애플리케이션으로부터 전송되지 않은 호출 요청을 전송하라는 요청을 수신하는 것에 응답하여, 방법은 또한 호출 요청을 포함하는 호출 요청 메시지를 전송한다. 일부 실시예에서, 상이한 서버에 의해 호스팅되는 원격 객체에 대한 호출 요청이 수신되며, 서버로 전송되는 호출 요청 메시지는 그 서버에 의해 호스팅되는 원격 객체에 대한 호출 요청만을 포함한다. 일부 실시예에서, 애플리케이션은 브라우저의 제어하에 실행된다.
일부 실시예에서, 애플리케이션의 호출 요청을 전송하여 서버에 의해 호스팅되는 원격 객체의 멤버 함수를 호출하기 위한 클라이언트가 제공된다. 클라이언트는 컴퓨터 실행 가능 명령어를 실행하는 프로세서 및 프로세서에 의해 실행될 때, 클라이언트가 다음과 같은 프로세싱을 수행하도록 제어하는 컴퓨터 실행 가능 명령어를 저장하는 컴퓨터 판독 가능 저장 매체를 포함한다. 프로세싱은 호출 요청을 큐에 넣은다. 각각의 호출 요청은 애플리케이션의 원객 객체 클래스의 원격 객체에 대응하는 애플리케이션의 프록시 클래스의 프록시로부터 나온다. 호출 요청은 원격 객체의 프록시 멤버 함수를 호출하기 위한 호출 요청이다. 호출 요청 전송 기준이 만족될 때, 프로세싱은 큐에 넣어진 각각의 호출 요청을 포함하는 호출 요청 메시지를 서버에 전송한다. 프로세싱은 큐에 넣어진 각각의 호출 요청이 더 이상 큐에 넣어지지 않는다고 표시한다. 프로세싱은 서버로부터 호출 요청 메시지에 응답하는 호출 응답 메시지를 수신한다. 수신된 호출 응답 메시지의 각각의 호출 응답에 대해, 프로세싱은 호출 응답이 수신되었다는 표시를 애플리케이션에 제공한다. 일부 실시예에서, 호출 요청 전송 기준은 큐에 넣어지지 않은 호출 요청이 수신될 때 만족된다. 일부 실시예에서, 호출 요청 전송 기준은 호출 요청이 지정된 시간 양보다 많은 시간 동안 저장되었을 때 만족된다. 일부 실시예에서, 호출 요청 전송 기준은 애플리케이션으로부터 큐에 넣어진 호출 요청을 전송하라는 요청이 수신될 때 만족된다. 일부 실시예에서, 호출 요청 메시지는 애플리케이션에 의해 호출 요청이 생성된 순서를 표시한다. 일부 실시예에서, 호출 응답 메시지의 호출 응답은 대응하는 호출 요청이 생성된 순서로 처리된다. 일부 실시예에서, 호출 요청은 비동기적 호출 요청이다. 일부 실시예에서, 상이한 서버에 의해 호스팅되는 원격 객체에 대한 호출 요청이 수신되며, 서버에 전송되는 호출 요청 메시지는 그 서버에 의해 호스팅되는 원격 객체에 대한 호출 요청만을 포함한다. 일부 실시예에서, 애플리케이션은 애플리케이션 실행 엔진을 가진 프로그램의 제어하에 실행된다.
일부 실시예에서, 서버에 의해 수행되어 애플리케이션의 호출 요청을 처리하기 위한 방법. 방법은 클라이언트로부터 호출 요청을 포함하는 호출 요청 메시지를 수신한다. 각각의 호출 요청은 애플리케이션의 원객 객체 클래스의 원격 객체에 대응하는 애플리케이션의 프록시 클래스의 프록시로부터 나온다. 호출 요청은 원격 객체의 프록시 멤버 함수를 호출하기 위한 호출 요청이다. 호출 요청 메시지의 각각의 호출 요청에 대해, 프로세스는 호출 요청을 처리한다. 프로세싱은 호출 요청으로부터 원격 객체의 객체 식별자, 원격 객체 멤버 함수의 멤버 함수 식별자 및 입력 파라미터를 추출하는 단계를 포함한다. 프로세싱은 입력 파라미터를 전달하는 식별된 원격 객체의 식별된 원격 객체 멤버 함수를 호출한다. 호출된 원격 객체 멤버 함수로부터의 반환되면, 프로세싱은 호출된 원격 객체 멤버 함수에 의해 반환된 출력 파라미터를 포함하는 호출 요청에 대한 호출 응답을 저장한다. 호출 요청을 처리한 이후에, 방법은 호출 응답을 포함하는 호출 응답 메시지를 클라이언트에 전송한다. 일부 실시예에서, 호출 요청은 호출 요청 메시지에 의해 명시된 순서로 처리된다. 일부 실시예에서, 호출 응답에 대응하는 호출 요청은 호출 응답으로부터 식별 가능하다.
비록 본 주제가 구조적 특징 및/또는 동작에 특유한 언어로 설명되었지만, 첨부된 청구 범위에 정의된 주제가 반드시 위에서 설명한 특정한 특징 또는 동작에 제한되는 것은 아니라는 것을 이해하여야 한다. 오히려, 위에서 설명한 특정한 특징 및 동작은 청구 범위를 구현하는 예시적인 형태로서 개시된다. 예를 들어, OORPC 시스템은 애플리케이션을 실행하는 웹 브라우저의 맥락에서 주로 설명되지만, OORPC는 다른 맥락에서 사용될 수 있다. 예를 들어, 고객 관계 관리(customer relationship management)("CRM") 시스템은 CRM 시스템을 고객화하기 위해 애플리케이션을 개발할 수 있다. 그러한 경우, CRM 시스템의 클라이언트 측 컴포넌트는 CRM 시스템의 서버 측 컴포넌트를 갖는 서버에 의해 호스팅되는 객체에 액세스하는 애플리케이션을 실행한다. 이러한 애플리케이션을 실행하는 웹 브라우저, CRM 시스템 및 다른 프로그램은 애플리케이션 실행 엔진을 갖는 프로그램이라고 지칭될 수 있다. 따라서, 본 발명은 첨부된 청구 범위에 의한 것 이외에는 제한되지 않는다.

Claims (15)

  1. 클라이언트 컴퓨팅 시스템으로서,
    컴퓨터 실행 가능 명령어를 저장하는 컴퓨터 판독 가능 저장 매체와,
    상기 컴퓨터 실행 가능 명령어를 실행하도록 구성된 프로세서를 포함하고,
    상기 컴퓨터 실행 가능 명령어는, 상기 프로세서에 의해 실행될 때, 상기 클라이언트 컴퓨팅 시스템으로 하여금,
    복수의 호출 요청을 큐에 넣고(queue) - 각각의 호출 요청은 서버 컴퓨팅 시스템의 원격 객체 클래스의 원격 객체에 대응하는 상기 클라이언트 컴퓨팅 시스템의 애플리케이션의 프록시 클래스의 프록시 객체로부터 수신됨 - ,
    각각의 수신된 호출 요청에 대해,
    상기 호출 요청이 연기 가능할 때 상기 호출 요청을 저장하고,
    상기 호출 요청이 연기 가능하지 않을 때, 이전에 전송되지 않은 각각의 저장된 호출 요청 및 연기 가능하지 않은 상기 호출 요청을 포함하는 호출 요청 메시지를 상기 서버 컴퓨팅 시스템에 전송하고,
    상기 서버 컴퓨팅 시스템으로부터 복수의 호출 응답 메시지를 수신 - 각각의 호출 응답 메시지는 상기 클라이언트 컴퓨팅 디바이스로부터 이전에 전송된 호출 요청 메시지에 대해 응답하는 것이고, 상기 호출 응답 메시지 중 적어도 하나는 복수의 호출 응답을 포함함 - 하고,
    상기 복수의 호출 응답의 각각의 호출 응답에 대해,
    상기 호출 응답이 출력 파라미터를 포함할 때, 상기 호출 응답으로부터 상기 출력 파라미터를 추출하고,
    상기 호출 응답이 수신되었다는 표시 및 임의의 추출된 출력 파라미터를 상기 애플리케이션에 제공하도록 제어하는
    클라이언트 컴퓨팅 시스템.
  2. 제 1 항에 있어서,
    상기 호출 요청 메시지는 상기 호출 요청이 수신된 순서를 표시하는
    클라이언트 컴퓨팅 시스템.
  3. 제 1 항에 있어서,
    상기 복수의 호출 응답은 상기 대응하는 호출 요청이 수신된 순서로 처리되는
    클라이언트 컴퓨팅 시스템.
  4. 제 1 항에 있어서,
    상기 컴퓨터 실행 가능 명령어는, 상기 프로세서에 의해 실행될 때, 상기 클라이언트 컴퓨팅 시스템으로 하여금, 저장된 호출 요청이 지정된 시간 양보다 많은 시간 동안 저장되었을 때, 상기 저장된 호출 요청을 포함하는 호출 요청 메시지를 전송하도록 제어하는
    클라이언트 컴퓨터 시스템.
  5. 제 1 항에 있어서,
    상기 컴퓨터 실행 가능 명령어는, 상기 프로세서에 의해 실행될 때, 상기 클라이언트 컴퓨팅 시스템이 상기 애플리케이션으로부터 전송되지 않은 호출 요청을 전송하라는 요청을 수신하는 것에 응답하여 상기 호출 요청을 포함하는 호출 요청 메시지를 전송하도록 제어하는
    클라이언트 컴퓨터 시스템.
  6. 제 1 항에 있어서,
    상기 복수의 호출 요청은 상이한 서버 컴퓨팅 시스템에 의해 호스팅되는 원격 객체에 대해 수신되고, 특정 서버 컴퓨팅 시스템에 전송된 임의의 호출 요청 메시지는 해당 서버 컴퓨팅 시스템에 의해 호스팅되는 원격 객체에 대한 호출 요청만을 포함하는
    클라이언트 컴퓨팅 시스템.
  7. 제 1 항에 있어서,
    상기 애플리케이션은 브라우저의 제어 하에 실행되는
    클라이언트 컴퓨팅 시스템.
  8. 클라이언트 컴퓨팅 시스템을 사용하여, 복수의 호출 요청을 수신하는 단계 - 각각의 호출 요청은 서버 컴퓨팅 시스템의 원격 객체 클래스의 원격 객체에 대응하는 상기 클라이언트 컴퓨팅 시스템의 애플리케이션의 프록시 클래스의 프록시 객체로부터 수신됨 - 와,
    각각의 수신된 호출 요청에 대해,
    상기 호출 요청이 연기 가능할 때, 상기 클라이언트 컴퓨팅 시스템을 이용하여, 상기 호출 요청을 저장하는 단계와,
    상기 호출 요청이 연기 가능하지 않을 때, 상기 클라이언트 컴퓨팅 시스템을 이용하여, 이전에 전송되지 않은 각각의 저장된 호출 요청 및 연기 가능하지 않은 상기 호출 요청을 포함하는 호출 요청 메시지를 상기 서버 컴퓨팅 시스템에 전송하는 단계와,
    상기 클라이언트 컴퓨팅 시스템을 이용하여, 상기 서버 컴퓨팅 시스템으로부터 복수의 호출 응답 메시지를 수신하는 단계 - 각각의 호출 응답 메시지는 상기 클라이언트 컴퓨팅 디바이스로부터 이전에 전송된 호출 요청 메시지에 대해 응답하는 것이고, 상기 호출 응답 메시지 중 적어도 하나는 복수의 호출 응답을 포함함 - 와,
    상기 복수의 호출 응답의 각각의 호출 응답에 대해,
    상기 호출 응답이 출력 파라미터를 포함할 때, 상기 클라이언트 컴퓨팅 디바이스를 이용하여, 상기 호출 응답으로부터 상기 출력 파라미터를 추출하는 단계와,
    상기 클라이언트 컴퓨팅 디바이스를 이용하여, 상기 호출 응답이 수신되었다는 표시 및 임의의 추출된 출력 파라미터를 상기 애플리케이션에 제공하는 단계를 포함하는
    방법.
  9. 제 8 항에 있어서,
    상기 호출 요청 메시지는 상기 호출 요청이 수신된 순서를 표시하는
    방법.
  10. 제 8 항에 있어서,
    상기 복수의 호출 응답은 상기 대응하는 호출 요청이 수신된 순서로 처리되는
    방법.
  11. 제 8 항에 있어서,
    저장된 호출 요청이 지정된 시간 양보다 많은 시간 동안 저장되었을 때, 상기 클라이언트 컴퓨팅 디바이스를 이용하여, 상기 저장된 호출 요청을 포함하는 호출 요청 메시지를 전송하는 단계를 더 포함하는
    방법.
  12. 제 8 항에 있어서,
    상기 애플리케이션으로부터 전송되지 않은 호출 요청을 전송하라는 요청에 수신하는 것에 응답하여, 상기 호출 요청을 포함하는 호출 요청 메시지를 전송하는 단계를 더 포함하는
    방법.
  13. 제 8 항에 있어서,
    상기 복수의 호출 요청은 상이한 서버 컴퓨팅 시스템에 의해 호스팅되는 원격 객체에 대해 수신되고, 특정 서버 컴퓨팅 시스템에 전송된 임의의 호출 요청 메시지는 해당 서버 컴퓨팅 시스템에 의해 호스팅되는 원격 객체에 대한 호출 요청만을 포함하는
    방법.
  14. 제 8 항에 있어서,
    상기 애플리케이션은 웹 브라우저의 제어 하에 실행되는
    방법.
  15. 제 8 항에 있어서,
    상기 복수의 호출 요청은 비동기적 호출 요청인
    방법.
KR1020197022036A 2017-01-30 2017-12-22 원격 객체에 대한 호출 요청의 연기 KR102473967B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/419,964 2017-01-30
US15/419,964 US10455040B2 (en) 2017-01-30 2017-01-30 Deferring invocation requests for remote objects
PCT/US2017/068063 WO2018140183A1 (en) 2017-01-30 2017-12-22 Deferring invocation requests for remote objects

Publications (2)

Publication Number Publication Date
KR20190108581A true KR20190108581A (ko) 2019-09-24
KR102473967B1 KR102473967B1 (ko) 2022-12-02

Family

ID=60972518

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197022036A KR102473967B1 (ko) 2017-01-30 2017-12-22 원격 객체에 대한 호출 요청의 연기

Country Status (17)

Country Link
US (1) US10455040B2 (ko)
EP (1) EP3574403B1 (ko)
JP (1) JP7071379B2 (ko)
KR (1) KR102473967B1 (ko)
CN (1) CN110268388B (ko)
AU (1) AU2017395742B2 (ko)
BR (1) BR112019013265A2 (ko)
CA (1) CA3049217A1 (ko)
CL (1) CL2019002046A1 (ko)
CO (1) CO2019007877A2 (ko)
IL (1) IL268034B (ko)
MX (1) MX2019008801A (ko)
PH (1) PH12019550117A1 (ko)
RU (1) RU2759330C2 (ko)
SG (1) SG11201905451QA (ko)
WO (1) WO2018140183A1 (ko)
ZA (1) ZA201903700B (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10223181B2 (en) * 2017-01-30 2019-03-05 Microsoft Technology Licensing, Llc Object-oriented remote procedure calls for browser applications
CN114095487B (zh) * 2020-07-30 2024-03-19 中移(苏州)软件技术有限公司 一种远程任务执行方法、装置及存储介质
US11936763B2 (en) 2020-10-28 2024-03-19 International Business Machines Corporation Handling deferrable network requests
CN116074337B (zh) * 2023-04-06 2023-06-13 徐工汉云技术股份有限公司 基于api网关的远程过程调用处理方法和装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6058389A (en) * 1997-10-31 2000-05-02 Oracle Corporation Apparatus and method for message queuing in a database system
JP2004507801A (ja) * 2000-03-03 2004-03-11 オラクル・コーポレイション 階層独立のデータアクセスフレームワーク
US20150326698A1 (en) * 2014-05-08 2015-11-12 Google Inc. Network timeouts using intentionally delayed transmissions
KR20170003578A (ko) * 2014-05-16 2017-01-09 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 언어-독립형 디스패치를 위한 코드 서비스 기법

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU639802B2 (en) * 1990-08-14 1993-08-05 Oracle International Corporation Methods and apparatus for providing dynamic invocation of applications in a distributed heterogeneous environment
US6920636B1 (en) * 1999-12-15 2005-07-19 Microsoft Corporation Queued component interface passing for results outflow from queued method invocations
US6813641B2 (en) * 2001-07-05 2004-11-02 Sun Microsystems, Inc. Teamware server working over HTTP/HTTPS connections
US7051341B2 (en) * 2001-12-14 2006-05-23 International Business Machines Corporation Method, system, and program for implementing a remote method call
US20040215665A1 (en) * 2002-01-09 2004-10-28 Edgar David A. System, method, and computer program product for providing accelerated and secure wireless data transmission over the internet
US7209929B2 (en) * 2003-04-17 2007-04-24 Salesforce.Com, Inc. Java object cache server for databases
US7831956B2 (en) * 2005-09-13 2010-11-09 Microsoft Corporation Using attributes to identify and filter pluggable functionality
WO2009073368A1 (en) * 2007-11-29 2009-06-11 Motorola, Inc. Method and apparatus to facilitate asynchronously invoking a browser application in a client platform
US9588827B2 (en) 2008-02-21 2017-03-07 International Business Machines Corporation Single program call message retrieval
US8683498B2 (en) 2009-12-16 2014-03-25 Ebay Inc. Systems and methods for facilitating call request aggregation over a network
US8505034B2 (en) 2009-12-17 2013-08-06 Amazon Technologies, Inc. Automated service interface optimization
US8655955B2 (en) * 2011-08-18 2014-02-18 International Business Machines Corporation Stream processing using a client-server architecture
KR101909982B1 (ko) * 2011-12-22 2018-10-23 삼성전자 주식회사 VoIP 게이트웨이 장치, 이의 제어방법 및 이를 포함하는 시스템
CN102497453A (zh) * 2011-12-28 2012-06-13 用友软件股份有限公司 远端程序的调用装置和调用方法
US9262183B2 (en) 2012-04-23 2016-02-16 Microsoft Technology Licensing, Llc Self-service composed web APIs
US8516508B1 (en) 2012-08-02 2013-08-20 Cisco Technology, Inc. Automated application programming interface (API) generation
US20150081774A1 (en) * 2013-09-13 2015-03-19 John Wason System and method for implementing augmented object members for remote procedure call
US9401953B2 (en) * 2013-10-09 2016-07-26 At&T Intellectual Property I, L.P. Intelligent high-volume cloud application programming interface request caching
CA2931762C (en) * 2013-11-29 2020-09-22 Calgary Scientific Inc. Method for providing a connection of a client to an unmanaged service in a client-server remote access system
US9942265B2 (en) 2014-01-06 2018-04-10 International Business Machines Corporation Preventing application-level denial-of-service in a multi-tenant system
US9729506B2 (en) 2014-08-22 2017-08-08 Shape Security, Inc. Application programming interface wall
US10223181B2 (en) * 2017-01-30 2019-03-05 Microsoft Technology Licensing, Llc Object-oriented remote procedure calls for browser applications

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6058389A (en) * 1997-10-31 2000-05-02 Oracle Corporation Apparatus and method for message queuing in a database system
JP2004507801A (ja) * 2000-03-03 2004-03-11 オラクル・コーポレイション 階層独立のデータアクセスフレームワーク
US20150326698A1 (en) * 2014-05-08 2015-11-12 Google Inc. Network timeouts using intentionally delayed transmissions
KR20170003578A (ko) * 2014-05-16 2017-01-09 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 언어-독립형 디스패치를 위한 코드 서비스 기법

Also Published As

Publication number Publication date
ZA201903700B (en) 2020-10-28
MX2019008801A (es) 2019-12-02
RU2759330C2 (ru) 2021-11-11
IL268034B (en) 2022-06-01
IL268034A (en) 2019-09-26
CN110268388B (zh) 2023-06-20
JP7071379B2 (ja) 2022-05-18
SG11201905451QA (en) 2019-08-27
RU2019126643A (ru) 2021-03-01
BR112019013265A2 (pt) 2019-12-17
CO2019007877A2 (es) 2019-07-31
EP3574403A1 (en) 2019-12-04
EP3574403B1 (en) 2023-06-14
AU2017395742A1 (en) 2019-07-04
WO2018140183A1 (en) 2018-08-02
CL2019002046A1 (es) 2019-12-13
RU2019126643A3 (ko) 2021-04-12
CA3049217A1 (en) 2018-08-02
CN110268388A (zh) 2019-09-20
US20180219961A1 (en) 2018-08-02
AU2017395742B2 (en) 2022-03-17
PH12019550117A1 (en) 2019-12-02
US10455040B2 (en) 2019-10-22
JP2020506481A (ja) 2020-02-27
KR102473967B1 (ko) 2022-12-02

Similar Documents

Publication Publication Date Title
US11010219B2 (en) Object-oriented remote procedure calls for browser applications
US10778795B2 (en) Synchronization of property values between a client and a server
KR102473967B1 (ko) 원격 객체에 대한 호출 요청의 연기
US8868637B2 (en) Page rendering for dynamic web pages
CN102427480B (zh) 一种多应用服务平台系统中的应用访问方法
CN102185900B (zh) 一种应用服务平台系统和一种开发应用服务的方法
US20070220083A1 (en) Estimation of initial dynamic rendering control data
JP2014513821A (ja) Webアクセスを実装するための方法およびWebサーバ
WO2016147073A1 (en) Method and apparatus for identifying changed mailboxes in an internet message access protocol (imap) list
US10652341B2 (en) Restful interface system for an application
US10769351B2 (en) Rendering based on a document object model
NZ754547A (en) Deferring invocation requests for remote objects
CN114116111B (zh) 配置流程节点和数据处理的方法、装置、设备及介质
CN117009009A (zh) 应用处理方法、装置、电子设备及计算机可读存储介质
CN118413543A (zh) 异构系统数据同步方法、装置、设备及计算机储存介质
CN116980464A (zh) 页面处理方法、装置、设备以及存储介质

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