JP2004501427A - 分散コンピューティング環境でサービスの結果を返す機構および装置 - Google Patents
分散コンピューティング環境でサービスの結果を返す機構および装置 Download PDFInfo
- Publication number
- JP2004501427A JP2004501427A JP2001583307A JP2001583307A JP2004501427A JP 2004501427 A JP2004501427 A JP 2004501427A JP 2001583307 A JP2001583307 A JP 2001583307A JP 2001583307 A JP2001583307 A JP 2001583307A JP 2004501427 A JP2004501427 A JP 2004501427A
- Authority
- JP
- Japan
- Prior art keywords
- service
- client
- space
- message
- notification
- Prior art date
- Legal status (The legal status 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 status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/465—Distributed object oriented systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/542—Event management; Broadcasting; Multicasting; Notifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q30/00—Commerce
- G06Q30/02—Marketing; Price estimation or determination; Fundraising
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q30/00—Commerce
- G06Q30/06—Buying, selling or leasing transactions
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/22—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks comprising specially adapted graphical user interfaces [GUI]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/50—Network service management, e.g. ensuring proper service fulfilment according to agreements
- H04L41/5058—Service discovery by the service manager
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/02—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/04—Protocols specially adapted for terminals or networks with limited capabilities; specially adapted for terminal portability
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1001—Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/2866—Architectures; Arrangements
- H04L67/30—Profiles
- H04L67/303—Terminal profiles
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/2866—Architectures; Arrangements
- H04L67/30—Profiles
- H04L67/306—User profiles
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/34—Network arrangements or protocols for supporting network services or applications involving the movement of software or configuration parameters
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/51—Discovery or management thereof, e.g. service location protocol [SLP] or web services
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/52—Network services specially adapted for the location of the user terminal
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/53—Network services using third party service providers
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/40—Network security protocols
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/08—Protocols for interworking; Protocol conversion
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/30—Definitions, standards or architectural aspects of layered protocol stacks
- H04L69/32—Architecture of open systems interconnection [OSI] 7-layer type protocol stacks, e.g. the interfaces between the data link level and the physical level
- H04L69/322—Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions
- H04L69/329—Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions in the application layer [OSI layer 7]
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Theoretical Computer Science (AREA)
- Business, Economics & Management (AREA)
- Accounting & Taxation (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- Finance (AREA)
- Strategic Management (AREA)
- Development Economics (AREA)
- Marketing (AREA)
- General Engineering & Computer Science (AREA)
- General Business, Economics & Management (AREA)
- Economics (AREA)
- Multimedia (AREA)
- Computer Security & Cryptography (AREA)
- Human Computer Interaction (AREA)
- Entrepreneurship & Innovation (AREA)
- Game Theory and Decision Science (AREA)
- Information Transfer Between Computers (AREA)
- Computer And Data Communications (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Noodles (AREA)
- Hardware Redundancy (AREA)
Abstract
分散コンピューティング環境内でサービスの結果を返すシステムおよび方法を提供する。クライアントが、サービスの1つまたは複数の関数を呼び出した後に、関数の結果を、複数の方法で、たとえば、メッセージ内で、スペース(たとえばネットワーク・アドレッシング可能なストレージ・ロケーション)内で、クライアントがイベントを介して知らされるスペース内で、メッセージ内で返される通知を使用して、スペース内で返される通知を使用して、およびクライアントがイベントを介して通報されるスペース内で返される通知を使用して、クライアントに返すことができる。通知に、スペースなどのストレージ・ロケーションの結果にアクセスし、読み取るのに必要な情報を含めることができる。サービスのスキーマで、サービスの関数を呼び出すのに使用可能な複数のメッセージを指定することができる。メッセージ、結果、および通知は、XMLなどの、プラットフォーム独立および/またはプログラム言語独立のデータ表現言語で表現することができる。この複数の方法の使用可能性によって、異なる機能を有するクライアントに関するものなどのさまざまな情況に関する分散コンピューティング環境の柔軟性および適応性を強化することができる。追加の柔軟性について、結果を、別のサービスに効率的に渡すこともできる。
Description
【0001】
(発明の背景)
(1.発明の分野)
本発明は、ウェブ中心およびインターネット中心の分散コンピューティング環境を含む分散コンピューティング環境に関し、より詳細には、ネットワーク・クライアントとサービスを接続する、メッセージ・パッシング・モデルに基づく異機種分散コンピューティング環境に関する。
【0002】
(2.関連技術の説明)
インテリジェント型デバイスの普及が進んでいる。このようなデバイスとしては、スマート・アプライアンス、パーソナル・デジタル・アシスタント(PDA)、携帯電話、ラップ・トップ・コンピュータ、デスクトップ・コンピュータ、ワークステーション、メインフレーム、さらにはスーパー・コンピュータなどもある。ネットワークも、次第に、互いに通信できるインテリジェント型デバイスを相互接続する一般的な方法となってきている。ただし、さまざまなインテリジェント型デバイスの計算能力と記憶能力には大きな違いがある。能力が制限されているデバイスは、省スペース・デバイスまたは「シン(thin)」デバイス呼ばれることがある。シン・デバイスは、より能力の高いデバイスを相互接続するネットワークに参加することができない場合がある。しかし、さまざまな異なる種類のインテリジェント型デバイスを相互接続することが望ましいと考えられる。
【0003】
ネットワーキング能力の向上はなおいっそう望まれている。ビジネス用ネットワークは、仕入れ先と顧客との相互の直接的なやり取りを取り込むように拡大を続けている。携帯電話、パーソナル・デジタル・アシスタント、およびインターネット対応コンピュータは、企業においても家庭においても当たり前のものになっている。ホーム・ネットワークは、テレビやステレオ機器などのオーディオ/ビジュアル機器を家庭用コンピュータ、およびセキュリティ・システムや温度制御サーモスタットなどのインテリジェント型システムを制御するその他のデバイスに相互接続するために使用することができる。ケーブルやASDLなどの高帯域幅メディアを使用すると、インターネット・アクセス・ビデオ・オンデマンド、電子商取引などのサービスを向上させることができる。ネットワーク・システムは普及途上にある。正式なネットワークがなくても、インテリジェント型デバイスで互いに通信し、またリソースを共有できることが望ましい。
【0004】
現在、従来のネットワークのセットアップ、拡張および管理は複雑な作業である。たとえば、ハードウェアまたはソフトウェアをネットワークに追加するには、多くの場合、ネットワーク管理者がドライバをロードをし、システムを設定する必要がある。ネットワーク構成に小さな変更を加えるにしても、ネットワーク全体を一定期間停止することが必要になる場合がある。さらに、所定のネットワークで通信するのに必要なインターフェースをサポートしていないインテリジェント型デバイスもある。
【0005】
必要なのは、各種のインテリジェント型デバイスを接続し、通信およびリソースの共有を可能にしながら、従来のネットワークに存在する相互運用性と複雑な構成という問題を回避できる単純な方法である。ネットワークにデバイスを追加する機能を改善する技術はさまざまなものが存在する。たとえば、ユニバーサル・シリアル・バス、1394、およびPCIなどの多くの現代的な入出力バスでは、プラグ&プレイや動的ディスカバリ・プロトコルをサポートしており、新しいデバイスをバス上に追加する作業が簡単に行える。しかし、これらの解決方法は、特定の周辺機器バスに制限されており、一般的なネットワークには適していない。
【0006】
最近の技術である、Sun Microsystems,Inc.のJiniでは、プリンタおよびディスク・ドライブなどのデバイスをネットワーク上で簡単に接続し共有できるようにすることを追求している。Jiniを組み込んだデバイスは、ネットワークへアナウンスを行い、自デバイスの能力に関する詳細を知らせ、直ちにネットワーク上の他のデバイスからアクセスできる状態に入る。Jiniでは、さまざまなデバイスの機能をネットワーク上で共有する分散コンピューティングが可能になっている。Jini技術は、ユーザがネットワーク上でサービスおよびリソースを共有できるようにすることを目指している。Jini技術の他の目標は、たとえユーザのネットワーク・位置が変化してもユーザはネットワーク上の任意の場所のリソースに簡単にアクセスすることができるようにすることである。Jiniではさらに、デバイス、ソフトウェア、およびユーザのネットワークを構築し、保守し、変更するタスクを簡素化することも追及している。
【0007】
Jiniでは、各Jini対応デバイスに特定の容量のメモリと処理能力が必要である。通常、Jini対応デバイスはJava(登録商標)仮想マシン(JVM)を備えている。そのため、JiniシステムはJava技術を中核とする。Javaは、Sun Microsystems,Inc.が開発した高水準オブジェクト指向プログラミング言語である。Javaソース・コードをバイトコードと呼ばれる形式にコンパイルし、これをJava仮想マシンで実行することができる。
【0008】
バイトコードは、「実際の」コンピュータ・マシンであるハードウェア・プロセッサではなく、仮想マシンにより処理されるコンピュータ・ソース・コードである。仮想マシンは、一般化された機械語命令(バイトコード)を特定の機械語命令(コンピュータのプロセッサが理解する命令)に変換する。各プラットフォームの仮想マシンに付属する言語を使用し、ソース言語ステートメントを1回だけコンパイルして、その仮想マシンをサポートするプラットフォーム上で実行することができる。Javaプログラミング言語は、このような言語の一例であり、Java仮想マシン(JVM)は、Javaプログラミング言語で書かれたプログラムをサポートする仮想マシン・プラットフォームの一例である。Java仮想マシンは、ほとんどのコンピューティング・プラットフォームに用意されているため、JavaしたがってJiniは一定のプラットフォーム独立性を実現している。Jiniアーキテクチャでは、Javaプログラミング言語がJiniシステムのコンポーネントの実装言語であるという想定を活用している。Javaコードを動的にダウンロードして実行できることが、Jiniアーキテクチャの多くの機能の中心となっている。
【0009】
Jiniアーキテクチャの目的は、デバイスとソフトウェア・コンポーネントからなる複数のグループを単一の動的分散システムとして連合させることである。Jiniアーキテクチャの概念で重要なのは、サービスという概念である。サービスは、人、プログラム、または他のサービスが使用できるエンティティである。サービスの例としては、文書を印刷するサービスと、一方のワードプロセッサ形式から他方の形式に変換するサービスの2つがある。Jiniを使用すると、Jiniシステムのメンバがサービスへのアクセスを共有することができる。Jiniシステム内のサービスは、Javaプログラミング言語で書かれた一組のインターフェースである、サービス・プロトコルを使用することにより互いに通信する。サービスの探索およびソリューションは、Jiniシステム内でルックアップ・サービスを使用して行う。ルックアップ・サービスにより、サービスによって提供される機能を示すインターフェースを、そのサービスを実装するオブジェクト群にマッピングする。
【0010】
記述エントリもサービスに関連付けることができる。デバイスとアプリケーションは、発見(discovery)と呼ばれるプロセスを使用してJiniネットワークに登録する。デバイスまたはアプリケーションは、いったん登録されると、ルックアップ・サービス内に入る。ルックアップ・サービスでは、ネットワーク上のこれらのサービスへのポインタを格納するだけでなく、これらのサービスにアクセスするためのコードも格納する。たとえば、プリンタはルックアップ・サービスに登録されると、そのプリンタ・ドライバおよび/またはドライバとのインターフェースをルックアップ・サービスにロードする。クライアントがプリンタの使用を要求すると、そのドライバおよびドライバ・インターフェースはルックアップ・サービスからそのクライアントにダウンロードされる。このようにコードを移動できることは、クライアント側で、ドライバやその他のソフトウェアをプリインストールしたりロードをすることなく、ネットワークからのサービスを利用することができることを意味する。
【0011】
Jiniシステム内のサービス間の通信は、Java Remote Method Invocation(RMI)を使用してを行う。RMIは、従来のリモート・プロシージャ・コールのメカニズムに対するJavaプログラミング言語対応の拡張機能である。RMIでは、Jiniネットワーク内でオブジェクトからオブジェクトへデータを渡すことができるだけでなく、コードを含む完全なオブジェクトも渡すことができる。Jiniシステムは、コードがJavaオブジェクトとしてカプセル化された形式でネットワーク内を移動できることに依存している。
【0012】
Jiniシステム内のサービスへのアクセスはリースに基づく。リースとは、一定期間保証されたアクセスを許可することである。各リースはサービスの利用者とサービスのプロバイダとの間で、サービス・プロトコルの一環として交渉される。ある期間サービスが要求されると、ある期間、たぶん要求期間と考えられるが、アクセスを許可できる。サービスがJiniシステムの一部としてとどまるためにはリースを更新する必要がある。
【0013】
図1は、Jiniの基本的な技術の積み重ねを示している。Jini技術では、分散プログラミング・モデル12(JavaSpaces、リース、およびオブジェクト・テンプレートによってサポートされている)を定義する。Jiniのオブジェクト通信は、TCP/IP対応ネットワーキング・レイヤ16上のRMIレイヤ14に基づいている。
【0014】
Jiniは、分散コンピューティングを簡素化するための有望な技術である。ただし、デバイスの種類によっては、Jiniが適さない場合もある。コンピューティング技術の流れは、分散Web中心サービスおよびコンテンツ・モデルに向かっており、クライアント・サービスとコンテンツの内容は急激に変化している。将来のクライアントは、ユーザがどこへでも持ち運べるコンパニオン・タイプのデバイスになると思われる。このようなデバイスとしては、たとえば、携帯電話とPDAとの組み合わせが考えられる。このようなデバイスがより強力なデバイスとだけでなく、より軽量なシン・デバイスまたは非力なデバイスとも通信し、リソースを共有できることが望ましい。
【0015】
さらに、インターネットが出現し、その結果ネットに接続したデバイスが爆発的に増え、こうした現象を活用するように設計された分散プログラミング・モデルが必要になった。クライアントが信頼できる、セキュリティで保護され安全な方法でサービスに接続するための実現技術が要求される。シック(thick)・クライアントからシン・クライアントに至るさまざまなクライアントとサービスをインターネット、企業内イントラネット、またさらには単一コンピュータ内で接続する必要がある。クライアントとサービスの両方から距離、待ち時間、実装を抽象化(abstract)することが望ましい。
【0016】
分散コンピューティング技術で重要な課題は、パワーのあるシック・クライアントから組み込み型モバイル・デバイスなどの非常に軽量なシン・クライアントに至るまでスケーラブルにすることである。Jiniなどの現在の分散コンピューティング技術は、あらゆる種類のクライアントのニーズに応じられるほどスケーラブルでないといえる。省スペース・デバイスや組み込み型デバイスなどの一部のデバイスでは、メモリリソースが十分でなかったり、十分なネットワーキングの帯域幅を欠いていたりして、現在の分散コンピューティング技術に十分に参加できない。組み込み型モバイル・デバイスなどのクライアント製品群のローエンドは、多くの場合、コード実行環境が限られていたり固定されている。これらのデバイスもまた、ストレージ能力が最低限であったりあるいは全く永続性がない場合がある。大半の小型組み込み型モバイル・デバイスは、Java仮想マシンをサポートしていない。ほとんどのコード実行可能小型クライアントはネイティブ・コードのみを実行する。さらに、ほとんどの小型デバイスは、その単独の永続的ストレージ・メディアとしてせいぜいフラッシュ・メモリーやバッテリ・バックアップRAMを備えているぐらいである。ストレージの容量は非常に小さく、時には本質的に読み取り専用であることが多い。さらに、このタイプのストレージ・メディアのアクセス・タイムは、より強力なクライアントのハード・ディスクのアクセス・タイムに比べて1桁以上遅いことが多い。
【0017】
Jiniなどの既存の接続技術は、サイズが大きいことから、望んでいるほどはスケーラブルでありえない。たとえば、Jiniでは、すべての参加者がJavaをサポートする必要があるが、小さなクライアントの多くはJava仮想マシン用にリソースを確保することはできない。さらに、JiniではRMIを使用するため、クライアント側でコードとコンテンツをダウンロードできる必要がある。Jiniは、新しいクラスをダウンロードすることにより既存のクライアント・プラットフォームを補強しているので、組み込む型デバイスなどの小型デバイスにセキュリティおよびサイズの面で問題が生じることがある。Jiniは、コードとデータを渡すことによりクライアントとリソースが通信するという形で動作する。クライアントがJiniサービスをアクティブにすると、このサービスは結果をクライアントに返すが、これには大量のコードまたはコンテンツが含まれる場合がある。Jiniでは、クライアントはメソッドを呼び出し、大きなオブジェクトが返され、それをダウンロードすることがある。クライアントは、返されたオブジェクトを受け入れるだけのリソースを持たないことがある。さらに、RMIとJava自体が大量のメモリを必要とする。多くの省スペース・デバイスは、現在の分散コンピューティング技術に事実上または少しでも加わるだけのリソースを持たないことがある。
【0018】
既存の分散コンピューティング技術の問題としては他に、多くの場合、複数のレベルの接続能力およびプロトコルを必要とするという点があげられる。たとえば、Jiniでは、コンピュータとデバイスを接続するための妥当な速度のネットワークが存在していることを想定している。またJiniでは、TCP/IPネットワーク・トランスポート・プロトコルをサポートするデバイスも必要とする。しかし、多くの小型デバイスは接続能力が限られている。小型デバイスは、ネットワーク接続の待ち時間が長かったり、または低速であったりし、TCP/IPをサポートしない場合もある。
【0019】
上述のように、Jiniでは、JavaをサポートするJava仮想マシンを備えるデバイスを必要とし、そのため、多くの小型デバイスには備えられないような処理能力およびストレージ機能を必要とする。このこともまた、Java対応でないデバイスはJiniシステムに直接参加できないという点でJiniの柔軟性を制約している。JiniはJavaを必要とするため、均質的な環境とみなすことができる。ただし、非常に小型の組み込み型デバイスからPDA、携帯電話、さらにラップトップおよび最強のコンピュータに至るまでの異機種分散コンピューティングに対応する分散コンピューティング機能を備えることが望ましい。コモン・オブジェクト・リクエスト・ブローカ・アーキテクチャ(CORBA)など他の異機種ソリューションも存在する。CORBAは、プログラム・オブジェクトが、作成に使用されたプログラミング言語に関係なく、またはそのオブジェクトが実行されるオペレーティング・システムに関係なく互いに通信できるようにするアーキテクチャである。しかし、CORBAはJiniで取り扱われている接続問題をすべて取り扱えるわけではない。さらに、CORBAにはJiniと似たスケーラビリティの問題もある。
【0020】
JiniやCORBAなどの技術では、コード中心のプログラミング・モデルを使用して、リモート・コンピュータ間のインターフェースを定義している。コード中心プログラミング・モデルでは、リモート・クライアントまたはコンポーネント間の通信にプログラム・インターフェースまたはAPIを定義する。APIは、特定のプログラミング言語で定義することができる。APIは、適切な相互運用性を確実なものとするために、すべてのソフトウェア・コンポーネントで矛盾がないようになっていなければならない。コンポーネントに対するアクセスはすべてこれらの標準APIを通じて行うため、これらのAPIを実装するコードがクライアント・プラットフォーム内に存在している必要がある。コードは、プラットフォームに静的にリンクすることも、また必要に応じて動的にダウンロードすることもできる。多くの組み込み型またはモバイル・デバイスは、単に、品質管理問題がかかわっているだけでなく、単一の言語およびプログラム実行環境に依存しているということから、コードをネットワークから動的に受け入れることができないのである。ネットワーキング・プロトコルなどのデータ中心モデルは、コードの移動に依存することを避けているが、このようなプロトコルは簡単に分散コンピューティングに対応できるほど機能豊富でなく、型安全性などコードやその他のプログラミング機能によるプログラミングを簡単に行うことができない。
【0021】
従来の分散コンピューティング・システムは、第1のデバイスで実行されるプログラムが第2のデバイスのプログラムをリモート・コールできるということに依存しており、結果は第1のデバイスに返される。リモート・プロシージャ・コール(RPC)は、プログラムまたはプロシージャのリモート・コールを行うための基本的メカニズムである。CORBAとJiniは両方とも、プログラム・メソッドをリモートから呼び出す機能に基づいている。ただし、JiniやCORBAなどのコードまたはオブジェクトを渡すことで通信を行うのは幾分複雑になることがある。たとえば、上述のように、JiniではJava Remote Method Invocation(RMI)を使用してサービス間の通信を行う。クライアントがJavaオブジェクトをリモート・位置との間で移動するには、シリアライゼーション/デシリアライゼーションの何らかの手段が必要になる。Java開発キット(JDK)におけるこのような現在の機能は、Javaオブジェクトの内容を判別するためにリフレクションAPIに依存しており、最終的にはそのコードが仮想マシンに問い合わせを行う必要がある。このコードはかなり大きく、非効率である。
【0022】
シリアライゼーション/デシリアライゼーションを行うための現在の方法には、サイズ、速度、およびオブジェクト・トラバーサル・モデルに関する基本的な問題がある。JVMの外部のコードは、Javaオブジェクトの構造またはグラフを認識しないため、オブジェクト・グラフをトラバースし、引き離して、最終的にJVMを呼び出す必要がある。Javaオブジェクトの格納および移動を行う従来のシリアライゼーションおよびリフレクション・メカニズムは、すべての種類のデバイス、特により軽量のシン・デバイスについては実用的でない。Javaリフレクションおよびシリアライゼーションの問題点として、オブジェクトのグラフ(オブジェクトの推移的閉包(transitive closure))リフレクションがJVMの外部で実行することが困難であるという点があげられる。シリアライゼーションは、大量のコードを必要とし、大きすぎる。さらに、シリアライゼーションはJava固有のオブジェクト交換形式であり、Java非対応のデバイスでは使用できない。
【0023】
Jini分散コンピューティング・モデルでは、Javaデバイス間でJavaオブジェクトを移動する必要がある。そのため、Java対応でないプラットフォーム側でオブジェクトの発送および受取に使用することができないためシリアライゼーション・メカニズム自体はプラットフォーム独立ではない。シリアライゼーションは、均質的なオブジェクト形式であり、Javaプラットフォームでのみ動作する。シリアライゼーションでは、リフレクションAPIを使用するため、セキュリティ関連の制限を受ける場合があり、しばしば、ネイティブのJVM依存メソッドを使用して対処する必要がある。リフレクションAPIは、オブジェクトのグラフを提供できるが、JVMとリフレクション・メソッドを呼び出すコードとの間で何回も呼び出しが行われるため非効率である。
【0024】
Javaリフレクションを使用してオブジェクトをシリアライズするには、オブジェクトの推移的閉包を動的に解析するときに、アプリケーション側がJVMとピンポンのようにやり取りし、一度にフィールド1つずつオブジェクトを取り出す必要がある。Javaデシリアライゼーションを使用してオブジェクトをデシリアライズするには、オブジェクトの推移的閉包を動的に解析するときに、アプリケーション側がJVMと緊密に連携し、一度にフィールド1つずつオブジェクトを再構成する必要がある。そのため、Javaシリアライゼーション/デシリアライゼーションは時間がかかり、扱いにくく、しかも、アプリケーションとJVMのコードを大量に書く必要があるだけでなく、永続的な記憶領域も必要である。
【0025】
Javaをサポートするシン・クライアントの場合も、Jini RMIは、最小限のメモリ専有面積と最低限の帯域幅を備えるシン・クライアントの場合には実用的でないと思われる。Jini RMIと関連するシリアライゼーションは、実行時間が長く、コード・サイズが大きく、JVMリフレクションAPIを必要とし、Java固有オブジェクトの表現である。Javaデシリアライゼーションも実行に時間がかかり、コード・サイズが大きく、シリアライズ・オブジェクト・パーサを必要とする。Javaベースのシン・クライアントであっても、Jini内で要求されたときにクライアントへネットワーク経由で(必ず)返される巨大なJavaオブジェクト(必要なクラスに沿って)を受け入れられない場合がある。さらにスケーラブルな分散コンピューティング・メカニズムが必要である。よりスケーラブルな分散コンピューティング・メカニズムでセキュリティ問題に対処すること、またJavaオブジェクトなどのオブジェクトの受け渡しを可能にし、さらに一方のネットワーク・モードから他方のネットワーク・モードにプロセスを移行できるように、拡張可能であることが望ましい。
【0026】
オブジェクト・ベースの分散コンピューティング・システムでは永続的記憶領域が必要である。ただし、上述のように、オブジェクト記憶領域での試みは多くの場合言語とオペレーティング・システムに特有のものである。さらに、これらのオブジェクト・ストレージ・システムは、複雑すぎて、多くの小さな組み込み型システムでは使用できない。たとえば、Jini技術では、JavaSpacesを永続的オブジェクト・コンテナとして使用する。しかし、JavaSpaceは、Javaオブジェクトを格納するだけであり、小型デバイスに実装できない。JavaSpace内の各オブジェクトは。シリアライズ化され、Javaシリアライゼーションと関連する上述のペナルティを払う。小型デバイスから大型デバイスに至るまでの分散コンピューティング用に異機種オブジェクト・リポジトリを備えることが望ましいと考えられる。
【0027】
Sun Microsystems,Inc.のJavaSpacesは、エール大学コンピュータ・サイエンス学部のDavid Gelernter教授の並列処理の成果を利用している。Gelernter教授の「Linda」という名前の機能セットでは、TupleSpaceと呼ばれる共有メモリ空間を作成し、コンピュータのプロセスの結果またはそれらのプロセス自体を格納し、複数のCPUでアクセスできるようにする。Lindaは、したがって複数のプロセッサ用にグローバルな共有メモリを備える。
【0028】
Lindaを拡張するもう1つの技術がIBM CorporationのTSpaceである。TSpaceは、基本的なLinda TupleSpaceフレームワークを拡張し、実データ管理を行い、新しいデータ型および新しいセマンティック機能をダウンロードできるようにしている。TSpaceは、一組のネットワーク通信バッファとこれらのバッファにアクセスするための一組のAPIを備えている。したがって、上述の多くのソリューションのように、TSpaceはコード中心プログラミング・モデルを使用しており、そのようなモデルの欠点も共有している。さらに、TSpaceは、Javaプログラミング言語で実装されているため、Java仮想マシンやJavaバイトコードを実行する、Java実行可能マイクロプロセッサなどの他の手段を必要とする。したがって、TSpaceは、十分なリソースをJavaバイトコードの実行専用に割り当てることができない省スペース・デバイスには不適切と思われる。
【0029】
オブジェクト指向分散システムでは、オブジェクト・リポジトリを特定し、それらのリポジトリ内で特定のオブジェクトを見つけることができることが望ましい。供述のように、Jiniルックアップ・サーバはメモリ専有面積の小さな小型デバイスには実用的でないと思われる。オブジェクト・ストアを特定するより効率的なメカニズムがあることが望ましい。
【0030】
分散ネットワーク・コンピューティング・モデルでは、クライアントがサービスを特定する機能を備えることが望ましい。現在のネットワーク・プロトコルは、ネットワーク・サービスにアクセスするときにセキュリティを一切持たない単一の標準サービス・アクセス・インターフェースのみを提供するか、または管理者もしくは特権のある機能も含めて、サービスの全機能に対する「オール・オア・ナッシング」アクセス機能を提供する。また、サービスを特定する現在のネットワーク・プロトコルでは、サービスを見つける柔軟なメカニズムを提供していない。現在のプロトコルは、選択的サーチ機能をまったく備えていないか(たとえば、UPnP)、またはプリミティブ・キーワードおよび属性文法メカニズムのみを備える(たとえば、SLP)。そのため、現在のサービス発見メカニズム(service discovery mechanism)はセキュリティおよびサーチ基準メカニズム(search criteria mechanism)に関してあまりにも柔軟性が不足していると考えられる。
【0031】
さらに、現在のサービス発見モデルは、サービスを特定するために対称モデルを使用している。ただし、近さに基づく機能を使用できるデバイスなどある種のサービス・デバイスが発見モデルをサポートするのはリソースの無駄と考えられる。これは、このようなデバイスが近いところにあるためすでに特定されているためである(たとえば、他方のデバイスを物理的にポイントしている一方のデバイス)。そのため、代替えとなる軽量発見メカニズムもこのようなデバイスに対して望ましいと考えられる。
【0032】
分散オブジェクト・アクセスにも、偏りのない効率のよい共有メカニズムを必要とする。上述のように、Jiniは今のところ、リース・メカニズムを使用してオブジェクトを共有している。ただし、Jiniのリースは時間に基づいているため、さまざまな問題が発生しうる。たとえば、現在のオブジェクト・ホルダは、オブジェクトをどれだけの期間リースするかという考え方がなく、保持期間が長くなりすぎる場合がある。さらに、時間に基づくリースを使用するには、複数のマシンの間で時間が同期している必要がある。さらに、時間に基づくリースには、オペレーティング・システムのサポートも必要と考えられる。さらに、Jiniのリースは、RMI経由で確立され、解放される。そのため、Jiniのリース・メカニズムには、RMIを使用する上述の問題が発生する。さらに、Jiniのリース・メカニズムは、リースの確立、更新、および取り消しのためのセキュリティ・メカニズムを備えていない。他のリース・メカニズムも望ましいと考えられる。
【0033】
一般的に、メモリ専有面積の小さなモバイル・クライアント・デバイスは分散環境でさまざまなサービス、つまりレガシサービスと新サービスの両方を実行できることが望ましい。小型クライアントとしては、携帯電話およびPDAがあり、通常は低帯域幅のさまざまなネットワーキング・インターフェースを備える。これらのデバイスは多くの場合、グラフィック機能が限られた非常に小さなディスプレイを備えているが、大画面のディスプレイを備え、グラフィック機能も高度なものを使用するラップトップやノートブック・コンピュータもある。サービスは、さまざまなアプリケーションだけでなくプリンタなどのデバイス用の制御プログラムもある。モバイル・クライアントは、使用できる場所であればどこでもこれらのサービスを使用できることが望ましい。
【0034】
モバイル・クライアントは、多くの場合、一時的な動的ネットワーク・アドレスが割り当てられ、このクライアントが送るネットワーキング・メッセージはそのネットワーキング・インターフェースを超えて配信することはできない(そうでないと、異なるネットワーク上の2つの異なるクライアントが同じ動的アドレスを持つときに競合が発生することがある)。モバイル・クライアントは、多くの場合、全機能搭載のブラウザやその他の高度なソフトアウェア用の機能を持たない。ディスプレイが制限となって、クライアントが一部のアプリケーションを実行できない場合もある。従来のアプリケーション・モデルは、所定のユーザ・インターフェースまたはデータ特性に基づいている。アプリケーションに変更を加えると再コンパイルが必要になる。
【0035】
このようなクライアントは分散アプリケーションまたはサービスを見つけて呼び出すメカニズムを備えることが望ましい場合がある。クライアントは、クライアントのメモリ専有面積に収まり切らない可能性のある一層大きなレガシ・アプリケーションを実行する必要がある場合もある。上述のように、Jiniなどの現在の技術は、省スペース・デバイスには実用的でない場合がある。また、モバイル・シン・クライアントが普及することでさらにニーズも高まる可能性がある。たとえば、ユーザとそのユーザのモバイル・クライアントの物理的な場所に基づいてサービスを特定することが望ましい場合がある。たとえば、現地のレストラン、天候、道路交通現況図、および映画情報など現地周辺のサービスに関する情報が非常に役立つことがある。それと同様に、特定の場所にあるプリンタなど計算リソースに関する情報が役立つ。現行技術では、クライアントの物理的場所に基づいてサービスを特定する自動的なメカニズムを備えていない。シン・モバイル・クライアントによって生じるニーズとしては、他に、人的要因を取り扱うものがある。シン・モバイル・クライアントは、通常、エルゴノミック・キーボードおよびモニタを備えない。このような人的要因サービスを提供することおよび/または分散コンピューティング環境でこのようなサービスを特定する機能があると望ましい。分散コンピューティング・モデルは、クライアントは一時的ドキュメントおよびサービスを見つける手段を備える必要がある。ドキュメントが拡張マークアップ言語(XML)によって提供されるものなどプラットフォーム独立および言語独立の型で表される汎用ドキュメント(サービスおよび/またはサービス通知を含む)を見つけるメカニズムを備えることが望ましい場合がある。Jini、Universal Plug and Play(UPnP)、およびService Location Protocol(SLP)のルックアップ・メカニズムを含む現在のアプローチでは、このような汎用ドキュメントルックアップ・メカニズムをサポートしていない。たとえば、Jiniルックアップ・メカニズムは、Java言語型付けに限定されており、したがって、言語独立ではない。UPnPおよびSLPは、サービスのみについて発見プロトコルをサポートしており、汎用ドキュメントについては発見プロトコルをサポートしていない。
【0036】
(発明の要旨)
上で概要を示した問題は、主に、分散コンピューティング環境内でサービスを通知し、アドレッシングし、かつ/またはアクセスするシステムおよび方法のさまざまな実施態様によって解決される。分散コンピューティング環境は、「スペース」またはオブジェクト・リポジトリに頼って、クライアントとサービスの間の相互作用のためのランデブー機構または触媒を提供することができる。サービスプロバイダは、スペース内のサービスを通知することができる。クライアントは、スペース内の通知を見つけ、通知からの情報を使用して、分散コンピューティング環境のXML(拡張マークアップ言語)メッセージング機構を使用してサービスにアクセスすることができる。サービスまたはコンテンツを記述するXML通知がそれぞれに含まれる、多数のスペースが存在することができる。したがって、スペースは、結果などの生データまたはデータに関する通知とすることができる、サービスのXML通知および/またはXMLデータのリポジトリとすることができる。
【0037】
一実施態様では、スペース自体がサービスである。他のサービスと同様に、スペースは通知を有する。この通知は、スペースのクライアントが、スペース・サービスを実行できるようになるために最初に得なければならない。スペース自体の通知には、XMLスキーマ、1つまたは複数の証明書、およびスペースにアクセスする方法を示すURI(Uniform Resource Identifier)を含めることができる。クライアントは、スペースにアクセスするために、スペース・サービスの通知からゲートを構築することができる。スペースのクライアント自体を、そのスペース内の通知を探すか既存の通知を変更することを求めるサービス・プロバイダとすることができる。あるいは、スペースのクライアントを、スペースによってリストされるサービスまたはコンテンツへのアクセスを求めるアプリケーションとすることができる。したがって、スペースは、分散コンピューティング環境でのクライアントとサービスの間の相互作用の触媒を提供することができる。
【0038】
スペースに、名前付きの通知の集合を含めることができる。スペースは、スペース自体を記述した単一のルート通知を用いて作成することができる。追加の通知を、スペースに追加することができる。通知の名前によって、名前の階層などの必要なグラフ化情報の指定を含めて、スペース内の通知を特定することができる。好ましい実施態様では、スペースの構造が、分散コンピューティング環境によって指示されない。すなわち、スペースは、たとえば通知のフラットな関連しないセットまたは関連する通知のグラフ(たとえば市販データベース)などとして構成することができる。好ましい実施態様では、分散コンピューティング環境が、スペースが実際にその内容を格納する方法を指定しないので、スペースを、小さいデバイスから大きいデバイスまでによってサポートすることができる。たとえば、単純なスペースを、PDAなどの小さいデバイスにおさまるように調整することができる。より高度なスペースを、大規模な市販データベースを使用して大型サーバで実施することができる。
【0039】
上で述べたように、スペースに、分散コンピューティング環境内のサービスに関する通知を含めることができる。通知は、分散コンピューティング環境内のサービスおよび/またはコンテンツのアドレッシングおよびアクセスの機構を提供することができる。通知はサービスのURIを指定することができる。いくつかの実施態様で、URIはサービスをインターネットを介してアクセス可能にすることができる。通知には、サービスに関するXMLスキーマを含めることもできる。XMLスキーマでは、サービスのクライアントがサービスの機能を呼び出すためにサービスに送ることができるメッセージのセットを指定することができる。XMLスキーマでは、クライアントとサービスのインターフェースを定義することができる。通知で指定されるURIとXMLが一緒になって、サービスのアドレッシングとアクセスの方法を示すことができる。URIとスキーマの両方を、スペース内の通知としてXMLで提供することができる。したがって、分散コンピューティング環境内のサービスのアドレッシングおよびアクセスの機構を、スペース内の通知としてパブリッシュすることができる。クライアントは、スペースを発見し、その後、サービスまたはコンテンツに関する個々の通知をルックアップすることができる。スペースとあるスペース内のすべての通知を、URIを使用してアドレッシングすることができる。一実施態様では、スペース名および通知名を、URL(Uniform Resource Locator)命名規約に従うものとすることができる。いくつかの実施態様で、スペースのアドレッシングに、たとえばURLなどのURIを使用することによって、スペースを、インターネット全体を通じてアドレッシング可能にすることができるようになる。
【0040】
スペースのクライアントがスペース・サービスの通知を見つけた後に、スペースのそのクライアントは、他のサービスと同様に、スペース・サービスを実行することができる。スペース・サービスのクライアントが、別のサービス(たとえば、スペース内の通知を探すサービス)である場合があることに留意されたい。一実施態様では、スペース・サービスを実行するために、スペースのクライアントが、まず、スペースに関する認証サービスを実行して、認証トークンを得ることができる。認証サービスは、スペース・サービスのサービス通知で指定することができる。スペースのクライアントは、認証トークン、スペースのXMLスキーマ(スペースのサービス通知から)、およびスペースのURI(スペースのサービス通知から)を使用して、スペース用のゲートを構築する。スペースのクライアントは、その後、ゲートを使用してスペース・サービスにメッセージを送ることによって、スペース・サービスを実行することができる。
【0041】
認証を使用する実施態様に関して、スペース・サービスが、認証トークンを埋め込まれた最初のメッセージをクライアントから受け取る時に、スペース・サービスは、同一の認証サービス(スペース・サービスのサービス通知で指定される)を使用して、クライアントを認証し、したがって、クライアントの識別を確立する。スペース・サービスは、クライアントの機能を判定し、それらを認証トークンにバインドすることができる。
【0042】
スペースのクライアントは、スペース・サービスにメッセージを送ることによって、さまざまなスペース機能を実行することができる。一実施態様では、スペースのクライアントは、スペース・サービスに要求を送る時に、その要求で認証トークンを渡し、したがって、スペース・サービスが、クライアントの特定の機能に対して要求を検査することができる。
【0043】
各スペースは、通常はサービスであり、スペース・サービスのコア機能を定義するXMLスキーマを有することができる。XMLスキーマによって、スペース・サービスへのクライアント・インターフェースを指定することができる。一実施態様では、すべてのスペース・サービスが、スペース関連メッセージのベースレベルを提供することができる。ベースレベル・スペース機能は、PDAなどの小さいデバイスを含むほとんどのクライアントが使用できる基本的なスペース機能とすることができる。たとえばより高度なクライアント用など、追加の機能を提供することが望ましいであろう。ベースレベル・スペースに対する拡張は、スペースを通知するXMLスキーマにより多くのメッセージを追加することによって達成することができる。たとえば、一実施態様では、ベースレベル・メッセージが関係グラフを通知に押し付けない。たとえば、通知の階層をトラバースするメッセージをスペース拡張とすることができる。そのような追加の機能の提供は、1つまたは複数の拡張されたXMLスペース・スキーマまたはスペース用のスキーマ拡張を提供することによって行うことができる。拡張されたスキーマに、ベース・スキーマを含めることができ、その結果、拡張されたスペースのクライアントが、今まで通りベース・スペースとしてスペースにアクセスできるようになる。
【0044】
一実施態様では、スペースが、スペース内で通知されるサービスをクライアントがインスタンス化する機能を提供することができる。サービスのインスタンス化は、クライアントがサービスを実行できるよう行う初期化である。サービスをインスタンス化するために、クライアントは、まず、スペース内でパブリッシュされるサービス通知の1つを選択することができる。クライアントは、スペース内で通知されるさまざまな通知をルックアップするためにスペースによって提供されるルックアップ機能などのさまざまな機能を使用することができる。その後、クライアントは、サービスをインスタンス化することをスペースに要求することができる。
【0045】
一実施態様では、サービス・インスタンス化に、下記のアクションを含めることができる。クライアントが、選択されたサービスをインスタンス化することをスペース・サービスに要求した後に、スペース・サービスは、要求されたサービスをクライアントがインスタンス化できることを検証する。スペース・サービスは、クライアント・メッセージに含まれる認証トークンを検査することによって、この検証を実行することができる。認証トークンは、クライアントがスペース・サービスとのセッションを確立する時に受け取りた証明書である。スペース・サービスは、クライアントの認証トークンおよびそのクライアントについて示される機能に従って、クライアントが、要求されたサービスをインスタンス化できるかどうかを検証することができる。
【0046】
クライアントができると仮定すると、スペース・サービスは、クライアントによって指定されるリース要求時間を有する、クライアントに関するサービス通知に対するリースを得ることもできる。スペース・サービスは、その後、割り振られたリースおよびサービスのサービス通知を含むメッセージをクライアントに送ることができる。一実施態様では、クライアントが、サービス通知で指定された認証サービスを実行し、認証トークンを得ることができる。次に、クライアントは、サービス用のゲートを構築することができる(たとえば、認証トークンと、通知からのXMLスキーマおよびサービスURIを使用して)。上で述べたクライアントとスペース・サービスの間の通信は、分散コンピューティング環境のXMLメッセージングを使用して実行される。クライアントは、その後、構成されたゲートとXMLメッセージングを使用してサービスを実行することができる。サービスは、同様に、クライアントとのXMLメッセージ通信用のサーバ・ゲートを構築することができる。
【0047】
スペースは、クライアントによって実行されるサービスからの結果を格納する便利な機構を提供することができる。結果用のスペースを使用することによって、小さいクライアントが、サービス実行の結果を切れ切れに受け取ることができるようになる。いくつかのサービスは、大量の結果を生成することがある。サービスからの結果を格納するのにスペースを使用することによって、すべての結果を一度に受け取るリソースを有しないクライアントが、それでもサービスを使用できるようになる。さらに、スペースを使用して結果を格納することによって、高速だが忙しいサーバで動作するサービスが、大量の結果を返す時に、そのサービスを低速のクライアントと直接対話することから解放することできる。したがって、サービスを、他のクライアントによる使用のためにより早期に解放することができる。
【0048】
スペースは、異なるクライアントによるおよび/または異なる時刻での結果のアクセスの便利な機構を提供することができる。たとえば、あるクライアントが、結果の全体を使用することができないが、ユーザが、後でその結果にアクセスできる別のクライアントを使用して結果の残りにアクセスすることを望む場合がある。たとえば、結果を、現在の株価(PDAによってアクセス可能)を示し、株価のチャート(後でラップトップ機によってアクセス可能)を示す株式市況情報とすることができる。また、分散コンピューティング環境で結果にスペースを使用することによって、クライアントが、まず結果をダウンロードする必要なしに、あるサービスの結果を別のサービスに供給できるようになる。たとえば、上の株式市況情報の場合に、PDAが、チャート自体をダウンロードする必要なしに、チャートを印刷する別のサービスにチャートを供給することができる。したがって、結果スペースは、クライアントが結果を処理または受け取るする必要なしに、クライアントが別のクライアントまたはサービスに渡す機構を提供することができる。
【0049】
一実施態様では、結果にスペースを使用することが、必ずしもそのサービスがすべての結果をそのスペースに置かなければならないことを意味しない。サービスが生成するすべての結果について、異なる代替物を設けることができる。たとえば、結果の一部またはすべてを、メッセージ内で直列にしてクライアントに送ることができる。その代わりに、結果をスペース内に置くことができ、その後、結果を参照する(たとえば、結果のURIまたは結果に関する通知を含む)通報メッセージをクライアントに送ることができる。もう1つのオプションが、結果をスペースに置き、スペースからのイベントを介する通報を用いることである。たとえば、クライアントおよびサービスが、結果をある特定の名前で呼ぶことに合意し、その後、クライアントが、スペースに登録して(下で説明するものなどのスペース機能を使用して)、そのように命名された結果がスペースに追加される時にイベントを受け取るようにすることができる。イベント通報に関する上の説明を参照されたい。
【0050】
したがって、サービスがクライアントに結果を返すために、分散コンピューティング環境内でさまざまな異なる機構を使用することができる。実際の結果を、XMLメッセージ内の値によってクライアントに返すことができ、あるいは、結果を、スペース内に置かれた実際の結果に関する参照(または実際の結果に関する通知)によってクライアントに返すことができ、このクライアントは、スペース内の結果を参照するメッセージを受け取る。さらに、結果または結果通知を、スペースに置き、クライアントにイベントによって通報することができる。
【0051】
結果を処理するもう1つの機構は、クライアントが、結果を供給されるもう1つのサービスを指定することである。たとえば、クライアントが、結果を作るサービスを実行する時に、クライアントは、そのサービスに(たとえばXMLメッセージングを介して)さらなる処理のためにもう1つのサービスに結果を送るように指示することができる。これには、クライアントが、他方のサービスに関する通知のURIを示し、その結果、結果を作るサービスが、他方のサービスを実行し、それに結果を渡すために他方のサービスへのゲートを生成できるようにすることを含めることができる。この例では、結果を作るサービスが、他方のサービスのクライアントになることができる。さらなる処理のためのサービスの例が、元のクライアントのために結果を表示することができる表示サービスである。この表示サービスは、クライアントと同一のデバイス上にあるか、それに関連するものとすることができる。
【0052】
結果スペースは、分散コンピューティング環境が、最小限のメモリ・フットプリントおよび最小限の帯域幅を有するシン・クライアントに実用的である単純なリモート・メソッド呼出しを提供できるようにすることができる。というのは、従来のリモート・メソッド呼出し技法のように、巨大なプログラム・オブジェクト(必要なクラスと共に)を(必ず)ネットワークを介してクライアントに返すという悪い副作用を有する必要がないからである。その代わりに、結果を、結果スペースに返すことができ、望まれる場合に限って(それらがクライアント側に存在することができる場合に)、実際のオブジェクトをクライアントにダウンロードすることができる。
【0053】
さまざまな実施態様で、結果を、複数の方法で、たとえば、メッセージ内で、スペース内で、クライアントがイベントを介して通報されるスペース内で、メッセージ内で返される通知を使用して、スペース内で返される通知を使用して、およびクライアントがイベントを介して通報されるスペース内で返される通知を使用して、クライアントに返すことができる。この複数の方法の使用可能性によって、異なる機能を有するクライアントに関するものなどのさまざまな情況に関する分散コンピューティング環境の柔軟性および適応性を強化することができる。追加の柔軟性について、結果を別のサービスに効率的に渡すこともできる。
【0054】
クライアントは、第1のメッセージをサービスに送り、そのサービスの1つまたは複数の関数の呼出しを要求することができる。サービスに関するスキーマで、サービスの関数の呼出しに使用可能である第1のメッセージを含む複数のメッセージを指定することができる。メッセージおよびスキーマは、XMLなどの、プラットフォーム独立および/またはプログラミング言語独立のデータ表現言語で表現することができる。第1のメッセージに応答して、サービスの関数を呼び出すことができる。その後、サービスが、結果のセットを生成することができる。結果を、データ表現言語(たとえばXML)で表現することができる。サービスは、結果のセットをスペース内の位置に格納することができ、この場合に、スペースに、ネットワーク・アドレッシング可能なストレージ位置が含まれる。一実施態様では、結果のセットの格納の準備としてスペースを作成することができる。一実施態様では、イベントを生成し、クライアントに送り、結果がスペースに格納されたことをクライアントに通報する。その後、クライアントは、スペースから結果のセットにアクセスし、読み取ることができる。一実施態様では、第2のクライアント(すなわち、関数を呼び出すメッセージを送りたクライアントと異なるクライアント)が、スペースから結果のセットを読み取ることができる。この形で、第1のクライアントが結果の読取および表示などの作業を達成するのに十分なリソースを有しない可能性がある時に、ユーザが、第2のクライアントを使用して結果を読み取り、表示することができる。
【0055】
一実施態様では、結果をスペースに格納するのではなく、結果を、メッセージ内でクライアントに送ることができる。このメッセージは、データ表現言語(たとえばXML)で表現することができ、一実施態様では、サービスに関するスキーマで指定することができる。
【0056】
一実施態様では、結果を、結果に関する通知を使用して返すことができる。前に説明したように、クライアントは、第1のメッセージをサービスに送り、サービスの1つまたは複数の機能の呼出しを要求することができる。第1のメッセージに応答して、サービスの機能を呼び出すことができ、サービスが結果のセットを生成することができる。一実施態様では、サービスが、結果のセットをスペース内の位置に格納することができ、スペースに、ネットワーク・アドレッシング可能なストレージ位置が含まれる。サービスは、結果に関する通知を生成することができる。この通知に、スペースからなど、結果にアクセスし、読み取るのに使用可能な情報を含めることができる。たとえば、通知に、結果にアクセスできる場所のUniform Resource Identifier(URI)を含めることができる。一実施態様では、通知に、結果のフォーマットを指定するスキーマ(たとえばXMLスキーマ)を含めることができる。一実施態様では、通知を、XMLなどのデータ表現言語で表現することができる。
【0057】
一実施態様で、サービスが、通知を含むメッセージをクライアントに送ることができる。このメッセージは、データ表現言語(たとえばXML)で表現することができ、一実施態様では、サービスに関するスキーマ内で指定することができる。もう1つの実施態様では、通知を、スペースに格納することができる。スペースは、結果が格納されるスペースと同一または異なるスペースとすることができる。クライアントは、そのスペースから通知を読み取ることができる。一実施態様では、イベントを生成し、クライアントに送り、結果に関する通知がスペースに格納されたことをクライアントに通報することができる。
【0058】
クライアントは、通知を使用して結果のセットにアクセスし、読み取ることができる。一実施態様では、第2のクライアント(すなわち、関数を呼び出すメッセージを送りたクライアントと異なるクライアント)が、通知を使用して結果を読み取ることができる。
【0059】
本発明は、さまざまな修正形態および代替形態を許すが、その特定の実施形態を、例として図に示し、以下で詳細に説明する。しかし、図面およびそれに対する詳細な説明が、開示される特定の形態に本発明を制限することを意図されておらず、逆に、その意図が、本発明の趣旨および範囲に含まれるすべての修正形態、同等物、および代替形態を包含することであることを理解されたい。
【0060】
(発明の実施形態の詳細な説明)
分散コンピューティングの実施形態の概要
図2には、分散コンピューティング環境のプログラミング・モデルが示されている。このモデルには、分散コンピューティングを使いやすくするAPIレイヤ102が含まれている。APIレイヤ102は、クライアントとサービスとの接続を容易にするインターフェースを備えている。APIレイヤ102は、クライアントおよびサービスの発見(discovery)および接続に関係する。APIレイヤ102は、メッセージ発送およびメッセージ受取機能を備える。このメッセージングAPIは、拡張マークアップ言語(XML)など、表現データまたはメタデータ形式による単純メッセージ用のインターフェースを提供する。実施形態はここではXMLを採用しているものについて説明しているが、他の実施形態では他のメタデータ型言語または形式を使用することもできることに注意されたい。いくつかの実施形態では、APIレイヤは、さらに、Javaオブジェクトなど、オブジェクト間の通信やオブジェクトの受け渡しのためのメッセージのインターフェースを備えることもできる。オブジェクト・リポジトリまたは「スペース」を発見し、特定のオブジェクトを見つけ、オブジェクトの要求および解放を行い、オブジェクトをオブジェクト・リポジトリに書き込んだり、オブジェクト・リポジトリからオブジェクト取り出したりするAPIが用意される場合もある。APIレイヤ102を通じてアクセス可能なオブジェクトは、XMLなどの表現データ形式で表現することができる。そのため、オブジェクト自体とは反対に、オブジェクトのXML表現は操作が可能である。
【0061】
APIレイヤ102は、メッセージング・レイヤ104の上にある。メッセージング・レイヤ104は、XMLなどの表現データ形式に基づいている。一実施形態では、XMLメッセージは、APIレイヤ102の呼び出しに従って、メッセージング・レイヤ104によって生成される。メッセージング・レイヤ104は、クライアントとサービスとの間で送ることができる定義済みの静的メッセージを備えている。メッセージング・レイヤ104は、さらに、動的に生成されるメッセージにも対応している。一実施形態では、JavaオブジェクトなどのオブジェクトをXML表現に動的に変換することができる。メッセージング・レイヤ104により、XMLオブジェクト表現はメッセージとして送ることができる。逆に、メッセージング・レイヤ104は、オブジェクトのXML表現を受け取ることができる。その後、そのメッセージからオブジェクトは再構成できる。一実施形態では、メッセージング・レイヤ104によって送られるメッセージは、アドレス、認証証明書、セキュリティ・トークン、およびメッセージ本体など、複数の基本要素を含むことができる。メッセージ・システムの発送および受取メカニズムは、完全に状態を保持しないようにできる。状態という概念を、発送側と受取側との間のメッセージ・ストリームに埋め込むことができる。そのため、メッセージ発送は非同期に行われる。好ましい実施形態では、接続モデルは課されていない。したがって、TCPなどのトランスポートは不要である。また、エラー条件は不達またはセキュリティ例外に限られる。
【0062】
メッセージング・レイヤ104は、メッセージ対応ネットワーキング・レイヤ106の上にある。好ましい実施形態では、メッセージング・レイヤ104は、特定のネットワーキング・プロトコルを使用する必要がない。TCP/IPおよびUDP/IPは、メッセージ対応ネットワーキング・レイヤ106に使用できるメッセージ対応プロトコルの例である。ただし、ワイヤレス・アプリケーション・プロトコル(WAP)などの他の専用プロトコルも使用できる。他にも、トランスポート・レイヤの下のIrDAやBluetoothネットワーク・ドライバのメッセージ・プロトコルも考えられる。ネットワーキング・レイヤ106は、TCP/IPなどの単一の信頼できる接続プロトコルに限られない。したがって、さまざまなデバイスとの接続が可能である。
【0063】
一実施形態では、メッセージ対応ネットワーク・レイヤ106は、Java2 Micro Edition(J2ME)プラットフォームが提供するネットワーキング・クラスから実装することができる。Java2 Micro Editionプラットフォームは、完全なJavaプラットフォーム用のリソースを持たないまたは完全なJavaプラットフォームを実行するのは効率的でない省スペース・デバイスに適している。J2MEがすでにネットワーキング・プロトコルのメッセージ対応ファミリ(ソケットをサポートする)を備えているため、メッセージング・レイヤ104を追加した場合の省スペース・コストについて、分散コンピューティング機能をすでにJ2MEを含んでいる小型デバイス用に提供することができる。
【0064】
メッセージ対応ネットワーキング・レイヤ106はさらに、Java開発キット(JDK)のjava.netネットワーキング・クラスでも用意できる。それとは別に、メッセージ対応ネットワーキング機能をメッセージ対応ネットワーキング・レイヤ106に使用することもできる。好ましい実施形態では、信頼できるトランスポートは不要であり、したがって、UDP/IPなどの信頼できないデータグラム・トランスポートをサポートする組み込み型デバイスもまたメッセージング・レイヤをサポートできる。したがって、シン・クライアントは、単にシン・メッセージング・レイヤ104を基本ネットワーキング・プロトコル・スタックの上に追加するだけで分散コンピューティング環境に参加することができる。図3に示されているように、基本システムはネットワーキング・レイヤ106の上にメッセージング・レイヤ104を備える。ネットワーキング・レイヤは、信頼できるメッセージ、たとえばTCP、または信頼できないメッセージ、たとえばUDPに対応できる。インターネット・プロトコル(IP)は、図3に、ネットワーキング・レイヤ106で使用できるプロトコルの例として示されている。ただし、分散コンピューティング環境ではIPを必要としない。分散コンピューティング環境では、IPに加えて、他のプロトコルも使用できる。Ethernet(登録商標)、Token Ring、Bluetoothなどのネットワーク・ドライバも、ネットワーキング・レイヤの一部とすることができる。多くの小さなクライアントがすでに、UDP/IPなどのネットワーク・ドライバおよびトランスポート・プロトコルを備えている。そこで、シンXMLベースのメッセージング・レイヤを追加する際に、デバイスは分散コンピューティング環境に参加できる。
【0065】
そこで、分散コンピューティング環境の基礎は、信頼できる接続および/または信頼できないデータグラムの上に実装された単純なメッセージ通信レイヤである。このメッセージング技術は、Javaリモート・メソッド呼び出し(RMI)を採用するJiniなどの他の分散コンピューティング・システムで採用されている通信技術とはかなり異なる。メッセージ通信レイヤ104は、RMIで記述される状態を保持する同期スタイルではなく、状態を保持しない非同期スタイルの分散プログラミングをサポートしている。さらに、メッセージ通信レイヤ104は、XMLなどのデータ表現言語に基づいており、そのため、RMIと異なり、コピー元からコピー先へデータをコピーするが、コードはコピーしない。Javaコードはメッセージの発送側または受取側に想定されていないため、XMLなどの表現データ言語を使用することにより、メッセージング・レイヤ104は非Javaおよび非Jiniプラットフォームとの相互運用性をシームレスに実現できる。さらに、RMIとは異なり、メッセージング・レイヤ104は、TCP/IPなどの信頼できるトランスポート・メカニズムを必要としない。
【0066】
メッセージ通信レイヤは、たとえば、バイトの配列またはバイト列として指定されたメッセージを送るために単純なsend()およびreceive()メソッドを提供することができる。send()メソッドは即座に戻り、データ転送を非同期に実行することができる。フロー制御のため、send()メソッドがsend()リクエストを処理できないことを示す例外をスローした場合に呼び出されるコールバック・メソッドを提供できる。receive()メソッドは同期メソッドで、次に使用可能なメッセージを返す。
【0067】
このメッセージ通信レイヤは、さらに、「スペース」内にオブジェクト、サービス、およびコンテンツのXML表現を格納するメソッドを備えることもできる。スペースは、URI(Uniform Resource Identifier)を使用してネットワーク上で名前が指定されアクセスされる。URIは、URL(Uniform Resource Locator)またはURLの簡易版でもよい。いくつかの実施形態では、URLクラスは大きすぎる場合がある。このような実施形態では、より単純なリソース・ロケータを使用し、クライアントとサーバとの間のメッセージの移動に使用するプロトコル、プロトコル依存ホストID、プロトコル依存ポートID、スペース名を指定する。
【0068】
メッセージング・レイヤで提供しているwrite()メソッドを使用してオブジェクトのXML表現をスペースに追加することができる。一実施形態では、クライアント指定名とオブジェクトをパラメータとして与えることができる。一実施形態では、writeメソッドは、オブジェクトをそのXML表現に変換する。オブジェクトを返し、スペースから削除するためにtake()メソッドを用意することができる。スペース内のXML表現から指定されたオブジェクト返すためにfind()メソッドを用意することができる。find()メソッドもまた、クラスが与えられた場合にスペース内のマッチするオブジェクトの配列を返すのに使用できる。これらのスペース・メソッドはそれぞれ、メッセージ通信レイヤを使用して実装される。リース・メカニズムも、後述のように提供することができる。
【0069】
発見サービスを、特定のスペースを見つけるためにクライアントが使用できる一般的なサーチ機能としてクライアントに提供することができる。シン・クライアントが実装することができないと思われる複雑なサーチ・プロトコルを定義しようとするのではなく、発見サービスが実際のサーチをXMLベースのサーチ機能にオフロードし、発見サービスがインターフェース機能をクライアントに簡単に提供できるようにする。このアプローチは図4に示されている。一実施形態では、発見サービスは特定するものを指定するストリングを受け取り、XMLメッセージを既知の発見フロント・エンド(たぶん、デフォルトのスペースで見つかる)に送り、その後、ストリングを解析し、サーチ機能に対し対応するXMLクエリを実行する(これは、インターネットサーチ機能でもよい)。発見フロント・エンドは、サーチ機能から受け取ったものを解析し、ストリングの配列(各ストリングは見つかったそれぞれのスペースのURI)としてそれを再パッケージし、XMLメッセージでクライアントに送ることができる。発見サービスでは、メッセージングが接続指向トランスポートの上にあることを要求していないことに注意されたい。したがって、TCPを持たない非常に軽量のシン・クライアントであってもこのような発見サービスを使用できる。発見フロント・エンドでは、クライアントがクライアント上にブラウザまたはサーチ機能なしでスペースを発見することが可能である。クライアントは、キーワードを指定するストリングを、サーチ機能とインターフェースするフロント・エンドに送る単純な機能だけあればよい。
【0070】
クライアントは、少なくともAPIとメッセージング・レイヤのサブセットを使用してメッセージを送ることができるプラットフォームであれば何でもよい。一実施形態では、APIレイヤは、静的(またはraw)および書式付き(またはcooked)メッセージの両方に対応できる。サーバは、メッセージ要求を受け取り、遂行できるプラットフォームであれば何でもよい。クライアントからサーバへ、または他のクライアントへバイト列を移動する明示的rawメッセージを送ることができる。メッセージ・タイプは、信頼できるメッセージ(たとえばTCP)、または信頼できないメッセージ(たとえばUDP)として指定できる。デバイスのうち最も小さいものは、rawの信頼できないメッセージ通信を、分散コンピューティング環境に参加する単独の手段として使用する。デバイスは、これらのメッセージを使用してその存在と状況をアナウンスする。このような小さなデバイスは、さらに、rawメッセージを受け取りて、機能のオン/オフなどのいくつかの機能を実行できる。
【0071】
スペースなどのメッセージベースのサービスでは、信頼できる書式付きメッセージを送受取できる。スペース・メッセージは、きちんと定義されたヘッダーを備える形式とし、XMLを使用する。一実施形態では、書式付きメッセージは、クライアントがスペース・メソッドを使用して、スペースにオブジェクトを要求したり、スペースにオブジェクトを書き込んだり、スペースからオブジェクトを取り出したりする。メッセージ・コンテンツは、動的にXML形式にすることができ、きちんと定義されたヘッダを備える。図5は、書式付きの静的メッセージをサポートするクライアント・プロファイルを示している。静的メッセージを使用することにより、小さなデバイスはコードのさらに小さなプロファイルを使用して、分散コンピューティング環境に参加することができる。たとえば、小さなデバイスは基本的なあらかじめ定められたメッセージだけを送ることができる。クライアントにもよるが、静的なあらかじめ定義されたメッセージが占有するメモリは少ないと考えられる(たとえば、200バイト未満)。静的メッセージは、さらに、大きなデバイスにあってはオプションとしてもよい。他方、動的XMLメッセージは、オブジェクト値がコンパイル時にわかっていないときに役立つ。
【0072】
図6には、メッセージング・システムとXMLメッセージおよびXMLオブジェクト表現とを組み合わせた分散コンピューティング・モデルが示されている。プラットフォームがXMLから独立していることを利用すると、システムを異機種分散コンピューティング環境に対応させることができる。したがって、クライアント110は、Javaなどの特定のプラットフォームではなくほとんどどのようなプラットフォームにでも実装することができる。メッセージング・システムは、インターネット・プロトコル(たとえば、TCP/IPやUDP/IP)などのネットワーク対応メッセージング・レイヤに実装することができる。そのため、コンピューティング環境をインターネットに分散させることができる。一実施形態では、メッセージング・システムはさらに、クライアントおよび/またはスペース・サーバおよび/またはサービスが同じコンピュータ・システムにあるときに、共有メモリを高速なプロセス間メッセージ・パッシング・メカニズムとして使用することもできる。図6の分散コンピューティング・モデルは、さらに、ほとんどどのような規模のクライアントであってもXMLメッセージの発送および/または受取を行えるように設定できるため、非常にスケーラブルである。
【0073】
図6に示されているように、分散コンピューティング・モデルで、サービス112およびクライアント110の2種類のソフトウェア・プログラムを実行することができる。サービス112は、サービスの使用を望んでいるクライアントに機能を通知することができる。サービス112は、スペース114で機能を通知する。図7に示されているように、クライアント110およびサービス112は同じネットワーク・デバイス内に常駐することもまた常駐しないこともある。たとえば、デバイス120および124はそれぞれ、1つのクライアントをサポートするが、サービス112aおよびクライアント110bは同じデバイス122内に実装される。また、図7に示されているように、デバイスがクライアントとサービスをサポートするのに特定のプラットフォームを必要としない。たとえば、デバイス120は、Javaベースとし、デバイス124はネイティブ・コードのランタイム環境を備える。
【0074】
デバイスは、ネットワーキング・トランスポートでアドレス指定可能なユニットである。デバイスの例としては、それらに限定はされないが、PDA、携帯電話、ノートパソコン、ラップトップ、デスクトップ・コンピュータ、より強力なコンピュータ・システム、さらにはスーパー・コンピュータもある。クライアントとサービスは両方とも、デバイスで実行されるソフトウェア(またはファームウェア)のURIアドレス指定可能なインスタンスとすることができる。クライアントは、分散コンピューティング環境アーキテクチャを使用してサービスを実行する。スペースとは、XMLドキュメントのリポジトリを管理するサービスである。これが冗長であっても、読みやすさのために、ここではスペース・サービスという用語を使用する。ソフトウェア・コンポーネントは、別々の時にクライアントでかつサービスであってもよい。たとえば、サービスがスペースを使用するときに(たとえば、自分を通知するために)、そのサービスはスペースのクライアントとなる。
【0075】
図8は、一実施形態における分散コンピューティング環境の基本モデルを示している。この分散コンピューティング環境は、ネットワーク全体を通してクライアント110をサービス112に接続する。ネットワークは、インターネットなどのワイド・エリア・ネットワークでよい。また、ネットワークは、インターネットで無線ネットワークに接続されたローカル・エリア・ネットワーク(LAN)などのネットワークの組み合わせとすることもできる。図8に示されているように、サービス112は、スペース114内で自分自身に対し通知132をパブリッシュする(XMLで表される)。通知132で、サービスのXMLスキーマとURIアドレスを指定する。その後、クライアント110は、通知132をルックアップする。クライアント110は、通知132を使用して、ゲート130をインスタンス化する。ゲート130により、クライアント110はサービス112を実行するが、その際に、XMLメッセージをサービス112に(から)発送(し、そして受取)する。
【0076】
サービスを実行した結果は一部、XMLメッセージでクライアントに返すことができる。ただし、小さなクライアントでは他の結果が大きすぎ一度に受け取りて消費することができないため、サービス112は、図9に示されているように、それらの結果または結果134のXML表現をスペース114に入れ、値で返すのではなく、(XMLメッセージによる)参照でクライアント110に返す。結果への参照を返す方法の例として、それらに限定されないがスペース内の結果を参照しているURIをメッセージで返す方法や、結果のURIを含むXMLドキュメントをメッセージで返す方法がある。後で、クライアント110は、結果にアクセスするか、または結果を参照で他のサービスに受け渡すことができる。結果を格納するスペースはサービスが通知されるスペースと異なっていてもよい。
【0077】
一実施形態では、分散コンピューティング環境はコンテンツの定義、通知、および記述にXMLを使用する。分散コンピューティング環境の新しいコンテンツ(たとえば、メッセージおよび通知)はXMLで定義される。既存のコンテンツ・タイプ(たとえば、他の環境用に開発されたもの)も、XMLを使用して、あるレベルの間接化(メタデータ)として記述することができる。XMLは、Javaがユニバーサル・コードを提供するのと似た方法で、ユニバーサル・データを提供するため、分散システム全体を通じてデータを表現する強力な手段となっている。XMLは、言語にとらわれない手段であり、自己記述的である。XMLコンテンツは、強い型付けで、スキーマを使用して妥当性を確認できる。システムは、用意されたXMLスキーマを使用する際に、有効なXMLコンテンツのみがメッセージで確実に渡されるようにできる。XMLコンテンツはさらに、HTMLやWMLなどの他のコンテンツ・タイプに変換することもできる。したがって、XMLを認識しないクライアントでも、そのまま、分散コンピューティング環境のサービスを使用できる。
【0078】
一実施形態では、分散コンピューティング環境のメッセージで、クライアントをサービスと接続し、スペースおよびストア内のコンテンツを取り扱うために使用されるプロトコルを定義することができる。メッセージを使用してプロトコルを定義すると、さまざまな種類のデバイスをプロトコルに参加させることができる。各デバイスは、その能力と役割に最適の方法でプロトコルを自由に実装することができる。たとえば、すべてのデバイスがJavaランタイム環境をサポートできるわけではない。分散コンピューティング環境のプロトコル定義では、デバイスでJavaを使用する必要もなければ使用することを暗示してもいない。また除外することもない。
【0079】
サービスの機能は、そのサービスが受け入れるメッセージに関して表すことができる。サービスのメッセージ・セットは、XMLスキーマを使用して定義することができる。XMLメッセージ・スキーマにより、XML型付きタグを使用して各メッセージ形式を定義する。タグの使用規則もまた、スキーマで定義できる。メッセージ・スキーマは、メッセージを受け取るために使用するサービスのメッセージ・エンドポイントとともにXML通知の一コンポーネントであってよい。分散コンピューティング環境では、クライアントがサービスの機能のすべてのサブセットまたは一部のサブセットを使用することができる。クライアントに与えられた機能セットを強制するためにセキュリティ・ポリシーを採用する。たとえば、一組の機能をクライアントに与えた後、クライアントは適切な承認がないとそのセットを変更することはできない。この機能定義のモデルにより、基本機能セットから拡張機能セットまでのサービス・レベルに対応できる。認識されたメッセージの数に加えることにより、拡張機能をサービスに追加することができる。
【0080】
一実施形態では、分散コンピューティング環境内のすべてのオペレーションは、クライアントとサービスとの間で送られるXMLメッセージとして実現される。ストレージ(一時的記憶と継続的記憶の両方)プロバイダは、クライアントとサービスがコンテンツを格納し、通知し、アドレス指定できるようにするサービスの例である。クライアントおよびサービスは、一時的ストレージ・スペースを使用して互いを見つけまたブローカ・コンテンツを見つけることができる。サービスは、コンテンツまたはサービス通知をスペース内に配置する。通知を使って、コンテンツ・タイプまたはサービスの機能を記述することができる。クライアントは、その後、スペースをブラウズして、目的の機能セットとマッチする通知を探す。クライアントがマッチする通知を見つけると、通信チャネルを確立し、その通知を裏付けるサービスとの間で双方向メッセージ通信を行えるようにする。一実施形態では、通信チャネルは認証される。サービスのオペレーションの結果(もう1つのコンテンツ・タイプにすぎない)は、応答メッセージでクライアントに直接返され、スペース内で通知され格納されるか、またはスペース内で通知されるが永続的に格納される。格納されている結果は、URI(たとえば、応答メッセージで返される)を使用して取り扱われ、関連する認証証明書が割り当てられる。
【0081】
メッセージ・ゲート
上述のように、分散コンピューティング環境では、XMLなどのデータ記述言語を使用する。XMLを使用してターゲット・エンティティ(たとえば、ドキュメント、サービス、またはクライアント)を記述し、そのエンティティにアクセスするためのコードを生成することができる。ターゲット・エンティティにアクセスするため生成されるコードは、メッセージ・ゲートと呼ばれる。したがって、一実施形態では、この分散コンピューティング環境は、他のオブジェクトにアクセスするために必要なオブジェクト間の必要なコードを受け渡す代わりに、この分散コンピューティング環境ではオブジェクトまたはターゲットXML記述にアクセスできるようにしてターゲットにアクセスするためXML記述に基づいてコードを生成するという点で、他の分散コンピューティング環境とは異なる。分散コンピューティング環境では、XMLスキーマを使用して、言語固有のAPIに依存することなくXMLスキーマだけで型安全性とともにプログラミング・モデル(たとえば、サポートされているメッセージ)を確実なものにすることができる。XMLスキーマから生成されたコードはさらに、ローカル・プラットフォームの言語、セキュリティ、型安全性、および実行環境の特性を組み込むこともできる。したがって、ローカル・プラットフォームでは、バグが入り込まないように、またスキーマに従って有効なデータのみが生成されるように、生成されるコードを制御する。生成されるコードは、クライアントのコード実行環境(たとえば、Java、C++、Smalltalk)だけでなく、その管理およびセキュリティ・フレームワーク(Webサーバおよび/またはオペレーティング・システム)に適合する。
【0082】
分散コンピューティング環境では、XMLスキーマから生成されるコードが実行時に「オンザフライで」生成されることを要求していないことに注意されたい。その代わりに、コードの一部または全部をサービスのカテゴリ(またはクラス)に合わせて事前に生成し、その後、プラットフォームのビルド・プロセスでリンクする。コードの事前生成は、いくつかのXMLスキーマがすでに知られている組み込みデバイスなどのある種のクライアントに対し有用である。一実施形態では、コードの一部または全部が実際に、全く生成されなくてもよい。一実施形態では、プライベート・コード・ロード方式(クライアント内の)を使用して生成プロセスを補強することができる。さらに、いくつかの実施形態では、分散コンピューティング環境でサービスにアクセスする際に追加機能のコードをダウンロードするためのインターフェースを指定することができる(たとえば、後述のメッセージ・コンダクタを参照)。通常、ダウンロードされるこのようなコードは小さく、クライアントにはコードをダウンロードするかしないかのオプションが用意される。
【0083】
「生成されるコード」というフレーズは、クライアント・コード実行環境の制御のもとでクライアント内で起動されるコードまたは別のところで(サービス・システムまたはスペース・サービス・システム上で)生成され、生成後クライアント・システムにダウンロードできるコードを指す。ただし、バインド時は実行時となる。実行時に、生成されたコードは、サービス・アドレス(URI)にバインドされ、メッセージがそのサービスのインスタンスに送られる。
【0084】
上述のように、分散コンピューティング環境のサービスとのインターフェースをXMLスキーマで指定し、クライアントがそのサービスに送る(そしてそのサービスから受け取る)メッセージの集まりを定義することができる。図10に示されているように、クライアント110およびサービス112は、それぞれ、メッセージ・ゲート130を構築し、指定されたXMLスキーマに従って通信する。サービス112について通知されたXMLスキーマ(および場合によってはサービス通知の他の情報)から、クライアント110aまたは110bがそれぞれメッセージ・ゲート130aまたは130bを構築できる。同じXMLスキーマから生成される対応するメッセージ・ゲート130cも、サービス112a上に存在する。ゲート130は、型安全なXMLメッセージの発送および/または受取を行え、またメッセージの発送および/または受取のときにXMLメッセージの型の正しさを検証できるメッセージ・エンドポイントである。メッセージ・ゲートはさらに、メッセージ・エンドポイントがセキュリティで保護されていることを確認する認証および/またはその他のセキュリティ・メカニズムにも対応する。一実施形態では、メッセージ・ゲートは常にセキュリティで保護されている。
【0085】
上記の分散コンピューティング環境のメッセージング・レイヤをゲートに結合するか、またはゲートの一部とすることができる。メッセージング・レイヤは、非同期にネットワーキング・トランスポートを使用し、バイトの順序列を発送側から受取側へ送り、発送側と受取側の両方でこのバイト列が1つのアトミック・ユニット、つまりメッセージであるという概念を維持する。分散コンピューティング環境では、ネットワーキング・トランスポートがIPベースであるという仮定を置かない。その代わりに、メッセージング・レイヤは、デバイスによってどのようなネットワーキング・トランスポート・レイヤがサポートされていようと一番上に置かれる。
【0086】
メッセージ・ゲートは、クライアントとサービスとの間でXMLメッセージを送り受け取るメカニズムを備えることができる。XMLメッセージは、「型付けする」ことができる。たとえば、メッセージに、メッセージ・データ・フィールドが、たとえば整数、浮動小数点、テキスト・データなどであるかどうかを示すタグを入れることができる。メッセージ・ゲートは、発送または受け取ったメッセージの型の正しさを検証するように構築することができる。メッセージ・ゲートはさらに、受け取ったメッセージの発送側を認証(たとえば、セキュリティ保護機能を使用して識別)することもできる。サービスによって受け入れられるかつ/またはサービスによって送られるメッセージ・セットを記述するXMLスキーマをサービスに対し提供することができる。メッセージ・ゲートは、そのゲートが構築されたXMLスキーマに従って発送または受け取ったメッセージの正しさを検証する。
【0087】
ゲートは、分散コンピューティング環境で、型検証および/またはメッセージの正しさの検証および/またはクライアントとサービスとの間のメッセージに対する発送側識別を実行するコードおよびデータの単一のアトミック・ユニットとして構築することができる。一実施形態では、メッセージ・ゲートに対するコードおよびデータのアトミック・ユニットが作成されると、これはその型付け、メッセージ記述子、および発送側識別に関して変更することはできない。他の実施形態では、ゲートは、作成後、メッセージ・スキーマ内のメッセージの削除、追加、または修正を含めて、メッセージ・スキーマのコンテンツに関して修正することができる。
【0088】
メッセージ・ゲートは、分散コンピューティング環境におけるクライアントまたはサービスのメッセージ・エンドポイントである。メッセージ・ゲートは、型安全なXMLメッセージを送り受け取るセキュリティで保護されたメッセージ・エンドポイントを備える。メッセージ・ゲートを使用すると、クライアントとサービスは、適当なメッセージ・トランスポート(たとえば、HTTP)で、セキュリティで保護され信頼できる方法により、XMLメッセージを交換することができる。クライアントでは、メッセージ・ゲートは、サービスの機能の一部または全部を使用する権限を表す。各機能は、サービスに送ることができるメッセージによって表すことができる。このようなメッセージはそれぞれ、メッセージの正しさを検証するクライアント・メッセージ・ゲートを通じて送ることができる。メッセージを受け取るには、メッセージを認証し、その正しさを検証するサービス・メッセージ・ゲートを使用する。
【0089】
メッセージ・ゲートは、XMLメッセージの型検査を行うセキュリティで保護された通信エンドポイントを備えることができる。後述するように、メッセージ・ゲートはさらに、クライアントとサービスとの間のメッセージの流れを制限するメカニズムを備えることができる。一実施形態では、クライアントがサービスにアクセスしようとする場合、クライアントとサービスのメッセージ・ゲートのペアが、すでに存在しているのでなければ、作成される。一実施形態では、サービス・メッセージ・ゲートは、サービスがクライアント・メッセージ・ゲートから第1のメッセージを受け取ったときに作成される。一実施形態では、1つまたは複数のサービス・メッセージ・ゲートをサービスの初期化時に作成し、これを使用して、作成の際にクライアント・メッセージ・ゲートとペアを組むようにできる。メッセージ・ゲートを作成する場合、目的のレベルのセキュリティを交渉する認証サービスおよびクライアントとサービスとの間で受け渡すことができるメッセージ・セットが必要になることがある。一実施形態では、認証サービスはクライアントIDトークン(クライアント・トークンともいう)、サービスIDトークン(サービス・トークンともいう)、およびサービスに発送またはサービスから受け取ることができるデータ表現言語メッセージ・セットを記述するデータ表現言語メッセージ・スキーマを受け付けることができる。たとえば、サービスを呼び出す、またはサービスのいくつかの一部を呼び出すために、クライアントからサービスに送られるメッセージを記述できる。また、応答メッセージやイベント通知メッセージなど、サービスから送るメッセージも記述できる。メッセージ・ゲートの構築および使用での認証サービスの使用方法の詳細については、以下の「認証とセキュリティ」の項を参照のこと。
【0090】
クライアント・メッセージ・ゲートとサービス・メッセージ・ゲートのペアにより、クライアントとサービスとの間でメッセージを送ることができる。一実施形態では、サービスのメッセージ・スキーマに記述されているとおり全メッセージ・セットのサブセットを発送かつまたは受け取るだけのメッセージ・ゲートを作成することができる。分散コンピューティング環境でこのような制限されたアクセスを利用することにより、セキュリティ・ポリシーに基づいて特定の個別メッセージ・タイプへのアクセスのみをクライアントに許可する最低限の特権のポリシーを実施することができる。ゲートの使用法およびゲートの作成方法の詳細については、以下の「認証とセキュリティ」の項を参照のこと。
【0091】
クライアント・ゲートとサービス・ゲートは、サービス通知(サービス通知内のサービスのURI)で指定されたプロトコルを使用して、クライアントからサービスへのメッセージの実際の発送(および受取)を実行する。クライアントは、このメッセージ・パッシングでサービスを実行する。メッセージ・ゲートは、クライアントとサービスとの間の抽象(abstraction)のレベルを与える。クライアントは、サービス・オブジェクトに直接アクセスする代わりにメッセージ・ゲートを通じてサービス・オブジェクトにアクセスすることができる。ゲートはクライアントからのサービスを抽象化しているので、クライアントが最初にサービスを使用するまで、サービスのコードをロードして開始する必要はない。
【0092】
クライアント・ゲートも、XMLスキーマと突き合わせてメッセージの検証を実行するか、または、たとえば、メッセージがまだ検証されていないことをクライアントが示した場合に、XMLスキーマと突き合わせてメッセージの検証をサービス・ゲートによって実行することができる。いくつかの実施形態では、単純なクライアントの場合に検証は実用的でなく、クライアント側に必要ない場合がある。いくつかの実施形態では、サービス側で検証を実行できる。ゲートではさらに、認証有効化および/またはセキュリティ方式を実行することもできる。一実施形態では、クライアントがサービス通知で指定されたプロトコルをサポートしない場合、正しいゲートを構築できないことがある。この問題を避けるために、サービス通知(ゲート構築に使用される)はサービスに使用可能なURIのリストを含め、さまざまなクライアントをサポートできるようにする。
【0093】
基本メッセージ・ゲートは、メッセージを発送および受け取るためのAPIを実装できる。このAPIは、ゲートとの間でデータ(たとえば、XMLメッセージ)を出し入れし、送る前および/または受取後のメッセージの妥当性を確認する。一実施形態では、メッセージ・ゲートは、メッセージを発送および受け取るための定められた最低限のAPIをサポートできる。後述のように、このAPIは他の機能に拡張することができる。図10bに示されているように、ゲート130は、XMLスキーマ132に従って生成することができる。生成されたゲート・コードは、XMLスキーマに基づいてメッセージを検証する。このゲートは、メッセージAPIを通じてメッセージ・タイプおよび/またはコンテンツが正しいかどうかを検証する。図10bに示されているように、検証されたメッセージは、メッセージAPIを通じて、サービスに送られる。このメッセージを、サービス側の対応するゲートで受け取る。このメッセージへの応答として、サービスは結果180を生成することができる。サービスは、そのゲートを通じて結果データ182を返す。結果データは、それ自体結果であるか、または、スペースに格納されている結果へのURIなど結果に対する参照である。さまざまな実施形態において、メッセージAPIは、たとえば、同期メッセージ(要求応答)、非同期メッセージ(応答は要求から切断される)、ユニキャスト・メッセージ(2地点間)、マルチキャスト・メッセージ(ブロードキャスト)、およびパブリッシュとサブスクライブ(イベント・メッセージ)をサポートできる。リモート・メソッド呼び出しメッセージなどの他のタイプのメッセージもサポートできる。
【0094】
ゲートによって送られた各メッセージは、受取ゲートがメッセージを認証するための認証証明書を含むことができる。各メッセージは、さらに、メッセージが損なわれていないあるいは改変されていないことを受取ゲートが検証するための情報を含むトークンも含む。たとえば、発送側は、受取側が検証するメッセージのハッシュまたはチェックサムを計算することができる。発送側はさらに、発送側の秘密鍵を使用してこのトークンおよび/またはメッセージ全体を暗号化し、暗号化されたメッセージに対応する公開鍵を含め、トークンが変更されていないことを受取側が検証できるようにする。詳細については、以下の「認証とセキュリティ」の項を参照のこと。
【0095】
メッセージ・ゲートのペアは、クライアントからサービスへの要求およびサービスからクライアントへの応答を伝達するメカニズムを備える。2つの関連するメッセージ・ゲート・エンドポイントを使用して、要求応答メッセージ通信用のセキュリティで保護された双方向アトミック・メッセージ・チャネルを作成することができる。そこで、分散コンピューティング環境では、メッセージ・ゲートがクライアントとサービスの両方の側に存在するメッセージ・トランスポートを採用する。この2つのゲートは連携して、セキュリティで保護され信頼できるメッセージ・チャネルを実現する。
【0096】
図11aには、サービス通知またはその他のサービス記述132からクライアント110内にゲート130aを構築することを示す一実施形態の図が示されている。クライアントは、XMLサービス記述に基づいてゲートを生成するクライアント上の信頼できるコードであるゲート・ファクトリ140を備える。ゲート・ファクトリ140を使用すると、生成されるゲートが信頼できるコードでもあること、またそのコードがサービス通知に関して正しいものであることを確認することができる。図11bに示されているように、ゲート130cはさらに、サービス112に構築することもできる。クライアント・ゲート130aおよびサービス・ゲート130cは、クライアントとサービスとの間の通信を行うためのメッセージ・エンドポイントを提供する。一実施形態では、ゲート・ファクトリがゲート130を構築するために必要とする断片はサービス(サービス通知から)のXMLスキーマとサービス(サービス通知から)のURIである。他の実施形態では、さらに、サービスを通知で指定された認証サービスを実行することにより、認証証明書を取得し、ゲート構築で使用することができる。
【0097】
ゲート・ファクトリは、メッセージ・ゲートを作成するための信頼できるメカニズムを備える。いくつかの実施形態では、メッセージ・ゲートが信頼できるメッセージ・エンドポイントであることを確実なものとするために、ゲートを作成するために使用されるコードは信頼できるコードである必要がある。ゲート・ファクトリ140は、ゲートを作成するために使用されるコードの信頼できるパッケージとすることができる。一実施形態では、分散コンピューティング環境でメッセージの発送および受取を望む各クライアントおよびサービス・デバイス・プラットフォームはゲート・ファクトリを備える。いくつかの実施形態では、別のゲート・ファクトリによりゲートをあらかじめ構築して、あらかじめ構築されたゲートを備えたデバイスで完全なゲート・ファクトリを必要としなくて済むようにするか、またはゲートは、サービスURIおよび/または認証証明書の実行時に(たとえば、メッセージ通信が必要なときに)あらかじめ構築されたゲートにバインドする部分ゲート・ファクトリを備えることができる。
【0098】
デバイス用のゲート・ファクトリは、ローカル・デバイス・プラットフォームの言語、セキュリティ、型安全性、および/または実行環境の特性を組み込むゲート・コードを生成できる。デバイスは、ゲート自体を構築することにより、生成されたゲート・コードにバグがないこと、有効なデータのみを生成すること、型安全であることを確認することができる。サービスにアクセスするためコードをダウンロードするのではなく自分のゲート・コードをデバイスで生成する利点は、クライアント・コード管理環境に制御権があるという点である。生成されるコードは、クライアントのコード実行環境(たとえば、Java、C++、Smalltalk)だけでなく、その管理およびセキュリティ・フレームワーク(Webサーバおよび/またはオペレーティング・システム)に適合する。生成されたコードは、クライアントの実行時環境がコード作成に関わっていたため信頼できるコードでもある。したがって、信頼できる生成されたコードにより信頼できるセキュリティ情報も追加できる。そのため、デバイスはサービスに対するXMLメッセージ・スキーマを受け取りてから、その後デバイスにアクセスするためにそのスキーマに基づいてゲートを構築することができる。XMLスキーマは、サービスとの契約を定義することとみなすことができ、生成されたゲート・コードは、その契約を実行するセキュリティで保護された手段を提供することとみなすことができる。信頼できない(たとえば、ダウンロードされた)コードが実行される開いているデバイスは、信頼できるコードでのみゲートを生成できるように設定できることに注意されたい。開いているデバイスは、ゲートの実装、特にゲート認証証明書を発見することができるデバッガなど、ゲートがツールからアクセスできない保護され分離されているコード・コンテナに封じ込められているプロセス・モデルを採用することができる。
【0099】
ゲート・ファクトリ140は、クライアントのためにサービスと交渉し、メッセージをサービスに送るためのゲートを作成する。同様に、ゲートをサービスで構築し、クライアント・ゲートからメッセージを受け取り、メッセージをクライアント・ゲートに送るようにできる。それとともに、クライアントとサービス・ゲートは、セキュリティで保護された双方向通信チャネルを形成できる。
【0100】
ゲート・ファクトリは、ゲートを作成する際にあるレベルの抽象化を行う。たとえば、クライアントがサービスを使用することを望んでいる場合、クライアントが直接サービスにアクセスするゲートを作成する代わりに、サービスをインスタンス化する一環としてゲート・ファクトリによりゲートを作成できる。
【0101】
ゲート・ファクトリは、構築するゲートの認証証明書を受け取るため認証サービス(たとえば、サービス通知により指定された)と通信するために使用される信頼できる独自のメッセージ・ゲートを作成または備えることができる。アクセスが制限されているサービスでは、認証証明書なしでゲートを構築することができる。サービスではアクセスを制限しないので、このようなサービスのゲートは、各メッセージを有する認証証明書を送る必要がない場合がある。認証サービスは、一実施形態では、アクセスを制限しないサービスの一例である。したがって、サービスでアクセスを制限するかどうかをチェックすることによりゲート構築を最適化するようにゲート・ファクトリを設定できる。サービスがアクセスを制限しない場合、ゲート・ファクトリはゲート構築の一環として認証サービスの実行を回避することができ、また構築されたゲートの一部として認証証明書に対する取り込まれた規定を回避できる。ゲート・ファクトリはさらに、XMLメッセージ・スキーマ(たとえば、サービス通知によって指定される)を受取またはダウンロードし、そのスキーマとマッチするゲートを作成することもできる。ゲート・ファクトリはさらに、URIと通信するクライアント・メッセージ・ゲートの作成に使用するサービスおよび/またはサービス・メッセージ・ゲート用にURIを受取またはダウンロードすることもできる。
【0102】
さらに、サービスのXMLスキーマと突き合わせてメッセージのチェックを実行することを望んでいないいくつかのクライアントに対して別のゲート構築最適化を採用することができる。クライアントは、軽量過ぎてチェックを実行できなかったり、チェックを実行するのにサービス・ゲートに依存していたり、単にチェックの実行を選択しなかったりする(たとえば、ゲート・メモリ占有面積を減らすため)。提供されるXMLスキーマと突き合わせてメッセージを検証するためにゲートを構築するかどうかの表示を受け取るようにゲート・ファクトリを設定できる。いくつかの実施形態では、いくつかのクライアントが、構築されたゲートのスキーマと突き合わせてメッセージの検証を行う機能を備えていないゲート・ファクトリを備えることができる。いくつかの実施形態では、メッセージを検証しないようにゲートを事前に構築する。いくつかの実施形態では、送出メッセージのみを検証するか、または受け取ったメッセージのみを検証するように、ゲートを構築することができる。したがって、いくつかの実施形態では、クライアントは、XMLスキーマと突き合わせてメッセージをチェックするゲート・コードの一部または全部の構築を回避するか、または回避することを選択できる。
【0103】
いくつかの実施形態では、デバイスは、同じサービスが実行されるごとに構築するのを回避するためにゲートのキャッシュを維持することができる。たとえば、新しいゲートがゲート・ファクトリにより構築されるときに、ゲートをゲート・キャッシュ内に維持することができる。ゲートが使用されなくなったら、削除する代わりに、ゲート・キャッシュ内に保持する。ゲート・キャッシュがいっぱいになったら、最近最も使用されていないデータを追い出すアルゴリズムなどのキャッシュ置換アルゴリズムに従って1つまたは複数のゲートをゲート・キャッシュから削除することができる。ゲートを構築するためゲート・ファクトリが呼び出された場合、ゲート・ファクトリはまず、新しいゲートの構築を回避できるようにゲート・キャッシュをチェックしてマッチするゲートがすでに存在していないか調べる。
【0104】
他のゲートを構築するのに使用した断片を適切に再利用することによりゲートの構築を軽量化することができる。各ゲートのいくつかの部分は同じでよいため、メッセージ検証コードの一部など、ゲートからゲートへ再利用することができる。さらに、いくつかのデバイスについては、共通ゲート・コードをデバイスのシステム・ソフトウェアに組み込み、そのデバイスのすべてのゲートと共有することができる。したがって、ゲート・ファクトリは、ゲートごとにこの共通コードを再構築することを回避することができる。その代わりに、ゲート・ファクトリは、単に、ゲートをこのシステム・ソフトウェア部分にバインドすることができる。たとえば、デバイスにどのようなトランスポートが提供されていようとメッセージ・レイヤを取り扱えるシステム・ソフトウェア部分を用意することができる。
【0105】
特に、スペース・サービスは、スペース・サービスに対して構築されたサービス・ゲートがそのスペース・サービスの他のサービス・ゲートと同じ多くの機能を実行できるため、上述のゲート構築最適化の多くに対して適切な候補といえる。スペース・サービスの詳細については、以下の「スペース」のセクションを参照のこと。
【0106】
いくつかの場合において、より効率的なメソッド呼び出し形式が存在することがある。たとえば、ターゲット・サービスがクライアント・アプリケーションと同じJava仮想マシンで実行される場合、より効率的なメソッド呼び出し形式は、サービスに対しJava Dynamic Proxy Classを作成することである。このような場合、java.lang.reflect.Method呼び出しは、メッセージの発送よりも高速なことがある。ゲート・バインド時間プロシージャは、このような最適化をチェックし、ゲート・ファクトリを実行する代わりにそれを使用して、ゲートを作成するか、または既存のゲートをバインドする。
【0107】
一実施形態では、専用クライアントや小型埋め込み型デバイスの場合などで、実行時のゲート・コードの生成は、メモリの消費とコード生成時間の観点から、望ましくないことがある。したがって、実行時にゲートを生成するゲート・ファクトリを用意する代わりに、いくつかの実施形態では、ゲートを事前に生成し、デバイスに組み込む。たとえば、埋め込み型ソフトウェアのビルド時に、実行時に構築しなくてよい組み込みのセキュリティで保護されたメッセージ・エンドポイントを含める手段としてメッセージ・ゲートを生成することができる。したがって、組み込み型ゲートを持つクライアントは、完全なゲート・ファクトリを必要としないか、またはURIおよび/または認証証明書など、組み込みゲートへのある種の実行時バインドを実行するために部分的ゲート・ファクトリのみあればよい。
【0108】
ゲートの事前構築用に生成ツールを用意することができる。そのゲート生成ツールは、XMLパーサ、コード・ジェネレータ、およびコード・コンパイラを備える。一実施形態では、コード・ジェネレータはJavaソース・コード・ジェネレータであり、コード・コンパイラはJavaコード・コンパイラである。組み込みメッセージ・ゲートが望まれるソフトウェアのビルド時に、ゲートが望まれる関連するすべてのXMLスキーマからの入力とともに生成ツールが実行される。
【0109】
たとえば、デバイスがデジタル・カメラとの間でメッセージを送受取できる組み込みメッセージ・ゲートを備えることが望ましい場合、デバイス・ソフトウェアのビルドは、カメラのXMLメッセージ・スキーマを入力としてゲート生成ツールを実行する作業を含む。XMLスキーマは、XMLスキーマをメッセージ検証プロセスで高速アクセスするのに適している内部形式に変換するXMLパーサにより解析することができる。ツールのコード・ジェネレータは、カメラのスキーマに対応するゲートのソース・コードを提供することができる。いくつかの実施形態では、生成ツールはさらにソース・コードをコンパイルし、ゲート・コードはデバイスのソフトウェア・パッケージにリンクすることができる。実行時に、分散コンピューティング環境でカメラ・サービスを発見することができる。カメラ・サービスのメッセージURIをデバイス内でカメラの組み込みゲートにバインドすることができる。事前に構築されたゲートへのURIのバインドは、デバイス内のゲート・コンストラクタによって実行される。このゲート・コンストラクタは、かなり小さく、単純なゲート・ファクトリである。カメラ・サービスがインスタンス化されると、カメラ・サービスのURIがXMLメッセージとしてゲート・コンストラクタに渡される。その後、ゲート・コンストラクタはURIを事前構築されたゲートにバインドする。
【0110】
したがって、ゲートは、実行時に部分的にまたは完全に生成されるか、またはゲートは、実行時に実行されるバインド・プロセス(たとえば、URIまたは証明書の)で実行時の前に事前生成される。一実施形態では、ゲート・ファクトリなどのゲート生成ツールまたは事前構築されたゲートの生成ツールを、あるレベルのプラットフォーム独立性を実現するJavaベースのツールとすることができる。それとは別に、ゲート生成ツールは、分散コンピューティング環境では特定のデバイスのネイティブ・コードなど任意の言語のものが提供できる。分散コンピューティング環境では、デバイスがゲートのコードの一部または全部をダウンロードできないことはないことに注意されたい。たとえば、いくつかの実施形態では、サービスは、そのサービスへのアクセスを望むクライアントによってダウンロードできるゲート・コードを提供する。ただし、ダウンロードされたコードは、サイズ、セキュリティ、および/または安全に関する危険性を示す場合がある。
【0111】
一実施形態の考えられるゲート・コンポーネントの詳細な図を図12に示す。ゲートは、そのアドレス(または名前)150、デスティネーション・ゲート・アドレス152、有効なXMLスキーマ(または内部形式)154、およびトランスポートURI 153を備えることができる。他の実施形態では、ゲートに認証証明書156を含むことができる。一部のゲートは、さらに、リース158および/またはメッセージ・コンダクタ160を備え、メッセージ順序付けを検証することができる。ゲートの名前150は、そのゲートを参照するだけの一意的なIDでよい(そのゲートの存続期間中)。ゲートは、ゲート名150を使用してアドレス指定することができる。一実施形態では、ゲート名はXMLスキーマのストリング(たとえば、サービス通知からのストリング)と128ビット乱数などの乱数の組み合わせとして生成することができる。名前150を使用する際に、クライアントおよびサービスはネットワークに関して移行することができ、またそのまま協調動作する。好ましい実施形態では、ゲート・アドレスは、物理的メッセージ・トランスポート・アドレスおよび/またはソケット・レイヤと独立である。したがって、ゲート名はメッセージ・トランスポート・アドレスに対するバインドおよびバインド解除できる仮想メッセージ・エンドポイント・アドレスを与えることができる。一実施形態では、ゲートの名前は、そのゲートの存続期間中、そのゲートを参照するだけのUniversal Unique Identifier(UUID)でよい。
【0112】
ゲート名は、ゲートは存続している限り存続するため、同じデバイス内で実行する異なるアプリケーションとクライアントは特定のゲートを繰り返し見つけて、使用することができる。たとえば、サービスにアクセスするためデバイス内で実行している第1のクライアント・プロセスについてゲートを作成することができる。第1のクライアント・プロセスがそのサービスに対する活動を完了した後、ゲートを解放する。ゲートを解放する作業では、ゲートの第1のクライアント・プロセスのメッセージ・トランスポート・アドレス(たとえば、IPおよび/またはポート・アドレス)へのバインドを解除する必要がある。ゲートは、ゲート・キャッシュまたはリポジトリに格納することができる。同じサービスを実行する必要がある同じデバイス内で実行している第2のクライアント・プロセスは、そのゲートを名前で特定し、そのゲートを使用してサービスにアクセスする。ゲートを使用するために、第2のクライアント・プロセスはゲートをそのメッセージ・トランスポート・アドレスにバインドし、第2のクライアント・プロセスに対するメッセージ・エンドポイントがゲート名と第2のクライアント・プロセスのトランスポート・アドレスとの組み合わせになるようにする。他の実施例では、クライアントは動的IPアドレスを受け取ることができる(たとえば、モバイル・クライアント)。クライアントのトランスポート・アドレスが変更されると、(1つまたは複数の)ゲート名がクライアントの新しいトランスポート・アドレスに再バインドされ、クライアントがそのまま、サービスを再配置しゲートを再作成せずにすでにアクセスしているサービスにアクセスできる。ゲート名は、プロセスの移行にも使用できる。プロセスおよび関連するゲートを、分散コンピューティング環境の一ノードにチェックポイント化するかまたは保存して、他のノードに移動することができる。プロセスを新しいノードで再起動し、関連するゲートをその新しいノードのトランスポート・アドレスにバインドすると、プロセスは、移行前のアクセス先であった外部サービスにそのままアクセスすることができる。ゲートは、ペアの相手である他のゲートの現在の場所を追跡することができる。したがって、サービスまたはクライアントを移行しても、そのままアクセス可能である。たとえば、複製または負荷バランスをとったサービス実装をゲートによってサービスのクライアントから抽象することができる。そこで、ゲート名150は、分散コンピューティング環境でメッセージ・エンドポイントのアドレス指定を行う柔軟性の高いメカニズムを提供する。ゲート名を使用して、ローカル・ネットワークからインターネットにいたるさまざまなネットワーク上でゲートを特定および/またはアドレス指定することができる。ゲート名は、メッセージ・トランスポートとは無関係で、メッセージ・エンドポイント(ゲート)を基礎となる異なるトランスポート・アドレス(たとえば、IP/ポート・アドレス・ペア)へのバインド解除および再バインドによりトランスポートからトランスポートへ移動することができる。
【0113】
一実施形態では、ゲートをさらにサービスから分離し、同じゲートを使用して時間がたつうちに要求を異なるサービスに送ることができる。この作業には、ゲートのデスティネーション・ゲート・アドレス152のバインドを解除し、新しいデスティネーション・ゲート・アドレスをゲートにバインドする作業が必要である。
【0114】
ゲートは、デバイスのトランスポート・レイヤの上のレイヤとして実装することができる(たとえば、ネットワーキング・ソケット)。各ゲートは、トランスポート参照153を含む。ゲート名150は、上述のようにトランスポート参照153にバインドされる。複数のゲートが、同じメッセージ・トランスポートを共有することができる。たとえば、複数のゲートが同じTGP/IPソケットへのトランスポート参照153を持つことができる。同じメッセージ・トランスポートを共有することにより、各ゲートのサイズおよび複雑さを低減することができる。分散コンピューティング環境内のデバイスは、メッセージの送受取に必要なゲートの数が増える場合がある。複数のゲートに対するメッセージ処理の複雑さは、共通メッセージ・トランスポートを共有することにより低減される。トランスポート参照153は、トランスポートURI(たとえば、URL)またはソケット参照であり、基礎のトランスポートに名前を付け、そのトランスポートを他のゲートと共有するメカニズムを提供することができる。複数のローカル・ゲートは、同じトランスポートへの参照153を含むが、各ローカル・ゲートは、ペアのリモート・ゲートとの間でメッセージの送受取を行う他のローカルゲートとは無関係に動作する。
【0115】
スキーマ154は、ゲート・ファクトリによってスペースからゲート内にダウンロードすることができる。スキーマを、メッセージ検証プロセス中に素早くアクセスするのに適している内部形式にコンパイルすることができる。一実施形態では、スキーマは、クライアント・サービス・メッセージおよびプロバイダ・サービス・メッセージという2つのメッセージのグループを指定できる。クライアント・サービス・メッセージ・グループは、クライアントが送ることができるすべてのメッセージの記述(プロバイダがサポートする)を含み、プロバイダ・サービス・メッセージ・グループは、プロバイダが送ることができる(クライアントが受け取る)すべてのメッセージの記述を含む。一実施形態では、クライアントまたはプロバイダのいずれかがスペース・サービスに対し特定の要求を送り、クライアント・サービス・メッセージ全体、プロバイダ・サービス・メッセージ全体、クライアントおよびプロバイダ・サービス・メッセージ全体、またはクライアント・サービス・メッセージまたはプロバイダ・サービス・メッセージのいずれかの特定のメッセージのいずれかのメッセージとともに応答メッセージを取得する。さらに、ゲートが構築された後、クライアントは、ゲートが実際にメッセージを送りなくても、ただし、その代わりに、ゲートのメッセージ群を検査することにより、サービスの機能に関してクエリを実行することができる。
【0116】
上述のように、メッセージ・ゲートは、認証証明書を使用するメッセージの発送側、型安全性に対するメッセージ・コンテンツをXMLスキーマに従って検証することができる。ただし、クライアントとサービスとの間でメッセージが正しい順序で送られることを検証することが望ましい。クライアント上のアプリケーションに関係する既存の特定の機能なしで(たとえば、クライアント上のアプリケーションにGUIがない場合)実行するクライアント用のアプリケーション(サービス)を提供できることが望ましい。たとえば、クライアント上でWebブラウザをサービスのGUIとして使用し、アプリケーション固有のGUIを使用しないようにできる。XMLスキーマ内の可能なメッセージのうち、クライアントは次にサービスに送るメッセージを知る必要がある。クライアントはサービスに関する特定の情報がないまま次に送るメッセージを判別できることが望ましい。一実施形態では、サービスは必要な次の入力を示す応答メッセージを継続的に送ることができる。サービスは、その後、要求入力が指定されているクライアントから対応するメッセージのみを受け入れる。メッセージ順序付けに対する他のアドホックな方式も採用できる。
【0117】
他の実施形態では、各メッセージのシンタックスを検証する(スキーマに従ってゲート内ですでに実行されている可能性がある)のとは反対に、メッセージ・コンダクタ160をゲート内で採用するか、またはゲートに関連付け、メッセージの正しい順序を検証することができる。メッセージ・コンダクタ160は、アプリケーションの準備のためのより一般的なアプローチをとることができる。メッセージ・コンダクタ160は、サービスの通知で指定できる。スキーマ内のメッセージ・コンダクタ指示により、ゲート構築中に、クライアント上に生成するか、またはクライアントにダウンロードすることができ、次にサービスに送るメッセージを決定するのに必要なコレオグラフを提供できる。メッセージ・コンダクタは、Javaアプリケーション、Java Script、およびWMLスクリプトとして、または他のプログラミングまたはスクリプティング言語で実装できる。
【0118】
一実施形態では、メッセージ・コンダクタは入力を、クライアントとサービスの間で送ることができるメッセージの有効な順序またはコレオグラフを表示するXML文書(たとえば、サービス通知からの)として受け入れることができる。このXML文書はさらに、ユーザ・インターフェース情報とその他の規則を指定することもできる。コンダクタは、このXML文書を解析して、内部形式にし、囲まれている順序付け情報に従ってメッセージ順序付け(および/またはその他の規則)を強制する。コンダクタは、メッセージの発送順序が狂うのを防ぐことができる。または、メッセージの発送順序が狂った場合、発送デバイス内に例外を発生させることができる。メッセージの受取順序が狂った場合、コンダクタは順序付けエラーを宣言する自動応答メッセージを送る。これで、発送側はメッセージを正しい順序で再送することができる。いくつかの実施形態では、コンダクタの一部または全部を複数のゲートで共有することができることに注意されたい。そのため、コンダクタを複数のゲートにリンクすることができる。
【0119】
分散コンピューティング環境の一実施形態では、サービスのフロント・エンド(サービス・インターフェース)をクライアントに組み込むことができる。一実施形態では、サービス・インターフェースを、サービスによってクライアントに提供される事前構築ユーザ・インターフェースとすることができる。一実施形態では、サービス・インターフェースを、サービス通知でクライアントに提供することができる。サービス・インターフェースは、クライアント上でサービスのユーザと対話し、サービスを実行するための入力を取得し、サービスを実行した結果をクライアントに表示することができる。「ユーザ」は、人間でも、組み込みシステムでも、他のクライアントまたはサービスなどでもよい。一実施形態では、クライアント・デバイスは、フロント・エンドを組み込んでいるサービスを実行できるだけなので、任意のサービスを用意することができない場合がある。一実施形態では、サービスのサービス・インターフェースは、クライアント上のWebブラウザに実装することができる。
【0120】
一実施形態では、メッセージ・コンダクタおよび/またはサービス・インターフェースはゲートの外部にあってもよく、したがって、ゲートとクライアントから抽象することができる。抽象されたメッセージ・コンダクタは、任意のクライアント・デバイスに対し任意のサービスを提供することができる。一実施形態では、メッセージ・コンダクタを、実質的にどのようなプラットフォームでも実行できるコードで書くことができる。一実施形態では、メッセージ・コンダクタは、Java言語で書く。一実施形態では、メッセージ・コンダクタは、クライアント・デバイスに返される、オブジェクト、たとえば、Javaオブジェクトの任意のダウンロードを必要としない。たとえば、非常に大きなオブジェクトを返す場合、メッセージ・コンダクタは、そのような非常に大きなオブジェクトをダウンロードしないことを選択できる。一実施形態では、メッセージ・コンダクタは、クライアントのために、XMLメッセージをクライアント・デバイスからサービスに送ることができる。メッセージ・コンダクタは、サービスのユーザと対話して、入力を受け取り、結果を表示することができる。
【0121】
一実施形態では、クライアントと対話し(たとえば、ユーザ・インターフェースを介して)、サービスを実行するためのすべての情報を取得するサービス・インターフェースを提供し、これにより、サービスを実行した結果または結果の場所に関する情報のいずれかを適宜表示することができる。サービス・インターフェースは、メッセージ・コンダクタ160の一部でもよく、またはメッセージ・コンダクタ160に加えてそれと連携することもできる。サービス・インターフェースは以下のいずれかである。
1.クライアント・デバイスに組み込まれ、クライアント上で実行される。
2.スペース・サーバからクライアント・デバイスにダウンロードされる。
3.スペース・サーバ上で実行される。
4.サービス・プロバイダ上で実行される。
【0122】
一実施形態では、クライアントに対して、分散コンピューティング環境のスペース・サーバは#1を常にサポートし、#2がサポートされていればそのことを示し(スペース内の通知で)、#3と#4のうち少なくとも1つがサポートされていればそのことを示す必要がある。#4をサポートしているかどうかは、サービス・プロバイダが#4をサポートしているかどうかにかかっていることに注意されたい。一実施形態では、サービス・プロバイダに対し、分散コンピューティング環境のスペース・サーバは#4を常にサポートし、#3をサポートしていればそのことを示す必要がある。
【0123】
サービス・インターフェースがどこで実行されようと、サービスがアクティブ化された後、サービス・インターフェースはクライアントと対話し、クライアントの表示装置に入力に対する要求を(リモートから)表示し、サービスの実行結果を(リモートから)表示することができる。クライアントとのこのような対話は、XMLメッセージとして実装される。このようなサービス・インターフェースおよび/またはメッセージ・コンダクタは、サービスを発見したけれども、ふつうサービスの使い方を知るために大部で無味乾燥のコンピュータ・マニュアルを読みたくないクライアント・ユーザのニーズに応えられる。サービス・インターフェースおよび/またはメッセージ・コンダクタがユーザと対話して、サービスが必要とするすべての入力を要求するときに、ユーザが要求した場合に、要求された入力の短い説明を用意することさえできる。サービス・インターフェースがクライアントから必要な情報を取得した後、XMLメッセージを、そのサービスを実行するサービス・プロバイダに送る。メッセージの順序は、ゲート内のメッセージ・コンダクタ160によって検証される。
【0124】
好ましい実施形態では、すべてのメッセージはゲート内を流れる。ゲートは、フロー制御メカニズムを提供するように構成することができる。たとえば、サービスが大量の着信メッセージおよび発信メッセージを処理する必要がある。フロー制御により、サービスは高トラフィック・ボリュームに追随することができる。フロー制御タグについてメッセージを監視するようにゲートを構成することができる。ゲートがメッセージを受け取ると、ゲートはそのメッセージに対するフロー制御タグを調べる。フロー制御タグはXMLタグとすることができる。たとえば、メッセージには、OFFタグまたはONタグのいずれかを記述できる。受け取ったメッセージにOFFタグが含まれる場合、受取ゲートはペアのデスティネーション・ゲートへの発送メッセージを停止する。ゲートは、ONタグを含むメッセージを受け取ると、メッセージの発送を再開する。
【0125】
そこで、サービス側ゲートはそのリソースの使用を監視し、そのリソースの使用がしきい値を超えた場合にフロー制御を起動する。たとえば、サービスが、OFFタグを含むメッセージを1つまたは複数のクライアント・ゲートに送ることにより負荷を低減することができる。OFFタグを含むメッセージを受け取ったクライアント・ゲートは、サービスへのメッセージ発送を停止する。クライアント内の保留メッセージは、バッファリングするか、または内部フロー制御メカニズムによって処理することができる。サービスがさらに要求を処理できるようになると、ONタグを含む1つまたは複数のクライアントにメッセージを送り、クライアントはメッセージ発送を再開する。他の実施形態では、ONおよびOFFに加えて、またはONおよびOFFの代わりに、他のフロー制御タグをサポートすることができる。他のフロー制御タグはメッセージ・フローの低減を示すか、またはそのメッセージ・フローを高くすることができる。
【0126】
メッセージ・ゲートはリソース監視を実行するように構成することができる。たとえば、すべてのメッセージはゲート内を流れるため、ゲートはクライアントがサービス(および場合によっては、メモリーやスレッドなどの関連するリソース)を使用する状況を管理しかつ/または追跡するように構成することができる。ゲートは、サービスなどのリソースがどれだけ使用されているか、またどのサービス・リソースをどれだけ使用しているかを監視することにより、クライアントなどのソフトウェア・プログラムの活動を追跡するように構成できる。一実施形態では、ゲートはクライアント活動ログを生成するか、またはクライアント活動ログの生成を簡単に行えるようにする。各メッセージおよびその宛先または発送側をログに記録することができる。
【0127】
さらにゲートは、ゲート・ペアのローカル(発送)側からフロー制御に関するリソース監視を実行するように構成することもできる。クライアントが、割り当てられたサービス(またはリソース)使用の帯域幅を超えた場合、たとえば、ゲートは自動的にメッセージの流れを絞る。したがって、クライアント側メッセージ・ゲートは、発信メッセージの流れを監視することにより異なるフロー制御モードを自動的に起動することができる。発信メッセージ・フローがしきい値を超えた場合、ゲートは発信メッセージの流れを減らすかまたは遮断する。サービスのXMLスキーマまたは通知でしきい値を指定することができる。いくつかの実施形態では、しきい値は特定のサービス・リソースを使用するメッセージのみまたはすべてのメッセージについて指定することができる。
【0128】
ゲートは、さらに、メッセージ・フローが増えるか、または再開するのを判別するように構成することもできる。一実施形態では、ゲートは、マッチする返信(応答)を受け取ることなく、送られた発信メッセージのカウントを保持することができる。マッチする応答がクライアント側ゲートに届いたら、未処理の要求メッセージのカウントを減らす。このカウントが未処理要求メッセージの指定されたしきい値以下に減ったら、ゲートは新しい要求メッセージを増やすか、またはその発送を再開することができる。
【0129】
ゲートは、メッセージ・ベースの課金請求機能をサポートするように構成できる。請求システムは、メッセージ・ゲートで発送および/または受け取ったメッセージの個数および/または種類に基づいて実装することができる。クライアントとの間でやり取りされるすべてのメッセージはゲートを通過するので、たとえば、1メッセージごとにまたは「即金で支払う」方式でサービス使用料金を簡単にクライアントに請求できるようにゲートを構成することができる。したがって、たとえば、ユーザの代わりに実行されているソフトウェアがメッセージを発送および/または受け取るごとにユーザに課金できる請求システムを分散コンピューティング環境内に実装することができる。
【0130】
一実施形態では、メッセージ・ゲートは、たとえば、サービスに関してXMLスキーマから請求情報を受け取る。請求情報は請求ポリシーとチャージ・バックURIを表すことができる。チャージバックURIは、メッセージ・ゲートがユーザの代わりに時間課金または使用度課金する場合に使用する。メッセージ・ゲートは、課金メッセージをXMLスキーマで指定したチャージバックURIに送ることによりチャージバックを実行する。このように構成されたゲートは請求ゲートと呼ばれる。請求ポリシーは、1メッセージ当たりの課金金額または累積メッセージ合計に対する課金金額などを示す。請求ポリシーは、ユーザに対しどれだけおよび/またはどのような頻度で(たとえば、x個のメッセージを発送および/または受け取った後)課金するかを示す。このポリシーはある種のメッセージのみが課金を発生させ、このようなメッセージにより指定されたサービス・リソースが要求されることを示す。請求ポリシーはさらに、異なるクライアントまたはクライアントのクラスに対して異なる請求モデルを示す場合もある。たとえば、いくつかのクライアントがサービスにアクセスするためゲートを作成するときに一度限りの課金の対価を支払うように請求ポリシーを(たとえば、サービスのXMLスキーマで)構成することができる。ポリシーは、即金で(たとえば、メッセージごとに)支払うクライアントを示す場合もあれば、または全く課金されないクライアントを示す場合もある。
【0131】
いくつかの実施形態では、クライアントは軽量すぎて完全なゲートをサポートできなかったり、クライアントに、直接分散コンピューティング環境に参加するためのソフトウェアを組み込めない場合がある。このような実施形態では、サーバ(サービスが通知されるスペース・サーバや他のサーバなど)はそのクライアントに対して完全または部分的なプロキシ・ゲートとすることができる。サーバは、クライアントで使用するサービスごとにサービス・エージェント(ゲートを含むことがある)をインスタンス化する。サービス・エージェントは、メッセージを送る許可を確認し、メッセージをプロバイダに送り、その際、場合によってはプロバイダが次のメッセージを受け付けるようになるまでキューに入れておき、メッセージをクライアントに送り、その際、場合によってはクライアントが次のメッセージを受け付けるようになるまでキューに入れておき、結果またはアクティブ・スペースに結果を格納する作業を管理するという操作を行うことができる。「ブリッジ」のセクションを参照されたい。たとえば、図13に示されているように、クライアントは、ゲートが上述のメッセージング方式に直接参加することをサポートしていない従来のブラウザ400とすることができる。ブラウザ400は、プロキシ・サーブレット(エージェント)402によって補助される。ブラウザのユーザは、サーチ・エンジンを使用して、分散コンピューティング環境内のスペース通知サービスの前面に置かれる(その内容を表示する)Webページを見つけることができる。ユーザは、スペースのWebページをポイントしてクリックし、サーブレットの助けを借りて、サービスにアクセスすることができる。Webページには、スクリプト、たとえば、JavaやWMLスクリプトを含むことができ、これを使用して、ブラウザをプロキシ・サーブレットに接続する。また、スクリプトを使用して、メッセージをプロキシ・サーブレットに送ることもできる。サーブレット・エージェントは、ブラウザ・クライアントに代わってWebページ・アクションをメッセージに翻訳する。これらのはアクションは、スペースのナビゲート、サービスの起動、および結果の返却を含む。結果ページURI(XMLを含むページを参照する)は、直接(または必要ならばHTMLまたはWAPに変換されて)ブラウザに返され、ユーザに対し表示される。したがって、ブラウザ・ベースのクライアントは、サービスの起動方法を知る必要がなく、またサービス使用セッションで送るメッセージを知る必要もない。たとえば、WAPブラウザのユーザ(たとえば、携帯電話の)は、スペース・ページに接続し、そのコンテンツ(サービス)を参照し、サービスを起動するが、すべてポイントしてクリックする操作により行える。エージェント402は、従来のクライアントと分散コンピューティング環境との間のクライアント・インターフェースを備える。
【0132】
分散コンピューティング環境は、異なる機能をサポートするクライアントとサービスとの間の通信を行うための数種類のメッセージ・ゲートを備えることができる。たとえば、上述のように、いくつかのゲートは、フロー制御または請求機能をサポートする。他の種類のメッセージ・ゲートでは、特定の形式のリモート・メソッド呼び出しをサポートする。このタイプのゲートは、メソッド・ゲートと呼ばれる。
【0133】
ゲートは、型安全なメッセージ、たとえばXMLメッセージを送り受け取るセキュリティで保護されたメッセージ・エンドポイントである。リモート・メソッド呼び出し(RMI)スタイルのゲートは、メソッド・ゲートと呼ばれる。直接データ中心ゲートは、メッセージ・ゲートと呼ばれる。メソッド・ゲートは、メッセージ・ゲートの上の「レイヤ」として実装することができる。正確な実装は、プラットフォームのバインドで定義することができる。
【0134】
図14は、メソッド・ゲートを使用してリモート・メソッド呼び出しインターフェースをサービスに提供する方法を示す。メソッド・ゲートは、クライアントとサービスとの間のメソッド・インターフェースを提供する。メソッド・ゲートは双方向にすることができ、クライアントからサービスへ、またサービスからクライアントへのリモート・メソッドを呼び出しが可能である。XMLスキーマ情報170から(たとえば、スペース内のサービス通知から)メソッド・ゲート172を生成することができる。XMLスキーマ情報170は、メソッド・インターフェースを定義するXMLを含む。この情報から、1つまたは複数のメソッドとのインターフェースのコードをゲートの一部として生成することができる。生成されたコード内の各メソッドを呼び出し(たとえば、クライアント・アプリケーション176からの)により、マーシャリングされたメソッド・パラメータを含むメッセージをサービスに送ることができる。含まれるメッセージのシンタックスおよびパラメータをXMLスキーマで指定する。したがって、メソッド・ゲート172は、サービス・メソッドをリモートから呼び出すXMLメッセージ・インターフェースを備える。メソッド・ゲートは、クライアント上に生成するか、またはサービス・メソッドが通知されたスペース・サーバまたは特別ゲートウェイ・サーバなどのサーバをプロキシとすることができる。
【0135】
サービスは、サービスのXMLスキーマで定義されたメソッド・メッセージ・セットに対応するオブジェクト・メソッド・セットを実装するかまたは、それにリンクされている対応するメソッド・ゲートを備えることができる。サービスのメソッド・ゲートよって実装された、またはそれにリンクされているオブジェクト・メソッドとサービスのXMLスキーマによって定義されたメソッド・メッセージとの間に一対一の対応関係がある。サービスの対応するメソッドがクライアントからメッセージを受け取りサービスのメソッドの1つを呼び出すと、サービスのメソッド・ゲートはメッセージ呼び出しのパラメータのアンマーシャリングまたはアンパックを行い、受け取ったメッセージによって示されるメソッドを呼び出し、アンマーシャリングされたパラメータを渡す。
【0136】
メソッド・ゲートは、同期要求応答メッセージ・インターフェースを備え、クライアントがこれを使用してリモートからメソッドを呼び出し、サービスが結果を返すようにする。基礎のメッセージ・パッシング・メカニズムは、クライアントから完全に隠されている。この形式のリモート・メソッド呼び出しでは、メソッドの結果を次のように処理することができる。一実施形態では、結果オブジェクト(および関連するクラス)をクライアントにダウンロードする代わりに、結果の参照のみをXMLメッセージで返す。オブジェクト参照178は実際のオブジェクト結果180(たとえば、ネット上にそのまま格納)を表す生成されたコード・プロキシ(たとえば、結果ゲート)である。他の実施形態では、クライアントは実際の結果オブジェクトを受け取ることを選択できる。さらに、クライアントが結果オブジェクト参照を受け取った後、クライアントはこの参照を使用して実際の結果オブジェクトを受け取ったり操作したりできる。一実施形態では、結果参照に実際の結果への1つまたは複数のURIを含める。
【0137】
実際の結果オブジェクトは、サービス結果スペース内に格納される(これは、たとえば、サーブレットにより動的に作成できる)。この一時的結果スペースは、クエリ結果キャッシュとして機能することができる。古い結果領域をクリーンアップするサーバ・ソフトウェア(ガベージ・コレクタ)が結果キャッシュ(スペース)内を巡回する。メソッドを呼び出しごとに返される結果は、結果スペース内に通知される。クライアントがリモートから結果自体をインスタンス化し、その固有のメソッド・ゲートを生成できるメソッドである場合もあれば、そのようなメソッドを含む場合もある。したがって、分散コンピューティング環境では再帰的リモート・メソッドを呼び出しサポートすることができる。
【0138】
上述のように、クライアントはメソッド・ゲートを使用してリモートからサービス・メソッドを呼び出すと、サービス・メソッド・ゲートから実際の結果ではなくメソッド結果への参照が返される。この参照から、結果ゲートを生成して実際の結果にアクセスする。したがって、クライアントまたはクライアント・メソッド・ゲートは結果URI、それとたぶん、結果XMLスキーマおよび/または認証証明書を受け取り、これを使用してゲートを構築しリモート・メソッド結果にアクセスする。
【0139】
一実施形態では、サービス・ゲートは結果に対する「子ゲート」を作成する。この子結果ゲートは、親ゲートと同じ認証証明書を共有することができる。いくつかの実施形態では、結果は異なるアクセス権限セットを備え、したがって、その親と同じ認証証明書を共有しない。たとえば、給料支払い簿サービスではユーザの異なる集まりが給料支払い簿サービスの結果(給与)を読み取るためにそれを起動することができる。
【0140】
サービス・メソッド・ゲートは、子結果ゲートをメソッドの結果としてクライアント・ゲートに返す。クライアントは、その結果ゲートを使用して実際の結果にアクセスする。一実施形態では、結果ゲートを受け取るソフトウェア・プログラム(クライアント)は結果ゲートと結果自体とを区別することはできず、その場合、結果ゲートは実際の結果オブジェクトのオブジェクト・プロキシとなる。結果ゲートはさらに、結果オブジェクトへのリモート・メソッド呼び出しをサポートするメソッド・ゲートとすることもできる。このようにして、親と子のメソッド/結果ゲートのチェーンを作成できる。
【0141】
一実施形態では、メッセージ・ゲートおよびリモート・メソッドは、Javaで書れている。この実施形態では、Java入力システムに従ってメソッド結果が正しく入力される。上述のようにJavaメソッドをリモートから呼び出した場合、結果ゲートは結果の型とマッチするJavaの型にキャストすることができる。この実施形態では、分散コンピューティング環境でメソッド・ゲートを使用して、リモートJavaオブジェクトがローカルJavaオブジェクトとして動作するようにできる。メソッド呼び出しおよび結果は、実際のオブジェクトがローカルであるかリモートであるかに関係なくJavaソフトウェア・プログラムと同じように表示される。結果に対するスペースの使用の詳細については、以下の「スペース」セクションを参照のこと。
【0142】
メッセージ・ゲートは、さらに、イベントのパブリッシュおよびサブスクライブ・メッセージ通信もサポートする。イベント・サポートのあるメッセージ・ゲートは、イベント・ゲートと呼ぶ。サービスのXMLスキーマは、サービスによってパブリッシュされる1つまたは複数のイベントの集まりを示す。イベント・ゲートは、XMLスキーマから構築できる。イベント・ゲートは、サービスによってパブリッシュされたイベントの集まりの一部または全部を認識し、それらのイベントにサブスクライブし、各イベントを、サービスによって生成されるのといっしょに配布するように構成できる。
【0143】
サービスに対するイベントの集まりは、サービスのXMLメッセージ・スキーマで記述することができる。XMLスキーマのイベント・メッセージごとに、イベント・ゲートはそのイベントの消費者としてサブスクライブする。一実施形態では、イベント・ゲートはXMLスキーマで示されるすべてのイベントにサブスクライブする。XMLタグを使用してそれぞれのイベント・メッセージに名前を付ける。イベント・ゲートは、サブスクライブ先のイベントのXMLタグを含むサブスクライブ・メッセージを送ることによりサブスクライブすることができる。
【0144】
サービスで対応するイベントが発生した場合、そのサービスはイベント・メッセージをサブスクライバに送り、そのイベントの発生を知らせる。イベント・メッセージは、XMLイベント・ドキュメントを含み、このメッセージはそれぞれのサブスクライブされたゲートに送られる。サブスクライブされたゲートがイベント・メッセージを受け取ると、XMLイベント・ドキュメントがそのメッセージから削除され、配布プロセスが開始する。イベント配布は、クライアント・プラットフォーム内のイベント・ドキュメントを配るプロセスである。クライアント・プラットフォーム内の各イベント消費者は、各タイプのイベントのイベント・ゲートにサブスクライブすることができる。Javaプラットフォームで、入力システムはJavaである(XMLイベント型から変換される)。イベント消費者は、イベント・ハンドラ・コールバック・メソッドをイベント・ゲートに供給する。イベント・ゲートは、これらのサブスクライブのリストを保存する。各イベント・メッセージがゲートに届くと(イベントを発生したサービスから)、ゲートはクライアント消費者のリストをトラバースし、各ハンドラ・メソッドを呼び出して、XMLイベント・ドキュメントをパラメータとして渡す。一実施形態では、XMLイベント・ドキュメントはハンドラ・コールバック・メソッドに渡される唯一のパラメータである。
【0145】
一実施形態では、イベント・ゲートはローカルの消費者クライアントのためにイベントに関して自動的にサブスクライブする。クライアントがインタレストをゲートに登録すると、ゲートはインタレストをイベント・プロデューサ・サービスに登録する。クライアントはさらに、インタレストのサブスクライブ解除も行い、これにより、ゲートはそのイベントを生成するサービスから登録を解除する。
【0146】
イベント・ゲートは、上述の標準要求応答メッセージ通信スタイルで通常のメッセージ・ゲートが行うのと全く同じようにしてXMLスキーマを使用しイベント・ドキュメントの型検査を行う。イベント・ゲートは、さらに、送られたメッセージ内の認証証明書を含み、受け取ったイベント・メッセージの認証証明書を検証することができる。
【0147】
上述のゲート機能の組み合わせは単一のゲートでサポートされることに注意されたい。それぞれのタイプは、分かりやすくするため、別々に説明した。たとえば、ゲートは、メッセージ・ゲート、メソッド・ゲート、およびイベント・ゲートであって、フロー制御とリソース監視をサポートする。
【0148】
サービス発見メカニズム
一実施形態では、分散コンピューティング環境は、クライアントがサービスを見つけだし、サービスの機能の一部または全部を使用する権限を交渉するための手段を提供するサービス発見メカニズムを備える。スペースはサービスの一例であることに注意されたい。サービス発見メカニズムは、セキュリティで保護され、発信クライアント要求を追跡し、着信サービス応答とマッチングを行うことができる。
【0149】
サービス発見メカニズムは、それらに限定されないが、以下のようなさまざまな機能を提供することができる。柔軟なサーチ基準を使用してサービスを見つける機能、サービスの機能セット全体またはそのサブセットを使用する権限をクライアントに伝達することができる、承認メカニズム、たとえば認証証明書を要求する機能、クライアントにサービスのインターフェースを伝達するための証明書、ドキュメント、またはその他のオブジェクトを要求する機能などがある。一実施形態では、サービスのインターフェースは、サービスの機能の要求されたセットとのインターフェースを含むことができる。
【0150】
発見の追跡が最初の要求に応答する。一実施形態では、各クライアント要求は、マッチする応答で返されるデータの集合を含み、要求と応答の相関を求めることができる。
【0151】
分散コンピューティング環境の一実施形態では、サービス発見メカニズムは拡張可能文法に基づいて柔軟なサーチ基準を提供することができる。一実施形態では、サーチ対象のサービス名、サービス・タイプ、およびもしあればその他の要素とXMLドキュメント内の要素とをマッチングすることができる。一実施形態では、XMLドキュメントはサービスに対するサービス通知である。XMLは、サーチのための柔軟で拡張可能な文法を提供する。XMLはさらに、マッチする要素について型安全であるという特徴も備える。一実施形態では、サービス名およびサービス・タイプは、XMLサービス通知の要素タイプと突き合わせて型検査を行うことができる。
【0152】
一実施形態では、分散コンピューティング環境はクライアントがサービス・アクセス権を交渉するためのメカニズムを備えることができる。一実施形態では、このメカニズムを使用して、サービスの全機能のサブセットについて交渉することができる。交渉の結果は、クライアントにサービスの機能の要求されたサブセットを使用する権限を伝達する認証証明書などの承認である。
【0153】
一実施形態では、サービス発見メカニズムを使用する際に、クライアントはサービスにセキュリティ能力証明書を要求することができる。一実施形態では、クライアントはサービスに対し、保護された(セキュア)通知の形で望む機能群を示すことができる。それに対してサービスは、クライアントに保護された通知で記述されている要求された機能を使用する権限を伝達することができる能力証明書で応答することができる。
【0154】
一実施形態では、分散コンピューティング環境は、クライアントがサービス・アクセス権限を交渉し、その後、サービスのアクセス・インターフェースをクライアントによって要求されたサービスの機能のセットまたはサブセットに提示するために使用できるセキュリティ証明書またはドキュメントを取得するためのメカニズムを備えることができる。
【0155】
一実施形態では、サービスから能力証明書を受け取ったクライアントは、「完全通知」と呼ばれるカスタム・サービス・アクセス・インターフェース・ドキュメントを生成することができる。一実施形態では、完全通知はXMLドキュメントである。生成された通知を利用し、受け取った能力証明書によってクライアントに対し許可されるサービス機能にアクセスすることができる。一実施形態では、通知により、クライアントが能力証明書によりアクセスを許可されたサービス機能のみのインターフェースが提供される。一実施形態では、クライアントに対し、必要な機能に限りクライアントがアクセス特権を持つアクセスを許可することができる。
【0156】
一実施形態では、分散コンピューティング環境はクライアントがサービスと機能を交渉するためのメカニズムを備えることができる。一実施形態では、クライアントはサービスに対する機能を交渉することができる。サービスはその後、クライアントと交渉したパラメータに基づいて結果をカスタマイズする。たとえば、160×200の解像度で1ビット表示が可能なクライアントは、サービスに対しそれらのパラメータを交渉し、それにより、サービスはクライアントに対し結果をカスタマイズできる。
【0157】
以下に、XML機能メッセージの一例を示したが、何らかの形で制限することを意図していない。
【0158】
分散コンピューティング環境は、サービスがサービス呼び出しの結果を返す方法をクライアントが交渉できるようにするメカニズムを備える。一実施形態では、能力証明要求時に、結果返却方法の1つを選択する手段をサービスに伝達することができる。その後、サービスはクライアントに、使用する結果メカニズム、さらにサービス・インターフェースを伝達することができるカスタム・サービス通知を生成する。
【0159】
一実施形態では、分散コンピューティング環境はサービス発見サーチ要求および要求への応答を追跡するメカニズムを備える。一実施形態では、サーチ要求および応答メッセージは、フィールドを備え、このフィールドを使用してストリングまたはXMLドキュメントを含むことができる。一実施形態では、要求メッセージのフィールドに含まれるストリングまたはXMLドキュメントはさらに、応答メッセージでも返される。一実施形態では、ストリングまたはXMLドキュメントは応答メッセージで返す必要がある。一実施形態では、ストリングまたはXMLドキュメントは、応答メッセージで返すときにストリングまたはドキュメント内に挿入または付加される追加情報を含むことができる。一実施形態では、このメカニズムを複雑なシステムのデバッグに使用することができる。一実施形態では、このメカニズムはさらに、クライアントに対し、ストリングまたはXMLドキュメントを使用して、クライアントとサービスのみが理解できるクライアントとサービスとの間のカスタムサーチ情報を渡すことによりアクセスするサービスを選択するためのメソッドを提供することができる。
【0160】
コンポーネント(サービス)インターフェースのマッチング
分散コンピューティング環境は、コンポーネント(たとえば、サービス)仕様インターフェースと要求されたインターフェースとのマッチングを行うメカニズムを備えることができる。たとえば、クライアント(サービスでもよい)は、一組のインターフェース要求条件を満たすサービスを必要とすることがある。各コンポーネントは、それが適合するインターフェースの記述を含む。仕様インターフェース・マッチング・メカニズムを使用すると、リクエスタのインターフェース要求条件と最もよくマッチするコンポーネントを配置することができる。仕様インターフェース・マッチング・メカニズムではさらに、インターフェース要求条件の「ファジー」マッチングを実行できる。つまり、このメカニズムを使用すると、インターフェースのすべての側面を正確に指定しなくてもマッチングを実行でき、最近マッチング(ファジー)メカニズムを実現できる。一実施形態では、仕様インターフェース・マッチング・メカニズムを、単一のインターレス・レベルで仕様を要求しないマルチレベル・サブクラス化モデルとして実装できる。
【0161】
一実施形態では、コンポーネントは、XMLスキーマ定義言語(XSDL)を使用してそのインターフェースを記述することができる。XSDLでは、インターフェースを記述する人間が解釈可能な言語を実現し、デバッグなど人間の介入を必要とする活動を簡素化することができる。一実施形態では、インターフェース記述を本書の別のところで説明しているように通知の一部(たとえば、サービス通知)として提供することができる。
【0162】
仕様インターフェース・マッチング・メカニズムを使用すると基本的な望ましいインターフェースとコンポーネントの一組のインターフェース記述とを比較することができる。基本的な望ましいインターフェースとマッチする1つまたは複数のコンポーネントが識別される。インターフェース記述は、コンポーネントによって提供されるインターフェースをより具体的に記述するサブクラス記述を含む。サーチ・プロセスで、クラス・タイプ階層を調べて、所定のクラスがサーチ・タイプのサブクラスであるかどうかを判別することができる。一実施形態では、サブクラスは基本クラスのプロパティーを継承する。このフェーズではサブクラス特有の情報は調べることができない。そのため、サーチは一般的に実行するということができる。識別されたコンポーネントは、次の(サブクラス)レベルでサーチできる。サーチは、サブクラスに特有なものとなり、インターフェース記述に含まれるサブクラス情報を解釈することにより実行できる。サーチは、リクエスタの望むインターフェースとの最近マッチのある1つまたは複数のコンポーネントが判別されるまで1つまたは複数のサブクラスについて続けられる。
【0163】
一実施形態では、インターフェース・マッチング・メカニズムは、類似のインターフェースを実装する2つまたはそれ以上のコンポーネントを区別する機能を備える。一実施形態では、インターフェース・マッチング・メカニズムは、同じコンポーネントの異なるリビジョンを区別する機能を備える。
【0164】
一実施形態では、コンポーネントが適用するインターフェースの仕様を含むコンポーネント記述を提示することができる。コンポーネント記述にさらに、コンポーネント自体に関する情報を含めることができる。インターフェース記述および/またはコンポーネント情報を使用して、所定のインターフェースの異なる実装を区別することができる。コンポーネント記述には、標準識別子とバージョン情報を入れることができる。バージョン情報を使用すると、コンポーネントのリビジョンを区別することができる。一実施形態では、コンポーネント記述を本書の別のところで説明しているように通知の一部(たとえば、サービス通知)として提供することができる。
【0165】
一実施形態では、特定の標準識別子についてコンポーネントをサーチする。マッチする標準識別子を持つ2つまたはそれ以上のコンポーネントを識別することができる。マッチする標準識別子を持つコンポーネントのうちから1つまたは複数のコンポーネントを選択することができる。選択手順では、インターフェース仕様バージョン、コンポーネント実装仕様、コンポーネント実装仕様バージョン、コンポーネント記述からのその他の情報または情報の組み合わせを使用して、リクエスタの要求条件に最もよくマッチする1つまたは複数のコンポーネントの集まりを出力することができる。
【0166】
スペース
上述のように、分散コンピューティング環境はスペースに依存し、サービスまたはコンテンツをクライアントに仲介するランデブー・メカニズムを備える。図15は、スペース114の基本的な使用法を示している。サービス・プロバイダは、スペース114でサービスを通知することができる。クライアント110は、スペース114で通知を見つけ、通知からの情報を使用し、分散コンピューティング環境のXMLメッセージング・メカニズムを利用してサービスにアクセスする。多くのスペースが存在し、それぞれサービスまたはコンテンツを記述するXML通知を含む。したがって、スペースは、サービスおよび/またはXMLデータのXML通知のリポジトリと考えることができ、これは結果などの未処理データまたはデータの通知とすることができる。
【0167】
スペース自体はサービスである。サービスのように、スペースには通知があり、スペースのクライアントはまず、そのスペース・サービスを実行するためにそれを取得する必要がある。スペースの自通知は、XMLスキーマ、1つまたは複数の証明書、およびスペースにアクセスする方法を示すURIを含むことができる。クライアントは、スペースにアクセスするためにスペース・サービスの通知からゲートを構築することができる。スペースのクライアントはそれ自体、そのスペース内で通知するまたは既存の通知を修正することを求めるサービス・プロバイダである。または、スペースのクライアントはスペースによってリストに入れられたサービスまたはコンテンツにアクセスすることを求めるアプリケーションである。したがって、スペースは分散コンピューティング環境においてクライアントとサービスとの間の対話に対する触媒の働きをする。
【0168】
スペースは、名前付きの通知の集合といえる。一実施形態では、通知に名前を付ける作業は、名前ストリングを通知に関連付けるプロセスである。この関連付けは、スペースに通知を格納した後発生する。スペースから通知を取り除くと、名前と通知との関連付けが解除される。スペースは、スペース自体を記述する単一のルート通知で作成できる。追加通知をスペースに加えることができる。通知の名前で、スペース内の通知を特定できるが、これは、名前の階層など必要なグラフ化情報を指定する操作を含む。好ましい実施形態では、分散コンピューティング環境はスペースの構造を規定しない。つまり、たとえば、スペースをフラットな関係付けのない通知の集まりまたは関係付けのされている通知のグラフ(たとえば、商用データベース)として構造化される。好ましい実施形態では、分散コンピューティング環境はスペースに実際にその内容を格納する方法を規定しないので、小さなデバイスから大きなデバイスまでスペースをサポートすることができ。たとえば、単純なスペースは、PDAなどの小さなデバイスに収まるように手直しすることができる。より高度なスペースは、大規模な商用データベースを採用している大規模なサーバー上に実装することができる。
【0169】
上述のように、スペースは分散コンピューティング環境でサービスの通知を含むことができる。通知は、分散コンピューティング環境内でサービスおよび/またはコンテンツのアドレスを指定し、アクセスするためのメカニズムを提供する。通知により、サービスのURIを指定することができる。いくつかの実施形態では、URIを使用すると、インターネット上でサービスにアクセスすることができる。また、通知はサービスのXMLスキーマも含む場合がある。XMLスキーマにより、サービスのクライアントがそのサービスの機能を呼び出すためにサービスに送る一組のメッセージを指定することができる。XMLスキーマでは、クライアント・サービス・インターフェースを定義する。それとともに、URIおよび通知で指定されたXMLは、サービスのアドレスを指定し、サービスにアクセスする方法を指示する。URIとスキーマは両方とも、XMLで、スペース内の通知として用意される。そのため、分散コンピューティング環境でサービスのアドレスを指定し、サービスにアクセスするメカニズムをスペース内の通知として公開することができる。クライアントは、スペースを発見し、サービスまたはコンテンツについて個々の通知をルックアップする。
【0170】
図16は、一実施形態による通知構造を示す。通知500は、他のXMLドキュメントのように、階層状に配列された一連の要素502を含むことができる。各要素502は、データまたは追加要素を含む。要素はさらに属性504を持つ。属性は、名前−値ストリングのペアである。属性は、メタデータを格納し、これにより、要素内のデータを記述することが簡単になる。
【0171】
いくつかの実施形態では、通知は異なる状態で存在してもい。このような状態の1つにドラフト状態がある。一実施形態では、スペースの範囲外に存在するドラフト状態で通知を最初に構築する。通知の作成者は、XMLエディタを使用するなどさまざまな方法で構築することができる。ドラフト状態の要素および属性へのアクセスは、適当な手段を使用して未処理データおよびメタデータ・レベルで行われる。通常、ドラフト状態で通知に加えられた変更についてはイベントを発生しない。したがって、通知の作成者は、自由に、要素を追加、変更、または削除できるだけでなく、目的の属性セットを用意し、確認する分散コンピューティング環境の残り部分に対する通知をパブリッシュすることができる。
【0172】
一実施形態では、通知に対する可能な状態としてほかに、パブリッシュ状態がある。通知は、スペースに挿入されるとパブリッシュ状態に移行する。通知がスペース内に入ると、関連するクライアントおよびサービスが、たとえば、名前および/またはその要素をサーチ基準として使用してそれを特定することができる。たとえば、サーチ基準は、スペース内の通知と(たとえば、スペース・サービスにより)比較できるXMLテンプレート・ドキュメントとして指定できる。パブリッシュされた通知は、クライアントが使用できる状態にある「オンライン」サービスを表す。サービスのメッセージ・アドレス(URI)は、通知内に要素として格納できる。スペースから削除される通知は、破棄されるかまたは保持されるドラフト状態に遷移して戻る。削除により、イベントが発生し、関連するリスナーが変更に気づく。メッセージ・ゲートは通常、パブリッシュされた通知から作成される。
【0173】
一実施形態では、通知に対する可能な状態としてほかに、永続的アーカイブ状態がある。アーカイブ・プロシージャは、ライブ・パブリッシュ通知を、後で再構成するため永続的に格納できるバイトのストリームに変換する。アーカイブ通知が、スペースからアーカイブ・サービスに送られる(たとえば、raw XML形式で)。通知のアーカイブ・サービスのURIは、通知内に要素として格納できる。XMLは、通知の格納および取り出しを行い、通知オブジェクトを再構成するのに十分な通知要素の状態を表す形式を用意できる。通知は、アーカイブ・サービスの実装に応じて、他の形式でも格納できる。パブリッシュされた通知を永続的にするプロセスでは、永続的アーカイブ状態の通知を準備する。将来使用するため永続的通知を(たとえば、アーカイブ・サービスにより)、ファイルやデータベースなどの永続的記憶場所に格納できる。スペースは、アーカイブ・プロシージャを介して、通知を格納できるが、スペースは必ずしも、永続通知エントリを実際に格納する際に重要な役割を果たすわけではない。永続通知を格納する方法は、通知のアーカイブ・サービスにより決定される。通常、アーカイブ通知の代わりに生成されるイベントはない。また、永続的アーカイブ状態での通知に対し変更が許されない場合がある。通知は、アーカイブと削除、またはアーカイブだけが許される。通知が、スペースから削除することなくアーカイブされると、スペースはシャドウ・バージョンの通知を格納する。アーカイブされたサービスにアクセスすると、通知がオンデマンドで永続的バッキング・ストアから「フォールトイン」する。この機能を使用すると、たとえば、オンデマンドで、LDAP(ライトウェイト・ディレクトリ・アクセス・プロトコル)エントリから通知に入力することができる。
【0174】
図17は、通知がその存続期間中に置かれる通知状態遷移の一例を示す図である。まず、1に示されているように、通知を構築することができる。構築のときに、通知はドラフト状態にある。その後、2に示されているように、通知がスペースの中に挿入される。通知は、パブリッシュされた親として挿入できる。通知は、スペースに挿入された後、パブリッシュ状態にある。イベント(たとえば、AdvInsertEvent)は、通知がスペース内に挿入されたときに生成される。イベントについては以下で詳述する。通知は、3に示されているように、アーカイブされ、永続的にされ、これにより、通知が永続的アーカイブ状態に遷移する。通知はさらに、4に示されているように、永続的アーカイブ状態からパブリッシュすることもできる。通知は、スペースから除去され、5に示されているように、ドラフト状態に遷移し戻される。イベント(たとえば、AdvRemoveEvent)は、通知が削除されたときに生成される。
【0175】
一実施形態では、アーカイブされた永続的状態は使用されない。この実施形態では、状態変化3および4も使用されない。この実施形態では、通知はドラフト状態またはパブリッシュ状態のいずれかである。
【0176】
スペース内に格納された通知は、バージョン(要素の場合もある)、作成日(属性の場合もある)、変更日(属性の場合もある)、実装サービスURI(要素の場合もある)、および/または永続的アーカイブ・サービスURI(要素の場合もある)などの標準化された要素および/または属性を備える。
【0177】
スペース自体は通常サービスである。スペース・サービスは、スペース内の通知をサーチする機能を備え、これは、通知のタイプによるスペースのサーチを含む。スペース・サービスはさらに、通知を読み込み、通知を書き込み(パブリッシュする)、通知を取る(削除する)機能も提供することができる。スペースはさらに、スペース・イベント通知メッセージのサブスクライブを行う機能も備える。スペースには、位置によりスペース関係グラフをナビゲートする機能、通知要素の読み込み、書き込み、または取り出しの機能、通知属性の読み込み、書き込み、または取り出しの機能、および通知イベントの通知メッセージのサブスクライブの機能など、拡張機能を備えるものもある。スペースの機能については、以下で詳述する。スペースの機能は、スペース通知のメッセージ・スキーマで具現化される。メッセージ・スキーマ、スペース・アドレス、および認証証明書から、クライアント・メッセージ・ゲートを作成し、スペースとその機能にアクセスできる。
【0178】
スペースおよびスペース内のすべての通知は、URIを使用してアドレス指定できる。一実施形態では、スペースおよび通知名は、URL命名規則に従う。いくつかの実施形態では、スペースのアドレス指定にURI、たとえばURLを使用すると、インターネット全体からスペースにアクセス可能になる。スペース・メッセージ受取側(スペース・サービス)を指定するには、そのスペースについてサービス通知で受け取ったURIを使用する。URIには、プロトコル、ホスト、ポート番号、および名前を含めることができる。プロトコルでは、クライアントとスペースの間でメッセージを移動するために使用できるプロトコルに名前を付ける(たとえば、信頼できるソケットまたは信頼できないソケット)。ホストおよびポート番号は、プロトコル依存のIDである。名前は、スペース名の後に通知、要素、および/または属性名を続けたものである。一実施形態では、パス名を使用して、スペース内の通知を識別することができる。パス名は絶対パスまたは相対パスのいずれかである。絶対パス名では、スペースだけでなく、通知も指定できる。相対パス名は、想定されるスペース内で指定通知に相対的である。一実施形態では、パス名の作成に適用されるシンタックスは、URI(統一リソース識別子)のシンタックスである。したがって、その実施形態では、通知およびスペース名はURI予約語文字または一連の文字を含むことができない。要素および属性へのパス名も、URIを使用して指定できる。一般に、要素名および属性名は、http://java.sun.com/spacename/advertisement/element/attributeなど通知のパス名に付加することができる。
【0179】
一実施形態では、分散コンピューティング環境は、クライアントがスペースのURIを発見できるようにするが、そのスペースに対するサービス通知へのアクセスを制限するメカニズムを備える。一実施形態では、完全通知をスペースに戻すのではなく、スペースのURIとスペースに対する認証サービスのURIを返す。クライアントは、スペース内で通知されたドキュメントまたはサービスにアクセスするために、まず、リターン・メッセージで与えられるURIで認証サービスに対し自己認証を実行する。認証サービスは、認証証明書を返し、これを使用して、クライアントはスペースに対する部分的または完全アクセスを実行できる。クライアントは、認証証明書を受け取ると、スペースに接続し、スペース内のドキュメントまたはサービス通知にアクセスしようとする。
【0180】
分散コンピューティング環境は、クライアントをスペースに接続できるようにするメカニズムを備える。接続メカニズムの実施形態は、クライアント−スペース・アドレス指定、クライアント承認、セキュリティ、リース、クライアント能力判別、およびクライアント−スペース接続管理に対応している。クライアント−スペース接続をセッションと呼ぶ。一実施形態では、セッションに一意的なセッション識別番号(セッションID)を割り当てることができる。セッションIDにより、クライアント−スペース接続を一意に識別することができる。一実施形態では、クライアントがリースを更新しない場合にセッション・リース・メカニズムを使用してセッションの透過的ガベージ・コレクションを実行する。
【0181】
一実施形態によるこのような接続メカニズムの使用例を以下に示す。クライアントは、認証証明書を取得する。一実施形態では、スペースでは、クライアントがスペースへのアクセスを要求したことに応答して行う認証サービスを提供する。クライアントは、認証サービスを通じて認証証明書を取得することができる。クライアントは、認証証明書を受け取ると、接続要求メッセージを送ることによりスペースとの接続を開始できる。一実施形態では、接続要求メッセージに、スペース・サービスのURIアドレス、クライアントの認証証明書、およびクライアントが要求している接続リースに関する情報を含めることができる。スペースは、接続要求メッセージを受け取った後、そのメッセージの妥当性を確認する。一実施形態はXMLスキーマを使用してメッセージの妥当性を確認できる。クライアントは認証証明書を使用して認証を受けることができる。一実施形態では、接続要求メッセージで受け取った情報を使用してスペースを使用するクライアントの能力を判別することができる。一実施形態では、スペースの各クライアントにスペースを使用するそれぞれの能力の集まりを割り当てることができる。一実施形態では、スペースの1つまたは複数のクライアントに関する能力情報を含むアクセス制御リスト(ACL)をクライアント能力判別で使用することができる。一実施形態では、接続要求メッセージで受け取った情報を使用してACL内のクライアントの能力をルックアップすることができる。
【0182】
クライアントを認証し、クライアントの能力を判別した後、クライアントを許可する接続リースを判別できる。リースが判別された後、クライアント−スペース間接続を維持する構造を生成できる。接続に対するセッションIDを生成する。一実施形態では、各クライアント−スペース間接続に一意的セッションIDを割り当てる。一実施形態では、アクティブ化スペースを作成し、クライアント−スペース間セッションに割り当てるか、またはそれとは別に、既存のアクティブ化スペースをクライアント−スペース間セッションに割り当てることができる。一実施形態では、アクティブ化スペースを使用すると、スペースを使用したときにクライアントのサービスの結果を格納することができる。一実施形態では、クライアントの能力を使用して、アクティブ化スペースがクライアントに対し作成されるかどうかを判別する。たとえば、クライアントは、結果を格納し取り出すアクティブ化スペースにアクセスする能力を持たないことがある。1つまたは複数のメッセージをクライアントに送り、接続が確立されたことをクライアントに通知することができる。その1つまたは複数のメッセージに、セッションIDとリースに関する情報を入れることができる。その後、クライアントでは、それらに限定されないが、通知ルックアップ、通知登録、および通知取り出しなどのスペースを使用できる。一実施形態では、割り当てられたリースの有効期限が切れるか、またはクライアントがスペースにリース取り消しを要求するメッセージを送るまで接続は開いたままである。一実施形態では、クライアント側で、そのリースの有効期限が切れる前にそのリースを更新する必要がある。クライアントがリースを更新する前にリースの有効期限が切れた場合、接続は切断され、クライアントとスペースとの接続が途絶える。一実施形態では、再接続するには、クライアントは接続手順を繰り返す必要がある。
【0183】
一実施形態では、スペースのクライアントはスペースの通知をいくつかの異なる方法で取得することができる。クライアントがスペースの通知を取得する方法のうちいくつかを図18に示す。たとえば、スペース発見プロトコルを分散コンピューティング環境の一部として提供することができる。スペース発見は、クライアントまたはサービスがスペースを見つけるために使用するプロトコルである。リスナー・エージェント202は、発見要求が来ないか監視するように1つまたは複数のスペースと関連付けて設定できる。発見リスナー・エージェント202は、さまざまなネットワーク・インターフェース上で待機し、スペースを探しているクライアント200aからブロードキャスト要求またはユニキャスト要求を(エージェントのURIで)受け取る。その後、リスナー・エージェント202は要求されたスペースのサービス通知に関してサービス通知またはURIで応答する。一実施形態では、リスナー・エージェントは、一般に、スペースから分離されているが、それは、その機能がスペース・サービスの機能と直交しているからである。ただし、リスナー・エージェントは、スペース・サービスと同じデバイスまたは異なるデバイスに実装することができる。
【0184】
一実施形態では、発見プロトコルはデフォルト・スペース内で通知されるサービスでよい。クライアントは、追加スペースを発見するためにクライアントのデフォルト・スペースから発見プロトコルをインスタンス化する。発見プロトコルは、クライアントのデフォルト・スペースに事前に登録できる。それとは別に、発見プロトコルは、たとえば、クライアントは発見サービスによって処理されるローカル・ネットワークに接続した時に、そのスペース内に通知を置くことによりデフォルト・スペースに自己登録することもできる。
【0185】
一実施形態では、スペース発見プロトコルを、SLP、Jini、UPnPなどの他のプラットフォーム用の基本デバイス発見プロトコルにマッピングすることができる。そこで、クライアントは分散コンピューティング環境の発見プロトコルを使用して他の環境内のサービスを見つける。これらの他の環境とのブリッジを用意し、それらの他の環境内のサービスに通知を送って、ここで説明した分散コンピューティング環境のクライアントがそれらにアクセスできるようにする。「ブリッジ」のセクションを参照のこと。
【0186】
通知される発見プロトコルごとに、分散コンピューティング環境では発見プロトコルの結果を保持するための後続結果スペースを作成することができる。一実施形態では、分散コンピューティング環境内のスペース・サービスはMulticast Announcement Protocol(マルチキャストUDP)を使用してLAN上でアナウンスすることができる。リスナー・エージェントがこの情報を記録する。デバイス(クライアントまたはサービス)は、Multicast Request Protocol(マルチキャストUDP)を使用して、スペース・マネージャの発見を開始する。一実施形態では、スペース・マネージャは、それぞれのスペースのURIを示す情報で応答する。それとは別に、リスナー・エージェントは複数スペースについて応答することができる。発見応答は、さらに、各スペースにラベルを付ける短いストリング(たとえば、スペースのキーワードから取得する)と、たとえばそれぞれのスペースに対し操作を実行する各スペース・マネージャとのTCP接続を設定するために使用できる情報を含むことができる。要求側デバイスは複数のスペース・マネージャから応答(またはリスナー・エージェントから複数のスペース・リスティング)を受け取るので、この情報は、クライアントが接続先スペースを選択する場合に役立つ。
【0187】
上述のマルチキャスト発見に加えて、発見サービスではさらに、ネットワーク(たとえば、インターネット、他のWAN、LANなど)上の既知のアドレスでスペース・マネージャを発見するために使用できるユニキャスト・メッセージング(たとえば、TCPで)を使用して発見を実行することもできる。ユニキャスト発見メッセージは、サービス通知を送るため既知のURIのスペース・サービスの要求を含むことができる。マルチキャスト発見プロトコルをおよびユニキャスト発見プロトコルは、メッセージ・レベルで定義され、そのため、発見に参加しているデバイスがJavaをサポートしていようと他の特定の言語をサポートしていようと関係なく使用することができる。
【0188】
発見プロトコルを使用すると、分散コンピューティング環境内のクライアントをサポートするサーバ・コンテンツを拡散することとは独立にクライアントを拡散させることが容易にできる。たとえば、モバイル・クライアントは、その初期デフォルト・スペースをそのローカル・プラットフォームに組み込むことができる。デフォルト・スペースで通知されたローカル・サービスに加えて、モバイル・クライアントは、発見プロトコルにアクセスするためのサービスやスペースサーチ・エンジンにアクセスするためのサービスなど、追加スペースをサーチするサービスを備えることができる。
【0189】
一実施形態では、分散コンピューティング環境のスペース発見プロトコルは、一組のXMLメッセージとその応答を定義し、クライアントが以下のことを行えるようにする。
・ ネットワーク・インターフェース上でプロトコル定義スペース発見メッセージをブロードキャストする。
・ リスナーから、それらのリスナーが表す候補スペースを記述するXMLメッセージを受け取る。
・ クライアントが選択されたスペースのアドレスを知らなくても、発見されたスペースの1つをデフォルトとして選択する。
・ そのアドレスなど選択されたスペースに関する情報を取得し、クライアントが後で発見プロトコルの外部の手段により同じスペースを見つけることができるようにする(これは、後でクライアントがローカルでなくなったがまだクライアントに関わっているスペースにアクセスする場合に役立つ)。
【0190】
いくつかの実施形態では、マルチキャストおよびユニキャスト発見プロトコルはIPネットワークを必要とする。これらの発見プロトコルは、IPネットワーク対応のデバイスの必要条件を満たすが、これらの発見プロトコルで直接サポートされないデバイスも多くある。分散コンピューティング環境でスペースの発見にこのようなデバイスの要求条件を満たすには、事前発見プロトコルを使用してIPネットワーク対応のエージェントを見つける。事前発見プロトコルは、ネットワーク・エージェントを要求する非IPネットワーク・インターフェース上でメッセージを送るデバイスを含むことができる。ネットワーク・エージェントは、それ自身とデバイスとの間の接続を設定する。デバイスとエージェントの間の接続が設定されると、エージェントはこれがエージェントとして使用されるデバイスのためにIPネットワーク上で発見プロトコルに参加する。ネットワーク・エージェントは、さらに、一般に分散コンピューティング環境にデバイスを接続するためのインターフェースとなる。たとえば、発見されたスペース内で通知されるサービスを実行するためにデバイスのためにエージェント内にゲートを構築することができる。「ブリッジ」のセクションを参照されたい。
【0191】
クライアントが分散コンピューティング環境でスペースを特定するための方法としては他に、他のスペース内でスペースを通知する方法がある。スペースはサービスなので、他のサービスと同様、他のスペース内で通知を受けることができる。図18に示されているように、クライアント200bは、第2のスペース204bについて第1のスペース204a内で通知206を見つける。スペース204bは、次に、追加スペースへの通知を含む。サービス(スペースを実装する)はさらにクライアントとしても機能するため、スペースは通知を交換するかまたは一緒に連鎖し、図19に示されているように、ベースの連合を実現する。分散コンピューティング環境にはスペースをいくつでも含めることができる。スペースの個数とトポロジは、実装に依存する。たとえば、IPネットワーク上に実装されたスペースは、それぞれ異なるサブネットに対応していることがある。
【0192】
クライアントでスペースを特定する第3の方法として、図18に示されているように、サービス208を実行する方法がある。サービス208は、実行され、その結果としてスペース・サービスのサービス通知を返す。サービス通知はXML文書であり、分散コンピューティング環境はインターネットを含むため、サービス208はWebベースのサーチ・ツールとすることができる。このようなサービスの一例として、図4で説明しているスペース・ルックアップ・サービスがある。一実施形態では、分散コンピューティング環境内のスペースはWebページとして実装することができる。それぞれのWebページ・ベースは、Webページを分散コンピューティング環境内のスペースとして識別するためにサーチできるキーワードを含むことができる。スペースは、その他のサーチ可能なキーワードを含むだけでなく、さらにスペースを定義することができる。クライアントは、サーチ・サービス208に接続し、キーワードをXMLメッセージの形式でサーチ・サービスに供給する。サーチ・サービスは、クライアントからキーワードを受け取りそのキーワードをインターネットサーチ・エンジンに送るが、これは従来のサーチ・エンジンまたはサードパーティ製のサーチ・エンジンでもよい。サーチ・サービスは、XMLメッセージとして直接にまたは結果スペースへの参照によりインターネットサーチ・エンジンからクライアントに結果を返す。結果は、サーチ要求とマッチするスペースのURIである。それとは別に、サーチ・サービスは、サーチによって識別されたスペースにコンタクトし、このようなそれぞれのスペースについてサービス通知を取得し、XMLメッセージとして直接に、または結果スペースでの参照により、スペース・サービス通知をクライアントに返すことができる。クライアントは、その後、サーチ結果からスペースを選択し、ゲート(それ自身によりまたはプロキシを通じて)を構築し、選択したスペースにアクセスすることができる。選択されたスペースにアクセスした後、クライアントはそのスペース内のサービス通知をルックアップし、これによりスペースが追加される。
【0193】
上述のように、スペースはXMLペースのWebサイトとすることができ、そのため、インターネットWeb上でサーチ・メカニズムによりサーチすることができる。スペースはインターネットサーチ可能キーワードを含むことができる。小型クライアント・デバイスなどいくつかのデバイスでは、インターネット・ブラウザをサポートしていない。ただし、このようなデバイスであっても、分散コンピューティング環境内でスペースについてインターネット・サーチを実行することができる。デバイスは、キーワードの列を受け付けるプログラムを備え、これらのキーワードはサーバ上のプロキシ・プログラムに送られる(たとえば、サーチ・サービス)。プロキシは、これらのキーワード列をブラウザ・ベースのサーチ機能に送り(たとえば、インターネットサーチ機能)、サーチを実行することができる。プロキシは、サーチの出力を受け取ってサーチ結果の各URIを表すストリング(たとえば、XMLストリング)に解析し、応答ストリングをクライアントに送り返す。したがって、クライアントは、Webブラウザなどのプログラムをサポートしていなくてもインターネットを介してスペースを特定することができる。さらに高機能のデバイスでは、プロキシの使用を避けて、インターネット・ベースのルックアップ・サービスを直接開始することができる。
【0194】
クライアントはスペースを特定するための第4の方法は、新規作成された空のスペースまたは既存のスペースが生成されるときには生成されたスペースに関する情報を取得または受け取る方法である。既存のスペースは、生成元のスペースと同じ機能(たとえば、同じXMLスキーマ)を持つ空のスペースを生成するインターフェースを備えることができる。スペースの生成については以下で詳述する。
【0195】
スペースのクライアントはスペース・サービスの通知を見つけると、スペースのそのクライアントは他のサービスの場合と同様にスペース・サービスを実行できる。スペース・サービスのクライアントは別のサービスでもよいことに注意されたい(たとえば、スペース内で通知すること求めるサービス)。一実施形態では、図20に示されているように、スペース・サービスを実行するため、スペースのクライアントはまずスペースに対し認証サービスを実行し、300に示されているように、認証証明書を取得する。認証サービスは、スペース・サービスのサービスを通知で指定することができる。スペースのクライアントは、302に示されているように、認証証明書、スペースのXMLスキーマ(スペースのサービス通知からの)、およびスペースのURI(スペースのサービス通知からの)を使用して、スペースのゲートを構築する。次に、スペースのクライアントは、そのゲートを使用してメッセージをスペース・サービスに送ることによりスペース・サービスを実行する。第1のそのようなメッセージは304に示されている。
【0196】
認証を採用する実施形態では、スペース・サービスがクライアントから第1のメッセージを認証証明書が埋め込まれた状態で受け取ったときに、スペース・サービスは同じ認証サービス(スペース・サービスのサービス通知で指定されている)を使用して、クライアントを認証し、306で示されているように、その素性を確定する。スペース・サービスは、クライアントの能力を判別し、308で示されているように、クライアントを認証証明書にバインドする。
【0197】
310に示されているように、スペースのクライアントは、メッセージをスペース・サービスに送ることによりさまざまなスペース機能を実行することができる。一実施形態では、スペースのクライアントがスペース・サービスに要求を送るときに、クライアントはその要求で認証証明証を渡し、スペース・サービスがクライアントの特定の能力について要求をチェックできるようにする。
【0198】
各スペースは、通常、サービスであり、スペース・サービスのコア機能を定義するXMLスキーマを備える場合がある。XMLスキーマでは、スペース・サービスとのクライアント・インターフェースを指定する。一実施形態では、すべてのスペース・サービスは、基本レベルのスペース関係のメッセージを出すことができる。基本レベルのスペース機能は、PDAなどの小型デバイスをはじめとするほとんどのクライアントで使用できる基本的なスペース機能である。たとえば、より高機能なクライアントについては、機能を増やすことが望ましい場合がある。基本レベルのスペースの拡張は、スペースを通知するXMLスキーマにさらにメッセージを追加することにより実現できる。たとえば、一実施形態では、基本レベルのメッセージは、通知に対して関係グラフを強制しない。たとえば、通知の階層をトラバースするメッセージはスペース拡張である。このような追加機能は、スペースの1つまたは複数の拡張をXMLスペース・スキーマまたはスキーマ拡張を通じて提供することができる。拡張されたスキーマは、基本スキーマを含むので、拡張スペースのクライアントもまた、基本スペースとしてスペースにアクセスすることができる。
【0199】
一実施形態では、基本スペース・サービスは、XMLドキュメントの一時的リポジトリを備える(たとえば、サービスの通知、実行中サービスの結果)。ただし、一実施形態の基本スペース・サービスは、スペース・コンテンツの永続性、スペース構造(たとえば、階層)のナビゲーションまたは作成、およびトランザクション・モデルをサポートする高度な機能に対応していない場合がある。永続性、階層、および/またはトランザクションをサポートするメカニズムは、XMLスキーマを拡張することによって実現される。拡張されたスペースはそれでも基本XMLスキーマを含むので、必要なのが、あるいはサポートできるのが基本スペースの機能だけの場合に、クライアントは拡張スペースを基本スペースとして取り扱うことができる。
【0200】
一実施形態では、基本スペースは一時的なものとすることができる。基本スペースは、さまざまな目的のために受け入れることができる。サービス・プロバイダは、さまざまなスペースでサービスを登録することができる。一実施形態では、サービスはスペース内の情報のパブリッシュ後継続的にリースを更新する必要がある。このような性質があることから、サービス通知は、多くの場合に再構築かつ/または再確認するという点で一時的なものである。ただし、スペース内に何らかの永続性を実現することが望ましい。たとえば、結果があるスペースは、一定期間結果が失われないようにしたいユーザに対しては何らかの永続性を提供できる。一実施形態では、クライアントが永続的ストアによって裏付けられているスペース内のオブジェクトを制御し、その永続性ストアのメンテナンスを管理することができるスペース・インターフェースを指定することにより永続性を実現することができる。永続性インターフェースは、永続性に関してインターフェースを定義するスペースの拡張XMLスキーマで指定することができる。
【0201】
一実施形態では、基本スペースは、XMLドキュメントがスペースに追加され、ストリングによって識別できるインターフェースを備える。基本スペースは、スペース内のさまざまな名前をつけられたXMLドキュメントの階層を実現することはできない。階層のサポートが望ましい実施形態では、ユーザが階層を指定することができる追加インターフェースを定義するとよい(XMLスキーマを拡張する)。階層をナビゲートしたり、関係グラフを位置でナビゲートするように他のインターフェースを指定することもできる。ただし、他のユーザはそれでも、基本スペース・インターフェースを使用して、階層を使わずに、同じドキュメントにアクセスすることができる。拡張スペース・スキーマでは、他のスペースの構造に対するインターフェースも実現できる。
【0202】
拡張XMLスペース・インターフェースもまた、スペース・トランザクション・モデルについて実現することができる。たとえば、拡張スペースXMLスキーマがACIDトランザクションのインターフェースを指定する。ACIDは、エンタプライズ・レベルのトランザクションの4つの特性を記述するために使用される頭字語である。ACIDは、Atomicity(原子性)、Consistency(一貫性)、Isolation(独立性)、およびDurability(耐久性)のそれぞれの頭文字をとったものである。原子性とは、トランザクションを完全に完了するか、または元に戻すかのいずれかであることを意味する。障害が発生した場合、すべての操作およびプロシージャを元に戻し、すべてのデータを前の状態にロールバックする必要がある。一貫性とは、トランザクションがシステムを一方の一貫性のある状態から他方の一貫性のある状態に変換することを意味する。独立性とは、各トランザクションが同時に発生する他のトランザクションとは独立に発生することを意味する。耐久性とは、完了したトランザクションが、たとえばシステムに障害が発生したときでも、内容を失うことなく恒久的であるということを意味する。他のトランザクション・モデルはさらに、拡張スペース・スキーマで指定することができる。
【0203】
拡張スペース・スキーマは、拡張されたスペースの特徴、機能性、または機能を使用するためのメッセージ・インターフェース(たとえば、XMLメッセージ)を指定するXMLドキュメントとすることができる。スペースには、基本スキーマおよび複数のを拡張スキーマを用意できる。これにより、クライアントの認証に応じて、異なるレベルのサービスを異なるクライアントに簡単に提供することができる。
【0204】
スペースの永続性、構造、およびトランザクションの拡張のほかに、必要に応じて、他のスペース拡張機能も指定できる。たとえば、通知要素の読み込み、書き込み、または取り出しの機能、通知属性の読み込み、書き込み、または取り出しの機能、および通知イベントの通知メッセージのサブスクライブの機能など、要素または属性のレベルで通知を操作するための拡張機能を備えることもできる。スペースは仮想的にいくつの機能でも提供でき、必要に応じて、基本スキーマおよび拡張スキーマに配列することができる。一実施形態では、すべての基本スペースは通知の読み込み、書き出し、取り込み、およびルックアップの機能、さらにスペース・イベント・サブスクライブの機能を備える必要がある。さまざまなスペース機能を用意できる。いくつかの実施形態では、スペースとのセッションを確立するための機能を備えることができる。このような実施形態では、スペース機能のうちの残りの機能は、これが完了するまでに利用できない。他の実施形態では、セッションという概念がないか、またはオプションであるか、および/または実装に依存する。
【0205】
他のスペース機能として、スペースにサービス通知を追加したり、スペースからサービス通知を削除する機能もある。さらに、XMLドキュメントを追加または削除するスペース機能も用意できる(通知ではなく、おそらくスペース内の結果)。スペース・サービスは、アイテムの追加を許可する前にアイテムの一意性を検査する。たとえば、スペースに追加される各アイテムは、アイテムを識別し、そのアイテムの一意性を検査するために使用できるユーザ指定のストリングと関連付けることができる。
【0206】
一実施形態では、クライアントはスペース内で通知されるすべてのサービスのリスティング、ツリー、またはその他の表現を要求することができる。ユーザは、その後、通知をスクロールまたは操縦して、目的のサービスを選択する。また、スペースはキーワードまたはストリング名を与えることによりクライアントがサービスをサーチできるようにするルックアップ機能も備える。一実施形態では、スペース機能は、スペースに追加されているスペース・エントリをルックアップするためのメカニズムを備える。ルックアップ機能は、名前とマッチするストリング、またはワイルドカード、またはデータベース・クエリでルックアップすることができる。ルックアップ機能は、クライアントが1つ選択できる、またはさらに絞り込みサーチを実行できる複数のエントリを返す。一実施形態では、ルックアップ機能は特定のXMLスキーマとマッチするサービス通知を特定するためのメカニズムを備える。クライアントは、スペース内でサーチ対象となる、特定のXMLスキーマ、または特定のXMLの一部を指定することができる。したがって、インターフェース機能に従ってスペース内でサービスをサーチすることができる。
【0207】
分散コンピューティング環境で提供できるスペース機能としては他に、サービスおよびクライアントがXMLなどの型付けモデルに基づき一時的ドキュメントを見つけられるメカニズムがある。このメカニズムは、汎用の型付けドキュメント・ルックアップ・メカニズムである。一実施形態では、このルックアップ・メカニズムはXMLに基づく。このルックアップ・メカニズムを使用すると、クライアントおよびサービスは、サービス通知を介したサービスを含めて、一般にドキュメントを見つけることができる。
【0208】
一実施形態では、スペース・ルックアップおよび応答メッセージのペアを使用することにより、クライアントおよびサービスがネットワーク一時ドキュメント・ストア(スペース)内に格納されているXMLドキュメントを見つけられるようにできる。スペースは、さまざまなドキュメントを格納するために使用されるドキュメント・スペースである。一実施形態では、ドキュメントはXMLドキュメントまたはXMLでカプセル化された非XMLドキュメントである。スペースについては他のところでさらに詳述する。ルックアップ・メッセージは、サービス通知およびデバイス・ドライバ通知を含む、スペース内に格納されているあらゆる種類のXMLドキュメント上で機能する。一実施形態では、クライアント(他のサービスでもよい)は別のところで説明しているように発見メカニズムを使用して、1つまたは複数のドキュメント・スペースを見つけることができる。その後、クライアントはスペース・ルックアップ・メッセージを使用して、スペース内に格納されているドキュメントを特定することができる。
【0209】
分散コンピューティング環境には、サービスおよびクライアントがXMLドキュメントの発行に関するイベントのサブスクライブおよび受取を行うためのメカニズムが備えられる。イベントは、スペースなどの一時的XMLドキュメント・リポジトリにXMLドキュメントをパブリッシュしたり、そこから除去したりする機能を含むことができる。一実施形態では、イベントは、他のXMLドキュメントを参照するXMLドキュメントである。
【0210】
一実施形態では、スペース・イベント・サブスクライブおよび応答メッセージのペアを使用することにより、クライアントおよびサービスがスペースに追加またはスペースから削除されるドキュメントに関するイベントのサブスクライブを行える。一実施形態では、他のところで説明しているリース・メカニズムを使用して、イベント・サブスクライブをリースすることができる。一実施形態では、リースが取り消されるかまたはその有効期限が切れたときにサブスクライブを取り消すことができる。一実施形態では、サブスクライブ上のリースを更新する際に、サブスクライブを更新できる。
【0211】
一実施形態では、イベント・サブスクライブ・メッセージに、ドキュメント・マッチング・メカニズムとして使用できるXMLスキーマを含めることができる。スキーマとマッチするドキュメントはサブスクライブによって取り扱われる。一実施形態では、スペースに追加され、XMLスキーマとマッチするドキュメントは、スペース・イベント・メッセージを生成する。
【0212】
また、スペースに何かを追加したときやスペースから何かを削除したときにその通知を取得するためクライアントが登録できる(または登録解除できる)スペース機能を提供することができる。スペースは一時的コンテンツを格納することができ、これはスペースに追加されたまたはスペースから削除されたサービスを反映する。たとえば、サービスが利用できるようになったときまたは利用できなくなったときにそのことをクライアントに通知するメカニズムを用意することができる。クライアントは、このような通知を取得するためイベント・サービスに登録することができる。一実施形態では、クライアントは指定されたストリングとマッチする名前または指定されたスキーマ(またはスキーマ部分)とマッチするスキーマを持つサービスをスペースに追加したりスペースから削除したりするときにそのことを通知するように登録することができる。したがって、スペース・イベント通知機能に登録するクエリは、上述のサービス・ルックアップ機能のものと同じであるか類似している。
【0213】
図43は、一実施形態による、分散コンピューティング環境での、サーチ・サービスを使用するスペースのサーチを示す流れ図である。一実施形態では、デバイスのクライアントが、同一のまたは異なるデバイスのサーチ・サービスと対話して、データの格納および/または取出のためのスペース(すなわち、ネットワーク・アクセス可能オブジェクト・リポジトリ)を見つけることができる。この対話の実施形態を、さらに図46aおよび46bに示す。クライアント110は、2000に示されているように、サーチ・サービス2102にサーチ要求を送ることができる。サーチ要求には、スペースからサーチされる1つまたは複数の所望の特性を含めることができる。一実施形態では、サーチ要求が、拡張マークアップ言語(XML)などのデータ表現言語で表現される。一実施形態では、サーチ要求の所望の特性に、1つまたは複数のキーワードを含めることができる。クライアントに、キーワードを受け入れ、それらをサーチ・サービス2102に送るプログラム2100を含めることができる。一実施形態では、キーワードを、XMLメッセージ2106としておよび/または本明細書に記載のゲートを使用して送ることができる。
【0214】
サーチ要求に基づいて、サーチ・サービス2102が、サーチを行うことができる。図46aに示された実施形態では、サーチを行う際に、サーチ・サービス2102が、インターネット・サーチ・エンジンなどのサーチ・エンジン2104と対話することができる。この形で、サーチ・サービスが、クライアントとサーチ・エンジンの間のプロキシとして働くことができる。プロキシは、ウェブ・ブラウザの使用またはサーチ結果のセット全体の受取によるなど、サーチ・エンジンとの対話のためのリソースを有しない小さいデバイスのクライアントに特に望ましい可能性がある。サーチ・エンジンに、ブラウザ・アクセス可能なインターネット・サーチ・エンジンなどの、ネットワーク・アクセス可能なサードパーティ・サーチ・エンジンを含めることができる。図46bに示された実施形態では、サーチ・サービス2102に、サーチ・エンジン2104を含めるか、他の形で密に結合することができる。2002に示されているように、サーチ・サービス2102は、サーチ要求を、データ表現言語(たとえばXML)から、サーチ・エンジン2104によって使用可能なテキスト・フォーマットに変換することができる。2004に示されているように、サーチ・サービス2102は、変換されたサーチ要求をサーチ・エンジン2104に送ることができる。
【0215】
2006に示されているように、サーチをサーチ・エンジン2104によって実行して、サーチ結果を生成することができる。サーチ結果には、たとえば2120a、2120b、および2120cなどの1つまたは複数の結果のスペースの位置(たとえばURI)を含めることができる。一実施形態では、スペースに、インターネット2110を介してアクセス可能な1つまたは複数のウェブ・ページを含めることができる。ウェブ・ページには、ウェブ・ページを分散コンピューティング環境内のスペースとして識別する識別キーワードを含めることができる。サーチ要求に、このキーワードを、スペースについて望まれる特性を記述する1つまたは複数の他のキーワードと共に含めることができる。
【0216】
2008に示されているように、サーチ・サービス2102は、サーチ・エンジン2104からテキスト・フォーマットでサーチ結果を受け取ることができる。2010に示されているように、サーチ・サービス2102は、テキスト・フォーマットのサーチ結果をデータ表現言語(たとえばXML)のサーチ結果に変換し、その結果をクライアント110に送る。一実施形態では、サーチ・サービス2102が、結果のスペース2120a、2120b、および2120cのそれぞれに関するサービス通知を得ることができる。各サービス通知に、めいめいのスペースにアクセスするのに使用可能な情報が含まれる。サーチ・サービス2102は、これらの通知への参照(たとえばUniform Resource Identifier)または通知自体をサーチ結果として送って、2012に示されているように、クライアントが、めいめいの位置の結果のスペースにアクセスできるようにする。一実施形態では、結果位置のスペースに、Uniform Resource Identifier(URI)が含まれる。
【0217】
一実施形態では、サーチ結果をクライアント110に送る際に、サーチ・サービス2102が、サーチ結果を結果のスペース(すなわち、ネットワーク・アクセス可能なストレージ・リポジトリ)に格納し、その結果スペースのアドレスをクライアント110に送ることができる。クライアント110は、適当な時に、結果スペース内のサーチ結果にアクセスすることができる。結果スペースの使用は、結果のセット全体を受け取って表示するリソースを有しない小さいクライアントに特に望ましい。この情況では、一実施形態によれば、ユーザが、異なるクライアントを使用して結果スペースから結果を読み取ることができる。
【0218】
いくつかの実施形態では、サーチ・サービスが、サーチ・サービスを介して見つけることができるスペースを制限またはフィルタリングするか、分散コンピューティング環境内の少数のサポートされるスペースだけをサーチするようにクライアントを制限することができる。許可されるサーチの範囲は、クライアント認証に従って決定することができる。
【0219】
図47は、一実施形態の分散コンピューティング環境での、スペース内のドキュメントのサーチを示す流れ図である。一実施形態では、クライアントが、サーチメッセージを介してスペースと対話して、スペース内のドキュメントを見つけることができる。2200に示されているように、クライアントは、ルックアップ・メッセージをスペースに送ることができる。スペースには、1つまたは複数のドキュメントを格納するために動作可能であるネットワーク・アドレッシング可能記憶場所を含めることができる。格納されたドキュメントは、拡張マークアップ言語(XML)などのデータ表現言語で表現することができる。ルックアップ・メッセージが格納されたドキュメントの所望の特性を指定することができる。一実施形態では、ドキュメントに、XMLサービス通知およびXMLデバイス通知ならびに汎用XMLドキュメントを含めることができる。たとえば、スペース内のXMLドキュメントに、XMLで表現された、サービスの結果を含めることができる。
【0220】
2202に示されているように、ルックアップ・メッセージにマッチするドキュメントのセットを発見することができる。発見されるドキュメントには、ルックアップ・メッセージで指定された所望の特性にマッチするすべての格納されたドキュメントを含めることができる。0個以上の格納されたドキュメントが、所望の特性にマッチする可能性がある。一実施形態では、ルックアップ・メッセージに所望の名前を含めることができる。一実施形態では、ルックアップ・メッセージで指定された所望の名前に、1つまたは複数のワイルドカードを含めることができる。発見されるドキュメントのそれぞれが、所望の名前とマッチする名前を有することができ、名前によって、スペース内で発見されたドキュメントを識別することができる。一実施形態では、ルックアップ・メッセージに、データ表現言語で表現された所望のスキーマを含めることができる。発見されるドキュメントのそれぞれが、所望のスキーマとマッチするスキーマまたはスキーマの一部を有することができる。一実施形態では、ルックアップ・メッセージに、所望の名前および所望のスキーマの両方を含めることができる。この場合には、発見されるドキュメントのセットに、所望の名前とマッチする名前を有する発見されたドキュメントと、所望のスキーマとマッチするスキーマを有する発見されたドキュメントの両方を含めることができる。一実施形態では、ルックアップ・メッセージに、所望の名前も所望のスキーマも含めないことができる。この場合には、ルックアップ・メッセージは、本質的に、スペース内のすべてのドキュメントに関する要求であり、発見されるドキュメントのセットに、スペースに格納されたドキュメントの実質的にすべてを含めることができる。
【0221】
マッチするドキュメントが見つかった後に、2204に示されているように、スペースが、クライアントにサーチ応答メッセージを送ることができる。一実施形態では、サーチ応答メッセージに、発見されたドキュメントの名前を含めることができる。一実施形態では、サーチ応答メッセージに、0個以上の発見されたドキュメントのそれぞれに関する通知メッセージを含めることができる。各通知に、めいめいの発見されたドキュメントを得るか、ドキュメントが通知するリソース(たとえばサービス)にアクセスするために、クライアントによって使用可能な情報を含めることができる。一実施形態では、各通知に、めいめいの発見されたドキュメント(または、ドキュメントによって通知される、サービスなどのリソース)にアクセス可能である場所のUniform Resource Identifier(URI)を含めることができる。一実施形態では、発見されるドキュメントの少なくとも1つを、サービスに関する通知とすることができる。サービスに関する通知に、スキーマを含めることができ、このスキーマによって、サービスの1つまたは複数の関数を呼び出すのに使用可能な1つまたは複数のメッセージが指定される。通知は、XMLなどのデータ表現言語で表現することができる。
【0222】
一実施形態では、ルックアップ・メッセージおよびサーチ応答メッセージが、XMLなどのデータ表現言語で表現される。スペースに関するスキーマで、ルックアップ・メッセージおよびサーチ応答メッセージの形式を指定することができる。一実施形態では、このメッセージの対を、下記のようにXMLで表現することができる。
ルックアップ・メッセージ
サーチ応答メッセージ
【0223】
XMLルックアップ・メッセージでは、「名前」を、ストリング値とすることができ、名前によって、スペース内の一意の識別子を指定することができる。ワイルドカードが使用される場合には、識別子が、一意でない場合がある。「AdvSchema」は、ルックアップがマッチすると期待されるスキーマである。一実施形態では、両方のフィールドが任意選択である。XMLルックアップ応答メッセージでは、「Adv」が、0個以上のマッチする通知のグループであり、「Names」が、通知に対応する名前のグループである。
【0224】
図48は、一実施形態による、分散コンピューティング環境での、スペース内に格納された通知を使用する、サービスのアドレッシングを示す流れ図である。一実施形態では、2300に示されているように、サービスが、スペース内でサービス通知をパブリッシュすることができる。スペースは、拡張マークアップ言語(XML)ドキュメントなどのドキュメントが格納されるネットワーク・アドレッシング可能記憶場所とすることができる。通知のパブリッシュは、この詳細な説明の他所で詳細に説明する。一実施形態では、通知に、サービスのUniform Resource Identifier(URI)およびスキーマを含めることができる。URIでは、サービスにアクセスできるネットワーク・アドレスを指定することができ、スキーマでは、サービスの1つまたは複数の関数を呼び出すのに使用可能である1つまたは複数のメッセージを指定することができる。一実施形態では、スキーマおよびメッセージを、XMLなどのデータ表現言語で表現することができる。2302に示されているように、クライアントは、スペースにアクセスし、通知を見つけることができる。たとえば、クライアントは、発見サービスを使用してスペースを見つけ、その後、図47に示されたものなどのルックアップ・サービスを使用して、スペース内の通知を見つけることができる。
【0225】
一実施形態では、通知に、特定のサービスにアクセスするためにクライアントが必要とする情報の実質的にすべてが含まれる。2304に示されているように、クライアントは、スペースから通知を読み取ることができる。一実施形態では、クライアントは、通知内のURIおよびスキーマを使用して、サービスにアクセスするためのゲートを構築することができる。2305に示されているように、クライアントは、URIにあるサービスにスキーマで指定された第1のメッセージを送って、サービスの1つまたは複数の関数を呼び出すことができる。それに応答して、2308に示されているように、サービスの関数を呼び出すことができる。一実施形態では、サービスが、第2のメッセージ(たとえば、呼び出された関数の結果を含むメッセージ)をクライアントに送ることができ、この第2のメッセージは、そのサービスのスキーマで指定されたものである。
【0226】
スペースのクライアントが、XMLドキュメント(たとえばサービス通知)がスペースに追加または除去される時に通報されるように契約する時に、そのクライアントは、通報のためのこの契約に対するリースを得ることができる。リースを用いて、スペース・サービスが、特定のクライアントへの通報の発送を継続するかどうかを知ることができる。たとえば、通知機能に対するリースは、更新されない場合に、ある時間の後に満了するようにすることができる。クライアントがスペースとのアクティブ・セッションを確立している間は、リースが不要である可能性があることに留意されたい。クライアントは、スペースとのアクティブ・セッションを切断した後に、対応するリースがアクティブのままである限り、そのイベント契約に従ってイベント通報の受取を継続することができる。下のリースの節を参照されたい。
【0227】
クライアントは、異なる型のイベントに対して契約することができる。例は、上で説明したように、スペースに追加または除去されるサービス通知である。クライアントは、クライアント(またはほかの誰か)によって開始されたサービスからの結果がスペースに置かれる時にも通報を受けることができる。たとえば、クライアントとサービスが、サービスの結果を参照する名前を相互に選択することができる。クライアントは、選択された名前によって参照される結果がスペースに追加される時にイベントを受け取るために、結果がポストまたは通知されるスペース・サービスに登録することができる。
【0228】
スペースは、クライアントが契約することができる異なる型のイベントを生成することができる。スペース変更の合成物として、イベントを、そのようなイベントについて契約したクライアントおよびサービスに対して作ることができる。一実施形態では、2つの主なスペース・イベント・カテゴリすなわち、スペースに関するカテゴリ(通知の挿入および除去)と、通知に対する変更を示すのに使用されるカテゴリ(要素または属性の追加、除去、変更)を設けることができる。どのイベントがサポートされるかは、スペースのXMLメッセージ・スキーマで示すことができる。
【0229】
下記のイベントは、スペース・イベントまたは通知イベントを示すためにスペース・サービスによって作られる可能性があるイベントの例である。
【0230】
【表1】
【0231】
イベントは型付けされる。いくつかの実施形態では、スペースによってサポートされるイベント機能を使用すると、イベント・リスナーがたとえば、Javaクラス(またはXMLの型)階層を利用することができる。たとえば、AdvElementEventが発生するのを待つことで、リスナーは型AdvElementEventおよびそのサブクラス(XML型)のすべてのイベントを受け取る。したがって、この例では、要素変更に関係するすべてのイベントは(通知の挿入および削除はないが)、受取される。
【0232】
他の例では、トップレベルのイベント・クラスまたは型、たとえば、SpaceEventのサブスクライブまたは待機する際に、すべてのスペース・イベントが受取される。イベント・クラスの型は、たとえば、Javaのinstance of演算子またはXML型付けシステムを介して区別することができる。
【0233】
イベントには、影響を受ける通知または要素へのURIが含まれる。たとえば、AdvertisementEventおよびそのすべてのサブクラスは影響を受ける通知への参照(たとえば、URIまたはURL)を含む。AdvElementEventおよびそのサブクラスは、影響を受ける要素の名前について調査することができる。たとえば、前の要素値(URIまたはURL)は、AdvElementRemoveEventおよびAdvElementValueChangeEventから利用することができる。
【0234】
一実施形態のスペース・イベントの型階層を図21に示した。型は、XMLで定義し、JavaやC++などの他の適当なオブジェクト指向言語で使用することができる。
【0235】
スペースは、クライアントがスペース内で通知されたサービスをインスタンス化する機能を備える。サービスのインスタンス化は、クライアントがサービスを実行できるよう行われる初期化である。サービスのインスタンス化の一実施形態を図22に示す。サービスをインスタンス化するために、クライアントはまず、320で示されているように、スペース内でパブリッシュされたサービス通知のうちから1つ選択する。クライアントは、スペースに用意されているルックアップ機能などのさまざまな機能を使用して、スペース内のさまざまな通知をルックアップすることができる。次に、クライアントは、322に示されているように、スペースに対しサービスのインスタンス化を要求する。
【0236】
一実施形態では、サービス・インスタンス化は、以下の操作を含む。クライアントがスペース・サービスに対し選択されたサービスのインスタンス化を要求した後、322に示されているように、スペース・サービスは、324に示されているように、クライアントが要求されたサービスをインスタンス化できることを確認する。スペース・サービスは、クライアントのメッセージに含まれる認証証明書を調べることによりこの確認を実行する。認証証明書は、スペース・サービスとのセッションを確立したときにクライアントが受け取る証明書である。スペース・サービスは、クライアントがそのクライアントに指示されているクライアントの認証証明書および能力に応じて要求されたサービスをインスタンス化できるかどうかを検証する。以下の「認証とセキュリティ」の項を参照のこと。
【0237】
クライアントが承認されていると仮定すると、スペース・サービスはさらに、326に示されているように、クライアントによって指定されているリース要求時間でクライアントに対するサービス通知のリースを取得することができる。リースについては以下で詳述する。スペース・サービスは、328に示されているように、割り当てられたリースとサービスのサービス通知を含むメッセージをクライアントに送る。一実施形態では、クライアントはサービス通知で指定された認証サービスを実行し、330で示されているように、認証証明書を取得する。認証サービスの詳細については、「認証とセキュリティ」の項を参照のこと。次に、332で示されているように、クライアントはサービスのためにゲートを構築する(たとえば、認証証明書と通知からのXMLスキーマおよびサービスURIを使用する)。「ゲート」の項を参照のこと。クライアントとスペース・サービスとの上述の通信は、分散コンピューティング環境のXMLメッセージングを使用して実行される。その後、クライアントは、構築されたゲートとXMLメッセージングを使用してサービスを実行する。サービスは、同様に、XMLメッセージによるクライアントとの通信用にサービス・ゲートを構築する。
【0238】
まとめとして、スペースの使用例を以下で説明する。クライアントは、スペース・サービスにアクセス(たとえば、接続)することができる。(サービスは、スペースにアクセスするかまたはその他の方法でスペースを使用するためにクライアントとして機能する。)スペース・サービスは、1つまたは複数のサービス通知および/またはその他のコンテンツス・ペース内に格納し、サービス通知のそれぞれが、対応するサービスにアクセスし、実行するために使用できる情報含む。スペース・サービスは、スペース・サービスの機能を呼び出すために使用できる1つまたは複数のメッセージを指定するスキーマを備えることができる。たとえば、スキーマはスペースから通知を読み込み、スペース内で通知をパブリッシュするメソッドを指定できる。スキーマおよびサービス通知は、拡張可能マークアップ言語(XML)などのオブジェクトを表現言語で表すことができる。スペース・サービスにアクセスする場合、クライアントはXMLメッセージ(スキーマで指定されている)などの情報をインターネット・アドレスにあるスペース・サービスに送る。スペース・サービスにアクセスする際に、クライアントはスペースに格納されている1つまたは複数のをサービス通知をサーチする。クライアントは、スペースからサービス通知の1つを選択できる。一実施形態では、クライアントは、スペースから目的のサービス通知を選択した後インスタンス化要求をスペースに送る。目的のサービスに対するリースを取得し、リースおよびスペース・サービスによって、選択されたサービス通知をクライアントに送る。その後、クライアントは目的のサービスに対するアクセスのためのゲートを構築する。目的のサービスをクライアントのために実行できる。
【0239】
スペース・サービスによって提供される機能としてはほかに、空のスペースの生成または作成の機能がある。このスペース機能を使用する際に、クライアント(他のクライアントへのサービスであってもよい)は新しいスペースを動的に作成することができる。一実施形態では、このスペース機能は、生成元のスペースと同じ機能(同じXMLスキーマまたは拡張スキーマ)を持つ空のスペースを生成するインターフェースを備えることができる。この機能は、結果に対しスペースを(たとえば、動的に)生成する場合に使用できる。たとえば、クライアントは、サービスで結果を生成されたスペースに置くかまたは結果を生成されたスペースで通知するよう要求するスペースを生成することができる。クライアントは、生成されたスペースのURIおよび/または認証証明書をサービスに渡す。または、サービスは、結果に対しスペースを生成し、生成されたスペースのURIおよび/または認証証明書をクライアントに渡す。いくつかの実施形態では、スペースがいったん生成されると、他のスペースと同様に、ここで説明したスペースを発見メカニズムのうち1つまたは複数を使用して発見することができる。
【0240】
他のスペース内のインターフェースを介してスペースを作成するメカニズム(たとえば、スペース生成機能)を使用して、新しいスペースを効率よく作成することができる。たとえば、一実施形態では、格納用の元のスペースで使用しているのと同じ機能を使用して、生成されたスペース用の記憶域を割り当てることができる。また、生成されたスペースは共通サービス機能を元の(または親の)スペースと共有することができる。たとえば、新しいURIを新しいスペースに割り当てることができる。一実施形態では、新しいURIは元のスペースと共有される共通スペース機能へのリダイレクションとすることができる。したがって、新しく生成されたスペースは元のスペースと同じサービス・コードまたはその一部を使用することができる。
【0241】
スペース機能はさらに、たとえば、スペースのさまざまなセキュリティ・ポリシーおよびその他の管理機能を更新するためのセキュリティ管理機能を備える。たとえば、通知の個数および経過時間を、ルート・スペース・サービスにより制御し監視することができる。旧い通知を収集して処分することができる。たとえば、通知を旧いとみなすことができる場合については「リース」の項を参照のこと。スペースを実装するサービスは管理者の制御の下にある。管理者は、サービスに依存する形でポリシーを設定することができる。スペースで機能はさらに、空のスペースを削除する機能を備える。
【0242】
いくつかのスペースでは、モバイル・クライアントなどのある種のクライアントの拡散をさらにサポートする機能またはサービスを備えることができる。たとえば、モバイル・クライアントが発見プロトコルなどにより発見できるスペース内のサービスは、モバイル・クライアントに対し次のようにサポートする
・ クライアントに対し一時的ネットワーク・アドレスを割り当て管理する。
・ クライアントに対しメッセージ通信をプロキシに通す。
・ 追加スペースに対しサーチ機能を用意する。たとえば、サービスにより、クライアントは単純なインターフェースを介してキーワードを指定することができる。その後サービスは、ここで詳述しているように、Webサーチ・エンジンでそのキーワードを使用して、Web上でスペースをサーチする。他の実施形態では、サーチ・サービスは、クライアントを分散コンピューティング環境内でごく少数のサポートされているスペースをサーチすることに制約する。
【0243】
前に述べたように(図9および付属の文章を参照)、スペースはクライアントによって実行されるサービスからの結果を格納する便利なメカニズムを提供する。結果にスペースを使用する際に、小型クライアントはサービスを実行した結果をバラバラにして受け取ることができる。いくつかのサービスでは、大量の結果が生成されることがある。スペースを使用してサービスからな結果を格納することにより、一度に全部の結果を受け取るだけのリソースがないクライアントでもそのサービスを使用することができる。さらに、スペースを使用して結果を格納することにより、大量の結果が返されるときに高速な使用中サーバ上で実行されているサービスを低速なクライアントとの直接的な対話操作から解放することができる。したがって、サービスをすぐに解放することができ、他のクライアントで使用できる。
【0244】
スペースは、異なるクライアントにより、かつ/または異なるときに、結果にアクセスするための便利なメカニズムを備える。たとえば、クライアントは結果をまるごとは使用できない場合があるが、ユーザはその結果にアクセスできる他のクライアントを後で使用してその結果の残り部分にアクセスすることを望む。たとえば、結果には、株式市況や、現在の株価の表示(PDAからアクセス可能)、および株価チャートの表示(後でラップトップからアクセス可能)などがある。また、結果に対し分散コンピューティング環境でスペースを使用すると、クライアントは一方のサービスの結果を他方のサービスに供給することができ、しかも、結果を最初にダウンロードする必要がない。たとえば、上の株式市況の場合、PDAはチャートを他のサービスに送り、そこでチャートを印刷することができ、PDAでチャート自体をダウンロードする必要はない。したがって、結果スペースは、クライアントが結果を処理または受け取らずに、他のクライアントまたはサービスに渡すためのメカニズムを提供する。
【0245】
異なる実施形態では、結果に対しスペースを使用する決定は、サービスによって命じられるか、クライアントによって命じられるか、および/またはクライアントによって要求される。サービスは、たとえば、その通知で、結果に対しスペースを使用することを提案することがある。一実施形態では、クライアントまたはサービスのいずれかが結果に対する新しいスペースを生成するか、または結果に対し既存のスペースを使用することができる。スペースの生成に関する説明を参照のこと。
【0246】
一実施形態では、結果に対しスペースを使用しても、必ずしも、サービスがすべての結果をそのスペースに入れる必要があるわけではない。サービスが生成する結果に対し代替えもありうる。たとえば、結果の一部または全部をメッセージによりインラインでクライアントに送ることができる。それとは別に、結果をスペースに入れ、その後、通知メッセージをクライアントに送り、結果を参照するようにできる(たとえば、結果へのURIや結果の通知へのURIを含める)。他のオプションとして、結果をスペースに入れ、スペースからのイベントにより通知を送る方法もある。たとえば、クライアントおよびサービスは何らかの特定の名前で結果を呼び出し、クライアントはそのように名前を付けられた結果をスペースに追加するときにイベントを受け取るため(上記のものなどのスペース機能を使用して)スペースに登録することができる。イベント通知に関する上の説明を参照のこと。
【0247】
したがって、サービスが結果をクライアントに返すいくつかの異なるメカニズムを分散コンピューティング環境内で使用することができる。実際の結果をXMLメッセージ内の値でクライアントに返すか、または結果をスペースに置かれている実際の値(または、実際の結果に対する通知)による参照でクライアントに返され、クライアントはスペース内の結果を参照しているメッセージを受け取る。さらに、結果または結果通知をスペース内に置き、イベントでクライアントに通知できる。
【0248】
結果を処理する他のメカニズムでは、クライアントが供給する結果に対し他のサービスを指定する。たとえば、クライアントは、結果を出力するサービスを実行する場合、そのサービスに(たとえば、XMLメッセージングを介して)、結果を他のサービスに送ってさらに処理するよう指示することができる。これには、他のサービスを実行して結果を渡すために、クライアントが他のサービスに通知のURIを指示し、結果出力サービスが他のサービスへのゲートを生成するようにする必要がある。この例では、結果出力サービスは他のサービスのクライアントでよい。いくつかの実施形態では、クライアントはスキーマまたは事前構築されたゲートを結果出力サービスに送り、サービスにアクセスしてさらに処理する。さらに処理するサービスの例として、元のクライアントの結果を表示することができる表示サービスがある。この表示サービスは、クライアントと同じデバイスにあるか、またはそのようなデバイスと関連付けられる。
【0249】
図41は、1実施形態による分散コンピューティング環境での新しいスペースの作成を示す流れ図である。1900に示されているように、クライアントは、第1スペース・サービスにアクセス(すなわち接続)することができる(サービスは、スペースへのアクセスまたは他の使用のためにクライアントとして働くことができる)。第1スペース・サービスは、1つまたは複数のサービス通知および/または他のコンテンツを第1スペースに格納することができ、サービス通知のそれぞれに、対応するサービスへのアクセスおよび実行に使用可能な情報を含めることができる。第1スペース・サービスに、第1スペース・サービスの関数を呼び出すのに使用可能な1つまたは複数のメッセージを指定する第1スキーマを含めることができる。たとえば、第1スキーマによって、第1スペースから通知を読み取るメソッド、および第1スペースで通知をパブリッシュするメソッドを指定することができる。第1スキーマおよびサービス通知は、拡張マークアップ言語(XML)などのオブジェクト表現言語で表現することができる。第1スペース・サービスにアクセスする際に、クライアントは、XMLメッセージなどの情報(第1スキーマで指定される)を、第1インターネット・アドレス(たとえばURI)にある第1スペース・サービスに送ることができる。第1スペース・サービスにアクセスする際に、クライアントが、第1スペースに格納された1つまたは複数のサービス通知をサーチすることができる。
【0250】
1実施形態では、スペースに、新しいスペースを作成する機能を含めることができる。1902に示されているように、クライアントが第1スペースのインターフェースに適当な要求を送ることによるなど、第2スペースの作成を要求することができる。1実施形態では、要求を、第1スペースの第1スキーマに従うXMLメッセージとしてフォーマットすることができる。1904に示されているように、それに応答して、第2スペースを有する第2スペース・サービスを、第2インターネット・アドレス(たとえばURI)などで、作成することができる。上と同様に、第2スペース・サービスに、第2スペース・サービスの関数を呼び出すのに使用可能な1つまたは複数のメッセージを指定する第2スキーマを含めることができる。第2スキーマに少なくとも第1スキーマを含めることができ、第2スキーマに追加の機能性も含めることができる。1実施形態では、第2スペースのスキーマに第1スキーマの一部を含めることができ、あるいは、第2スキーマを第2スペースの作成の時点で指定することができる。1906に示されているように、クライアントは、第2スキーマで指定されるメッセージの少なくとも1つを第2スペースに送ることによって、第2スペースにアクセスすることができる。
【0251】
スペースの作成に、セキュリティに関するものなどの管理初期化を含めることができる。1実施形態では、要求する側がスペースを作成した時に、当初は、要求する側だけが、作成されたスペースへのアクセスを許可される。そのような作成されたスペースへのアクセスの制限は、クライアントおよびサービスがその作成されたスペースを使用して結果を格納する時に有用になるであろう。作成されたスペースの認証およびセキュリティに関する情報については、「認証およびセキュリティ」の節を参照されたい。クライアントは、新しいスペースを作成した後に、作成されたスペースにアクセスするゲートを構築することができる。
【0252】
したがって、さまざまな実施形態で、結果を、複数の方法で、たとえば、メッセージ内で、スペース内で、クライアントがイベントを介して通報されるスペース内で、メッセージ内で返される通知を使用して、スペース内で返される通知を使用して、およびクライアントがイベントを介して通報されるスペース内で返される通知を使用して、クライアントに返すことができる。結果を返すこのさまざまな方法を、図44aから44gに示す。この複数の方法の使用可能性によって、異なる機能を有するクライアントに関するものなどのさまざまな情況に関する分散コンピューティング環境の柔軟性および適応性を強化することができる。追加の柔軟性について、図45に示されているように、結果を、別のサービスに効率的に渡すこともできる。
【0253】
図44aは、1実施形態による分散コンピューティング環境での、サービスの結果をスペースに格納する方法を示す流れ図である。2050に示されているように、クライアントは、第1メッセージをサービスに送って、サービスの1つまたは複数の関数の呼出しを要求することができる。サービスのスキーマによって、第1メッセージを含む、サービスの関数を呼び出すのに使用可能な、複数のメッセージを指定することができる。メッセージおよびスキーマは、XMLなどの、プラットフォーム独立および/またはプログラミング言語独立のデータ表現言語で表現することができる。
【0254】
2052に示されているように、第1メッセージに応答して、サービスの1つまたは複数の関数を呼び出すことができる。2054に示されているように、サービスが、結果のセットを生成することができる。結果は、データ表現言語(たとえばXML)で表現することができる。2056に示されているように、サービスは、結果のセットをスペース内のロケーションに格納することができ、このスペースには、ネットワーク・アドレッシング可能なストレージ位置が含まれる。1実施形態では、結果のセットの格納の準備としてスペースを作成することができる。
【0255】
2058に示されているように、クライアントは、スペースから結果のセットにアクセスし、読み取ることができる。1実施形態では、第2のクライアント(すなわち、関数を呼び出すメッセージを送ったクライアントと異なるクライアント)が、スペースから結果のセットを読み取ることができる。この形で、第1のクライアントが結果の読取および表示などの作業を達成するのに十分なリソースを有しない可能性がある時に、ユーザが、第2のクライアントを使用して結果を読み取り、表示することができる。1実施形態では、クライアントが、サービスが結果のセットのアドレスを第2サービスに渡すことを要求するメッセージをサービスに送ることができ、その結果、第2サービスが、スペース内のアドレスから結果のセットを読み取ることができるようになる。第2メッセージに、第2サービスの通知のUniform Resource Identifier(URI)を含めることができ、この第2サービスの通知には、第2サービスにアクセスするのに使用可能な情報が含まれる。この形で、結果を、クライアントに渡さずに、第1サービスから第2サービスに効率的に渡すことができる。
【0256】
図44bは、1実施形態による、サービスの結果をスペース内に格納し、イベントを使用してクライアントに通報する方法を示す流れ図である。2050に示されているように、クライアントが、第1メッセージをサービスに送って、サービスの1つまたは複数の関数の呼出しを要求することができる。2052に示されているように、第1メッセージに応答して、サービスの1つまたは複数の関数を呼び出すことができる。2054に示されているように、サービスが、結果のセットを生成することができる。結果は、データ表現言語(たとえばXML)で表現することができる。2056に示されているように、サービスは、結果のセットをスペース内のロケーションに格納することができ、スペースに、ネットワーク・アドレッシング可能なストレージ位置が含まれる。2057に示されているように、イベントを生成し、クライアントに送って、結果がスペース内に格納されていることをクライアントに通報することができる。2058に示されているように、クライアントは、イベントに応答して、スペースから結果のセットにアクセスし、読み取ることができる。
【0257】
図44cは、1実施形態による、サービスの結果をメッセージ内でクライアントに送る方法を示す流れ図である。2050に示されているように、クライアントは、第1メッセージをサービスに送って、サービスの1つまたは複数の関数の呼出しを要求することができる。2052に示されているように、第1メッセージに応答して、サービスの1つまたは複数の機能を呼び出すことができる。2054に示されているように、サービスが、結果のセットを生成することができる。結果は、データ表現言語(たとえばXML)で表現することができる。2055に示されているように、サービスは、結果を含むメッセージをクライアントに送ることができる。メッセージは、データ表現言語(たとえばXML)で表現することができ、1実施形態では、サービスのスキーマで指定することができる。
【0258】
図44dは、1実施形態による、通知を使用してサービスの結果を返す方法を示す流れ図である。2050に示されているように、クライアントが、第1メッセージをサービスに送って、サービスの1つまたは複数の関数の呼出しを要求することができる。2052に示されているように、第1メッセージに応答して、サービスの1つまたは複数の機能を呼び出すことができる。2054に示されているように、サービスが、結果のセットを生成することができる。結果は、データ表現言語(たとえばXML)で表現することができる。1実施形態では、サービスが、結果のセットをスペース内のロケーションに格納することができ、このスペースには、ネットワーク・アドレッシング可能なストレージ位置が含まれる。2060に示されているように、サービスが、結果に関する通知を生成することができる。通知には、スペースからなど、結果にアクセスし読み取るのに使用可能な情報を含めることができる。たとえば、通知に、結果にアクセスできる場所のUniform Resource Identifier(URI)を含めることができる。1実施形態では、通知に、結果のフォーマットを指定するスキーマ(たとえばXMLスキーマ)を含めることができる。1実施形態では、通知を、XMLなどのデータ表現言語で表現することができる。2068に示されているように、クライアントは、通知を使用することによって、結果のセットにアクセスし、読み取ることができる。1実施形態では、第2のクライアント(すなわち、関数を呼び出すメッセージを送ったクライアントと異なるクライアント)が、通知を使用することによって結果のセットを読み取ることができる。
【0259】
図44eは、1実施形態による、メッセージ内でクライアントに送られる通知を使用してサービスの結果を返す方法を示す流れ図である。2050に示されているように、クライアントが、第1メッセージをサービスに送って、サービスの1つまたは複数の関数の呼出しを要求することができる。2052に示されているように、第1メッセージに応答して、サービスの1つまたは複数の機能を呼び出すことができる。2054に示されているように、サービスが、結果のセットを生成することができる。結果は、データ表現言語(たとえばXML)で表現することができる。1実施形態では、サービスが、結果のセットをスペース内のロケーションに格納することができ、このスペースには、ネットワーク・アドレッシング可能なストレージ位置が含まれる。2060に示されているように、サービスが、結果に関する通知を生成することができる。通知には、スペースからなど、結果にアクセスし読み取るのに使用可能な情報を含めることができる。たとえば、通知に、結果にアクセスできる場所のUniform Resource Identifier(URI)を含めることができる。1実施形態では、通知に、結果のフォーマットを指定するスキーマ(たとえばXMLスキーマ)を含めることができる。1実施形態では、通知を、XMLなどのデータ表現言語で表現することができる。2061に示されているように、サービスが、通知を含むメッセージをクライアントに送ることができる。メッセージは、データ表現言語(たとえばXML)で表現することができ、1実施形態では、サービスのスキーマで指定することができる。2068に示されているように、クライアントは、通知を使用することによって、結果のセットにアクセスし、読み取ることができる。
【0260】
図44fは、1実施形態による、スペースに格納された通知を使用してサービスの結果を返す方法を示す流れ図である。2050に示されているように、クライアントが、第1メッセージをサービスに送って、サービスの1つまたは複数の関数の呼出しを要求することができる。2052に示されているように、第1メッセージに応答して、サービスの1つまたは複数の機能を呼び出すことができる。2054に示されているように、サービスが、結果のセットを生成することができる。結果は、データ表現言語(たとえばXML)で表現することができる。1実施形態では、サービスが、結果のセットをスペース内のロケーションに格納することができ、このスペースには、ネットワーク・アドレッシング可能なストレージ位置が含まれる。2056に示されているように、サービスは、結果のセットをスペース内のロケーションに格納することができ、スペースに、ネットワーク・アドレッシング可能なストレージ位置が含まれる。2060に示されているように、サービスが、結果に関する通知を生成することができる。通知には、スペースからなど、結果にアクセスし読み取るのに使用可能な情報を含めることができる。たとえば、通知に、結果にアクセスできる場所のUniform Resource Identifier(URI)を含めることができる。1実施形態では、通知に、結果のフォーマットを指定するスキーマ(たとえばXMLスキーマ)を含めることができる。1実施形態では、通知を、XMLなどのデータ表現言語で表現することができる。2062に示されているように、通知を、スペースに格納することができる。スペースは、2056で結果が格納されたスペースと同一のまたは異なるスペースとすることができる。2066に示されているように、クライアントは、スペースから通知を読み取ることができる。1実施形態では、第2のクライアント(すなわち、関数を呼び出すメッセージを送ったクライアントと異なるクライアント)が、スペースから通知を読み取ることができる。2068に示されているように、クライアントは、通知を使用することによって、結果のセットにアクセスし、読み取ることができる。
【0261】
図44gは、1実施形態による、スペースに格納された通知と、イベントを使用することによるクライアントへの通報とを使用してサービスの結果を返す方法を示す流れ図である。2050に示されているように、クライアントが、第1メッセージをサービスに送って、サービスの1つまたは複数の関数の呼出しを要求することができる。2052に示されているように、第1メッセージに応答して、サービスの1つまたは複数の機能を呼び出すことができる。2054に示されているように、サービスが、結果のセットを生成することができる。結果は、データ表現言語(たとえばXML)で表現することができる。1実施形態では、サービスが、結果のセットをスペース内のロケーションに格納することができ、このスペースには、ネットワーク・アドレッシング可能なストレージ位置が含まれる。2056に示されているように、サービスは、結果のセットをスペース内のロケーションに格納することができ、スペースに、ネットワーク・アドレッシング可能なストレージ位置が含まれる。2060に示されているように、サービスが、結果に関する通知を生成することができる。通知には、スペースからなど、結果にアクセスし読み取るのに使用可能な情報を含めることができる。たとえば、通知に、結果にアクセスできる場所のUniform Resource Identifier(URI)を含めることができる。1実施形態では、通知に、結果のフォーマットを指定するスキーマ(たとえばXMLスキーマ)を含めることができる。1実施形態では、通知を、XMLなどのデータ表現言語で表現することができる。2062に示されているように、通知を、スペースに格納することができる。スペースは、2056で結果が格納されたスペースと同一のまたは異なるスペースとすることができる。2064に示されているように、イベントを生成し、クライアントに送って、結果に関する通知がスペースに格納されていることをクライアントに通報することができる。2066に示されているように、クライアントは、スペースから通知を読み取ることができる。2068に示されているように、クライアントは、通知を使用することによって、スペースから結果のセットにアクセスし、読み取ることができる。
【0262】
図45は、1実施形態による、分散コンピューティング環境での、あるサービスの結果を別のサービスに送る方法を示す流れ図である。2070に示されているように、クライアントが、第1メッセージを第1サービスに送って、サービスの1つまたは複数の関数の呼出しを要求し、関数の結果を第2サービスに渡すことを要求することができる。第1サービスのスキーマによって、第1メッセージを含む、第1サービスの関数を呼び出すのに使用可能な複数のメッセージを指定することができる。メッセージおよびスキーマは、XMLなどのプラットフォーム独立のデータ表現言語で表現することができる。1実施形態では、第1メッセージに、第2サービスの通知のUniform Resource Identifier(URI)を含めることができ、第2サービスの通知には、第2サービスへのアクセスに使用可能な情報が含まれる。
【0263】
2072に示されているように、第1メッセージに応答して、第1サービスの関数を呼び出すことができる。2074に示されているように、第1サービスが、結果のセットを生成することができる。結果は、データ表現言語(たとえばXML)で表現することができる。2076に示されているように、第1サービスは、結果をクライアントに直接に送らずに、メッセージ内で結果を第2サービスに送ることができる。この形で、結果を、クライアントに渡さずに、第1サービスから第2サービスに効率的に渡すことができる。
【0264】
結果スペースおよびメソッド・ゲートにより、分散コンピューティング環境では、メモリが最低限しかなく、帯域幅の非常に狭い、シン・クライアントにとって実用的な単純なリモート・メソッド呼び出しを提供することができるが、それは、従来のリモート・メソッドを呼び出し手法のように巨大なプログラム・オブジェクトが(必要なクラスとともに)ネットワーク上で(必ず)クライアントに返される困った副作用がないからである。その代わり、結果は、結果スペースに返すことができ、必要な場合のみ(そして、クライアントに常駐できる場合)、クライアントにダウンロードされる実際のオブジェクトである。
【0265】
分散コンピューティング環境がリモート・メソッドを呼び出すため備えているメカニズムは以下のとおりである(「ゲート」の項のメソッド・ゲートの説明も参照のこと)。スペース内でオブジェクトを通知することができる(たとえば、サービスとして、またはサービスの一部として)。通知は、オブジェクトのURI(たとえば、URL)をセキュリティ証明書およびXMLスキーマなどの他のアクセス・パラメータとともに含む参照を含む。クライアントは、オブジェクトに対しクライアント・メソッド・ゲートを設定しているか、または構築し、これは、オブジェクト(またはサービス)自体のすべてのメソッドについて、メソッド・パラメータを取り、要求XMLメッセージを作成してオブジェクトのメソッドを呼び出すラッパー・メソッドを備える。XMLメッセージは、サービス・オブジェクト上で実際のメソッドを呼び出すサービス・ゲートに送られる。そのメソッドが結果オブジェクトを返すと、サービス・ゲートは結果オブジェクトを結果スペース内にポストし、メッセージを結果オブジェクトへの参照とともにクライアントに返す。
【0266】
したがって、クライアントがリモートメソッドを呼び出すためには、クライアントはまず、上述のように、オブジェクト(たとえば、サービス)をインスタンス化するメッセージを送る。一実施形態では、オブジェクトのインスタンス化を行うには、結果スペースを作成するかまたは生成する。他の実施形態では、結果スペースの作成は、オブジェクトのインスタンス化とは別である。インスタンス化により、オブジェクトURIがクライアントに返され、クライアントとサービス・ゲートは、クライアントはインスタンス化を要求したときに動的に作成される。いくつかの実施形態では、結果スペースはすでに存在しており、オブジェクト(サービス)によって通知される。これらのゲートの一部または全部も事前に構築されるかまたは再利用されている。
【0267】
クライアントがオブジェクトをインスタンス化した後、適切なクライアント・メソッド・ゲートをローカルで呼び出すと、上述のように、実際のリモート・オブジェクトへのリモート・コールが影響を受ける。分散コンピューティング環境のリモート・メソッド呼び出しの方式は再帰的であり、クライアント・ゲートが呼び出されると、オブジェクト自体ではなく、オブジェクト参照がクライアントに返される。このような返されたオブジェクトはすでにインスタンス化されていることに注意されたい。いくつかの実施形態では、クライアント側は、リモートで呼び出すだけでなく、オブジェクト自体を丸ごとダウンロードする決定を下す。
【0268】
上述のように呼び出されたメソッドまたはサービスは、結果ドキュメントと関連付けられている子ゲートを生成する。メソッドは、参照自体ではなく、参照の子ゲート(またはクライアントが子ゲートを構築するためのスキーマ、URIおよび証明書)を返す。その後、クライアントは、子ゲートを通じて参照にアクセスすることができる。子ゲートは、メソッド・ゲートでもよい。
【0269】
上述のように、分散コンピューティング環境で提供されるこのリモート・メソッド呼び出しにより、実際の結果オブジェクトを、サービス結果スペース内に格納できる(これは、たとえば、サーブレットにより動的に作成できる)。結果スペースは一時的である。結果スペースは、クエリ結果キャッシュとして機能することができる。古い結果領域をクリーンアップするサーバ・ソフトウェア(ガベージ・コレクタ)が結果キャッシュ内を巡回する。分散ガベージ・コレクションを採用するが、それは、クライアントがスペースを必要としなくなったことを示すか、またはサーバの管理者が適切な制限値を設定することにより、破棄されるまで結果スペースが満たされるからである。
【0270】
図23に戻ると、デフォルトのスペース350の図が示されている。分散コンピューティング環境は、少なくとも1つのデフォルト・スペースを用意し、クライアントは通知の初期セットを見つけられるようにする。デバイスは、事前構築されたゲートを組み込んだ、ローカルに存在するデフォルト・スペースを備えることができる。そのデフォルト・スペースで通知されたサービスは、ローカルでそのデバイスに存在し、デバイスが分散コンピューティング環境に参加するのを有効にするかまたは容易にするシステム・ソフトウェアを備える。
【0271】
デフォルト・スペース350は、図23に示されているように、外部スペースを特定する1つまたは複数のメカニズム352を備える。デフォルト・スペース内の1つのサービスが、上述のスペース発見プロトコルを実行して外部スペースを見つけることができる。また、デフォルト・スペース内で外部スペースを通知することができる。さらに、外部スペースを決定するまたは見つけるデフォルト・スペース内でサービス(たとえば、サーチ・エンジンまたはサーチ・エンジンへのプロキシ・サーバ)を通知する。各スペースは、ファイル・システムのマウント・ポイントに似ている。したがって、分散コンピューティング環境はサービスに対しサーチ可能な動的マウント・ポイントを提供できる。デフォルト・スペースは、分散コンピューティング環境へのクライアントの初期マウント・ポイントである。
【0272】
デフォルト・スペースまたはデフォルト・スペースへのアクセス機能をデバイスに組み込むことができる。デバイスに存在するデフォルト・スペースおよびローカル・サービスを通じて、分散コンピューティング環境にクライアント実行環境を用意できる。デバイスのローカル・サービスおよびデフォルト・スペース・サービスは、事前構築ゲートを組み込んでいる。デフォルト・スペース内にリストされている組み込みサービスの1つは発見プロトコルを実行するサービスであり、クライアントは追加(たとえば、外部)スペースを特定することができる。デフォルト・スペースは、クライアント・ユーザがスペースを参照し、サービスを選択し、インスタンス化するために使用するクライアント用の実行環境を提供する組み込みサービスを備える。このようなサービスは、クライアントがストリング全体(たとえば、スペースサーチのためのキーワード)を操作する、結果参照(たとえば、スペースのリスティング、またはスペース内のサービス・リスティング)を表示または参照する、アイテム(たとえば、サービスを選択してインスタンス化するため)を選択するなどのための単純なユーザ・インターフェースを備える。
【0273】
主にサービスを提供するデバイスは、さらに、デフォルト・スペースも備え、サービスでさまざまなスペース内での自己通知を管理できるようにする組み込みサービスをデフォルト・スペースに備えることができる。たとえば、プリンタなどのデバイスは、ローカル・エリア・ネットワーク上でスペースを(たぶん、発見プロトコルを利用して)見つけ、プリンタ・サービスの通知をそのスペースに追加する組み込みデフォルト・サービスを備える。このサービスはさらに、たとえば、リースを更新したり、プリンタのXMLスキーマを更新するなどして、LANスペース内のプリンタ・サービス通知を維持することもできる。
【0274】
サービスを提供するいくつかのデバイスでは、サービスを通知し、その通知を維持するのにスペースを見つけるオーバーヘッドは望ましくない。一実施形態では、サービス通知をパブリッシュするために1つまたは複数のスペースをサーチし維持するのではなく、いくつかのデバイスのサービスが接続要求に対する応答としてそれらの通知を送る。たとえば、プリンタ・サービスを近接性ベースで利用できるプリンタ・デバイスは、スペース内で通知を維持しない(デバイスで、またはデバイスの外部で)。その代わり、他のデバイスがプリンタ・デバイスとの接続を確立すると(たとえば、クライアントを実行しているラップトップを所有するユーザがドキュメントを印刷しようとする)、プリンタ・サービスはサービス通知を送り、プリンタ・デバイスで印刷機能を提供するサービスに接続し、そのサービスを実行するXMLサービス・スキーマを提供することができる。さらに、いくつかのデバイスではある近傍またはローカル・ネットワークでサービスに対する通知を維持するのみである。このようなデバイスでは、広範にアクセス性に関してトランスポートへのアクセスをサポートすることを望まない、またはアクセスできない場合がある。
【0275】
デバイスがスペース内でサービス通知を避けるまたは制限することが望ましいサービス・デバイスの一例として、機能を近接性ベースで利用できるデバイスがある。近接性ベース・サービスは、要求があった場合に機能の通知を行うことができる。これらの通知は、広くアクセスできない場合がある。たとえば、近接性ベース・サービスは無線通信システムで提供できる。「無線」という用語は、電磁波または音波が電線ではなく大気中を通して信号を伝送する通信、監視、または制御システムを意味する。ほとんどの無線システムでは、無線周波(RF)または赤外線(IR)の波長を使用する。通常、近接ベースの無線システムでは、トランシーバを備えるデバイスは通信チャネルを確立し維持するために他のデバイスから到達範囲内(近接)になければならない。デバイスは、他のデバイスを無線ローカル・エリア・ネットワーク(LAN)に接続するためのハブとすることもできる。
【0276】
前述のように、分散コンピューティング環境の実施形態では、クライアントがサービスとランデブーするためのルックアップ・スペースを使用するメカニズムを提供する。近接コンピューティング環境では、分散コンピューティング環境の一実施形態は、クライアントがランデブー・ポイントとしてルックアップ・スペースを使用せずにサービスを発見するために使用するサービス発見メカニズムを提供する。近接コンピューティング環境の一例として、IrDAポイントツーポイント通信環境がある。近接コンピューティング環境では、近接メカニズムがクライアントに対するサービスの「物理的」位置を見つけることができる。たとえば、IrDA環境では、クライアント・デバイスは、クライアントが使用することを望んでいるサービスを含むデバイスを物理的に指している。
【0277】
近接サービス発見メカニズムを使用すると、クライアントは、サービス通知を求めるためにサーチ要求をルックアップ・スペースに送るのではなく、直接サービス通知を求めることができる。クライアント・デバイスはサービス・デバイスへの近接接続を確立しているため、クライアントは目的のサービスを直接要求できる。たとえば、PDAクライアント・デバイスはプリンタ・デバイスとの近接接続を確立している場合があり、クライアントはプリンタ・デバイスのプリンタをサービス接続を要求することを「知っている」。
【0278】
一実施形態では、クライアントは、近接サービス発見メッセージをサービス・デバイスに送ることができる。メッセージには、クライアント・デバイスが近接接続を行う相手であるサービス・デバイスの目的のサービスを指定する情報を含む。一実施形態では、サービス・デバイスのサービスは近接サービス発見メッセージに応答し、クライアントに、目的のサービスに接続するためにクライアントが使用するサービス通知を送る。近接サービス発見メッセージは、さらに、クライアントの認証を行い、サービスでクライアントの能力を確定するために使用される情報を含む。受け取ったサービス通知を使用する際に、クライアントは、目的のサービスとの通信を確立するためのゲートを確立することができる。しかしながら、広くアクセス可能なスペースで通知を維持することを望まない、または維持できないサービスに対し通知をパブリッシュすることが望ましい。分散コンピューティング環境の一実施形態では、近接ベース・デバイスなどのサービス通知をパブリッシュしないデバイスとの接続を確立するデバイスは、非パブリッシュ・デバイスから受け取ったサービス通知をパブリッシュすることができる。たとえば、近接ベース・デバイスとの接続を確立し、代替えトランスポート接続を設定するデバイスは、代替えトランスポート環境で近接ベース・デバイスから受け取ったサービス通知をパブリッシュ(または再パブリッシュ)し、近接ベース・デバイス・サービスをデバイスの通常の近接範囲の外にある他のデバイスにより((再)パブリッシュされたサービス通知を通じて)使用できるようにする。
【0279】
パブリッシュ・デバイスが、発見および/またはルックアップ・サービスを通じて近接ベース・デバイスのローカルでパブリッシュされたサービスを通知を特定するか、またはそれとは別に、サービス通知をローカル・サービス・デバイスがパブリッシュしないが、その代わりに、そのサービス通知を、上述のように、接続の確立後、ローカル・デバイスがパブリッシュ・デバイスに送る。一実施形態では、通知を維持するデバイスがローカル・デバイスに接続されているか、接続することが可能である限り、再パブリッシュされたサービス通知は使用可能にできる。たとえば、パブリッシュ・デバイスがローカル・デバイスから切断された場合(たとえば、デバイスの近接範囲から外へ移動する)、サービス通知はステールになるか、または削除される。通知が格納されているスペースがリース更新メッセージをパブリッシュ・デバイスに送ることができるようにするリース・メカニズムを実現できる。パブリッシュ・デバイスは、ローカル・デバイスとの接続を確認し、これによりローカル・デバイスが利用できなくなったときにそのことをスペースが検出できるようにする。ローカルの近傍(たとえば、近接領域)またはローカル・ネットワークに対し、ローカル・デバイスまたは管理ポリシーにより、サービス通知を再パブリッシュする規則を定める。図24は、一実施形態により、近傍ベースのデバイスから提供されるサービスをデバイスの近傍の範囲外にあるデバイスでアクセスできるようにする近傍ベースのデバイスを他のトランスポート・メカニズムにブリッジするデバイスの一例を示す図である。パブリッシュ・デバイス1404は、Ethernet LANまたはインターネットなどのネットワーク1412に接続され、近接デバイス1400および1404との近接接続1414を確立して維持する。近接接続は、たとえば、無線接続または有線LAN接続とすることができる。近接デバイス1400および1402は、それぞれ、接続後サービス通知をパブリッシュ・デバイス1404に送るか、または、それとは別に、パブリッシュ・デバイスが近接接続に発見および/またはルックアップ・サービスを使用してサービス通知を特定する。パブリッシュ・デバイス1404は、スペース1406内のサービス通知1416および1418を再パブリッシュすることにより、近接デバイスによって提供されるサービスをネットワーク1412上の他のデバイス1408および1410から利用できるようにする。スペース1406は、パブリッシュ・デバイスまたはLANに接続された他のデバイス(デバイス1408および1410を含む)上に格納できる。
【0280】
デバイス1408および1410を含むLAN上の他のデバイスは、スペース1406を発見し、再パブリッシュされたサービス通知1416および1418を近接ベース・デバイスについてルックアップし、前記のXMLメッセージ・パッシング方式を使用して近接ベース・デバイス1400および1402上でこれらのサービス(デバイス1404はプロキシまたブリッジとして機能する)とのデートの通信を確立し、近接デバイスとの間の要求の発送および結果の受取を行う。パブリッシュ・デバイス1404は、ネットワーク1412と近接ベース・デバイスへの近接接続1414との間のブリッジとして機能する。
【0281】
リース
リースは、分散コンピューティング環境で、部分的な障害、リソースの同期(スケジューリング)を処理し、秩序だったリソースのクリーンアップ・プロセスを実施するために使用される。リースを使用すると、分散システム全体で行き来する独立のクライアントおよびサービスを管理することができる。クライアントがサービス(スペース・サービスを含む)から取得するさまざまなリソースは、これらのサービスからリースすることができる。一般に、すべてのリソースをリースするできるわけでも、またリースする必要があるわけでもない。一実施形態では、どのリソースをリースする必要があるかの決定は、それぞれの特定のサービスの実装に任されている。特に、大量のクライアントが使用するリソースが同時に、リースを必要としない場合があったり、あるいはその代わりに、カスタム・リース・プロトコルを必要とする場合もある。このようなはリースのクラスは、サービス・プロバイダに任されている。たとえば、トランザクションを実装するものなどのカスタム・プロトコルは、基本リース方式に基づいて構築できる。一実施形態では、基本リース・モデルは相対的な時間ベースのモデルである。
【0282】
サービスは、リースをクライアントに発行し、リースに対し操作を実行する。一実施形態では、サービスのこのようなリース機能はすべてそのサービスのXMLスキーマの一部である。したがって、クライアントはそのゲート(サービスに対応し、サービスのXMLスキーマに対し構築される)を使用してリース操作を実行することができる。一実施形態では、リースを発行するサービスはすべて、(i)リースの更新(リースの指定されたパラメータ(たとえば、リースID、リース証明書)、要求された新しいリース時間)、および(ii)リースの取り消し(リースの指定されたパラメータ(たとえば、リースID、リース証明書)という2つのリース操作を行える(リースの所有者によってのみ使用可能)。一実施形態では、すべてのリースは交渉可能な特定の相対的時間(リースの持続時間)について認可される。リクエスタではある時間を指定し(たとえば、秒で)、グランタ(grantor)ではその時間が経過するまでの間リースを認可できる。一実施形態では、値を−1にすると、無期限のリースを指定することができる。
【0283】
一実施形態では、サービス通知に1つまたは複数のリース・アドレスを含めることができる。一実施形態では、リース・アドレスはURIとすることができる。サービス・リソース・リースを更新する、または取り消す標準リース・メッセージを、リースURIに送ることができる。リースURIの例:
【0284】
通知は、さらに上述のように、さまざまなリース・メッセージを含む。リース・メッセージは、サービスのリソースに対するリースを更新するメッセージおよびリースを取り消すメッセージを含むことができる。一実施形態では、通知にメッセージをXMLスキーマで含めることもできる。
【0285】
リース・メカニズムは、サービスおよびクライアントの障害を検出するメカニズムを備える。リースはさらに、共有および排他的リソース・アクセスを実現するメカニズムも備える。一実施形態では、すべてのサービス・リソースはリースがないか(リソースがリースされておらず、したがって使用できない)、共有リソースがあるか(リソースは複数のクライアントによりアクセスされる)、または排他的リースがあるか(リソースは一度に1つのクライアントだけによりアクセスされる)のいずれかである。一実施形態では、すべてのリソースはリースがない状態から始まる。リースがない状態は、現在基礎となるリソースにアクセスがないことを意味し、リソースのインタレストが存在していてリースに使用可能であることを示す。リース・レベルは、「なし」から「共有」へ、「なし」から「排他的」へ、または「共有」から「排他的」へ上げることができる。リース独立レベルも、「排他的」から「共有」へ、「排他的」から「なし」へ、または「共有」から「なし」へ下げることができる。一実施形態では、クライアントは自発的にリース独立レベルを上下させるか、またはサービスによりそのようにすることを要求することができる。サービスからの応答メッセージは、独立レベルの変更が受け入れられたかどうかを示す。
【0286】
要求−応答メッセージのペアを使用して、リースの請求、解放、および更新を行うことができる。予約されているXMLタグを使用して各メッセージにタグを付け、メッセージがリース・メッセージであることを示す。分散コンピューティング環境では、メッセージの完全な構成を必ずしも定義しない。このような実施形態では、メッセージがリース・メッセージとしてタグ付けされる限り、サービス開発者側でカスタム・メッセージ・コンテンツを付加することができる。
【0287】
一実施形態では、リースされたリソースを使用するクライアントは、(i)リソースを共有または排他的として請求する、(ii)リソース請求を解放する(要求された場合またはリソースで終了した場合)、および(iii)更新メッセージに応答する(同じまたは異なる独立レベルの他の請求により)のいずれかを行うことを期待される。更新メッセージは、サービスにより(たとえば、定期的間隔で)クライアントの障害を検出するために送られる。この間隔(更新メッセージが送られる)は、サービス固有である。一定時間経過後更新メッセージへの応答が発行されない場合(たとえば、サービス通知で知らされた時間に基づき)、リソース再利用プロセスがサービス内で開始し、そのリースを完全に破棄する。このような実施形態では、クライアントに送られる更新メッセージは、タイミングよく取り扱うべきである。図25は、クライアントとインスタンス化されたサービスとの間の更新メッセージ、およびサービス・プロバイダとスペース・サービスとの間の更新メッセージの使い方を示している。両方とも、クライアントとサービスとの間の更新メッセージの使用と考えることができるが、それは、サービス・プロバイダがスペースの通知サービスへのクライアントであるためであることに注意されたい。
【0288】
更新メッセージは、クライアントには取り扱いが不便な「アウトオブバンド」方式で到着する。つまり、クライアントは、更新メッセージがいつサービスから送られるかを予測できないということである。アウトオブバンド・メッセージ処理により、クライアントのロジックがやっかいなものになり、その複雑度が増す。この問題を解決するために、自動リース更新メカニズムを実装し、アウトオブバンド・メッセージを取り扱う必要があるクライアントの労力を軽減し、クライアントの複雑さを低減する。自動リース更新メカニズムで、それぞれのゲート(メッセージ、メソッド、および/またはイベント・ゲート)は更新メッセージを受け取り、クライアントの助けを借りずにそれに自動的に応答することができる。更新要求に対するデフォルトの応答は、現在のレベルでリースを請求することである。それぞれのメッセージ・ゲートは、ゲートが更新メッセージを受け取ったときに自動的に通知スペース・サービスに送られる単一の留保更新応答メッセージを含むことができる。この「アウトオブバンド」メッセージは、クライアントの代わって処理され、クリーンなクライアント・プログラミング・モデルを生み出す。一実施形態では、ゲートにより、クライアントはリース・イベント・ハンドラを登録し、応答メッセージの中で異なる独立レベルを指定できる。
【0289】
リース・メカニズムは、さらに、ステール(無効の)通知を検出するメカニズムも備える。サービスがスペース内の通知をパブリッシュすると、そのサービスはこれが通知をパブリッシュしたことに基づいてリースを取得する。それぞれの通知には、サービスが通知を更新することを約束している時間が記述される。一実施形態では、すべてのタイムアウト値を秒単位で指定する。サービスがリースの更新を続ける場合、通知されたサービスがまだ提供中であるという何らかの確認をスペースで行うようにする。更新時間は、スペース・サービスによりゼロになるまでカウントダウンされる。サービスがリースを更新しない場合、サービスは失敗している可能性があるか、またはサービスを提供しなくなっているか、または提供できなくなっている。リースが更新されない場合、スペース・サービスはサービス通知をステールにするため、クライアントから使用できなくなる。サービスでは、スペースに更新メッセージを送ることにより通知を更新する。スペース・サービスは、これらのメッセージを受け取りて、通知更新時を初期値にリセットする。
【0290】
一実施形態では、ステール状態の通知は自動的には削除されない。スペースのポリシーに応じて、十分に長い期間期限切れになっているステール状態のサービス通知の削除を選択できる。削除ポリシーは、スペース・サービスで設定できる。スペース・サービスは、ステール状態の通知をサーチし、たとえば、それを削除するか、または管理者に知らせる。
【0291】
スペース・サービスは、リースを使用して、その機能によってスペースのクライアント(他のサービスを含む)に提供されるリソースを管理することができる。たとえば、クライアントがサービスを使用することを希望する場合、スペース・サービスはサービスのインスタンス化の一部としてクライアントにリースを要求する。サービスのインスタンス化を実行する際に、クライアントはサービスを実行できる。サービスをインスタンス化するために、クライアントはまず、スペース内でパブリッシュされたサービス通知のうちから1つ選択する。クライアントは、スペースに用意されているさまざまな機能を使用して、スペース内の通知をルックアップすることができる。次に、クライアントは、スペースに対しサービスのインスタンス化を要求する。サービスのインスタンス化のときに取得されたリースは、サービス通知を使用したときのものである(サービス通知をパブリッシュしたときのリースと同じではない)。スペース・サービスでは、共有されていることを示す通知の場合に複数のクライアントがサービス通知の使用についてリースすることができることに注意すべきである。そうでない場合、スペース・サービスでは、一度に1つのクライアントがサービス通知についてリースするだけである(排他的)。
【0292】
スペース・サービスがリースを使用してその機能によりクライアントに提供されるリソースを管理するもう1つの例として、XMLドキュメント(たとえば、サービス通知)がスペースに追加されるかまたはスペースから削除されるときにそのことを通知するようスペースのクライアントが登録する場合が上げられる。スペースの登録クライアントは、通知に対するこのサブスクライブでリースを取得できる。このリースにより、スペース・サービスは通知を送り続けるかどうかを知ることができる。このようなリースは、クライアントがスペースとのアクティブなセッションを確立している場合には、必要ないと思われる。また、スペースのクライアント(サービスの場合もある)がスペースとのセッションを確立するときに、クライアントがそのセッションでリースを取得することができることに注意されたい。このため、スペースはセッションと関連するリソースを管理することができる。
【0293】
他の実施形態では、分散コンピューティング環境は時間ベースではないリース・メカニズムを採用する。このリースは、オブジェクトに対し使用が請求されたときに生成される。時間ベースのメカニズムの代わりに請求メソッドでは、他の何かのパーティが同じオブジェクト(たとえば、サービス)にアクセスしたいということを現在のリースホルダに通知するコールバックを受け付ける。したがって、時間ベースのリースに対する他の実施形態として、代わりに、クライアントがスペース・オブジェクト(たとえば、サービス)に対する請求を行うことができる。他のクライアントが現在のリースホルダのリースと互換性のないリースを望んでいる場合、サービスは、「コールバック・メッセージ」をクライアントに送る。コールバック・メッセージを受け取ると、クライアント(つまり、クライアント・ゲート)はコールバック・メソッドを呼び出して、コールバック・メッセージに応答するかどうかを決定する(リースを持続する、リースを取り消す、アクセス・レベルを共有に変更するなど)。応答が決定されたら、クライアント・ゲートは応答メッセージをサービスに送る。リースを管理するこのような配布メカニズムは、XMLメッセージ通信レイヤを使用して実装できる。
【0294】
時間ベースでないリース実施形態では、分散コンピューティング環境は複数のレベル(または種類)のアクセスをサポートするリースを提供し、これにより、分散アルゴリズムでリース互換性を判別することができる。レベルには、(i)オブジェクトをスペース内に保持する(keepInSpace)、(ii)スペース内のオブジェクトを読み込む(readShared)、および(iii)スペース内のオブジェクトを排他的に読み込む(readExclusive)というレベルがある。
【0295】
認証とセキュリティ
分散コンピューティング環境は、非同期メッセージ通信モデルに基づく自然発生の分散システムと異機種分散システムに対応し、データおよび/またはオブジェクトはXMLなどの表現言語により表現することができる。分散コンピューティング環境では、たとえば、クライアントは、インターネット全体を通してサービスに接続することができる。分散コンピューティング環境では、大量のネットワーク・デバイスがセキュリティで保護された信頼できる動的な方式で連携動作する。分散コンピューティング環境により、準拠するソフトウェア・コンポーネント(クライアントおよびサービス)の間の相互運用性を実質的に可能にするプロトコルが定義される。
【0296】
分散コンピューティング環境のコンテキストでは、デバイスはネットワーキング・トランスポートでアドレス指定可能なユニットである。クライアントとサービスは、デバイスで実行されるソフトウェアまたはファームウェアのUniversal Resource Identifier(URI)アドレス指定可能なインスタンスとして実装することができる。
【0297】
インターネット・スペースには、多数のコンテンツ・ポイントが配置されている。URIは、コンテンツ・ポイントを識別するのに使用される方法であり、テキストのページ、ビデオまたはサウンド・クリップ、イメージ、ソフトウェア、ファームウェア、またはその他のインターネット・コンテンツである。URIの最も一般的な形式は、Webページ・アドレスであり、これは、Uniform Resource Locator(URL)と呼ばれるURIの特定の形式またはサブセットである。URIは、通常、リソース、リソースが置かれている特定のコンピュータ、およびコンピューター上のリソースの特定の名前(通常、ファイル名)にアクセスするために使用されるメカニズムを記述する。
【0298】
クライアントおよびサービス(両方とも、デバイスにソフトウェアおよび/またはファームウェアとして実装できる)は、インターネット、企業イントラネット、動的近接ネットワーク上で、単一コンピュータ内で、またはその他のネットワーク接続モデルにより接続できる。たとえば、クライアントおよびサービスをサポートするデバイスのサイズおよび複雑さは、単純な照明スイッチから複雑な高可用性のサーバーまでさまざまなものがある。デバイスの例としては、それらに限定されないが、PDA、携帯電話、ノートブック・パソコン、ラップトップ・パソコン、より強力なPC、さらに強力なコンピュータ・システム、そしてスーパー・コンピュータに至るまで、さまざまなものがある。いくつかの実施形態では、クライアントおよびサービスの距離、待ち時間、および実装を抽象化し、共通の発見および通信方法を使用し、「ブラック・ボックス」効果を生み出している。この定義方法により、ソフトウェアの実装問題は、根幹のプラットフォームで取り扱うことができ、インターネット規模に合わせて拡大縮小できる粗結合システムを実現できる。
【0299】
分散コンピューティング環境は、WEBおよびXMLコンテンツ表現、動的デバイス発見、およびさまざまなネットワーク・デバイスからアクセス可能なセキュリティで保護されたデバイス通信など、インターネット中心のプログラミング・モデルを提供する。分散コンピューティング環境は、CPUレベルよりも上で抽象化されたネットワーク・プログラミング・モデルを含む。このプログラミング・モデルは、以下の特性を持つ。
URIアドレス
コンテンツと呼ばれる強く型付けられたデータ(URIでアドレス指定)
実質的に無制限の永続的コンテンツ記憶域(たとえば、ストア)(MIMEタイプで識別されるものなどのXMLおよび非XMLコンテンツを含む)
スペースと呼ばれる実質的に無制限の一時的コンテンツ・メモリ(XMLコンテンツを含む)
関係するクライアントに通知するためにスペース内に格納できる記述的XMLメタデータ(データに関するデータ)コンテンツ通知。
実質的に無制限の数の命令(メッセージとして埋め込まれる)
URIによりアドレス指定されるセキュリティで保護されたメッセージ・エンドポイント(ゲート)
分散ソフトウェア・プログラム間のワーク・フローを調整するデータ・フローのサポート(イベント・メッセージ)
【0300】
サービスおよびクライアントは、分散コンピューティング環境内でプログラムとして実行できる。サービスは、サービスの使用を望んでいるクライアントに機能を通知することができる。クライアントは、同じネットワーク・デバイス内に常駐する場合も常駐しない場合もあり、デバイスのコード実行環境はJavaプラットフォームをサポートする場合もあればしない場合もある。URIを使用してコンテンツおよびメッセージ・エンドポイントをアドレス指定する際に、分散コンピューティング環境は強力なアドレス指定方式となる。アドレスにより、コンテンツまたはエンドポイントの位置を指定し、また使用するルート(またはトランスポート・プロトコル)を指定することができる。URIを使用してアドレス指定したアイテムはさらに、関連付けられたセキュリティ証明書を持つ。セキュリティ証明書を使用して、どのようなクライアントにアイテムへのアクセスを許可するか、また承認されたクライアントでそのアイテムに対しどの操作の実行を許可するかを制御することができる。
【0301】
分散コンピューティング環境によって提供される高度なアクセスは、適切な認証およびセキュリティ・システムおよび方法により制御できる。分散コンピューティング環境における認証とセキュリティには、メッセージ内のXMLコンテンツの型付けの正しさの検証、受取側に対し発送側を安全に識別する操作、クライアントからサービスに、その逆にサービスからクライアントに送られるメッセージの完全性を検査するメカニズム、およびクライアントに対し受け付けられたサービスのメッセージ群を記述し、サービスで受け取ったメッセージに対しメッセージ要求条件を強制するメカニズムがある。上記のセキュリティおよび認証の機能は、コードおよびデータの単一アトミック・ユニットで活用できる。コードおよびデータのアトミック・ユニットを動的に作成できる。一実施形態では、コードおよびデータのアトミック・ユニットは、いったん作成されると、メッセージ・エンドポイント(ゲート)を表し、作成時に実装されたセキュリティおよび認証ポリシーに関して改変できない。
【0302】
ゲートは、サービスの機能の一部または全部を使用する権限を表す。各機能は、サービスに送ることができるメッセージに関して表すことができる。ゲートはさらに、クライアントがリソースをリースするときに障害が発生した場合を検出するのに使用できる。
【0303】
認証およびセキュリティはさらに、サービスを使用しようとするクライアントがそのサービスを使用することを承認されていること、クライアントがサービス通知を受け取る先であるスペースがサービス通知を提供することを承認されていること、および/またはサービス通知自体が承認されていることを検証するメカニズムを備えることができる。
【0304】
メッセージ通信は、クライアントからサービスに要求を伝達する手段およびサービスがクライアントに結果を応答する手段としてメッセージング・レイヤに実装できる。分散コンピューティング環境のメッセージング・レイヤでは、有効なXMLメッセージが送られることを実質的に保証し、また言語独立のセキュリティ・モデルを使用可能にするメカニズムを備えることができる。メッセージング・レイヤでは、送るメッセージ・エンドポイントを受け取るメッセージ・エンドポイントにリンクさせることができる。2つの関連するメッセージ・エンドポイントは、クライアントとサービスとの間の要求−応答メッセージ通信に適したセキュリティで保護された双方向のアトミック・メッセージ・チャネルを提供することができる。
【0305】
分散コンピューティング環境の実施形態では、サービスに関してスペース内で通知をパブリッシュすることができる。通知は、サービスのXMLスキーマおよびURIを含むXMLドキュメントとすることができる。サービスはさらに、通知の中にサービスIDトークンまたは証明書を含めることもでき、通知で、クライアントとサービスの両方により使用される認証サービスを指定することができる。その後、クライアントはスペースのサービス通知を特定し、その通知を使用してクライアントでメッセージ・ゲートをインスタンス化する。クライアントは、通知で指定された認証サービスを使用して、メッセージでクライアントに送るための認証証明書を取得する。一実施形態では、クライアントはサービスIDトークンまたは証明書をサービス通知から認証サービスに渡し、続いて認証サービスはサービス・トークンと、または証明書を使用して、そのクライアントの認証証明書を生成することができる。一実施形態では、クライアントはメッセージ・ゲートを作成するために必要な情報を受け取るゲート・ファクトリを備え、そのゲート・ファクトリはメッセージ・ゲートを構築し、認証サービスと通信して、クライアントの認証証明書を取得する。対応するサービス・メッセージ・ゲートが、サービス側でインスタンス化される。
【0306】
クライアントは、ある時点で、第1のメッセージをサービスに送る。一実施形態では、クライアント・メッセージ・ゲートは認証サービスにより構築されたクライアントの認証証明書をメッセージ内に埋め込む。サービスがメッセージを受け取ると、同じ認証サービスを使用してメッセージで受け取った認証証明書を検証する。同じ認証サービスを共有することにより、さまざまな認証プロトコルを採用し、しかも、認証証明書の生成の詳細をクライアントとサービスから分離することができる。したがって、クライアントは異なる認証証明書プロトコルを異なるサービスとともに使用することができる。
【0307】
一実施形態では、認証サービスは、サービスからクライアント認証証明書を最初に受け取った後クライアントの能力を判別することができる(たとえば、サービスに対しクライアントがどのようなことを許されているか)。クライアントの能力は、クライアントの素性に縛られる。そこで、クライアントのメッセージ・ゲートはクライアントからサービスに送られるすべてのメッセージに認証証明書を埋め込む。メッセージは、サービス・メッセージ・ゲートに届き、そこで、認証サービスによりチェックされ、そのメッセージがクライアントからのものであること、メッセージ要求がクライアントの能力範囲内にあることを確認する。他の実施形態では、サービス・メッセージ・ゲートは、認証サービスを使用せずに、能力を判別および能力に関するメッセージ検査を処理する。
【0308】
クライアントおよびサービス・メッセージ・ゲートは連携して、セキュリティで保護され信頼できるメッセージ・チャネルを実現する。ゲートはセキュリティで保護されたメッセージ・エンドポイントとして使用され、クライアントはセキュリティで保護され承認されているXMLメッセージをサービスとの間で送受されることによりサービスを実行できる。
【0309】
分散コンピューティング環境内のオペレーションは、クライアントとサービスとの間で送られるXMLメッセージとして実現される。クライアントをサービスと接続し、スペースおよびストア内のコンテンツをアドレス指定するのに使用されるプロトコルは、クライアントとサービスとの間で送ることができるメッセージによって定義される。メッセージを使用してプロトコルを定義すると、さまざまな種類のデバイスをプロトコルに参加させることができる。各デバイスは、その能力と役割に最適の方法でプロトコルを自由に実装することができる。
【0310】
サービスの機能は、そのサービスが受け入れるメッセージに表すことができる。サービスのメッセージ・セットは、XMLスキーマを使用して定義することができる。XMLメッセージ・スキーマにより、XML型付きタグを使用して各メッセージ形式を定義する。タグの使用規則もまた、スキーマで定義できる。メッセージ・スキーマは、メッセージを受け取るために使用するサービスのメッセージ・エンドポイント(ゲート)とともにXML通知の一コンポーネントであってよい。メッセージをXMLメッセージ・スキーマに加えることにより、拡張機能(さらに多くの能力)をサービスに追加することができる。
【0311】
分散コンピューティング環境では、承認されたクライアントがサービスの能力すべてを使用できるか、またはサービスの能力のサブセットの使用に限定される。一実施形態では、一組の機能をクライアントに与えた後、クライアントは適切な承認がないとそのセットを変更することはできない。この機能定義のモデルにより、基本機能セットから拡張機能セットまでのサービス・レベルに対応できる。
【0312】
サービスのインスタンス化を実行する際に、クライアントはサービスを実行できる。サービスをインスタンス化するために、クライアントはまず、スペース内でパブリッシュされたサービス通知のうちから1つ選択する。クライアントは、スペースに用意されているさまざまな機能を使用して、スペース内の通知をサーチすることができる。次に、クライアントは、スペースに対しサービスのインスタンス化を要求する。サービスのインスタンス化は、以下のことを含むが、これに限られるわけではない。
1.クライアントは、スペース・サービスにサービスをインスタンス化するよう要求する。
2.スペース・サービスは、クライアントがサービスをインスタンス化することを許可されていることを検証する。
3.スペース・サービスは、クライアントによって指定されたリース要求時間にクライアントのサービス通知でリースを取得する。それとは別に、サービス通知をクライアントに送るができ、しかもリース・メカニズムを使用しない。
4.スペース・サービスは、ステップ3で割り当てたリースとサービスのサービス通知を含むメッセージをクライアントに送る。
5.クライアントは、サービス通知で指定された認証サービスを実行し、認証証明書を取得する。
6.クライアントは、サービスと通信するためクライアント・メッセージ・ゲートを構築する。
分散コンピューティング環境でクライアントとサービスとの間に信頼性を築くために、一連の動的に生成される数値(キー、またはトークン)を、クライアントのセキュリティまたは認証証明書として使用する。1つまたは複数の証明書を使用して、クライアントがサービスを使用する権限を検証し、クライアントとサービスとの間でやり取りするメッセージを検証することができる。それぞれクライアントおよびサービスは、固有の証明書を備える。
【0313】
サービスを使用するのに必要な認証証明書の種類がサービス・サーチを実行するクライアントに返される。一実施形態では、認証証明書は、クライアントがサービスを使用するごとに提示する必要がある隠蔽型オブジェクトである。一実施形態では、認証証明書はサービスに送られるすべてのメッセージ内でクライアントのためにメッセージ・ゲートにより提示される。どのような種類の認証証明書をサービスが必要としようと、クライアントとサービスの外部の認証サービスを使用することにより、クライアントおよびサービスは認証証明書構造または認証プロセスを意識する必要がない。
【0314】
認証証明書はさらに、サービス・チケットに加えてトランスポート固有のチケットを備えることができる。サービスを実行するときに、サービス通知で指定されるネットワーキング・トランスポートに応じて、トランスポートはセキュリティで保護された接続を提供できる。場合によっては、データ・リンク・レイヤがすでにセキュリティで保護されている場合、すでにセキュリティで保護されているデータ・リンク・レイヤ上でセキュリティで保護されたトランスポートを使用する必要はないと考えられる。
【0315】
認証証明書の概念は、証明書実装に基づくさまざまなレベルのセキュリティを可能にするだけの十分な抽象性を備えている。セキュリティのレベルにはそれらに限定されないが以下のものがある。
1.なし(空のメッセージにセキュリティ証明書はないか、または証明書がない)
トランスポートの物理的接続特性によりセキュリティが強制されるときは、証明書が空であるか、または証明書がないメッセージで十分である。たとえば、照明スイッチ・コントローラ1つだけに接続されたスマート・ライト・スイッチはそのスイッチが安全な方法で配線されているので安全である。
2.シグネチャ付きメッセージ(電子シグネチャ)
シグネチャ付きメッセージは、サービスがメッセージの発信源(クライアント)を検証できるようにする電子シグネチャを含む。
3.暗号化メッセージ(トランスポートでこれを取り扱う)
暗号化メッセージは、メッセージの内容をスクランブルし、他の証明書でそのスクランブルを解除する必要があるようにするという方法により、別のレベルのセキュリティを追加する。
4.能力メッセージ(サービス機能およびユーザ認識)
このレベルのセキュリティは、ユーザごとのセキュリティ機能を実現し(たとえば、ユーザが実行を許されているもの)、サービスおよび個々のサービス機能に対する精密なアクセス制御を行うことができる。
【0316】
高いレベルのセキュリティ(能力および暗号化)を実現するのに必要な実装が重いため、複数レベルのセキュリティ・ゾーンを使用する。メッセージ・トランスポートでこのようなセキュリティ・レベルをサポート(またはボートを支援)する場合、このサポートを活用して一方のレベルのセキュリティから他方のレベルのセキュリティへ橋架けするセキュリティ・レベル・ブリッジ・サービスを提供する。
【0317】
上述のように、セキュリティ・モデルのないサービスでは、空の認証証明書を受け付けることができる。アクセスが制限されていないサービスでは、認証証明書なしでまたは「空の」認証証明書付きでゲートを構築することができる。このようなサービスのゲートは、それぞれのメッセージとともに認証証明書を送らないか、または空の証明書を送る。認証サービスは、アクセスを制限しないサービスの一例である。他のサービスでは、ユーザIDとパスワードのペアを必要とする。
【0318】
証明書を使用するサービス・アクセスの認証
いくつかの実施形態では、サービスを実行しようとするクライアントが承認されているクライアントであることを検証し、クライアントによって受取されるサービス通知が承認されたサービス通知であること検証し、かつ/またはクライアントがサービス通知を受け取った発送元のスペースが承認されていることを検証するメカニズムは、公開鍵/秘密鍵非対称暗号メカニズムに基づく。このメカニズムでは、承認された発送側エンティティは公開鍵をメッセージに埋め込み、秘密鍵で公開鍵を含むメッセージを暗号化する。暗号化メッセージを受け取るエンティティは、公開鍵を使用してメッセージを復号化し、復号化されたメッセージに埋め込まれている同じ公開鍵を見つけ、そのメッセージが承認されたエンティティからのものであることを検証するが、それは、そのエンティティのみがメッセージを暗号化するのに必要な秘密鍵を持っているからである。そこで、エンティティは、実質的に忘れることができない、他のエンティティが復号化して(適切な公開鍵で)、エンティティによって送られたメッセージを検証することができる証明書を発行する。
【0319】
さまざまな鍵生成アルゴリズムを分散コンピューティング環境で使用できる。鍵の構成は、クライアントとサービスの両方から隠されており、クライアントとサービスはどのような鍵生成アルゴリズムを使用しているかを問わない。
【0320】
Kerberosチケットは、分散コンピューティング環境で使用されるセキュリティ証明書の一例である。Kerberosは、コンピュータ・ネットワーク内のサービスの要求を認証するセキュリティで保護された方法である。Kerberosを使用すると、ユーザは特定のサービスを要求するために使用できる認証プロセスに暗号化された「チケット」を要求することができる。ユーザのパスワードは、ネットワークに通す必要はない。
【0321】
分散コンピューティング環境では、クライアントとサービスとの間で送られるメッセージの品質が損なわれないよう実質的に保証するメカニズムを提供する。一実施形態では、メッセージが改変されていないことを検証するため発送側は受取側が使用できる情報を含むトークンを埋め込む。メッセージに埋め込む情報を生成する方法はいくつかある。一実施形態では、メッセージのハッシュを計算し、それをメッセージとともに送る。ハッシュ法は、文字列を元の文字列を表す通常短い固定長の値または鍵に変換する操作を含む。メッセージを受け取ると、受取側はそのハッシュを再計算し、送られたハッシュに照らしてチェックする。メッセージが改変されていた場合、同じハッシュが生成される可能性はほとんどない。発送側は、ハッシュを暗号化し、対応する公開鍵を暗号化されたメッセージに入れて送り、そのハッシュが損なわれないように実質的に保証する。
【0322】
他の実施形態では、巡回冗長検査などの誤り検出方式を使用する。巡回冗長検査は、通信リンクで送られたデータ内にエラーがないか調べる方法である。巡回冗長検査を使用する実施形態では、発送側はnビットの多項式をメッセージに適用し、その結果の巡回冗長検査(CRC)をメッセージに付加する。受取側は、同じ多項式(メッセージでも渡される)をメッセージに適用し、その結果を発送側が付加した結果と比較する。マッチする場合、メッセージは正常に受け取られたということである。マッチしない場合、発送側はメッセージの再送を通知される。
【0323】
ゲート・ファクトリは「信頼できる」コードなので、ゲート・ファクトリもまたセキュリティで一定の役割を果たす。信頼できるゲート・ファクトリを使用してゲートを生成することにより、ゲートが信頼できるコードであり、そのコードがサービス通知に関して正しいものであることを保証できる。クライアントは、認証の一手段として、クライアントIDトークンまたは証明書をゲート・ファクトリに提示する必要がある。サービスは、クライアントがゲートを作成するときに、サービスIDトークンまたは証明書をクライアントに提示する(たとえば、通知を通じて)。ここで説明したように、クライアントおよびサービス・トークンのペアを使用して、クライアントがメッセージをサービスに送ることができるようにするために使用される第3の証明書を作成する。この第3の証明書は、認証証明書と呼ばれる。認証証明書は、認証プロセスの実行時に認証サービスにより作成される。一実施形態では、サービスは認証ポリシーを自由に使用できる。一実施形態では、認証サービスはサービスに代わって認証ポリシーを管理するため、サービス側では、使用されている特定の認証ポリシーを意識する必要はない。
【0324】
クライアントはサービス通知で指定した認証サービスを実行することにより受け取った認証証明書を使用してゲートを構築する。これにより、構築されたゲートは認証証明書をそれぞれのメッセージとともにサービスに送ることができる。サービスがクライアントから第1のメッセージで第1の認証証明書を受け取ると、サービスはサービス通知で指定されている認証サービスを使用してクライアントを認証し、認証証明書のクライアントのIDへのバインドを確立する。
【0325】
すでに述べたように、サービスによって出力されるいくつかの結果がスペース内で通知され、最終的に結果ゲートを使用してアクセスされる。結果ゲートは、結果を生成するために使用する入力ゲートと同じセキュリティ証明書を含む場合もあれば含まない場合もある。サービスへの入力は出力(結果)と非同期であるため、結果は、異なるアクセス権限セットが関連付けられる。たとえば、給料支払い簿サービスではクライアントの異なる集まりが給料支払い簿サービスを起動して給料支払い簿サービスの結果(給与)を読み取ることができる。そこで、クライアントは、結果へのアクセス権を取得するために別の認証プロセスを適用される必要があり、これは、結果に関する通知で指定された認証サービスから結果に対する認証証明書を受け取る作業も含む。
【0326】
メッセージ・ゲートにより、ほとんどのセキュリティ・チェックの負担がサービスから取り除かれる。サービスでは、能力の発揮と、クライアントの認証に集中することができる。クライアントが要求された(または割り当てられた)能力にのみアクセスできるようにする際に、特権は最低限にするという原則が守られる。
【0327】
セキュリティ・チェックは、ゲートの作成時および/またはゲートの使用時(メッセージを発送かつ/または受け取るとき)に実行される。クライアントが通知されたアイテム(サービス)へのアクセスを要求したときに、ゲート作成のプロセスが開始する。このプロセスで、クライアント・ゲート・ファクトリは、サービスと連携して、互いに相互認証を行う。ゲート作成時に実行されるチェックは広範にわたり、ゲートの使用時に実行されるチェックの回数が最小限に抑えられる。サービスでクライアントを認証した後、サービスはクライアントの特定の能力を判別し(たとえば、サービスでクライアントがどのようなことを実行することを許されているか)、その能力をクライアントの認証証明書に関連付けることができる。これらの特定の能力により、サービス上でクライアントがどのような操作を実行することを許されるかを指定できる。ゲートではすべてのメッセージに認証証明書が含まれることを確認するので、サービスでは、受け取ったときのそれぞれの要求を認証されたクライアントの能力に照らし合わせてチェックすることができる。
【0328】
ゲート作成チェックでは、XMLメッセージ・スキーマによって指定されたサービス能力の一部または全部を使用する許可がクライアントにあることを確認する。一実施形態では、これらのチェックは、Kerberosなどの認証サービスとともにアクセス制御リスト(ACL)を使用して実施する。チャレンジ−応答シーケンス(パスワードなど)も、クライアントの認証に使用できる。いくつかの実施形態では、ハードウェア・ベースの物理的識別方法を使用してクライアントを認証することができる。たとえば、ユーザは、識別と承認のためにスマート・カードなどの物理的識別機能を提供することができる。認証のための他のメカニズムも、他の実施形態で使用できる。
【0329】
一実施形態では、クライアントを認証するためにどのような手段を使用するとしても、認証はクライアントとサービスの両方に見えないものであり、ゲート・ファクトリが使用する認証サービスを認識し、その認証サービスが認証メカニズムとポリシーを取り扱う。ゲート・ファクトリは、製品と環境に依存しているか、または構成管理システムによって制御することさえできる。一実施形態では、クライアント独立の程度と方法はプラットフォーム依存であるが、ゲート・ファクトリには認識される。いくつかの実施形態では、ハードウェア・ベースの物理的識別方法を使用してクライアントを認証することができる。たとえば、ユーザは、識別と承認のためにスマート・カードなどの物理的識別機能を提供することができる。認証のための他のメカニズムも、他の実施形態で使用できる。
【0330】
分散コンピューティング環境のメッセージ・ゲートは、通常、単一のクライアントと関連付けられている。ゲート・ファクトリは関連付けの手段を決定する。メッセージを送るときに実行されるチェックにより、適切なクライアントがゲートを使用していることが確認される。一実施形態では、ゲートはメッセージで渡され、新しいクライアントがそのゲートを使用することを望んでいる場合、クローンが作成される。クローン・プロセスで、一組の作成チェックが新しく実行される。
【0331】
スペースのクライアントがスペース・サービスの通知を見つけると(クライアントは他のサービスでもよい)、スペースのクライアントは他のサービスの場合と同様にスペース・サービスを実行する。スペース・サービスを実行するには、認証メカニズムを使用する必要がある。スペース・サービスの実行ではそれに限定されないが、以下のことを行う。
1.スペースのクライアントは、まず、スペース・サービスのサービス通知で指定されている認証サービスを実行して認証証明書を取得する。
2.スペースのクライアントは、認証証明書、スペースのXMLスキーマ(スペースのサービス通知からの)、およびスペースのURI(スペースのサービス通知からの)を使用して、スペースのゲートを構築する。一実施形態では、クライアントはゲート構築するための情報をゲート・ファクトリに渡す。
3.スペースのクライアントは、そのゲートを使用してメッセージをサービスに送ることによりそのスペース・サービスを実行する。
4.スペース・サービスは、クライアントから認証証明書を埋め込んだ第1のメッセージを受け取ったときに、クライアントが使用したのと同じ認証サービスを使用してクライアントを認証するための認証証明書を取得し、クライアントの素性を確定する。
5.スペース・サービスは、その後、クライアントの能力(たとえば、クライアントがスペース・サービス上で実行を許されているもの)を判別し、その能力を認証証明書にバインドする。
【0332】
「スペース」の項で説明しているように、スペース機能は、生成元のスペースと実質的に同じ機能(同じXMLスキーマ)を持つ空のスペースを生成するインターフェースを備えることができる。
【0333】
図42は、一実施形態による、分散コンピューティング環境での、新しいスペースの保護された作成を示す流れ図である。1950に示されているように、クライアントは、第1のスペース・サービスにアクセス(たとえば接続)することができる(サービスは、アクセスまたは他の形でのスペースの使用に関してクライアントとして働くことができる)。1952に示されているように、クライアントが第1のスペースのインターフェースに適当な要求を送ることによるなど、第2のスペースの作成を要求することができる。スペースの作成を要求するクライアント(スペース・サービスのクライアントとして働くサービスを含む)を、要求元クライアントと呼ぶ場合がある。それに応答して、1954に示されているように、第2のスペースに伴う第2のスペース・サービスを、第2のインターネット・アドレスで作成することができる。上と同様に、第2のスペース・サービスに、第2のスペース・サービスの関数を呼び出すのに使用可能である1つまたは複数のメッセージを指定する第2のスキーマを含めることができる。第2のスキーマに、少なくとも第1のスキーマを含めることができ、第2のスキーマに、追加の機能も含めることができる。
【0334】
第2のスペースを、当初は、要求元クライアントだけにアクセスを許可するように構成することができる。一実施形態では、1956に示されているように、第2のスペースに関してルート認証トークンを作成する。やはり1956に示されているように、第2のスペースに関連する認証サービスを初期化することができ、これによって、第2のスペースを、ルート認証トークンを保持するクライアントだけにアクセスを許可するように構成する。1958に示されているように、ルート認証トークンを、要求元クライアントまたはサービスに送ることができる。1960に示されているように、要求元クライアントが、第2のスキーマで指定されたメッセージの少なくとも1つを第2のスペースに送ること、ルート認証トークンを使用することによって、第2のスペースにアクセスすることができる。
【0335】
したがって、一実施形態では、要求する側が、スペースを作成した時に、その要求する側だけが、作成されたスペースへのアクセスを許可される。たとえば、作成されたスペースを、保護されることをクライアントが必要とするサービスからの結果を格納するためのものとすることができる。一実施形態では、このセキュリティを、下記によって保証することができる。
・ 1956で示されるように、初期ルート認証トークンを作成し、生成されたスペースの認証サービスを初期化する際に、認証サービスがルート認証トークンのみを認証し、他の認証証明書を返さないようにする(最初に許可されている生成されたスペースのクライアントはほかにない)。
・ 生成されたスペースのセキュリティ・ポリシーを初期化し、ルート認証トークンに関連付けられたルートIDで、セキュリティ管理機能を含むスペースのすべての機能にアクセスできるようにする。
・ 1958で示すように、ルート認証トークンおよび生成されたスペースのサービス通知を生成されたスペースのリクエスタに返す。
【0336】
リクエスタは、生成されたスペースにアクセスするためのゲートを構築するが、それは、認証証明書と生成されたスペースのサービス通知を返すからである。一実施形態では、リクエスタとリクエスタが認証証明書と生成されたスペースのサービス通知を渡すクライアントまたはサービスのみが生成されたスペースにアクセスできる。生成されたスペースへのアクセスをこのように制限することは、たとえば、クライアントとサービスが結果をプライベートの状態に保持する場合にクライアントおよびサービスがその生成されたスペースを使用して結果を格納するときに役立つ。
【0337】
サービスを実行した後、クライアントはセキュリティ管理スペース機能を使用して生成されたスペースの認証ポリシーを変更し、その後、他のクライアントまたはサービスはその生成されたスペースにアクセスできる。さらに、発見プロトコルまたはその他の手段を用いて、生成されたスペースのサービス通知を生成されたスペースの他のクライアント(他のクライアントはサービスでもよい)から利用できるようにする。
【0338】
分散コンピューティング環境でのメッセージ・トランスポート・レイヤは、トランスポート時にクライアントとサービスとの間の通信のセキュリティおよび安全性を保護するメカニズムを備える。このようなセキュリティは、「ワイヤ・セキュリティ」または「トランスポート・セキュリティ」と呼ばれるものであり、これにより、ゲートを含むメッセージング・システムにより実装された認証セキュリティから区別できる。メッセージの暗号化は、分散コンピューティング環境のメッセージ・トランスポート・レイヤで行われる。暗号化されたトランスポートを要求するサービスは、XML通知にタグを付けることによりそのような作業を行う。その後、ゲート・ファクトリは、BluetoothやHTTPSによって提供されるものなどのセキュリティで保護されたメッセージ・トランスポートを使用するゲート(または複数のゲート)を作成する。
【0339】
HTTPS(Secure Hypertext Transfer Protocol)は、ユーザ・ページ要求さらにWebサーバによって返されるページの暗号化および復号化を行うWebプロトコルである。HTTPSでは、ストリーム暗号化アルゴリズム(たとえば、RC4)に多ビット鍵サイズ(40〜128ビット以上)を使用して、商用のデータ交換に対し十分な暗号化を行う。HTTPSは、分散コンピューティング環境でトランスポートとして使用できる。
【0340】
Bluetoothは、新しく登場したピアツーピアの無線通信規格である。Bluetooth鍵生成アルゴリズムを分散コンピューティング環境で使用できる。Bluetoothでは暗号鍵をサポートする。暗号鍵はトランスポートに依存しているが、クライアント、サービス、および組み合わせ鍵はトランスポートに依存しないようにできる。
【0341】
図26a−クライアントに認証証明書を提供する認証サービス
図26aは、一実施形態により、認証証明書をクライアントに提供する認証サービスを示す流れ図である。分散コンピューティング環境のクライアントは、クライアントのために1つまたは複数の機能を実行するサービスを必要とすることがある。一実施形態では、セキュリティで保護されたメッセージング・チャネルを設定するときにクライアントとサービスで使用する認証サービスを提供する。認証サービスは、クライアントおよび/またはサービスの認証および望むレベルのセキュリティおよびクライアントとサービスとの間で渡されるメッセージ・セットを交渉するなどの機能をクライアントおよび/サービスのために実行する。認証サービスは、分散コンピューティング環境内で実行されているプロセスでもよい。認証サービスは、サービスおよび/またはクライアントと同じデバイスで実行するか、またはそれとは別に、認証サービスは、認証サーバなどの別のデバイスで実行する。一実施形態では、認証サービスはインターネット・ベースのサービスである。認証サービスは、それ独自のアドレス、たとえば、Universal Resource Identifier(URI)を持ち、これにより、クライアントおよび/またはサービスは認証サービスと通信できる。一実施形態では、認証サービスのアドレスを、サービスのサービス通知でクライアントに提供する。認証サービスを共有するクライアントおよびサービスを使用すると、クライアントとサービスとの間でセキュリティで保護されたメッセージング・チャンネルを確立し、いくつかのセキュリティおよび認証プロトコルのどれかをメッセージング・チャネルで使用できる。
【0342】
一実施形態では、クライアントはクライアントIDトークンまたは証明書を認証サービスに提示する。クライアント・トークンまたは証明書は十分に忘れがたいものであり、クライアントの素性を証明するものとして使用できる。次に、認証サービスは、クライアントIDトークンまたは証明書をチェックし、クライアントに、認証サービスのみが作成できる認証証明書を発行する。クライアントに返された認証証明書は、次に、クライアントによりすべてのメッセージに入れられてサービスに送られる。一実施形態では、クライアント・メッセージ・ゲートはゲート・ファクトリによって作成され、認証証明書をメッセージ・ゲートに格納すると、メッセージ・ゲートはクライアントに代わって認証証明書をすべてのメッセージに入れてサービスに送る。メッセージを受け取ると、サービスは認証証明書をチェックする。認証サービスのみが認証証明書を作成できるので、クライアントが認証証明書を改ざんしていないとサービスは認識する。一実施形態では、サービスは認証証明書をクライアントによって使用される同じ認証サービスに渡し、認証証明書が有効であることを確認し、クライアントが承認されたクライアントであることを検証し、クライアントの素性を調べる。
【0343】
スペース・サービスおよび認証サービスを含むすべてのサービスはそのクライアントを認証することができる。サービスによってクライアントの認証が行われると、クライアントはそのサービスにアクセスできる。たとえば、スペース・サービスの場合、クライアントはスペースからXML通知を取得する。
【0344】
一実施形態では、サービスはそのサービスのすべてのクライアントが使用するあらかじめ整えられている証明書を用意する。この実施形態では、認証により、そのあらかじめ整えられた証明書が要求側クライアントに提供される。クライアントはあらかじめ整えられている証明書をサービスに提示すると、サービスによって承認される。
【0345】
ステップ1000で、クライアントは認証証明書を認証サービスに要求する。一実施形態では、クライアントは目的のサービスのサービス通知をサーチし、特定する。一実施形態では、サービス通知はサービスにアクセスする際に使用される認証証明書を取得するために使用する認証サービスの通知を含む。一実施形態では、サービス通知は、認証サービスのURIなどのアドレスを含む。一実施形態では、クライアントは認証証明書を要求する認証サービスに情報を送る。一実施形態では、クライアントは情報をゲート作成プロセス、たとえば、ゲート・ファクトリに送り、ゲート作成プロセスは認証サービスにアクセスして認証証明書を取得する。
【0346】
ステップ1002で、認証サービスはクライアントのために認証証明書を生成する。認証証明書は、メッセージング・システムのメッセージに埋め込むことができ、これによりメッセージの受取側がメッセージの発送側を認証し、メッセージが承認された発送側からのものであることを検証し、メッセージが発送側が受取側に送ることを許可されているメッセージであることを検証できるようにするデータ要素またはデータ構造である。分散コンピューティング環境の一実施形態では、認証証明書は特定のクライアントと特定のサービスとの間に設定されるメッセージング・チャンネルに固有のものである。ステップ1002は、図26bに詳しく示され、説明されている。図26aのステップ1004で、認証サービスはクライアントに認証証明書を返す。一実施形態では、認証証明書は、クライアントに直接返すことができる。一実施形態では、認証証明書をゲート作成プロセス、たとえば、ゲート・ファクトリに返し、このプロセスが次に、認証証明書を使用してゲートを生成する。
【0347】
図26b−認証証明書を生成する認証サービス
図26bは一実施形態により、図26aのステップ1002で展開し、認証証明書を生成する認証サービスを示す流れ図である。一実施形態のステップ1002aで、認証サービスはクライアント・トークンとサービス・トークンを取得する。他の実施形態では、認証サービスはクライアント・トークンのみを取得する。一実施形態では、クライアント・トークンは分散コンピューティング環境におけるクライアントの一意的な識別子である。一実施形態では、サービス・トークンは分散コンピューティング環境におけるサービスの一意的な識別子である。たとえば、公開/秘密鍵暗号化メカニズムの公開鍵をクライアントとサービスに対する一意的な識別子として使用することができる。一実施形態では、クライアントはサービス通知でサービス・トークンを受け取り、クライアントはクライアント・トークンとサービス・トークンを認証サービスに送る。他の実施形態では、クライアントはクライアント・トークンとサービス通知URIを認証サービスに送り、認証サービスはサービス通知からサービス・トークンを取り出すことができる。
【0348】
ステップ1002bで、認証サービスはクライアントおよび/またはサービスを検証する。一実施形態では、認証サービスはステップ1002aで取得したクライアント・トークンおよびサービス・トークンを使用して、クライアントおよび/またはサービスを検証する。他の実施形態では、ステップ1002aでクライアント・トークンのみを取得しており、1002bでクライアント・トークンのみを使用してクライアントを検証する。一実施形態では、クライアントはそのクライアント・トークンをすでに認証サービスに登録しており、認証サービスは受け取ったクライアント・トークンを登録されているクライアント・トークンと比較し、クライアントが有効なクライアントであるかどうかを検証することができる。一実施形態では、クライアントはパスワードが設定されているログオン・アカウントなどのチャレンジ/応答メカニズムを使用して認証サービスにアクセスし、クライアントを有効なクライアントとして検証することができる。一実施形態では、サービスはすでに認証サービスに登録されており、そのサービス・トークンを認証サービスに提供してある。認証サービスは、次に、受け取ったサービス・トークンをすでに登録されているサービス・トークンと比較して、クライアントが有効なサービスにアクセスしようとしていることを検証する。他のタイプのクライアントおよびサービス認証も使用できる。たとえば、クライアントは、認証サービスがクライアントを認証するためにかつ/またはクライアントがアクセスしようとしているサービスを認証するために使用できる電子シグネチャまたは電子証明書を提供する。
【0349】
ステップ1002cで、認証サービスは認証証明書を生成する。一実施形態では、認証証明書は、認証サービスのみが作成できる認証トークンを含む。一実施形態では、認証サービスはクライアント・トークンとサービス・トークンを使用して認証証明書を生成する。他の実施形態では、認証サービスはクライアント・トークンだけを使用して、認証証明書を生成する。さらに他の実施形態では、認証サービスは認証証明書の生成に取得されているトークを使用しないが、その代わりに、認証証明書生成アルゴリズムを使用して実質的に忘れることはできない認証証明書を生成することができる。一実施形態では、認証サービスはサービス・トークンとクライアント・トークンを組み合わせて、一意的な認証証明書を生成する。たとえば、サービス・トークンとクライアント・トークンを64ビット値とし、この2つのトークンを組み合わせて128ビットの認証証明書を生成することができる。他の実施形態では他の方法を使用して、認証証明書を生成することができる。
【0350】
デバイスを分散ネットワーク環境にブリッジする方法
分散コンピューティング環境で実装されるメッセージ通信モデルをサポートしないデバイスが、分散コンピューティング環境の外部にある。これらのデバイスは、分散コンピューティング環境のクライアントにとって有用と思われるサービスを備えている場合がある。分散コンピューティング環境には、このような外部デバイスを分散コンピューティング環境にブリッジするメカニズムが備えられている。分散コンピューティング環境内のクライアントはこのようなデバイスに用意されているサービスにアクセスすることができる。分散コンピューティング環境ではさらに、分散コンピューティング環境で使用するこのような外部デバイスを発見するため既存のデバイス発見プロトコルを活用することができる。
【0351】
多くの技術が、ネットワークのデバイス構成をパブリッシュし、監視するための発見プロトコルを定義している。これらの技術には、これらに限定されないが、Jini、SLP、Bluetooth、UPnPがある。さらに、LonWorks、USB、および1394などの多くの入出力バスも動的発見プロトコルをサポートしている。分散コンピューティング環境では、実装をAPIでラップすることにより、デバイス発見技術を活用する。他のデバイス発見プロトコルを活用し、他の発見プロトコルにブリッジする方法を使用することにより、分散コンピューティング環境で、さまざまなネットワークおよび入出力バス上のデバイスまたはサービスを発見することができる。分散コンピューティング環境のデバイス発見は、したがって、分散コンピューティング環境に直接参加していなくても、PDAなどの小型デバイスを含むさまざまなデバイスに応用できる。発見プロトコルは、メッセージ・レベルで定義することができる。
【0352】
ブリッジ・メカニズムは、分散コンピューティング環境用のメッセージングAPIでBluetoothなどの1つまたは複数のを特定のデバイス発見プロトコルを「ラップ」する方法として提供される。ラップでは、コードおよび/またはデータ(API)でデバイス発見プロトコルの枠組みを作り、プロトコルを分散コンピューティング環境内のクライアントおよび/またはサービスによって実行できるようにするが、そうでないとこれは実行できない。ブリッジ・メカニズムを実行すると、特定のデバイス発見プロトコルによりデバイスを発見する発見エージェントが分散コンピューティング環境のスペース内のデバイスに対しサービスをパブリッシュすることができる。サービスが分散ネットワーク環境でXMLメッセージ・スキーマ・インターフェースをクライアントに提示し、特定のデバイス発見プロトコルにより発見されたさまざまなデバイスを動作させることができる。したがって、サービス通知は、基礎のラップされたデバイス発見プロトコルにより発見されたさまざまなデバイスを動作させるサービスに対してパブリッシュされる。そこで、通知されたサービスは、分散ネットワーク環境の外部にあるデバイス(またはサービス)を分散ネットワーク環境上のクライアントにブリッジする。
【0353】
図27は、スペース1200を持つ分散コンピューティング環境の一実施形態を示している。1つまたは複数の発見エージェント1204が、外部発見プロトコルに参加し、ブリッジ・メカニズム1202を通じて分散コンピューティング環境にブリッジする。ラップされたデバイス発見プロトコルを実行すると、ブリッジ・メカニズム1202を介した発見エージェント1204はスペース1200内のサービス通知1206a〜1206cをパブリッシュし、そこで、通知1206a〜1206cのそれぞれが分散コンピューティング環境の外部にある発見プロトコル1204のうちの1つにより発見されるデバイスまたはサービスに対応する。クライアントは、その後、スペース1200内のサービス通知1206a〜1206cを使用して外部デバイスにアクセスし、対応する外部デバイスまたはサービスを動作させるエージェント1204のうちの1つでサービスをインスタンス化する。
【0354】
そこで、分散コンピューティング環境のクライアントは、デバイス発見プロトコルをラップする発見エージェントを使用してデバイスを見つける。これらのデバイスとのブリッジとして機能するサービスをスペース内でパブリッシュし、通知して、分散コンピューティング環境のクライアントが外部デバイスによって提供されるサービスにアクセスできるようにする。通知されたサービスは、他のプロトコルまたは環境により分散コンピューティング環境の外部のデバイスを呼び出すことができる分散コンピューティング環境内のサービスであり、外部のデバイス/サービスを分散コンピューティング環境にブリッジする。分散コンピューティング環境内のクライアントは、分散コンピューティング環境内の通知されたサービスのみを「見」、外部のデバイス/サービスに気付くことすらしない。
【0355】
一実施形態では、分散コンピューティング環境は上述のラップされたデバイス発見プロトコルを含む基礎の外部デバイス発見プロトコルにマップされる、「スペース」の項で説明した発見プロトコルなどの特定のバージョンのスペース発見メッセージ・プロトコルを提供する。マップされた発見プロトコルは、スペース、デフォルト・スペースに自己登録するかまたは登録されるが、その際に、そのスペースに通知を入れる。通知される発見プロトコルごとに、発見プロトコルの結果を保持する後続の結果スペースが提供される。
【0356】
図28は、一実施形態によりBluetooth発見サービス1220にマップされるスペース発見プロトコルの一例の図である。Bluetooth発見サービス1220は、まず、分散コンピューティング環境に登録する1230。Bluetooth発見サービス1220は、ブリッジAPIでラップされ、発見サービス1220の通知1225がスペース1224に追加される1232。クライアントまたはサービスが、スペース1224上の発見サービス通知1225を特定する。発見サービス1220が実行されると(発見プロトコル1220と分散コンピューティング環境1222との間のブリッジとしてAPIラッパを使用して)、発見プロセスの結果を格納するための新しいスペース1226が作成される1234。発見サービス1220は、それらの結果を(再び、APIラッパを使用して)1つまたは複数の通知1227として発見結果スペース1226に格納する。それとは別に、発見サービス1220を実行した結果は分散コンピューティング環境のスペース1224または他の既存のスペースに格納される。図28に示されているような方法を使用してデバイスを発見し、他の基礎の発見プロトコルを使用して他のサービスを発見する。
【0357】
上述のように、分散ネットワーク環境で実装されるメッセージ通信モデルをサポートしないデバイスが、分散ネットワーク環境の外部にある。これらのデバイスは、分散コンピューティング環境で提供されるサービスを使用する必要があるクライアントを備えることもある。分散コンピューティング環境は、外部クライアントまたはクライアント・デバイスを分散コンピューティング環境にブリッジするメカニズムが備えられており、外部デバイスのクライアントは分散コンピューティング環境内のサービスにアクセスすることができる。
【0358】
分散コンピューティング環境でクライアントとして使用されるエージェントを用意し、外部クライアントを分散コンピューティング環境にブリッジし、外部クライアントが分散コンピューティング環境内でパブリッシュされているサービスにアクセスできるようにする。一実施形態では、エージェントは、フロント・エンドでメッセージ通信モデルと専用プロトコル(たとえば、外部デバイスによってサポートされているプロトコル)を使用して外部デバイスにインターフェースし、さらに外部クライアントにインターフェースする分散コンピューティング環境内のサービスと通信することができるXML対応バックエンドを備える。したがって、分散コンピューティング環境の外部のクライアントは、ブリッジ・エージェントを通じて分散コンピューティング環境内のサービスを特定してアクセスし、要求をサービスに送って結果データを含む応答をサービスから受け取ることができる。たとえば、外部クライアントは分散コンピューティング環境でブリッジ・エージェントを使用してスペース発見を実行し、通知されたサービスをルックアップし、分散コンピューティング環境内のサービスを呼び出す。
【0359】
一実施形態では、分散コンピューティング環境は分散コンピューティング環境クライアントからJiniサービスにアクセスするためのブリッジ・メカニズムを備える。Jiniサービスはリモート・メソッド呼び出し(RMI)を必要とし、また分散コンピューティング環境内のクライアントはXMLメッセージなどのメッセージを使用してサービスと通信するので、分散コンピューティング環境クライアントによりJiniサービスへのアクセスを可能にするプロトコル・ブリッジ・メカニズムを提供できる。一実施形態では、分散コンピューティング環境のスペース内でJiniサービスの動的通知を有効にし、さらに分散コンピューティング環境内のクライアントからJiniサービス・プロキシのアクセスを有効にすることができるコネクタ・メカニズムを定義する。一実施形態では、分散コンピューティング環境にブリッジできないJiniサービスもある。
【0360】
一実施形態では、Jiniサービスによって使用されるJini RMIプロトコルを分散コンピューティング環境のクライアントによって使用されるXMLメッセージングにブリッジするエージェントを分散コンピューティング環境内のサービスとして提供することができる。エージェントを起動すると、エージェントはJiniスペースで一組の属性を持つJiniサービスのルックアップを実行する。登録されているすべてのJiniサービスについて、エージェントは、サービスに対応するXML通知を生成し、分散コンピューティング環境内のスペースで通知を登録する。一実施形態では、エージェントは、Jiniルックアップ・サービスのイベント通知について登録でき、新しいJiniサービスが登録されると実行される。新しいJiniサービスが通知されると、エージェントはJiniスペースで検索を実行し、新たに通知されたJiniサービスを特定し、分散コンピューティング環境のスペースを新しいサービスに対する新しいXML通知で更新する。一実施形態では、Jiniサービスが削除されると、エージェントはJiniサービスの削除を通知するイベントを受け取る。エージェントは、サービスのXML通知をスペースから削除する。
【0361】
一実施形態では、分散コンピューティング環境のスペースのXML通知を介してJiniサービスを呼び出すには、クライアントはスペース内のサービス通知をルックアップし、有効なメッセージをエージェントに送ってサービスにアクセスする。エージェントは、サービス・プロキシに対するRMIコールを介して対応するメソッドを呼び出してJiniサービスに対応するプロキシ・サービスを呼び出す。プロキシがインスタンス化されていない場合、エージェントはプロキシ・コードをダウンロードし、プロキシ・オブジェクトの新しいインスタンスをインスタンス化する。一実施形態では、すべてのクライアント接続は異なるプロキシ・インスタンスを持つ。クライアントから着信したメッセージは、エージェントによってプロキシのメソッド・コールに変換される。メソッド・コールからの結果は発信メッセージとしてクライアントに返される。
【0362】
一実施形態では、RMIメソッドへの引数として、単純なJavaの型のみを使用できる。Javaの複合型が必要な場合、1つまたは複数のデータ通知をコールの引数として渡し、データ通知はJava複合型のデータの位置とアクセス方法を示す。一実施形態では、エージェントがXMLメッセージがRMIメソッド・コール呼び出しへの初期変換を動的に実行する。エージェントはサービス・インターフェースを認識するので、クライアントに通知される対応するメッセージ・セットを生成する。
【0363】
図29は、分散コンピューティング環境の外部にあるクライアント1250を分散コンピューティング環境内のスペース1254にブリッジする方法を示す図である。ブリッジ・エージェント1252は、クライアント1250とスペース1254との間の仲介者として使用される。ブリッジ・エージェント1252は、クライアント1250が理解できる通信プロトコルでクライアント1250と通信する。ブリッジ・エージェント1252は、クライアントの通信プロトコルを、スペース1254によって提供される機能を実行するためにスペース1254と通信するために必要なXMLメッセージング・プロトコルにマップする。ブリッジ・エージェント1252は、クライアント1250の要求があったときに、スペース1254上のサービスを特定して実行する。たとえば、クライアント1250は、スペース1254に特定のタイプのすべてのサービスのリストを要求することができる。ブリッジ・エージェント1252は、サービス通知1256a〜cを特定し、結果をクライアント1250に返す。それとは別に、結果を結果スペースにポストし、結果の位置をクライアント1250に返す。クライアント1250は、その後、サービス通知1256aの実行を選択し、メッセージ(クライアント1250の通信プロトコルで)をブリッジ・エージェント1252に送る。ブリッジ・エージェント1252は、そこで、サービス通知1256aによって表されるサービスを実行するのに必要なXML要求メッセージを送り、サービスの結果をクライアント1250に返す。結果をクライアント1250に直接返す以外のサービスの結果の処理方法は、上の「スペース」の項で説明しているように使用できる。ブリッジ・エージェント1252は、外部クライアント1250のサービスとして機能し(外部クライアントのプロトコルを介して)、また分散コンピューティング環境内のクライアントとして機能して、分散コンピューティング環境内のサービスを外部クライアントにブリッジする。
【0364】
ときには、分散コンピューティング環境内であっても、クライアントおよびサービスは互いに直接通信し、また共通のスペースとのみ通信することはできない。この場合、スペース・サービスはクライアント・サービスにブリッジするサービス・プロキシを自動的に作成する。プロキシの主要な役目は、スペースを介してクライアントとサービスとの間でメッセージをやりとりすることである。サービス・プロキシは動的に作成される。作成メカニズムは、スペースの実装に左右される。プロキシ・メカニズムの説明については、図30を参照のこと。クライアント554およびサービス556は、たとえば、これらが異なるトランスポートまたはネットワーク・プロトコルをサポートしているため、分散コンピューティング環境内で直接通信することができない場合がある。ただし、両方とも両方のプロトコルをサポートするスペース552とは通信できる。スペース・サービスは、クライアント554をサービス556にブリッジするプロキシ550を作成する。プロキシの共通の形態はブラウザ・プロキシである。プラザ・プロキシ(サーブレットとして実装されるは最も一般的である)は、従来のWebページ要求をメッセージに変換する。「スペース」の項のスペースルックアップ・サービス(およびプロキシ)の説明も参照のこと。
【0365】
分散コンピューティング環境は、分散コンピューティング環境内のクライアントをエンタプライズ・サービスにブリッジするメカニズムを備える。分散コンピューティング環境の一実施形態では、クライアントをエンタプライズ・サービスにブリッジする方法は、分散コンピューティング環境内のクライアント、分散コンピューティング環境内のブリッジ・サービス、およびエンタプライズ環境内のエンタプライズ・サービスを含む。分散コンピューティング環境のブリッジ・サービスは、クライアントとエンタプライズ・サービスとの間のブリッジ・サービスとして使用される。エンタプライズは、企業、中小企業、非営利団体、政府機関、またはその他の種類の組織である。エンタプライズでは、その事業の一部を実施するためにエンタプライズ・コンピューティング環境を利用する。エンタプライズ・コンピューティング環境は、さまざまなエンタプライズ・サービスを含む。分散コンピューティング環境内のクライアントは、エンタプライズ・コンピューティング環境のサービスを使用することを望んでいる場合がある。エンタプライズ・サービスは、三層クライアント/サーバ・アーキテクチャなどのさまざまなアーキテクチャに基づく。エンタプライズ・サービスを実装するのに使用できるアーキテクチャの一例としてEnterprise JavaBeansがある。Enterprise JavaBeans(EJB)は、クライアント/サーバ・モデルを使用してエンタプライズ環境のサーバー部分で実行する、Javaプログラミング言語で書かれたプログラム・コンポーネントを設定するアーキテクチャである。オブジェクト指向プログラミングおよび分散オブジェクト技術では、コンポーネントとは、アプリケーションを形成するために分散ネットワーク内で同じコンピュータまたは他のコンピュータ内の他のコンポーネントと組み合わせて再利用可能なプログラムの基本要素のことである。EJBは、プログラム・コンポーネント(Beans)をネットワーク内のクライアントに配布するJavaBeans技術に基づき構築されている。EJB Beanまたはコンポーネントを配置するには、コンテナと呼ばれる特定のアプリケーションの一部である必要がある。Enterprise JavaBeansには、session beansとentity beansの2種類のbeansがある。entity beansは、session beansと異なり、永続性があり、最初の動作または状態を保持できるものである。EJBを使用すると、実質的にすべての主要なオペレーティング・システムに配置することができる。EJBのプログラム・コンポーネントは、一般にサーブレット(小さなサーバ・プログラム)と呼ばれている。サーブレットを実行するアプリケーションまたはコンテナは、アプリケーション・サーバと呼ばれることもある。
【0366】
ブリッジ・サービスは、XMLメッセージ通信を介してクライアントと対話し、分散ネットワーク環境の外にあるエンタプライズ・サービスに要求を行うのに必要な入力パラメータを収集する。たとえば、クライアントが分散コンピューティング環境内の他のサービスとまったく同様にブリッジ・サービスをルックアップし、インスタンス化することができる。ブリッジ・サービスは、エンタプライズ・サービスと対話して、エンタプライズ・サービスを実行する。この対話では、エンタプライズ・サービスが理解できるプロセス間通信アーキテクチャを使用する。たとえば、エンタプライズ・サービスがEnterprise JavaBeans(EJB)で実装されている場合、ブリッジ・サービスはEJBを使用してエンタプライズ・サービスと通信する。ブリッジ・サービスは、エンタプライズ・サービスから結果を受け取り、その結果を直接クライアントに(XMLメッセージで)返すか、またはその結果を分散ネットワーク環境内のスペース(たとえば、結果スペース)に入れることができる。クライアントからは、ブリッジ・サービスは唯一のサービスのように見えるため(エンタプライズ・サービスはクライアントには隠されている)、クライアントはエンタプライズ・サービスのアーキテクチャをサポートする必要がない。複数の分散ネットワーク環境のクライアントが同じブリッジ・サービス(それぞれ、一意的なゲート・ペアを使用する)を使用して、エンタプライズ・サービスと対話する。
【0367】
ブリッジ・サービスまたはその他のエージェントは、分散コンピューティング環境内のスペースでブリッジ・サービス(およびエンタプライズ・サービス)の通知をパブリッシュする。たとえば、ブリッジ・サービスまたはその他のブリッジ・エージェントはJavaリフレクションを使用して、EJBで実装されているエンタプライズ・システム内のサービスについてBeansを調べ、Beansへのブリッジ・サービスのサービス通知を作成し、分散コンピューティング環境内のスペースにそれらの通知をパブリッシュする。リフレクションは、クラスのフィールド、メソッド、およびコンストラクタに関する情報を発見し、セキュリティ制限の範囲内でオブジェクトに対する基礎の対応する部分の上で動作するリフレクトされたフィールド、メソッド、およびコンストラクタを使用するJavaコードのメソッドである。リフレクションAPIは、ターゲット・オブジェクトの公開メンバまたは所定のクラスで宣言されているメンバのいずれかにアクセスするのが必要なアプリケーションに対応している。ブリッジ・サービスが通知されると、クライアントは、サービスを提供するエンタプライズ・サービスのアーキテクチャを詳細を知ることなく、分散ネットワーク環境内の他の通知されたサービスと同様にブリッジ・サービス(およびしたがって対応するエンタプライズ・サービス)にアクセスできる。
【0368】
クライアントのディスプレイ
クライアントによって実行されたサービスからの結果を分散コンピューティング環境内で表示する方法はいくつかある。結果を表示するデバイスとしては、コンピュータのCRT、ラップトップのLCD、ノートブック・パソコンのディスプレーなど、プリンタ、スピーカ、および視覚的、聴覚的、またはその他の知覚可能な形式でサービスの結果を表示できるその他のデバイスがある。結果を表示する方法にはそれに限定されないが、次のものがある。
サービスが結果をクライアントに直接、または参照により返し、クライアントはそれらの結果の表示を処理する。
サービスが結果をクライアントに直接、または参照により返し、クライアントはそれらの結果を表示サービスに直接、または参照により渡し、表示サービスがそれらの結果を表示する。
サービスが結果の表示を直接処理する。
サービスが結果を表示サービスに直接、または参照により渡し、表示装置はそれらの結果を表示する。
【0369】
結果を表示する最後の方法では、クライアントが表示サービスを指定する。たとえば、クライアントがサービスの結果を表示するために使用することを望んでいるクライアントが常駐するデバイスの表示サービスまたは関連する表示サービスがある。クライアントがサービスを実行すると、クライアントはメッセージをサービスに送り、クライアントの表示サービスのサービス通知を指定する。その後、サービスは、ゲートを構築し、メッセージをクライアントの表示サービスに送ることができるようにする。したがって、結果を表示するとき、クライアントによって呼び出されたサービスはクライアントの表示サービスのクライアントとなり、その結果を(直接または参照により)表示のためその表示サービスに送る。クライアント−サービス間の関係、ゲート、およびメッセージングの詳細については、本書の他の項を参照のこと。
【0370】
従来のアプリケーション・モデルは、通常、所定のおおむね静的なユーザ・インターフェースおよび/またはデータ特性に基づく。従来のアプリケーションに変更を加えるには、コードを修正し再コンパイルする必要がある。サービスを通知し、分散コンピューティング環境のサービスと通信するためのXMLメッセージ・スキーマを指定するための記述されたメカニズムを使用して、アプリケーション(クライアント、サービス、など)が自動的に表示オブジェクトの記述するためのメカニズムを提供する。動的表示オブジェクトを使用すると、新しいコードをダウンロードしたり、アプリケーションを再コンパイルしたり、アプリケーションを再リンクすることなく、アプリケーションの動作を変更することができる。同じ結果を異なる形式で表示する、表示のため結果の一部を抽出する、および異なる表示デバイスに結果を表示する表示スキーマを提供する。
【0371】
図31は、一実施形態による関連するディスプレイ1302および表示サービス1304を備えるクライアント1300の一実施形態の図である。表示サービス1304の通知1306をスペース1308に登録する。サービス1310の通知1312をサービス1310によりスペース1314に登録する。それとは別に、サービス通知1312および表示サービス通知1306を同じスペース上に登録する。クライアント1300は、スペース1314上のサービス通知1312をサーチし発見して1320、サービス1310に要求を送る(サービス1310から結果または応答を受け取る)ためのゲートを設定する。一実施形態では、メッセージは通知1312の一部として受け取ったXMLスキーマで指定したXMLメッセージの形式である。クライアント1300は、1つまたは複数のメッセージ(1322)をサービス1310に送る。この1つまたは複数のメッセージは、サービス1310を実行するメッセージと、表示のため結果を表示サービス1304に送るようサービス1310に命令するメッセージを含み、表示サービス通知1306の位置を指定する。通知の位置は、Uniform Resource Identifier(URI)として指定する。
【0372】
クライアント1300からサービス1310にメッセージを命令として送ると、サービス1310は表示可能な結果を出力する1つまたは複数のオペレーションを実行する。サービス1310は、クライアント1300から受け取った位置情報に基づいてスペース1308から表示サービス通知1306を取り出す。サービス通知は、XMLメッセージ・スキーマと、表示サービス1304とインターフェースするのに必要なその他の情報含む。次に、サービス1310は要求を表示サービス1304に送る(そして表示サービス1304から結果を受け取る)ためのゲートを設定する。他の実施形態では、クライアント1300からサービス1310へのメッセージは、XMLスキーマと、サービス1310が表示サービス1304へのゲートを構築するのに必要なその他の情報を含むか、または表示サービス1304への事前に構築されたゲートを備える。
【0373】
クライアント1300によって要求されたオペレーションの実行中、または完了した後、サービス1310は、表示サービス1304のスキーマによって指定されている方法によりオペレーションの結果を表示サービス1304に送る(たとえば、XMLメッセージ・スキーマでまたは表示サービスのパラメータとしての参照により指定されたXMLメッセージ内にカプセル化される)。この点で、サービス1310は、表示サービス1304のクライアントである。その後、表示サービス1304は、クライアントのディスプレイ1302上にサービス1310から受け取った、または指示された結果をフォーマットして表示する。
【0374】
いくつかの実施形態では、サービス1310は、結果スペース(図に示されていない)などのスペースにオペレーションの結果をポストする。その後、サービス1310は、オペレーションも格納されている結果への参照を含むメッセージを表示サービス1304に送る。一実施形態では、参照はURIの形式である。その後、表示サービス1304は、スペースから結果を取り出し、その結果をディスプレイ1302に表示する。
【0375】
従来のアプリケーション・モデルは、通常、所定のおおむね静的なユーザ・インターフェースおよび/またはデータ特性に基づく。従来のアプリケーションに変更を加えるには、コードを修正し再コンパイルする必要がある。サービスを通知し、分散コンピューティング環境のサービスと通信するためのXMLメッセージ・スキーマを指定するための記述されたメカニズムを使用して、アプリケーション(クライアント、サービス、など)が自動的に表示オブジェクトの記述するためのメカニズムを提供する。動的表示オブジェクトを使用すると、新しいコードをダウンロードしたり、アプリケーションを再コンパイルしたり、アプリケーションを再リンクすることなく、アプリケーションの動作を変更することができる。
【0376】
動的表示オブジェクトはXMLスキーマで記述できる。これらのスキーマは、スペース内で通知される。これらのスキーマは、表示スキーマまたは表現スキーマと呼ぶ。その後、アプリケーション(またはアプリケーションの代わりに動作するその他のサービス)は、サービス通知からスキーマにアクセスし、フォーマット、データ型、およびスキーマに格納されているその他の情報に基づきデータを表示する。
【0377】
動的表示オブジェクトを含むスキーマの一例を以下に示す。
【0378】
上記のスキーマは、アプリケーションを再コンパイルすることなく、次のように変更できる。
【0379】
図32Aおよび図32Bは一実施形態により動的表示オブジェクトのスキーマを使用する例を示す図である。図32Aで、アプリケーション1320(クライアント、サービス、またはその他のアプリケーション)はスペース1326に格納されている表現スキーマ通知1324で実装されている。表現スキーマ通知は、データ型、書式指定、フォント、位置、色、およびディスプレイ1322にアプリケーションのデータを表示するために使用されるその他の情報を記述する要素を含む。アプリケーション1320のための複数の表現スキーマ通知がある。たとえば、一連の表示ページ(たとえば、WebサイトのWebページ)内の表示ページごとに1つのスキーマがある。
【0380】
一実施形態では、アプリケーション1320は、発見および/またはルックアップ・サービスを呼び出して、表現スキーマ通知を特定する。発見および/またはルックアップ・サービスは、1つまたは複数の通知、およびURIの一覧を含むXMLドキュメントを特定の表示形式などを記述するスキーマのそれぞれに返す。その後、アプリケーション1320は、XMLドキュメントから1つまたは複数の表現スキーマを選択する。アプリケーション1320は、続いて、そのスキーマを解析し、スキーマ要素をユーザ・インターフェース・コンポーネントに分解する。これらのコンポーネントは、結果データを特定し、フォーマットし、適切なディスプレイ上に表示するために使用される。結果データは、たとえば、サービスの実行または結果スペースから得られる。そこで、静的な表示または所定の表示を用意するのとは反対に、アプリケーション1320は、アプリケーションを再構築することなく動的に変更できる表現スキーマに従って結果を表示するように構成される。
【0381】
同じ結果を異なる形式で表示する、表示のため結果の一部を抽出する、および異なる表示デバイスに結果を表示する表現スキーマを提供する。
【0382】
一実施形態では、1つまたは複数の表現スキーマ通知を分散コンピューティング環境内の1つまたは複数のスペースに格納することができる。1つまたは複数のデバイスでアプリケーションのコピーを呼び出すと、アプリケーションのそれぞれのコピーがサービスに対するサーチを実行し、アプリケーションによって使用される表現スキーマの通知を発見する。そこで、表示情報の中央永続的ストアをアプリケーションの複数のインスタンス用または他のアプリケーション用に保持することができる。表示情報は、アプリケーションを再コンパイルしたり再インストールすることなく、中央の場所で修正することができる。
【0383】
図32Bでは、クライアント1328は、スペースのサービス1330のサービス通知を特定する。サービス1330を呼び出すと、クライアント1328はスペース1326の表現スキーマ通知1324の位置をサービス1330に渡す。サービス1330が結果をクライアント1328に送る用意が整っている場合、表現スキーマ通知1324によって提供される表現スキーマからの表示情報を使用してディスプレイ1322(クライアント1328が実行されているデバイスに結合されている)に結果を表示することができる。結果の表示方法を変更するには、表現スキーマ通知1324のXMLメッセージを修正するか、または異なる表現スキーマを選択すればよく、クライアント1328またはサービス1330で変更する必要はない。サービス1330は表示サービスでよい。
【0384】
クライアント、アプリケーション、またはサービスは、1つまたは複数のサービスによって提供されるさまざまなオペレーションの結果を表示するための複数の表示スキーマを備える。それとは別に、表示スキーマは1つまたは複数のクライアントのさまざまな結果を表示するための情報を含む。そこで、クライアント1328は、1つの表示スキーマまたは複数の表示スキーマを使用することができる。異なる形式で、または異なるディスプレイに同じ結果をフォーマットして表示する2つまたはそれ以上の表示スキーマが用意されている。たとえば、結果セットに対しディスプレイの画面に結果を表示するための表示スキーマを1つ用意し、結果を印刷するための表示スキーマをもう1つ用意する。また、同じアプリケーション、クライアント、またはサービスのコピーを表示能力の異なるデバイスで実行し、異なるデバイスの表示要求条件を満たす2つまたはそれ以上の表示スキーマを提供するようにする。
【0385】
文字列管理
従来のシステムでの文字列処理は、一般に、あまり効率がよくなく、特に、可変サイズの文字列の場合に効率がよくなく、たとえば、文字列をメモリ内でコピーしたり移動したりするときにメモリ空間を浪費することになる。文字列処理がこのように不効率であることは、特に、組み込み型システムなどの省メモリ・システムでは問題になる。メモリ、特にスタック領域、および動的割り当て用の領域のサイズが、省スペース/システムでは制限される。そこで、組み込み型システムなどの省スペース・システム内で実行するプログラムでの文字列処理を効率良く行う方法が望まれる。
【0386】
図33Aは、Cプログラミング言語による代表的文字列表現の図である。Cでは、文字列は、文字列1452の先頭文字のメモリ位置(アドレス)を格納した文字型ポインタ1450(string1)で表される。他の文字は、文字列1452の中の先頭文字の後に続き、通常、メモリ内の連続するアドレス指定可能なバイト位置に格納される。C文字列における文字は通常、8ビットである。C文字列の文字は、ASCII文字である。C文字列は、NULLを終端文字とする必要がある。NULLは、プラットフォームで定義されている256個の使用可能な8ビット値のうちの1つで、通常、2進値0b00000000である。文字列1452は、13バイトを占有する(12個の文字と終端文字を合わせて13個)。
【0387】
Cにおける文字列操作の一例として、strlen()関数があり、これは、通常、標準Cライブラリの実装に付属している。strlen()関数は、入力として文字列ポインタをとり、終端文字を含まない文字列の長さ(バイト)を返す。たとえば、文字ポインタ1450をstrlen()関数に渡すと、長さ12が返される。strlen()関数は、終端文字が見つかるまで文字数を数えながら文字列内を端から端まで走査するという方法で実装できる。
【0388】
Cの文字列コピーは、通常、Cライブラリ関数のstrcpy()またはstrncpy()で処理するが、これは次のように実装されている。
strcpy()関数は、文字ポインタsrcが指している文字列(終端文字を含む)を文字ポインタdestが指している文字列にコピーする。文字列は重なることはなく、コピー先文字列destはコピーを受け入れるだけ十分に大きくなければならない。strncpy()関数も同様であるが、ただし、srcのうちnバイト以下がコピーされる。したがって、srcの先頭nバイトに終端文字がなければ、結果に終端文字は含まれない。必要ならば、strncpy()の後のコードに、終端文字をdest文字列の終わりに追加する命令を入れることができる。srcの長さがn未満の場合、destの残り部分はNULLで埋められる。strcpy()およびstrncpy()関数は、コピー先文字列destへのポインタを返す。図33Bは、文字列1452に対するstrncpy()関数の結果の一例を示しているが、これは以下のパラメータを付けてstrncpy()を呼び出した場合である。
ただし、string2は文字列1452の終端文字の後の最初のバイトを指している文字ポインタ1454であり、string1+3は3バイトだけインクリメントされた文字ポインタ1450であり、5はコピー元の場所string1+3からstring2にコピーする文字の個数(バイト数)である。コピーした後、string1からコピーされた5個の文字の後の次の文字は、終端文字に設定される(文字はコピーの前に終端文字に初期化されている場合がある)。したがって、2つの文字列はメモリ内で(13+6)=19バイトを占有することになる。文字ポインタ1450をコピー元文字列としてstrcpy()関数を適用した場合、元の文字列1452と結果である新しい文字列は(13*2)=26バイトを占有することになる。
【0389】
図33Cは、一般のシステムで、具体的には組み込み型システムなどの省スペース・システムで文字列を表現し、管理する効率的な方法を示す図である。文字列1452は、メモリ内に12バイトとして格納される(終端文字は不要である)。文字列構造1460は、文字列1452の先頭文字と末尾文字へのポインタ(アドレス(A)とアドレス(L))を含む。この文字列構造を使用すると、末尾文字へのポインタから先頭文字へのポインタを引くことで、文字列の長さを効率よく計算できる。
【0390】
文字列コピー操作strcpy()やstrncpy()などの操作も、より効率的に処理できる。図33cに示されているようなものなどの文字列構造を使用して、新しい文字列構造1462を作成し、先頭文字ポインタと末尾文字ポインタを文字列1452内のそれぞれの文字を指すように初期化する。したがって、文字列1452の一部または全部をその文字列用の新しい記憶域にコピーする必要はない。文字列は長さが数百文字あるいは数千文字にさえ達することがあるため、文字列構造とその文字列構造を利用するように実装されている文字列メソッドを使用してメモリを節約することは注目に値する。文字列の一部または全部のコピーを処理するこのような方法のことを、「部分文字列管理」と呼び、文字列の一部(部分文字列)を効率よく処理することができる。
【0391】
標準C文字列ライブラリの他の文字列関数を、図33Cに示されているような文字列構造を利用する文字列関数で置き換えることができる。他のC文字列関数の例として、それに限定されないが、strstr()、strcat()、およびsprintf()がある。図33Cで説明されているような文字列処理構造および方法は、XMLドキュメントの階層構造とともに使用する際に、組み込み型システムなどの省メモリ・システムでXMLテキスト(XMLメッセージなど)を効率よく処理することができる。購買発注書を定義するXMLスキーマの簡単な例を以下に示す。
【0392】
XMLドキュメントの階層構造により、これらを再帰的に処理することができ、それぞれの再帰のレベルで次々にドキュメントのさらに小さな部分を処理してゆく。さまざまな部分への参照が再帰的に記録され、処理される。図33Cに関して説明されているような文字列構造を使用して、さまざまな部分を記録することができる。このようにして、XMLドキュメントの最小単位が再帰的に処理される一実施形態で、特定のXMLタグの内容(上の例の1行)を効率よく決定できる。所定のスコープ内のタグを効率よく列挙し処理できるため、同じスコープ内でタグが繰り返されるドキュメントもまた効率よく処理できる。
【0393】
図33Cで説明しているような文字列構造を使用してXMLドキュメントを処理する再帰的方法では、XMLドキュメント文字列全体を表し、ドキュメント文字列内の先頭バイトと末尾バイトを指している文字列構造を受け付けることができる。この方法では、ドキュメントの次のサブセクションを特定して、そのサブセクションを含むドキュメント文字列全体の部分文字列を表す文字列構造をそのサブセクションの型に対応する処理関数に渡す。サブセクション自体を、サブセクションの型に対応する処理関数に渡される文字列構造により表されるサブセクションの他のレベルに分解できる。この方法は、ドキュメント全体が処理されるまで、XMLドキュメントのサブセクションを再帰的に処理し続けることができる。
【0394】
再帰的処理で文字列構造を使用すると、処理のためサブセクションのコピーを作成しなくても処理を実行できる。サブセクションのコピーは、再帰が深くなるにつれ同じデータのコピーが増えてゆくため、再帰的処理では特にコストがかかる。文字列構造を使用すると、サブセクションの中の先頭バイトと末尾バイトへのポインタを含む文字列構造のみを作成し、次のレベルに引き渡すだけでよい。サブセクションの長さを決定するなどの他の操作は、文字列構造に格納されているアドレス情報を使用することで効率よく実行できる。さらに、文字列構造を使用すると、C文字列の終端に使用される文字などの終端文字は、必要なくなり、組み込み型デバイスなど省スペース・デバイスのメモリを節約できる。
【0395】
オブジェクトのXML表現
前述のように、Jini RMIは、最小限のメモリ占有面積と最低限の帯域幅を備えるシン・クライアントなどのいくつかのクライアントには実用的でないと思われる。Jini RMIと関連するシリアライゼーションは、実行時間が長く、コード・サイズが大きく、JVMリフレクションAPIを必要とし、Java固有オブジェクト表現である。Javaデシリアライゼーションも実行に時間がかかり、コード・サイズが大きく、シリアライズ・オブジェクト・パーサを必要とする。Javaベースのシン・クライアントであっても、Jini内で要求されたときにネットワーク経由で(必ず)返される巨大なJavaオブジェクト(必要なクラスに沿って)を受け入れられない場合がある。
【0396】
分散コンピューティング環境の実施形態を使用するとよりスケーラブルな分散コンピューティング・メカニズムを実現できる。分散コンピューティング環境には、分散コンピューティングを容易に行えるようにするAPIレイヤが含まれる。APIレイヤは、クライアントとサービスとの間のメッセージ発送およびメッセージ受取機能を備える。このメッセージングAPIは、拡張マークアップ言語(XML)など、表現データまたはメタデータ形式による単純メッセージ用のインターフェースを提供する。実施形態はここではXMLを採用しているものについて説明しているが、他の実施形態では他のメタデータ型言語または形式を使用することもできることに注意されたい。いくつかの実施形態では、APIレイヤは、さらに、Javaオブジェクトなど、オブジェクト間の通信やオブジェクトの受け渡しのためのメッセージのインターフェースを備えることもできる。APIレイヤ102を通じてアクセス可能なオブジェクトは、XMLなどの表現データ形式で表現される。そのため、オブジェクト自体とは反対に、オブジェクトのXML表現は操作が可能である。
【0397】
APIレイヤは、メッセージング・レイヤの上に置かれる。メッセージング・レイヤは、XMLなどの表現データ形式に基づいている。一実施形態では、XMLメッセージは、APIレイヤの呼び出しに従って、メッセージング・レイヤによって生成される。メッセージング・レイヤは、クライアントとサービスとの間で送ることができる定義済みの静的メッセージを備えることができる。メッセージング・レイヤは、さらに、動的に生成されるメッセージにも対応できる。一実施形態では、JavaオブジェクトなどのオブジェクトをXML表現に動的に変換(コンパイル)することができる。オブジェクトは、コードおよび/またはデータ部分を含む。オブジェクトのコードおよび/またはデータ部分は、XML表現のXMLタグにより識別されるコード・セグメントとデータ・セグメントにコンパイルすることができる。メッセージング・レイヤにより、XMLオブジェクト表現はメッセージとして送ることができる。逆に、メッセージング・レイヤは、オブジェクトのXML表現を受け取ることができる。その後、そのメッセージからオブジェクトを再構成(逆コンパイル)できる。再構成では、XML表現のコードおよび/またはデータ・セグメントを識別するタグのXML表現を調べ、タグに格納されている情報を使用して、そのオブジェクトのコードおよび/またはデータ部分を識別し、逆コンパイルする。
【0398】
オブジェクトのXML表現の作成と発送
図34は、一実施形態により、クライアント1500とサービス1502の間でJavaオブジェクトを移動するプロセスを示す図である。サービス1502は、スペース・サービスを含む、分散コンピューティング環境でサポートされているサービスであればどのようなものでもよい。クライアント1500は、サービス1502のサービス通知から受け取ったXMLスキーマを使用して作成したゲート1504を使用し、サービス1502の対応するゲート1506と通信する。ある時点で、クライアント1500は、Javaオブジェクト1510をサービス1502に送る必要がある。Javaオブジェクト1510は、他のオブジェクトを参照し、次にこのオブジェクトは他のオブジェクトを参照し、というように続いてゆく。Javaオブジェクト1510とその参照されているオブジェクト、次に参照するオブジェクト、というように続くことを、オブジェクト・グラフと呼ぶ。
【0399】
Javaオブジェクト1510は、Javaオブジェクト・コンパイル・プロセス1512に渡されてコンパイルされ、オブジェクト・グラフのXML表現を出力する。オブジェクト・グラフのXML表現は、XMLデータ・ストリーム1514としてゲート1504に渡される。XMLデータ・ストリーム1514は、オブジェクト・グラフ内のすべてのオブジェクトのXML表現を含む。一実施形態では、オブジェクト・グラフ内のオブジェクトは、XMLデータ・ストリーム1514内に再帰的に格納される。
【0400】
ゲート1504は、その後、XMLデータ・ストリーム1514をメッセージ1516にパッケージして、メッセージ1516をサービス1502のゲート1506に送る。ゲート1506は、XMLメッセージ1516からXMLデータ・ストリーム1514を抽出して、XMLデータ・ストリーム1514をXMLデータ・ストリーム逆コンパイル・プロセス1518に送り、逆コンパイルを行い、Javaオブジェクト1510を含むオブジェクト・グラフを備えるオブジェクトを出力する。一実施形態では、オブジェクト・グラフ内のオブジェクトは、XMLデータ・ストリーム1514内に再帰的に格納され、したがって、再帰的逆コンパイル・プロセスが使用される。
【0401】
サービス1502でJavaオブジェクトをクライアント1500に送る必要がある場合、実質的に類似するプロセスを使用できる。Javaオブジェクト1520は、Javaオブジェクト・コンパイル・プロセス1512に渡されてコンパイルされ、オブジェクト・グラフのXML表現を出力する。オブジェクト・グラフのXML表現は、XMLデータ・ストリーム1522としてゲート1506に渡される。ゲート1506は、その後、XMLデータ・ストリーム1522をメッセージ1524にパッケージして、メッセージ1524をクライアント1500のゲート1504に送る。ゲート1504は、XMLメッセージ1524からXMLデータ・ストリーム1522を抽出して、XMLデータ・ストリーム1522をXMLデータ・ストリーム逆コンパイル・プロセス1518に送って逆コンパイルを行い、Javaオブジェクト1520を含むオブジェクト・グラフを備えるオブジェクトを出力する。
【0402】
他の実施形態では、ゲートはJavaオブジェクトのコンパイルおよび逆コンパイルを実行する役目を持つ。この実施形態では、Javaオブジェクト1510はゲート1504に渡される。ゲート1504は、オブジェクト1510をJavaオブジェクト・コンパイル・プロセス1512に渡してコンパイルし、オブジェクト・グラフのXML表現をXMLデータ・ストリーム1514に出力する。ゲート1504は、その後、XMLデータ・ストリーム1514をメッセージ1516にパッケージして、メッセージ1516をサービス1502のゲート1506に送る。ゲート1506は、XMLメッセージ1516からXMLデータ・ストリーム1514を抽出して、XMLデータ・ストリーム1514をXMLデータ・ストリーム逆コンパイル・プロセス1518に送って逆コンパイルを行い、Javaオブジェクト1510を含むオブジェクト・グラフを備えるオブジェクトを出力する。Javaオブジェクトをサービス1502からクライアント1500に送るプロセスは、オブジェクトをクライアントからサービスに送るプロセスと実質的に類似している。
【0403】
一実施形態では、オブジェクト・コンパイル・プロセス1512とオブジェクト逆コンパイル・プロセス1518は、両方とも、クライアント1500とサービス1502に存在し、プログラムする際に、コンパイルと逆コンパイルを2つのデバイスで実質的に同じように実行できるため、一方のオブジェクト出力は他方のオブジェクト入力と実質的に同一である。一実施形態では、Javaオブジェクトの記述を含むXMLスキーマをコンパイル・プロセスや逆コンパイル・プロセスにおいてクライアントおよび/またはサービスの両方で使用できる。一実施形態では、Javaオブジェクトのコンパイルや逆コンパイルで使用するXMLスキーマをサービスにより、サービス通知でクライアントに渡すことができる。
【0404】
XMLでは、言語独立およびプラットフォーム独立のオブジェクト表現形式を備えている。したがって、オブジェクトをオブジェクトのXML表現にコンパイルし、逆コンパイルしてオブジェクトを再現する場合に、図34に示されているようなプロセスは、Javaオブジェクトの移動に限られず、実施形態によっては、ネットワーク内のエンティティ間で他の型のオブジェクトを移動するのにも適用される。
【0405】
JVMコンパイル/逆コンパイルAPI
図35aおよび図35bは、仮想マシン(たとえば、JVM)がオブジェクト(たとえば、Javaオブジェクト)をオブジェクトのXML表現にコンパイルする拡張機能および(Java)オブジェクトのXML表現を(Java)オブジェクトに逆コンパイルする拡張機能を含む実施形態を示すデータ流れ図である。JVMは、コンパイル/逆コンパイル拡張機能のアプリケーション・プログラミング・インターフェース(API)を備えることができる。クライアント1500およびサービス1502は、JVM内で実行中の場合がある。JVMは、同じデバイスまたは異なるデバイスに置くことができる。
【0406】
図35aと図35bの両方で、JVM XMLコンパイラ/逆コンパイラAPI1530は、Javaオブジェクト1510を入力として受け付け、オブジェクト1510とその参照されているオブジェクト(オブジェクト1510のオブジェクト・グラフ)のXML表現をXMLデータ・ストリーム1514に出力する。さらに、JVM XMLコンパイラ/逆コンパイラAPI 1530は、XMLデータ・ストリーム1522を受け付けることができ、これは、オブジェクト1520のXML表現とその参照されているすべてのオブジェクト(オブジェクト1520のオブジェクト・グラフ)を含み、Javaオブジェクト1520(およびそのオブジェクト・グラフ内のすべてのオブジェクト)を出力する。
【0407】
図35aは、Javaオブジェクト1510を送るときにクライアントがJVM XMLコンパイラ/逆コンパイラAPI1530を呼び出す場合の一実施形態を示している。クライアント1510は、Javaオブジェクト1510をAPI 1530に渡し、オブジェクトをコンパイルして、XML表現を出力し、そのXML表現をXMLデータ・ストリーム1514に格納し、XMLデータ・ストリーム1514を出力する。その後、クライアントは、XMLデータ・ストリーム1514をゲート1504に渡すことができる。ゲート1504は、その後、XMLデータ・ストリーム1514をXMLメッセージ1516にパッケージして、メッセージ1516をサービス1502に送る。
【0408】
XMLメッセージ1524をサービス1502から受け取った後、ゲート1522はメッセージ1524からXMLデータ・ストリーム1522を抽出し、データ・ストリーム1522をクライアント1500に渡す。クライアント1500は、JVM XMLコンパイラ/逆コンパイラAPI 1530を呼び出して、API 1530にXMLデータ・ストリーム1522を渡す。その後、API 1530はXMLデータ・ストリーム1522を逆コンパイルして、Javaオブジェクト1520およびその他のオブジェクトをそのオブジェクト・グラフに出力し、オブジェクトをクライアント1500に返す。
【0409】
図35bは、Javaオブジェクト1510を送るときにJVM XMLコンパイラ/逆コンパイラAPI 1530がゲートによって呼び出される場合の他の実施形態を示している。クライアント1510は、Javaオブジェクト1510をゲート1504に渡す。ゲート1504は、オブジェクト1510をAPI 1530に渡し、オブジェクトをコンパイルしてXML表現を出力し、そのXML表現をXMLデータ・ストリーム1514に格納し、XMLデータ・ストリーム1514を出力する。ゲート1504は、その後、XMLデータ・ストリーム1514をXMLメッセージ1516にパッケージして、メッセージ1516をサービス1502に送る。
【0410】
XMLメッセージ1524をサービス1502から受け取った後、ゲート1522はメッセージ1524からXMLデータ・ストリーム1522を抽出し、データ・ストリーム1522をJVM XMLコンパイラ/逆コンパイラAPI 1530に渡す。その後、API 1530はXMLデータ・ストリーム1522を逆コンパイルして、Javaオブジェクト1520およびその他のオブジェクトをそのオブジェクト・グラフに出力する。そしてゲートは、Javaオブジェクト1520とその他のオブジェクトをクライアント1500に送る。
【0411】
一実施形態では、JVM XMLコンパイラおよび逆コンパイラは、JVMの統合された機能として実装することができる。他の実施形態では、XMLコンパイラおよび逆コンパイラは、JVMの標準拡張機能でのAPIメソッド呼び出しで具現化することができ、そのため、コアJVMを修正する必要はない。JVMは、JVM内で実行するプロセス(クライアントおよび/またはサービス)にJVM XMLコンパイラ/逆コンパイラAPI 1530を供給するため、プロセスはJVMによって提供されているJavaオブジェクト・コンパイル/逆コンパイル機能にアクセスすることができる。一実施形態では、プロセスがオブジェクト・コンパイル/逆コンパイルを利用するために、そのプロセスで実行されるJVMにJVM XMLコンパイラ/逆コンパイラ機能とAPI 1530を備える必要がある。リフレクションとシリアライゼーションを使用してオブジェクトを変換して送るメソッドは、通常、JVMから切り離された別のアプリケーションで実装される。オブジェクトの推移的閉包(trasitive closure)を動的に解析するときに、アプリケーション側がJVMに繰り返しアクセスし、一度にフィールド1つずつオブジェクトを取り出す必要がある。この作業は、遅くかつやっかいなプロセスになりがちであり、またアプリケーションとJVMコードが大量に必要になる。
【0412】
JVM内にJavaオブジェクト・コンパイル/逆コンパイル機能を実装することが好都合なのは、JVMがすでにオブジェクト・グラフの概念、および内容を理解しているからである。そこで、コンパイル/逆コンパイル機能で、XML表現を出力するためのオブジェクト・グラフの解析とオブジェクト・グラフを出力するためのXML表現の解析にJVMの知識を活用(そして、コードを再利用し)することができる。したがって、コンパイル/逆コンパイル機能では、リフレクションとシリアライゼーションを使用するオブジェクト送出メソッドの場合のように、JVMによって提供される機能を複製してはならない。これにより、コンパイル/逆コンパイル機能のコード占有領域を、リフレクションおよびシリアライゼーションを使用するオブジェクト送出メソッドと比べて小さくすることができる。また、オブジェクトは、JVM XMLコンパイラ/逆コンパイラAPIを1回呼び出すだけでコンパイルまたは逆コンパイルすることができる。
【0413】
さらに、オブジェクトのコンパイル逆コンパイルをJVMに統合することにより、オブジェクトのコンパイルおよび逆コンパイルを、リフレクションおよびシリアライゼーションを使用したメソッドよりも高速に実行することができる場合があるが、それは、リフレクションおよびシリアライゼーションで実装されたオブジェクト・トラバーサル・モデルでは、JVMの外部にあるコードはJavaオブジェクトの構造またはグラフを認識せず、オブジェクト・グラフをトラバースして、引き離し、最終的に、JVMを繰り返し呼び出してコンパイル(および逆コンパイルのための反転プロセス)を実行する必要があるからである。このプロセスは、コードの外部で、JVMの呼び出しを繰り返し実行する必要があるため、遅くなることがある。ここで説明したように、コンパイルおよび逆コンパイル機能をJVMに統合することにより、JVMの外部のコードからJVMへ繰り返し呼び出しを行わなくて済むようになる。一実施形態では、オブジェクトは、JVM XMLコンパイラ/逆コンパイラAPIを1回呼び出すだけでコンパイルまたは逆コンパイルすることができる。
【0414】
一実施形態では、コンパイラ/逆コンパイラ機能は分散コンピューティング環境におけるサービスとして実装できる。サービスは、スペース内でサービス通知をパブリッシュする。分散コンピューティング環境内のプロセスは、サーチまたは発見サービスを使用して、コンパイル/逆コンパイル・サービスを特定することができる。このプロセス(サービスのクライアント)は、次に、XML表現にコンパイルするJavaオブジェクトおよび/またはJavaオブジェクトに逆コンパイルするXML表現サービスに渡すことによりそのサービスを使用できる。Javaオブジェクトにコード(オブジェクトのメソッド)およびデータを含めることができる。オブジェクトのコードは、非一時的でなく、オブジェクトが作成された後このコードは変更されない。ただし、オブジェクトのデータは一時的な場合がある。同じJavaクラスから作成された2つのオブジェクトは、同一のコードを含んでいても、2つのオブジェクト内のデータが異なることがある。一実施形態では、コンパイル機能はJavaオブジェクトのデータをオブジェクトのXML表現にコンパイルするが、XML表現の中にオブジェクトの実際のコードが含まれない場合がある。一実施形態では、オブジェクトに関する情報をコンパイルされたXML表現の中に挿入し、そのオブジェクトのコードの再作成方法を受取側に通知するようにできる。XML表現をXMLデータ・ストリームに格納し、受け取り側プロセス(クライアントまたはサービス)に(たとえば、メッセージで)送ることができる。受け取り側プロセスは、XMLデータ・ストリームを逆コンパイル機能に渡すことができる。逆コンパイル機能は、XMLデータ・ストリームを逆コンパイルして、そのデータを含むJavaオブジェクトを出力することができる。一実施形態では、オブジェクトのコードは、XML表現に含まれるオブジェクトに関する情報を使用して逆コンパイル機能により再現することができるが、それはオブジェクトのコードが静的に定義され、そのオブジェクトを受け取るJVMがオブジェクトについての情報を利用して(必要ならば)そのコードを再現することができるからである。
【0415】
一実施形態では、コンパイル機能によって出力されたオブジェクトのXML表現に、にJavaオブジェクトのデータおよびそのJavaオブジェクトに関する情報を格納することができる。その情報は、Javaオブジェクトのクラス情報を含むことができる。オブジェクト・シグネチャを情報に含め、そのシグネチャを利用して、オブジェクトのクラスなどを識別することができる。逆コンパイル機能では、Javaオブジェクトに関する情報を使用してJavaオブジェクトのコードを再作成し、XMLデータ・ストリームからデータをJavaオブジェクトに逆コンパイルすることができる。したがって、逆コンパイルされたデータとオブジェクトを記述している情報から受け取り側クライアントまたはサービスを実行しているJVM上でコードとデータを含む完全なオブジェクトを再現することができる。一実施形態では、オブジェクトを記述する情報を1つまたは複数のXMLタグの中に格納することができる。一実施形態では、XMLデータ・ストリームを受け取るクライアントまたはサービスはオブジェクトを記述するXMLスキーマを含むことができ、またXMLスキーマを使用して、逆コンパイルされたデータとそのオブジェクトに関する情報からJavaオブジェクトを再構成することができる。逆コンパイル・プロセスは、オブジェクト・グラフを再帰的にたどり、オブジェクトによって参照されているオブジェクトを再構成するが、この作業は、XMLデータ・ストリームから参照されているオブジェクトのデータを逆コンパイルし、そのXMLデータ・ストリーム内の参照されているオブジェクトに関する情報から参照されているオブジェクトのコードを再作成することで行う。
【0416】
一実施形態では、コンパイル機能によって出力されたオブジェクトのXML表現に、オブジェクトのデータおよびオブジェクトのコードを識別する情報を格納することができる。一実施形態では、オブジェクトのコードを記述する情報をXMLデータ・ストリーム内の1つまたは複数のXMLタグの中に格納することができる。受け取ると、逆コンパイル機能はXMLデータ・ストリームからのコードに関する情報を使用してJavaオブジェクトのコードを再作成し、XMLデータ・ストリームからオブジェクトのデータを逆コンパイルすることができる。したがって、逆コンパイルされたデータとオブジェクトのコードを記述している情報から受け取り側クライアントまたはサービスを実行しているJVMでコードとデータを含む完全なオブジェクトを再現することができる。
【0417】
オブジェクトのXML表現を使用して分散コンピューティング環境内のエンティティ(通常、クライアントとサービス)間でオブジェクトを転送するシナリオを説明のため取り上げる。これらのシナリオは、例であり、制限することを意図していない。
【0418】
第1のシナリオでは、サービスはXMLコンパイラ/逆コンパイラを使用して、JavaオブジェクトをそのオブジェクトのXML表現にコンパイルし、そのXML表現をクライアントに送る。クライアントは、XMLコンパイラ/逆コンパイラを使用してXML表現を逆コンパイルし、オブジェクト内のデータに対し操作を実行し、後でXMLコンパイラ/逆コンパイラを使用してそのオブジェクトをオブジェクトのXML表現にコンパイルし、そのオブジェクトのXML表現をサービスに返す。
【0419】
第2のシナリオでは、サービスはXMLコンパイラ/逆コンパイラを使用して、JavaオブジェクトをそのオブジェクトのXML表現にコンパイルし、そのXML表現をクライアントに送る。次に、クライアントはXML表現を他のサービスに送り、これはXMLコンパイラ/逆コンパイラを使用してXML表現を逆コンパイルしてオブジェクトを再生成し、クライアントから(場合によってはデータを修正する)要求があったときにオブジェクトに対し操作を実行し、XMLコンパイラ/逆コンパイラを使用してその修正されオブジェクトをそのXML表現に再コンパイルし、そのオブジェクトのXML表現をクライアントに送る。
【0420】
第3のシナリオでは、サービスはXMLコンパイラ/逆コンパイラを使用して、JavaオブジェクトをそのオブジェクトのXML表現にコンパイルし、そのXML表現をオブジェクト・リポジトリまたはストア・スペースに送る。サービスは、次に、メッセージをクライアントに送り、XML表現の位置をクライアントに知らせる。メッセージは、XML表現のUniversal Resource Identifier(URI)を含む。その後、クライアントはストア・スペースからオブジェクトのXML表現を取り出し、XMLコンパイラ/逆コンパイラを使用してその表現を逆コンパイルしてオブジェクトを再現する。それとは別に、クライアントはオブジェクトのXML表現の位置を、そのオブジェクトで実行する操作の要求とともに他のサービスに送る。その後、他のサービスはストア・スペースからXML表現を取り出し、XMLコンパイラ/逆コンパイラを使用してXML表現を逆コンパイルしオブジェクトを再現して、オブジェクトに対し要求された操作を実行する。
【0421】
第4のシナリオでは、プロセス(クライアントまたはサービスの場合がある)は、ストア・スペースでサービス通知をサーチして見つけることにより、分散コンピューティング環境内のオブジェクト・リポジトリまたはストア・スペースを特定することができる。プロセスは、実行時に、複数のJavaオブジェクトを作成し、取得する。プロセスは、XMLコンパイラ/逆コンパイラを使用して、1つまたは複数のオブジェクトをオブジェクトのXML表現にコンパイルし、ストア・スペース・サービスのクライアントとして、オブジェクトのXML表現をストア・スペースに送り、後でアクセスできるように、また他のプロセスによってアクセスできるように格納する。
【0422】
オブジェクトのXML表現の逆コンパイルにおけるセキュリティ問題
スペースは、ここで説明しているように、分散コンピューティング環境でファイル・システムとして使用できる。システム内のファイルに対してはセキュリティをアクセス権限の形で提供する。アクセス権限は、ファイルのアクセス(開く、読み込む、書き出すの操作)ごとにチェックされる。したがって、分散コンピューティング環境でファイルのアクセス・セキュリティを実現する方法が望まれる。この方法はさらに、スペースに格納され、分散コンピューティング環境内のクライアントとサービスとの間で送られるJavaオブジェクトのXML表現に適用できる。
【0423】
一実施形態では、分散コンピューティング環境のデバイスのクライアントのユーザは、最初にクライアントにアクセスしたときに識別され、認証される。一実施形態では、ユーザは、識別と承認のためにスマート・カードなどの物理的識別機能を提供することができる。他の実施形態では、チャレンジ応答メカニズム(ユーザIDとパスワードなど)を使用して、識別と承認を行うことができる。さらに他の実施形態では、識別と承認に電子シグネチャなどの電子識別を使用する。識別と承認に他の方法を使用することもできる。識別されて承認されると、ユーザは、分散コンピューティング環境で1つまたは複数のサービスにアクセスすることを含む、クライアント上のさまざまな操作を実行できる。これらの操作のときに、上述のように、1つまたは複数のオブジェクトを作成する(ローカルで)か、またはどこか他のところ(たとえば、サービスまたはスペース)から取得することができる。オブジェクトは、修正して、オブジェクトのXML表現にコンパイルし、ローカルで、クライアントによって格納するか、または(遷移的または永続的)ストアのためスペース・サービスに送ることができる。オブジェクトのいくつかはサービスからオブジェクトのXML表現の形式で(サービスまたは他のサービスで格納)受取され、これは、XMLコンパイラ/逆コンパイラによって逆コンパイルされ、クライアント上にオブジェクトを再作成することができる。
【0424】
一実施形態では、オブジェクトのXML表現を逆コンパイルするときに、それぞれのXMLメッセージをチェックし、ユーザがそのオブジェクトに対するアクセス権限を持っていることを検証する。ユーザが適切なアクセス権限を持っていない場合、XMLコンパイラ/逆コンパイラはそのユーザに対してオブジェクトを逆コンパイルしない。一実施形態では、XMLコンパイラ/逆コンパイラによってセキュリティ例外がスローされる。一実施形態では、ユーザに対しアクセス違反が知らされる。
【0425】
オブジェクトに対し許されている作成者およびアクセス・レベル(作成者のみアクセス、読み取り専用、読み書き、削除、コピーなど)などのアクセス権限情報は、オブジェクトのXML表現を含むXMLメッセージ内に埋め込むことができる。アクセスの承認は、ユーザの識別と承認を行う際に決定される。たとえば、オブジェクトは、ほとんどのユーザに対し「読み取り専用」アクセスを許可し、オブジェクトの作成者には「読み書き」アクセスを許可する。ユーザが読み書きアクセス権限を使用してオブジェクトにアクセスしようとし、ユーザがオブジェクトを作成していなかった場合、逆コンパイル・プロセスにより、これがアクセス違反として検出され、アクセスが不許可になり、ユーザは通知を受ける。
【0426】
一実施形態では、ユーザがクライアントを使用して完了した場合、ユーザはログオフするか、またはそうでなければ、ユーザがクライアントを終了した(たとえば、スマート・カードを削除した)ことを通知する。逆コンパイルによりクライアント上に作成されたオブジェクトは、ユーザは終了したことをクライアントが検出したときに、自動的に検出される。このため、後からのユーザが故意にまたはうっかりそのユーザのオブジェクトにアクセスしようとしてもできない。一実施形態では、逆コンパイルによって作成されたすべてのオブジェクトは、ユーザが終了したことが検出されたときに削除される。他の実施形態では、クライアント上に永続的に作成されたオブジェクトの少なくとも一部を格納する方法が用意され(たとえば、アクセス権限情報を使用して)、これによりクライアントが後でオブジェクトにアクセスしたり、オブジェクトを他のユーザに提供してアクセスできるようにする。一実施形態では、ユーザは「スマート・カード」またはその他の物理的デバイスを使用し、クライアントへのアクセス権を取得する。ユーザは、スマート・カードをクライアント・デバイスに差し込んで、セッションを開始することができる。クライアントは、終了すると、スマート・カードを取り出す。クライアントは、スマート・カードが取り出されたことを検出し、クライアントが終了していることを検出し、その後、XML表現の逆コンパイルによって作成されたオブジェクトの削除へ進む。
【0427】
XMLベースのオブジェクト・リポジトリ
分散コンピューティング環境では、プロセス(サービスおよび/またはクライアント)には、XMLスキーマ、サービス通知、サービスによって生成された結果、JavaオブジェクトのXML表現、および/または他の言語で実施されたオブジェクトなどの一時的および/または永続的記憶域があると望ましい場合がある。既存のオブジェクト記憶技術は、言語および/またはオペレーティング・システム固有のものになりがちである。これらの記憶域システムは、また、組み込み型システムなどの省スペース・システムで使用するには複雑すぎる傾向もある。
【0428】
JiniのJavaSpacesは、既存のオブジェクト・リポジトリ・メカニズムである。JavaSpacesは、Javaオブジェクトを格納することしかできず、メモリ容量に制限のある小型デバイスには大きすぎて実装できない。JavaSpaceの各オブジェクトは、前記のようにシリアライズされ、そのため、リフレクションおよびシリアライゼーション手法について前述したのと同じ制限がある。
【0429】
異機種混在の(言語またはオペレーティング・システム依存でない)、小型デバイスから大型デバイスまで拡張性のある、オブジェクトの一時的記憶域または永続的記憶域を提供できる分散コンピューティング環境向けのストア・メカニズムを提示する。一実施形態では、分散コンピューティング環境でのストア・メカニズムは、XMLマークアップ言語で定義されているインターネットWebページまたはページ・セットとして実装することができる。XMLは、言語独立およびプラットフォーム独立のオブジェクト表現形式を用意し、Javaおよび非Javaソフトウェアが言語独立オブジェクトを格納し、取り出すことができるようにしている。ストア・メカニズムはWeb上にあるため、すべての型およびサイズ(小型から大型まで)のデバイスでストア・メカニズムにアクセスできる。Webブラウザーを使用して、Webページとして実装されているストア・メカニズムを表示することができる。Webサーチ・エンジンを使用して、Webページとして実装されているストア・メカニズム内のコンテンツをコンテンツすることができる。インターネット管理メカニズム(既存および将来の)およびXMLツールを使用して、XMLベースのストア・メカニズムを管理することができる。
【0430】
一実施形態では、ストア・メカニズムを使用して、XMLで作成され、表現され、またはカプセル化されたオブジェクトを格納することができる。ストア・メカニズムに格納できるオブジェクトの例として、それには限定されないが、XMLスキーマ、オブジェクトのXML表現(たとえば、上述のようにXML表現にコンパイルされたJavaオブジェクト)、サービス通知、およびXMLでカプセル化されたサービス結果(データ)がある。一実施形態では、XMLオブジェクトの無許可アクセスを防止するために、電子シグネチャや証明書などの承認証明書をXMLオブジェクトに付属させ、XMLオブジェクトにアクセスすることを望んでいるクライアントがXMLオブジェクトにアクセスするための適切な承認証明書を持つことを義務づける。一実施形態では、ストア・メカニズムは、「スペース」の項で説明したようにスペースであってもよい。
【0431】
分散コンピューティング環境では、ストア・メカニズムはサービスである。サービスとして実装されたストア・メカニズムは、「ストア・サービス」と呼ばれる。ストア・サービスは、スペース内で通知をパブリッシュする。スペース自体はストア・サービスの一例である。一部のストア・サービスは一時的である。たとえば、サービス通知を格納するスペース・サービスは一時的ストアである。他のストア・サービスは永続的である。たとえば、サービスからの結果を格納するストア・サービスは永続的ストアである。
【0432】
図36は、一実施形態により分散コンピューティング環境でストア・メカニズム1600および1602にアクセスするクライアント1604およびサービスA 1606の図である。この図は、例示を目的としており、本発明の範囲に限定することを求めていない。一実施形態では、ストア・メカニズム1600および1602はそれぞれ、ウェブ・ブラウザおよび他のインターネット・ツールによってアクセス可能なインターネット・ウェブ・ページまたはXMLで定義されるウェブ・ページの集合である。ストア・メカニズム1600は、XMLを使用して実装されたオブジェクトを格納できる一時的ストアである。ストア・メカニズム1602は、これもまたXMLを使用して実装されたオブジェクトを格納できる永続的ストアである。サービスA 1606は、一時的ストア1600でXMLサービス通知1608をパブリッシュする。永続的ストアは、さらに、一時的ストア1600に(または分散コンピューティング環境内の他の一時的ストアに)XMLサービス通知をパブリッシュすることもできる。ある時点で、クライアント1604は、サービスA 1606によって提供される機能を必要とする。クライアント1604は、発見および/またはルックアップ・サービスを使用して、サービス通知1608を特定する。クライアント1604は、ここで説明しているように、メッセージ・ゲートを構築し、サービスA 1606との通信を開始する。クライアント1604は、1つまたは複数のXML要求メッセージをサービスA 1606に送る。サービスA 1606は、その1つまたは複数の要求メッセージに応答して1つまたは複数の機能を実行する。サービスA 1606によって実行される機能の1つまたは複数により、クライアント1604に送る結果を出力する。
【0433】
一時的結果1610については、サービスA 1606は、XML通知1612で結果をカプセル化し、通知1612を一時的ストア1600に(または分散コンピューティング環境内の他の一時的ストアに)パブリッシュする。その後、サービスA 1606は、結果1610が一時的ストア1600の通知1612に格納されることをクライアント1604に通知するか、またはここで述べたように他のメカニズムによりクライアント1604に通知することができる。クライアント1604は、その後、通知1612から一時的結果1610を取り出す。通知1612は、一時的結果1610のフォーマット、コンテンツ、型などを記述するXMLスキーマを含む。結果は、XMLでカプセル化される。たとえば、XMLタグを使用して、次のようにデータの一部を記述することができる。
【0434】
永続的結果1618については、サービスA 1606はサービスまたはここで説明されているようなその他のメカニズムを使用して、永続的ストア1602のXMLサービス通知1616を特定し、永続的結果を格納するため永続的ストア1602を特定する。それとは別に、クライアント1604は、サービス通知1616を特定することにより、すでに永続的ストア1602を特定しており、永続的結果1618の記憶場所のUniversal Resource Identifier(URI)をXMLメッセージでサービスAに送る。一実施形態では、永続的結果1618は、XMLで定義され、Webブラウザによりアクセス可能なインターネットWebページまたはWebページ・セットに格納される。その後、サービスA 1606は、永続的ストア1602に永続的結果1618を格納する。続いてサービスA 1606は、永続的結果1618のXML通知1616を一時的ストア1600に(または分散コンピューティング環境内の他の一時的ストアに)パブリッシュし、通知1616の位置をクライアント1604に返す。通知1616は、永続的結果1618のフォーマット、コンテンツ、型などを記述するXMLスキーマを含む。結果は、前述のようにXMLでカプセル化される。通知はさらに、永続的結果1618のURIを含む。クライアント1604は、次に、通知1616を取り出し、これを使用して永続的結果1618を特定し、取り出す。それとは別に、サービスA 1606は、永続的結果1618の通知をパブリッシュせず、その代わりに、クライアント1604が通知をルックアップせずに結果にアクセスできるように、永続的結果1618のURIをクライアント1604に返す。いくつかの実施形態では、一時的ストア1600に示されるさまざまな通知はそれぞれ、異なる一時的ストアまたはスペースに格納できることに注意されたい。
【0435】
したがって、ストア・メカニズムは、分散コンピューティング環境内でXMLベースのインターネットWebページとして実装することができる。これらのストア・メカニズムは、分散コンピューティング環境内のさまざまなデバイスに実装され、クライアント(他のサービスでもよい)がストア・メカニズムを特定し使用できるようにするサービス通知を実現する。ストア・メカニズムを管理するために使用できるWebおよびXMLツールは既存のものでもこれからのものでもよい。ストア・メカニズムは、XMLで実装されたまたはカプセル化されたさまざまな型のオブジェクトを格納できる。クライアントは、省スペース・デバイスからスーパー・コンピュータに至るまで実質的にいかなるサイズのデバイスのクライアントであっても、ストア・メカニズムにアクセスして、インターネット上でさまざまなオブジェクトを格納し取り出すことができる。クライアントは、XMLによって定められている言語独立の記憶形式であれば、Javaアプリケーションでも非Javaアプリケーションでもよい。一時的または永続的オブジェクト・リポジトリは、分散コンピューティング環境内のファイル・システムに対応しており、ここで説明しているように、アクセス・チェックおよびその他のセキュリティ・メカニズムの機能を備える。
【0436】
JavaオブジェクトをXMLドキュメントに動的に変換する
一実施形態では、分散コンピューティング環境はオブジェクト・クラス・インスタンスをXMLドキュメントに変換しそれを表現するメカニズムを備える。クラス・インスタンスの表現を他のサービスに送るために、オブジェクトは変換されXMLドキュメントとして表現される。一実施形態では、XMLドキュメントを受け取ると、プログラムがドキュメントによって表現されたオブジェクトに対応するクラス・インスタンスをインスタンス化する。一実施形態では、オブジェクトはJavaオブジェクトであり、プログラムはJavaプログラムである。
【0437】
一実施形態では、中間形式を使用してXMLドキュメントを表現し、この中間形式を動的に処理して、XMLドキュメントを表現するクラス・インスタンスを生成することができる。クラスによって、一組のインスタンス変数とインスタンス変数にアクセスするための「セットアンドゲット」メソッドを定義する。対応するXMLドキュメントを一組のタグとして定義し、インスタンス変数ごとに1つのタグを割り当てることができる。ドキュメントの解析を行うときに、ハッシュ可能な表現を構築し、ハッシュ鍵にインスタンス変数名を含め、値にインスタンス変数値を入れる。複合インスタンス変数が複数出現する場合、列挙型値をそのハッシュ・テーブルに格納することができる。一実施形態では、プロセスをインスタンス変数について複合型のうちただ1つのレベルに制限し、要素を均質的なものとすることができる。
【0438】
一実施形態では、保護されたインスタンス変数を、対応するクラスの名前を含めることができるクラス定義に追加することができる。XMLドキュメント表現ではクラス名をドキュメント型として使用できる。ドキュメントにクラス名を埋め込むと、オブジェクトを再構築するときに、正しいクラス・インスタンスのインスタンス化を動的に行うことができる。
【0439】
一実施形態では、ドキュメントを受け取った後、クラス・インスタンス・ジェネレータ・メソッドを使用して、クラス型を抽出し、ドキュメントを解析して中間ハッシュ・テーブル表現を生成することができる。ジェネレータ・メソッドは、新しいクラス・インスタンスをインスタンス化し、セット・メソッドを使用してハッシュ・テーブル値からインスタンス・オブジェクトを初期化することができる。一実施形態では、クラス型が定義され、ハッシュ・テーブルは汎用なので、このプロセスは、上のクラス定義にマッチするクラスに対して実行される。一実施形態では、反転プロセスも実行することができ、クラス・インスタンスを処理して中間ハッシュ・テーブルの表現にし、ジェネレータ・メソッドを使用してハッシュ・テーブル表現からXMLドキュメントを出力することができる。このプロセスはさらに、上の指定にマッチするXMLドキュメントについて実行できるように汎用なものとすることもできる。
【0440】
このメソッドは、Javaクラス・オブジェクトに制限する意図はなく、他のプログラミング言語のクラス・オブジェクト・インスタンスを含む、他のコンピュータベースのオブジェクトにも適用される。さらに、このメソッドは、オブジェクト・インスタンスのXML表現に制限する意図はなく、他のデータ表現言語(HTMLなど)など他の表現形式をXMLの代わりに使用することもできる。
【0441】
XMLベースのプロセスの移行
分散コンピューティング環境では、配布されるアプリケーションの配布および管理を行える。たとえば、分散コンピューティング環境には、モニタ、プリンタ、キーボード、およびPDA、携帯電話などのモバイル・デバイスには通常装備されないさまざまなその他の入出力デバイスを備えるステーションとドッキング可能なモバイル・クライアントが含まれる。これらのモバイル・クライアントは、1つまたは複数のアプリケーションを実行し、分散コンピューティング環境において、一方のステーションから他方のステーションに移行することができる。したがって、分散コンピューティング環境の一実施形態では、分散コンピューティング環境内の一方のノードのモバイル・クライアントから他方のノードの同じモバイル・クライアントまたは他方のモバイル・クライアントに現在状態全体を保持したまま実行中アプリケーション(プロセス)を移行する方法を提示する。
【0442】
一実施形態では、クライアントまたはサービス上で実行しているプロセスの状態のXML表現を作成する。一実施形態では、プロセスの状態のXML表現は、プロセスが実行されているデバイスおよび/または仮想マシンの計算状態を含み、デバイスおよび/または仮想マシンの計算状態はデバイスおよび/または仮想マシン上のプロセスの実行状態に関する情報を含む。プロセス状態は、それに限定されないが、スレッド、スレッドによって参照されているすべてのオブジェクト、プロセスの実行中に作成される一時的変数、オブジェクト、およびそのデータなどである。一実施形態では、プロセスによってスペースから得られ、プロセスが実行されているデバイスおよび/または仮想マシンの外部にある外部サービスへのアクセス権の付与を表す1つまたは複数のリースを記述するデータは、XMLで表され、プロセス状態とともに格納される。リースについては、本書の「リース」の項で詳述する。
【0443】
ここで説明しているようにXMLおよびメッセージング・システムを使用すると、プロセスの状態のXML表現を分散コンピューティング環境内のノードからノードへ、たとえばインターネット上のノードからノードへ移動することができる。プロセスの状態のXML表現はさらに、上述のようにXMLベースのストア・メカニズムによりXMLオブジェクトとして格納することができ、後から、ストア・メカニズムから取り出して、同じノード上、または分散コンピューティング環境内の異なるノード上でプロセスの実行を再開することができる。一実施形態では、ここで説明しているようにXMLオブジェクトのコンパイル/逆コンパイル・プロセスを使用して、プロセスの状態のXML表現を作成(コンパイル)し、プロセスの状態のXML表現を逆コンパイルすることによりプロセスの状態を再生成することができる。
【0444】
このメカニズムを使用することにより、プロセスの状態のXML表現を初期ノードから、スペースなどのXMLベースのストア・メカニズムに格納することができる。それ以降、他のノードでプロセスの格納済みの状態を特定し、プロセスの状態をダウンロードし、状態が格納されたときに実行されていた時点のダウンロードされた格納済みの状態からプロセスを再開できる。プロセス状態はXML形式で格納されるので、ここで説明しているXMLベースのストア・メカニズムでXMLオブジェクトを格納し、特定し、取り出すためのツールおよびサーチ機能を使用して、プロセスの移行を可能にすることができる。プロセスの状態の格納されているXML表現の通知をパブリッシュする際に、同じノードまたは別のノード上で実行されているプロセスの再開するクライアントが格納されている状態を特定し、アクセスできるようにする。
【0445】
プロセスの状態のXML表現をXMLベースの永続的ストア・メカニズムに格納し、プロセスの永続的スナップショットを作成できる。これは、たとえば、ノードを故意にシャットダウンしたり、または故意でなくシャットダウンをしたためノード上のプロセスが中断した後、ノード上のプロセス実行を再開するための方法として使用できる。プロセスの格納されている状態の通知をパブリッシュし、クライアントが分散コンピューティング環境内の格納されている状態を特定できるようにする。一実施形態では、プロセスの格納されている状態のXML表現の無許可アクセスを防止するために、電子シグネチャや証明書などの承認証明書を格納されている状態に付属させ、格納されている状態からプロセスを再開することを望んでいるクライアントが格納されている状態にアクセスするための適切な承認証明書を持つことを義務づける。
【0446】
図37は、一実施形態によりプロセスの状態のXML表現を使用するプロセス移行を示す図である。プロセスA 1636aが、ノード1630上で実行されている。プロセスA 1636aは、クライアントまたはサービスである。プロセスA 1636aの実行中のある時点に、プロセスA 1636aの実行の状態を捕捉し、プロセスA 1638のXMLでカプセル化された状態で格納する。ノード1630上のプロセスA 1636aの実行は停止させられる。後で、ノード1632は、プロセスA 1638のXMLでカプセル化された状態を特定し、ノード1632上でプロセスA 1636bを再開するためにそれを使用する。プロセスAを再開するには、格納されている状態1638を使用してスレッド実行を再開し、一時変数を再計算し、リースされているリソースを再確立し、プロセス1638の格納されているXML状態で記録されているとおりに実行を再開するのに必要な他の機能を実行する。
【0447】
分散コンピューティング環境でXMLベースのプロセス移行を使用する一例を以下に示すが、制限することを意図していない。モバイル・クライアント・デバイスは、ノード1630に接続され、プロセスA 1636aを実行している。モバイル・クライアント・デバイスのユーザは、ノード1630でプロセスA 1636aの実行を停止し、後で、別の(または同じ)ノードから実行を再開しようと考えている。一実施形態では、ユーザは、プロセスA 1636aの状態を格納し、後で実行再開すること望んでいるかどうかを判別するよう求められることがある。ユーザが肯定的に答えた場合、プロセスのXMLでカプセル化された状態を捕捉し、永続的ストア1634に格納する。後から、ユーザはノード1632でモバイル・コンピューティング・デバイスに接続する。一実施形態では、ユーザはプロセス1636bを実行し、[Resume from Stored State]オプションを選択する。次に、ノード1632は、プロセスA 1638のXMLでカプセル化された状態をサーチして特定し、ダウンロードし、それを使用してプロセスA 1636bを再開する。それとは別に、プロセスはそれ自体、他のノード上で「サスペンド」していたことを認識し、ユーザの入力がなくても格納された状態から再開する。
【0448】
アプリケーション
ユーザがリモートの場所からネットワーク・データにアクセスし、ユーザがブラウザにアクセスした場合にリモート・データをユーザにローカル・データのように見せかける技術が存在する。ただし、このような技術では、クライアント・デバイスの位置近くのネットワークにクエリを実行する自動的インフラストラクチャが実現されない。クライアント・デバイス近くにあるネットワークおよびサービスに関する情報を発見するメカニズムがあることが望ましい。たとえば、このようなメカニズムを使用する際に、クライアント・デバイスの一定距離範囲(半径)内にあるレストラン、天候、地図、交通、映画情報などに関する情報を特定し、目的の情報をクライアント・デバイスに表示することができる。このメカニズムを使用する例として、ローカル環境、たとえば映画館の中で現在上映中作品のタイトルや上演時間を表示したり、レストランでメニュー選択と価格を表示するために、サービスを自動的に特定することができる携帯電話が考えられる。ここで説明しているような分散コンピューティング環境では、このようなメカニズムを使用してクライアント・デバイスに近接するローカル情報および/またはサービスを含むスペースを発見することができる。このメカニズムはさらに、他の分散コンピューティング環境、たとえば、Sun Microsystems,Inc.のJiniシステムで応用することができる。
【0449】
一実施形態では、モバイル・クライアント・デバイスは、グローバル・ポジショニング・システム(GPS)機能と無線接続技術を備える。ローカル分散コンピューティング・ネットワークを実現できる。たとえば、都市に、全市内分散コンピューティング環境を築くことができる。他の例としては、ローカル分散コンピューティング環境を備えるショッピング・モールがある。ローカル分散コンピューティング・ネットワークは、クライアント・デバイスが分散コンピューティング環境に接続し、ローカル環境内でサービスおよびデータを発見することができる発見メカニズムを備える。たとえば、環境内の1つまたは複数のデバイスが無線接続技術を備え、これによりモバイル・クライアント・デバイスはネットワークに接続し、前述のXMLメッセージング・システムを介して発見メカニズムにアクセスすることができる。ローカル分散コンピューティング環境は、サービスおよび/またはデータをモバイル・クライアントから利用できるようにするための通知を使用する1つまたは複数のスペースを備える。たとえば、全市内分散コンピューティング環境は、モール、映画館、ローカル・ニュース、ローカルの天候、交通などのエンティティを表すスペースを含む。スペースは、スペースが表すエンティティのサービスおよびそれに関する情報にアクセスするための個々のサービスおよび/またはデータ通知を含む。発見メカニズムは、ローカル分散コンピューティング環境、環境内のスペース・サービスによって表されるエンティティ、および/または環境内のスペースで通知されるさまざまなサービスの1つまたは複数のGPS位置測定機能を含む。
【0450】
一実施形態では、ローカル分散コンピューティング・ネットワークへの有線接続が提供される。この環境では、モバイル・クライアント・デバイスを使用するユーザは、有線接続の「ドッキング・ステーション」を使用してネットワークに直接「プラグイン」することができる。有線接続の例としては、これらに限定されないが、ユニバーサル・シリアル・バス(USB)、FireWire、およびツイストペア・インターネットなどがある。一実施形態では、トーキング・ステーションはさらに、モバイル・クライアント・デバイス用のキーボード、マウス、およびディスプレイなどの入出力機能を備える。この実施形態では、モバイル・クライアント・デバイスの位置が、ドッキング・ステーションによりルックアップ・メカニズム又は発見メカニズムに送られる。
【0451】
一実施形態では、モバイル・クライアント・デバイスは、分散コンピューティング・ネットワークに接続する。モバイル・クライアント・デバイスのユーザが分散コンピューティング・ネットワークの無線通信到達範囲内でナビゲートするときに、モバイル・クライアント・デバイスは、常時、またはさまざまな間隔で、ローカル・ルックアップ・メカニズム又は発見メカニズムへの入力として位置ベクトルを供給する。モバイル・クライアント・デバイスは、モバイル・クライアントに組み込まれている、または関連付けられているGPSシステムから位置ベクトルを取得する。一実施形態では、クライアントは位置情報を(たとえば、XMLメッセージングを介して)ここで説明したスペース特定メカニズムなどのローカル・サービス発見メカニズムに送る。たとえば、クライアントは、クライアントの位置の特定の範囲内でサービスを提供するスペースの発見を指定するスペース発見プロトコルを実行するか、またはクライアントはクライアントの近傍に対して提供されるサービスを通知するスペースをサーチするためのスペース・サーチ・サービスをインスタンス化する。
【0452】
モバイル・クライアント・デバイスが分散コンピューティング環境内のスペースの指定された範囲内に移動したときに、そのスペース内に格納されているサービスおよび/またはデータをモバイル・クライアント・デバイスから利用できるようにする。クライアント・デバイスが定期的にその位置を発見メカニズムに伝える実施形態では、ローカル・サービスおよび/またはデータは自動的に、クライアントのユーザから利用できるようになる。一実施形態では、モバイル・クライアント・デバイスのユーザは、スペースの指定された範囲を調べる。たとえば、ユーザは選択により、現在の位置から1マイルの範囲内にあるすべてのレストランを表示することができる。それとは別に、ローカル分散コンピューティング・ネットワークの構成で範囲を指定することもできる。たとえば、市境から3マイル以内にいるすべてのユーザにそのサービスを提供するように、全市内分散コンピューティング・ネットワークを構成することができる。一実施形態では、スペースによって提供されるさまざまなサービスおよび/またはデータを表す視覚的インジケータ、たとえば、アイコンをモバイル・クライアント・デバイスに表示することができる。そこで、クライアントは、表示されているサービスおよび/またはデータの1つまたは複数にアクセスすることができる。一実施形態では、2つまたはそれ以上のスペースから得た情報を同時に、モバイル・クライアント・デバイスに表示することができる。一実施形態では、ユーザは検出するサービスおよび/またはデータを選択することができる。たとえば、ショッピング・モールでは、モバイル・クライアント・デバイスを携帯するユーザは選択により、モール内のすべての靴屋を表示することができる。
【0453】
一実施形態では、コードの実行で使用される実行可能コードおよび/またはデータをモバイル・クライアント・デバイスにダウンロードし、ユーザがスペース内のサービスによって提供されるアプリケーションを実行するようにできる。たとえば、映画を見に行く人は、モバイル・クライアント・デバイスがあれば、映画館のスペース内のサービスから対話的な映画レビューをダウンロードし、自分が見ている映画に関するフィードバックをリアルタイムで送り返すことができる。一実施形態では、別のところで説明しているように、XMLオブジェクト・コンパイル/逆コンパイル・メカニズムを使用し、コードおよび/またはデータをコンパイルしてコードおよび/またはデータのXML表現を出力したり、XML表現を逆コンパイルしてコードおよび/またはデータをモバイル・クライアント・デバイスに再現することができる。一実施形態では、プロセスの実行可能バージョンがすでにモバイル・クライアント・デバイスに存在し、プロセスの格納された状態をモバイル・クライアント・デバイスにダウンロードすることにより、ユーザが格納されている状態を使用してプロセスを実行することができる。一実施形態では、プロセスの実行可能バージョンがすでにモバイル・クライアント・デバイスに存在し、プロセスのデータをモバイル・クライアント・デバイスにダウンロードできる。たとえば、データをダウンロードして、モバイル・クライアント・デバイスのビューア・プログラムで表示することができる。一実施形態では、プロセスを実行するためのコードおよびデータを含むプロセスの実行可能バージョンをダウンロードして、モバイル・クライアント・デバイスで実行することができる。一実施形態では、モバイル・クライアント・デバイスに代わってサービスがリモートからアプリケーションを実行し、サービスとクライアントが、データおよびオプションでデータを記述するXMLスキーマを含むXMLメッセージを互いにやり取りすることができる。一実施形態では、サービス上で一部のコードを実行し、クライアント上で一部のコードを実行することができる。たとえば、サービスは、数値計算などのデータ・セットに対する演算を行うコードを実行することができる。モバイル・クライアント・デバイスは、XMLメッセージでサービスからクライアントに渡されたデータの一部を表示し、モバイル・クライアント・デバイスのユーザがデータを入力したり選択したり、またデータをサービスに送ってデータに対し1つまたは複数の演算を実行できるようにするコードを実行する。
【0454】
一実施形態では、モバイル・クライアント・デバイスは、分散コンピューティング・ネットワーク内で2つまたはそれ以上のサービスに同時に接続することができる。これらのサービスは、独立に使用することも、また一連のタスクを実行するのと合わせて使用することもできる。たとえば、1つのサービスをリモート・クライアント・デバイスが使用してデータ・セットに対する演算を特定しかつ/または実行し、第2のサービスを使用してデータ・セットを印刷する。
【0455】
図38は、一実施形態によりローカルの分散コンピューティング・ネットワークでスペースにアクセスするモバイル・クライアント・デバイスの図である。GPS対応モバイル・コンピューティング・デバイス1700のユーザは、ローカル分散コンピューティング環境の近傍内に移動する。モバイル・クライアント・デバイス1700は、GPS1702によって提供される位置をローカル分散コンピューティング・ネットワーク内の1つまたは複数の発見メカニズム1706に送る。発見メカニズム1706は、モバイル・クライアント・デバイスの提供されたGPS位置と環境内のスペースの所定の位置を使用して、ユーザがいつ1つまたは複数のスペースの指定された範囲内または環境内の1つまたは複数のスペースが対応する近傍内を移動するかを判別する。たとえば、発見メカニズム1706は、モバイル・クライアント・デバイス1700がスペース1704の範囲内を移動したことを判別できる。発見メカニズム1706は、そこで、スペース1704からモバイル・クライアント・デバイス1700に1つまたは複数の通知1710を送る。それとは別に、発見メカニズム1706は、スペース1704またはスペース1704内の1つまたは複数の通知のUniversal Resource Identifier(URI)をモバイル・クライアント・デバイス1700に送る。サービス通知1708で通知されるさまざまなサービスおよび/またはコンテンツ通知1710で表されるデータを表すアイコンを、モバイル・クライアント・デバイス1700に表示することができる。そこで、ユーザはモバイル・クライアント・デバイスで実行するかつ/または表示するため通知されたサービスおよび/またはデータのうち1つまたは複数を選択できる。モバイル・コンピューティング・デバイス1700は、サービスを提供するデバイスと無線接続を確立し、そのデバイスと通信して、前述のようにXMLベースのメッセージング・システムを使用してサービスを実行する。それとは別に、モバイル・コンピューティング・デバイス1700のユーザはドッキング・ステーションでデバイスに接続する。ドッキング・ステーションの位置は、ユーザがルックアップ・メカニズムまたは発見メカニズム1706と、ドッキング・ステーションの通知を含むスペースを使用してユーザの指定範囲内にあるストッキング・ステーションの位置を発見し利用できるかどうかを判別することにより、発見される。発見メカニズム1706は、さらに、モバイル・クライアント・デバイス1700がスペース1714の選択された範囲内に移動したときにそのことを検出できる。さまざまなサービス通知1718およびコンテンツ通知1720をモバイル・クライアント・デバイス1700のユーザから利用できるようにする。モバイル・クライアント・デバイスがスペースの1つの指定範囲の外に出たときに、そのスペースによって提供される通知はモバイル・クライアント・デバイス1700のディスプレイから削除される。一実施形態では、スペース上の通知は、提供されるサービスまたはデータの位置情報を含む。したがって、発見メカニズム1706は、モバイル・クライアント・デバイス1700がスペース1718上で通知された特定のサービスの指定範囲内をいつ移動したかを判別し、モバイル・クライアント・デバイス1700の位置に基づいてサービス通知を送る(または削除する)。
【0456】
コンピューティング・デバイスは、同時にパワーと機能を獲得する一方でダウンサイジングを進めている。ストレージ・デバイス、CPU、RAM、I/O ASICS、電源など、サイズが小さくなり、小型のモバイル・クライアント・デバイスにフルサイズのパソコンの機能の多くを搭載できる。しかし、コンピュータ・システムのコンポーネントのいくつかは、人的要因およびその他の要因のせいで簡単には縮小できない。こうしたコンポーネントとしては、それらに限定されないが、キーボード、モニタ、スキャナ、およびプリンタがある。一部のコンポーネントのサイズを縮小することに限度があるため、モバイル・クライアント・デバイスはパソコンの役割を真に肩代わりすることはできない。
【0457】
一実施形態では、ユーザがモバイル・クライアント・デバイスを使い、人的要因やその他の要因によりモバイル・クライアント・デバイスでは利用できないコンポーネントに接続し使用できるようにするドッキング・ステーションが提示されている。たとえば、ドッキング・ステーションは、空港や図書館などの公共の場所に備えることができる。ドッキング・ステーションは、モニタ、キーボード、プリンタ、またはモバイル・クライアント・デバイスを使用するユーザ用のその他のデバイスを備える。一実施形態では、ドッキング・ステーションは、ユーザが接続しているモバイル・クライアント・デバイスなどの実際のコンピューティング・デバイスの助けがないと完全には機能しない。ドッキング・ステーションは、さまざまな入出力機能などのサービスを、モバイル・クライアント・デバイスの計算能力を使用するクライアントに提供する。
【0458】
ドッキング・ステーションは、1つまたは複数の接続用オプションをモバイル・クライアント・デバイスに提供する。接続オプションには、無線接続や有線接続がある。無線接続の例としては、それらに限定されないが、ノートブック・コンピュータのネットワーク・インターフェース・カード(NIC)で提供されるようなIrDAなどの赤外線や、無線ネットワーク接続がある。有線接続の例としては、それらに限定されないが、USB、FireWire、およびツイストペアEthernetなどがある。
【0459】
モバイル・クライアント・デバイスは、モバイル・クライアント・デバイスについて上述したものに実質的に似た方法を使用してドッキング・ステーションの位置を発見する。ローカル分散コンピューティング・ネットワーク内の1つまたは複数のドッキング・ステーションの位置を発見するには、発見メカニズムを使用して、ドッキング・ステーションの通知があるスペースを発見する。モバイル・クライアント・デバイスは、位置を発見メカニズムに送る。一実施形態では、発見メカニズムまたはルックアップ・メカニズムは、モバイル・クライアント・デバイスの位置に最も近い1つまたは複数のドッキング・ステーションの位置を返す。それとは別に、発見メカニズムまたはルックアップ・メカニズムはドッキング・ステーションの通知を含むスペースのURIを返し、その後、モバイル・クライアント・デバイスはスペースに接続して、デバイスに近いところにある1つまたは複数のドッキング・ステーションの位置を送る。一実施形態では、モバイル・クライアント・デバイスは、ルックアップ・メカニズム又は発見メカニズムに情報を供給し、モニタの解像度、画面サイズ、グラフィック能力、プリンタやスキャナなどの使用可能なデバイスなどの要求条件を指定することができる。一実施形態では、さまざまなドッキング・ステーションの使用可能性(ドッキング・ステーションを使用する他のユーザから)、コンポーネント、および能力などの1つまたは複数のドッキング・ステーションに関する情報をモバイル・クライアント・デバイスのユーザに提供する。
【0460】
ユーザがドッキング・ステーションに接近すると請求プロトコルが開始する。ドッキング・ステーションがその請求を受理すると、セキュリティで保護された入出力接続が、モバイル・クライアント・デバイスとドッキング・ステーションとの間で確立される。それとは別に、ユーザはモバイル・クライアント・デバイスに表示されるルックアップ・メカニズム又は発見メカニズムを使用して発見された1つまたは複数のドッキング・ステーションのうちからドッキング・ステーションを選択する。ユーザがドッキング・ステーションを選択すると請求プロトコルが開始し請求の持続時間中、ユーザに、ドッキング・ステーションへのセキュリティで保護された排他的接続が与えられる。ユーザがドッキング・ステーション上のセッションを終了し、ドッキング・ステーションを開放して他のユーザが利用できるようにするドッキング・ステーションの解放方法も定める。一実施形態では請求プロトコルは、前述のようにドッキング・ステーション・サービス上のリースとすることができる。
【0461】
図39aは、一実施形態により、モバイル・デバイスのユーザがドッキング・ステーションの場所を発見することを示す図である。モバイル・クライアント・デバイス1750は、発見メカニズム1756と接続する。モバイル・クライアント・デバイス1750は、GPS 1752を使用して得られた位置を発見メカニズム1756に送る。モバイル・クライアント・デバイス1750は、さらに、ドッキング・ステーションの要求条件を発見メカニズム1756に送る。発見メカニズム1756は、モバイル・クライアント・デバイス1750の要求条件を満たすドッキング・ステーション1758の通知に対して1つまたは複数のスペース1754をサーチする。一実施形態では、ルックアップ・メカニズム又は発見メカニズムが、通知1758に格納されている位置情報をモバイル・デバイス1750の与えられた位置と比較してモバイル・デバイス1750の指定範囲内にある1つまたは複数のドッキング・ステーションを特定する。発見メカニズム1756は、そこで、モバイル・クライアント・デバイス1750の指定範囲内にある1つまたは複数のドッキング・ステーションの位置を与える。それとは別に、発見メカニズム1756はモバイル・クライアント・デバイス1750に最も近いドッキング・ステーションを特定し、その位置をモバイル・クライアント・デバイス1750に送る。
【0462】
図39bは、一実施形態によるドッキング・ステーション1760に接続するモバイル・クライアント・デバイス1750の図である。一実施形態では、ユーザはモバイル・クライアント・デバイス1750をドッキング・ステーション1760に無線で接続する。他の実施形態では、ユーザはドッキング・ステーション1760とモバイル・クライアント・デバイス1750とを1つまたは複数のケーブルで接続してクッキング・ステーション1760との有線接続を確立する。一実施形態では、モバイル・クライアント・デバイス1750のユーザはドッキング・ステーション1760への請求を確立する。この請求により、接続時間中、ドッキング・ステーションへのセキュリティで保護された排他的権限を確立する。一実施形態では請求メカニズムは、前述のようにリソース(ドッキング・ステーション)のリース・メカニズムである。一実施形態では、ユーザは、ドッキング・ステーションの使用に対し対価支払いを請求される。たとえば、ユーザは、ドッキング・ステーションを請求するプロセスの一部としてクレジット・カード番号を指定する。「メッセージ・ゲート」の項の請求書ゲートの説明を参照のこと。いったん接続されると、ユーザはキーボード、モニタ、プリンタなど、ドッキング・ステーション1760によって提供されるさまざまな機能を使用できる。ドッキング・ステーション1760はさらに、ローカル分散コンピューティング・ネットワークへの接続も含み、ドッキング・ステーション1760に接続されているモバイル・クライアント・デバイス1750のユーザに対しネットワーク内の他のデバイスのサービスおよびコンテンツ通知を特定する発見サービスを提供しているため、ユーザは前述のように、分散コンピューティング環境内のさまざまなサービスおよびコンテンツを特定し、使用することができる。
【0463】
ユーザは、終了すると、モバイル・クライアント・デバイス1750をドッキング・ステーション1760から切断する。一実施形態ではドッキング・ステーションの解放メカニズムは、モバイル・クライアント・デバイス1750がドッキング・ステーション1750から切断されると自動的に開始する。この解放メカニズムにより、モバイル・クライアント・デバイス1750のユーザが確立したドッキング・ステーション1760の請求がクリアされる。一実施形態では、この解放メカニズムは、ドッキング・ステーションが利用できることを発見メカニズムに1756および/またはドッキング・ステーション通知1758に通知する。
【0464】
一実施形態では、ユーザは発見メカニズムを使用せずにモバイル・クライアント・デバイスをドッキング・ステーションに接続することができる。たとえば、空港内にいるユーザは、ドッキング・ステーションで目で見て見つけ、モバイル・クライアント・デバイスを接続する。他の例としては、複数のドッキング・ステーションを配置したドッキング・ステーション室を備える図書館が考えられ、ユーザはそこで利用可能なドッキング・ステーションにアクセスすることができる。
【0465】
省スペースおよび/または組み込み型デバイス
単純な組み込み型または省スペース・デバイスでは、プログラムの命令を格納し実行しようにもメモリ容量が限られている場合がある。単純な組み込み型デバイスは、デバイスの機能を開始するための制御入力とデバイスのステータスを報告するための出力に制限があることを認識する必要がある。単純な組み込み型デバイスの一例として、スイッチとそのスイッチにより制御されるデバイスを制御するための回路を組み込んだ「スマート」スイッチ(照明スイッチなど)がある。スマート・スイッチは、2つの制御要求(デバイスの状態を変更する、デバイスの状態を要求する)を認識し、1つのステータス・メッセージ(デバイスの状態)を送るだけでよい。スマート・スイッチは、1つまたは複数の制御システムから制御要求を受け取り、その1つまたは複数の制御システムにステータス・メッセージを報告することにより、接続されているデバイスを管理することができる。
【0466】
一実施形態では、分散コンピューティング環境は、分散コンピューティング環境の完全なプロトコルを実装するのに必要なリソース(メモリなど)が足りない小型デバイスを含めるためのフレームワーク(プロトコル)を提供する。一実施形態では、小型デバイス対応プロトコルと完全なプロトコルとの間にブリッジとしてエージェントを用意する。このエージェントは、小型デバイスのために完全なプロトコルの発見を実行するので、デバイスは完全な発見プロトコルおよびサービス・アクティブ化を実行する必要がない。一実施形態では、小型デバイスはサービス特有のメッセージを送るだけでよい。一実施形態では、これらのメッセージは、小型デバイスで事前に加工され、小型デバイスはサービス・アクティブ化の一部であるメッセージをエージェントに送るだけである。エージェントは、サービスに対し完全なプロトコルを介してサービス・アクティブ化を実行し、サービスからサービスへ着信メッセージを転送したり、サービス化がクライアントへ返信を転送したりすることができる。したがって、エージェントは小型クライアントのサービス・コネクタとして機能する。分散コンピューティング環境の一実施形態では、特定の制御要求セットをXMLメッセージの形式で受け取り、要求、報告ステータスなどを作成する特定のXMLメッセージ・セットを送るように組み込み型デバイスを構成することができる。一実施形態では、制御システムは、制御される各デバイスまたはデバイスのカテゴリに固有のXML要求メッセージを送り、デバイスからXMLメッセージを受け取ることによりさまざまなデバイスを管理するように構成できる。一実施形態では、1つまたは複数のXMLスキーマを使用して、組み込み型デバイスの固有のXMLメッセージ・セットを定義することができ、スキーマは、XMLメッセージを送受される際に組み込み型デバイスおよび/または制御システムによって使用される。
【0467】
組み込み型デバイスは、単純な組み込み型デバイスを制御し監視するための特定のメッセージ・セットをサポートする前述のようなXMLメッセージング・システムの「軽量(シン)」実装を含む。XMLメッセージング・システムの実装は、省スペースの単純な組み込み型デバイスで使用できるように手直しされ、省スペース・デバイスの限られたメモリにも適合する。一実施形態では、XMLメッセージング・システムは、省スペース組み込み型デバイスをターゲットとする仮想マシン(たとえば、KVM)を備える省スペース・デバイスに実装することができる。ネットワーキング・スタック(1つまたは複数の制御システムとの通信のためのトランスポート・プロトコルをサポートする)は、仮想マシンと関連付けられ、XMLメッセージング・レイヤはネットワーキング・スタックの「上に置かれる」。メッセージング・システムのこのような実装は、省スペース・デバイスや組み込み型デバイス以外のデバイスでも使用できることに注意されたい。
【0468】
一実施形態では、静的メッセージまたは事前に生成されたメッセージを、制御システムから組み込み型デバイスへの要求に使用する。静的メッセージは、プリコンパイルされ、組み込み型デバイス内に格納される。着信メッセージを格納されている静的メッセージと比較し、メッセージのマッチがないか調べてメッセージで要求された機能を実行するので、着信メッセージを解析するためのコードの必要性が減じられるか、またはその必要がない。発信メッセージは、格納されている静的メッセージから直接読み取られるため、発信メッセージを動的にコンパイル必要は少ないか、またはその必要がない。したがって、静的メッセージは、組み込み型システムのメッセージング・レイヤのコード量を減らすために使用される。たとえば、静的なJavaオブジェクト(Java opコード)を要求メッセージとステータス・メッセージに使用できる。
【0469】
図40aは、一実施形態により、制御システム1800により制御される組み込み型デバイス1804aと1804bの一実施形態を示す。制御システム1800は、そのシステムが制御するデバイス1804aおよび1804bとさまざまな方法でネットワークにつながっている。ネットワーク1810は有線(Ethernet、同軸、ツイストペア、電力網など)および/または無線(IrDA、マイクロ波など)を利用できる。一実施形態では、組み込み型デバイス1804aおよび1804bは、ネットワーク1810上で制御システム1800と通信するためXMLメッセージング・システムのシン実装を備える。制御システム1800は、組み込み型デバイス1804aおよび1804bに要求を送り、そこから応答を受け取るためのXMLメッセージング・システムの実装を用意する。一実施形態では、制御システム1800は、ユーザが組み込み型デバイス1804aと1804bのステータスを表示し、遠隔制御するためのインターフェースを備えるように構成されたソフトウェアおよびハードウェアを搭載する。一実施形態では、制御システム1800は、組み込み型デバイス1804aおよび1804bの自動制御を行うためのソフトウェアおよび/またはハードウェアを備える。
【0470】
一実施形態では、組み込み型デバイス1804aと1804bは、他の環境の一部である。それらのデバイスは、分散ネットワーク環境で実装されているメッセージ通信モデルをサポートしていない。たとえば、これらのデバイスは、LonWorksネットワークなどのネットワークで接続されたオートメーションおよび制御システム内のノードである。制御システム1800は、他の環境内のデバイスを制御するための制御システムのハードウェアおよび/またはソフトウェアを含む。制御システム1800は、分散コンピューティング環境と他の環境との間のブリッジとして使用される。分散コンピューティング環境ではさらに、分散コンピューティング環境からアクセスするデバイスを発見するため既存のデバイス発見プロトコルをラップする1つまたは複数の方法も備える。ブリッジおよびラップを行うプロトコルについては「ブリッジ」の項で詳述する。
【0471】
制御システム1800は、リモートまたはローカルで、分散コンピューティング環境内の1つまたは複数の他のシステムに接続する。図40aは、インターネット1802を介してクライアント1806に接続されている制御システム1800を示している。クライアント1806は、制御システム1800を通じて、組み込み型デバイス1804aおよび1804bのステータスを間接的に要求し、その制御要求を送る。したがって、制御システム1800は、組み込み型デバイス1804aおよび1804bのプロキシまたはブリッジとして使用される。「ブリッジ」の項を参照されたい。クライアント1806と制御システム1800との間の高度な通信を有効にするために、クライアントと制御システムは、組み込み型デバイス1804aおよび1804b上のシン実装と異なるXMLメッセージング・システムの実装を備える。一実施形態では、クライアント1806は、ユーザが組み込み型デバイス1804aと1804bのステータスを表示し、遠隔制御するためのインターフェースを備えるように構成されたソフトウェアおよびハードウェアを搭載する。一実施形態では、クライアント1806は、正しい承認証明書を制御システム1800に提示し、クライアント1806が組み込み型デバイス1804aおよび1804bにアクセスできるようにする必要がある。一実施形態では、クライアント1806は、異なるレベルのアクセス権を与えられる。たとえば、クライアント1806は、組み込み型デバイス1804aおよび1804bのステータスを表示することしかできず、デバイスを遠隔制御することはできない。一実施形態では、制御システム1800はサービスであり、分散コンピューティング環境でサービス通知がパブリッシュされ、そのため、クライアント1806は前述のようにクライアント−サービス手法を使用してアクセスできる。一実施形態では、クライアント1806は制御システム1800のステータスを表示し、遠隔制御することができる。
【0472】
図40bは、一実施形態により、インターネット1802を介して組み込み型デバイス1804cおよび1804dに接続されているクライアント制御システム1808を示している。一実施形態では、組み込み型デバイス1804cおよび1804dは、ネットワーク1802上でクライアント制御システム1808と通信するためXMLメッセージング・システムのシン実装を備える。クライアント制御システム1808は、組み込み型デバイス1804cおよび1804dに要求を送り、そこから応答受け取るためのXMLメッセージング・システムの実装を用意する。一実施形態では、クライアント制御システム1808は、ユーザが組み込み型デバイス1804cと1804dのステータスを表示し、遠隔制御するためのインターフェースを備えるように構成されたソフトウェアおよびハードウェアを搭載する。一実施形態では、クライアント制御システム1800は、組み込み型デバイス1804cおよび1804dの自動制御を行うためのソフトウェアおよび/またはハードウェアを備える。
【0473】
図40aと図40bとの違いは、図40bに示されている実施形態では、組み込み型デバイス1804cと1804dは、プロキシ(たとえば、制御システム)なしで分散コンピューティング環境内の1つまたは複数のクライアントによりアクセスされるという点である。組み込み型デバイス1804cおよび1804dは、デバイスの機能にアクセスするためのサービスを備え、分散コンピューティング環境内でサービス通知をパブリッシュし、前述のようにクライアント−サービス手法を介してアクセスされる。
【0474】
分散コンピューティング環境は、リソースが制限されているクライアントがUniversal Resource Identifier(URI)アドレス指定リソースを取り出すためのメカニズムを備える。たとえば、IrDA接続を介してでないとメッセージを送受できないクライアントは、URI接続を確立して、結果スペースから結果を取り出すことができない。一実施形態では、クライアントとURIリソースとの間のブリッジとしてサービスを提供する。ブリッジ・サービスは、XMLメッセージを介してクライアントと対話し、入力パラメータを集める。以下に、XML入力メッセージシンタックスの一例を示したが、何らかの形で制限することを意図していない。
【0475】
次に、分散コンピューティング環境の外部で、ブリッジ・サービスはURI接続を確立し、リソースを取り出す。リソースは、1つまたは複数のXMLメッセージでペイロードとしてカプセル化され、ブリッジ・サービスによってクライアントに送られる。
【0476】
XMLメッセージング・システムのシン実装を備える組み込み型デバイスの可能な使い方の一例を説明のため掲載しているが、制限することを意図していない。建物には、エネルギーを消費する複数のエレクトロニクス・デバイス(たとえば、照明、空調、事務機器)が置かれているため、最適なエネルギー消費レベルを維持するためのシステムを必要とする。このような複数のデバイスはそれぞれ、エレクトロニクス・デバイスを制御するための組み込み型デバイスを備える。これらの組み込み型デバイスは、XMLメッセージング・システムのシン実装を備える。1つまたは複数の制御システムを、ネットワーク、たとえば、建物内LANやさらにはインターネット内のデバイスに結合する。制御システムでは、建物管理ソフトウェア・パッケージおよびデバイスを監視し制御するためソフトウェア・パッケージによって使用されるように構成されているXMLメッセージング・システムの実装を格納し、実行する。制御システムは、ユーザからの入力を受け付け、複数のデバイスのそれぞれのステータス情報はじめとする、建物内エネルギー消費システムのステータス情報を表示し、他の何らかの方法で出力する。エネルギー消費は、複数のデバイスのそれぞれからXMLステータス・メッセージを受け取ることにより監視する。エネルギー消費レベルを調整する必要がある場合、XML制御メッセージを1つまたは複数のデバイスに送ってエネルギー消費を変更させる。
【0477】
サービスの実装
一実施形態では、分散コンピューティング環境はサービスをサーブレットとして実装するためのメカニズムを備える。このメカニズムは、分散コンピューティング環境向けにサービスを開発するための機能を備える。
【0478】
一実施形態では、スペース内でサービスを初期化し登録するための機能を備えるアプリケーション・プログラミング・インターフェース(API)が提供される。一実施形態では、このAPIを使用して、サービスの初期化機能を呼び出し、サービスのステータスを定義する初期化ステータス・ページ、たとえば、HTMLページを生成することができる。ユーザは、ブラウザからステータス・ページにアクセスすることによりサービスのステータスにアクセスできる。一実施形態では、APIを使用して、着信メッセージを処理し、そのメッセージに応答してドキュメントを生成する。
サーブレット・メカニズムの実施形態では、それに限定されないが、以下のような複数の機能を提供する。
サービスへのクライアント接続の管理(一意的なセッションID)
結果通知を格納するために使用されるアクティブ化スペースの管理
アクティブ化スペースの接続セッションおよび結果に対するリースの管理
セッションおよび結果のガベージ・コレクション
クライアントの認証
セッションごとのクライアント機能の生成
【0479】
一実施形態では、分散コンピューティング環境は、新しい複雑なサービスを他の既存のサービスから構築するためのサービス・カスケード接続メカニズムを備える。たとえば、JPEG−PostScript変換サービスおよび印刷サービスから、変換および印刷サービスを組み合わせることで、第3のカスケード接続されたサービスを作成する。一実施形態では、2つまたはそれ以上のサービスのアクセス・メソッドをカスケード接続されたサービスのアクセス・メソッドとして定義することにより2つまたはそれ以上のサービスを組み合わせて1つの複雑なサービスを作る。カスケード接続サービスに対する以下のサービス通知は、説明のため掲載したものであり、いかなる形でも制限することを意図していない。
【0480】
結論
さまざまな実施形態はさらに、キャリア媒体に関する前述の説明により実装された命令および/またはデータを受け取り、送り、または格納することを含む。一般に、キャリア媒体には、磁気または光媒体などの記憶媒体やメモリ媒体、たとえば、ディスクやCD−ROM、RAM(SDRAM、RDRAM、SRAMなど)、ROMなどの揮発性または不揮発性媒体、さらに、ネットワークおよび/または無線リンクなどの通信媒体を介して伝達される電気信号、電磁信号、またはデジタル信号などの伝送媒体または信号が含まれる。
【0481】
本開示を利用しようとする当業者には明白なように、さまざまな修正および変更が可能である。本発明はそのような全ての修正および変更を包括的に取り入れることを意図しており、したがって、明細書、付録、および図面は、制限のためではなく、説明のためであるとみなすべきである。
【図面の簡単な説明】
【図1】
従来の分散コンピューティング技術の積み重ねの図である。
【図2】
一実施形態による分散コンピューティング環境プログラミング・モデルの図である。
【図3】
一実施形態による分散コンピューティング環境のメッセージング・レイヤおよびネットワーキング・レイヤの図である。
【図4】
一実施形態により分散コンピューティング環境でオブジェクトまたはサービスを通知するスペースを見つけるための発見サービスの図である。
【図5】
一実施形態による分散コンピューティング環境の静的メッセージおよび書式付きメッセージをサポートするクライアント・プロファイルの図である。
【図6】
一実施形態によるXMLメッセージングを採用する分散コンピューティング・モデルの図である。
【図7】
一実施形態によるプラットフォーム独立の分散コンピューティング環境の図である。
【図8】
一実施形態によりスペース内でサービスが通知される分散コンピューティング・モデルの図である。
【図9】
一実施形態によりスペース内に結果が格納される分散コンピューティング・モデルの図である。
【図10】
a:一実施形態による分散コンピューティング・モデル内のメッセージング・エンドポイントとしてのクライアントおよびサービス・ゲートの図である。
b: 一実施形態によりサービスにアクセスするためスキーマに従ってメッセージ・エンドポイントを生成することを示す図である。
【図11】
a:一実施形態による分散コンピューティング環境におけるゲート作成の図である。
b:一実施形態による分散コンピューティング環境におけるゲート作成とゲート・ペアの図である。
【図12】
一実施形態による分散コンピューティング環境での可能なゲート構成要素の図である。
【図13】
一実施形態による分散コンピューティング環境に参加する従来のプラウザ用のプロキシ・クライアントの図である。
【図14】
一実施形態により分散コンピューティング環境でメソッド・ゲートを使用してリモート・メソッド呼び出しインターフェースをサービスに提供する方法を示す図である。
【図15】
一実施形態により分散コンピューティング環境でスペースを使用する方法を示す図である。
【図16】
一実施形態による通知構造を示す図である。
【図17】
一実施形態により通知がその存続期間中に置かれる通知状態遷移の一例を示す図である
【図18】
一実施形態による分散コンピューティング環境でのさまざまなスペース特定メカニズムの図である。
【図19】
一実施形態による分散コンピューティング環境でのスペース連合の図である。
【図20】
一実施形態により分散コンピューティング環境でクライアントがスペース・サービスによりセッションを形成する方法を示す流れ図である。
【図21】
一実施形態のスペース・イベント型階層の図である。
【図22】
一実施形態による分散コンピューティング環境でのサービス・インスタンス化を示す流れ図である。
【図23】
一実施形態による分散コンピューティング環境でのデフォルトのスペースの図である。
【図24】
一実施形態により、近傍ベースのデバイスから提供されるサービスをデバイスの近傍の範囲外にあるデバイスでアクセスできるようにする近傍ベースのデバイスを他のトランスポート・メカニズムにブリッジするデバイスの一例を示す図である。
【図25】
一実施形態により分散コンピューティング環境でリース更新メッセージを使用する方法を示す図である。
【図26】
a:一実施形態により、認証証明書をクライアントに提供する認証サービスを示す流れ図である。
b:一実施形態により、図26aのステップ1002上で展開し、認証証明書を生成する認証サービスを示す流れ図である。
【図27】
ブリッジ・メカニズムの一実施形態の図である。
【図28】
一実施形態により外部発見サービスにマップされるスペース発見プロトコルの一例の図である。
【図29】
一実施形態により、分散コンピューティング環境の外部にあるクライアントを分散コンピューティング環境内のスペースにブリッジする方法を示す図である。
【図30】
一実施形態によるプロキシ・メカニズムの図である。
【図31】
一実施形態による関連するディスプレイおよび表示サービスを備えるクライアントの一実施形態の図である。
【図32】
一実施形態により動的表示オブジェクトのスキーマを使用する例を示す図である。
【図33】
A:Cプログラミング言語による代表的ストリング表現の図である。
B:従来のストリング関数の例を示す図である。
C:一実施形態により、一般にはストリングを、具体的には組み込み型システムなどの省スペース・システムを表現し管理する効率的な方法を示す図である。
【図34】
一実施形態により、クライアントとサービスの間でオブジェクトを移動するプロセスを示す図である。
【図35】
仮想マシン(たとえば、JVM)がオブジェクト(たとえば、Javaオブジェクト)をオブジェクトのXML表現にコンパイルする拡張機能および(Java)オブジェクトのXML表現を(Java)オブジェクトに逆コンパイルする拡張機能を含む実施形態を示すデータ流れ図である。
【図36】
一実施形態により分散コンピューティング環境でストア・メカニズムにアクセスするクライアントおよびサービスの図である。
【図37】
一実施形態によりプロセスの状態のXML表現を使用するプロセス移行を示す図である。
【図38】
一実施形態によりローカルの分散コンピューティング・ネットワークでスペースにアクセスするモバイル・クライアント・デバイスの図である。
【図39】
a:一実施形態により、モバイルデバイスのユーザがドッキング・ステーションの場所を発見すること示す図である。
b:一実施形態によるドッキング・ステーションに接続するモバイル・クライアント・デバイスの図である。
【図40】
a:一実施形態により、制御システムにより制御され、分散コンピューティング環境内でアクセス可能な組み込み型デバイスの一実施形態を示す図である。
b:一実施形態により、ネットワーク(たとえば、インターネット)を介して分散コンピューティング環境内でアクセス可能な組み込み型デバイスに接続するデバイス制御システムの図である。
【図41】
一実施形態による、分散コンピューティング環境での、新しいスペースの作成を示す流れ図である。
【図42】
一実施形態による、分散コンピューティング環境での、新しいスペースの保護された作成を示す流れ図である。
【図43】
一実施形態による、分散コンピューティング環境での、サーチ・サービスを使用するスペースのサーチを示す流れ図である。
【図44a】
一実施形態による、分散コンピューティング環境での、サービスの結果をスペース内に格納する方法を示す流れ図である。
【図44b】
一実施形態による、分散コンピューティング環境での、サービスの結果をスペース内に格納し、イベントを使用してクライアントに通報する方法を示す流れ図である。
【図44c】
一実施形態による、分散コンピューティング環境での、サービスの結果をメッセージ内で送る方法を示す流れ図である。
【図44d】
一実施形態による、分散コンピューティング環境での、通知を使用してサービスの結果を返す方法を示す流れ図である。
【図44e】
一実施形態による、分散コンピューティング環境での、クライアントに発送される通知を使用してサービスの結果を返す方法を示す流れ図である。
【図44f】
一実施形態による、分散コンピューティング環境での、スペースに格納された通知を使用してサービスの結果を返す方法を示す流れ図である。
【図44g】
一実施形態による、分散コンピューティング環境での、スペースに格納された通知と、イベントを使用することによるクライアントへの通報とを使用してサービスの結果を返す方法を示す流れ図である。
【図45】
一実施形態による、分散コンピューティング環境での、あるサービスの結果を別のサービスに送る方法を示す流れ図である。
【図46a】
一実施形態による、分散コンピューティング環境での、サーチ・サービスと、サーチ・サービスとクライアントの対話を示す図である。
【図46b】
一実施形態による、分散コンピューティング環境での、サーチ・サービスと、サーチ・サービスとクライアントの対話を示す図である。
【図47】
一実施形態による、分散コンピューティング環境での、スペース内のドキュメントのサーチを示す流れ図である。
【図48】
一実施形態による、分散コンピューティング環境での、スペース内に格納された通知を使用する、サービスのアドレッシングを示す流れ図である。
(発明の背景)
(1.発明の分野)
本発明は、ウェブ中心およびインターネット中心の分散コンピューティング環境を含む分散コンピューティング環境に関し、より詳細には、ネットワーク・クライアントとサービスを接続する、メッセージ・パッシング・モデルに基づく異機種分散コンピューティング環境に関する。
【0002】
(2.関連技術の説明)
インテリジェント型デバイスの普及が進んでいる。このようなデバイスとしては、スマート・アプライアンス、パーソナル・デジタル・アシスタント(PDA)、携帯電話、ラップ・トップ・コンピュータ、デスクトップ・コンピュータ、ワークステーション、メインフレーム、さらにはスーパー・コンピュータなどもある。ネットワークも、次第に、互いに通信できるインテリジェント型デバイスを相互接続する一般的な方法となってきている。ただし、さまざまなインテリジェント型デバイスの計算能力と記憶能力には大きな違いがある。能力が制限されているデバイスは、省スペース・デバイスまたは「シン(thin)」デバイス呼ばれることがある。シン・デバイスは、より能力の高いデバイスを相互接続するネットワークに参加することができない場合がある。しかし、さまざまな異なる種類のインテリジェント型デバイスを相互接続することが望ましいと考えられる。
【0003】
ネットワーキング能力の向上はなおいっそう望まれている。ビジネス用ネットワークは、仕入れ先と顧客との相互の直接的なやり取りを取り込むように拡大を続けている。携帯電話、パーソナル・デジタル・アシスタント、およびインターネット対応コンピュータは、企業においても家庭においても当たり前のものになっている。ホーム・ネットワークは、テレビやステレオ機器などのオーディオ/ビジュアル機器を家庭用コンピュータ、およびセキュリティ・システムや温度制御サーモスタットなどのインテリジェント型システムを制御するその他のデバイスに相互接続するために使用することができる。ケーブルやASDLなどの高帯域幅メディアを使用すると、インターネット・アクセス・ビデオ・オンデマンド、電子商取引などのサービスを向上させることができる。ネットワーク・システムは普及途上にある。正式なネットワークがなくても、インテリジェント型デバイスで互いに通信し、またリソースを共有できることが望ましい。
【0004】
現在、従来のネットワークのセットアップ、拡張および管理は複雑な作業である。たとえば、ハードウェアまたはソフトウェアをネットワークに追加するには、多くの場合、ネットワーク管理者がドライバをロードをし、システムを設定する必要がある。ネットワーク構成に小さな変更を加えるにしても、ネットワーク全体を一定期間停止することが必要になる場合がある。さらに、所定のネットワークで通信するのに必要なインターフェースをサポートしていないインテリジェント型デバイスもある。
【0005】
必要なのは、各種のインテリジェント型デバイスを接続し、通信およびリソースの共有を可能にしながら、従来のネットワークに存在する相互運用性と複雑な構成という問題を回避できる単純な方法である。ネットワークにデバイスを追加する機能を改善する技術はさまざまなものが存在する。たとえば、ユニバーサル・シリアル・バス、1394、およびPCIなどの多くの現代的な入出力バスでは、プラグ&プレイや動的ディスカバリ・プロトコルをサポートしており、新しいデバイスをバス上に追加する作業が簡単に行える。しかし、これらの解決方法は、特定の周辺機器バスに制限されており、一般的なネットワークには適していない。
【0006】
最近の技術である、Sun Microsystems,Inc.のJiniでは、プリンタおよびディスク・ドライブなどのデバイスをネットワーク上で簡単に接続し共有できるようにすることを追求している。Jiniを組み込んだデバイスは、ネットワークへアナウンスを行い、自デバイスの能力に関する詳細を知らせ、直ちにネットワーク上の他のデバイスからアクセスできる状態に入る。Jiniでは、さまざまなデバイスの機能をネットワーク上で共有する分散コンピューティングが可能になっている。Jini技術は、ユーザがネットワーク上でサービスおよびリソースを共有できるようにすることを目指している。Jini技術の他の目標は、たとえユーザのネットワーク・位置が変化してもユーザはネットワーク上の任意の場所のリソースに簡単にアクセスすることができるようにすることである。Jiniではさらに、デバイス、ソフトウェア、およびユーザのネットワークを構築し、保守し、変更するタスクを簡素化することも追及している。
【0007】
Jiniでは、各Jini対応デバイスに特定の容量のメモリと処理能力が必要である。通常、Jini対応デバイスはJava(登録商標)仮想マシン(JVM)を備えている。そのため、JiniシステムはJava技術を中核とする。Javaは、Sun Microsystems,Inc.が開発した高水準オブジェクト指向プログラミング言語である。Javaソース・コードをバイトコードと呼ばれる形式にコンパイルし、これをJava仮想マシンで実行することができる。
【0008】
バイトコードは、「実際の」コンピュータ・マシンであるハードウェア・プロセッサではなく、仮想マシンにより処理されるコンピュータ・ソース・コードである。仮想マシンは、一般化された機械語命令(バイトコード)を特定の機械語命令(コンピュータのプロセッサが理解する命令)に変換する。各プラットフォームの仮想マシンに付属する言語を使用し、ソース言語ステートメントを1回だけコンパイルして、その仮想マシンをサポートするプラットフォーム上で実行することができる。Javaプログラミング言語は、このような言語の一例であり、Java仮想マシン(JVM)は、Javaプログラミング言語で書かれたプログラムをサポートする仮想マシン・プラットフォームの一例である。Java仮想マシンは、ほとんどのコンピューティング・プラットフォームに用意されているため、JavaしたがってJiniは一定のプラットフォーム独立性を実現している。Jiniアーキテクチャでは、Javaプログラミング言語がJiniシステムのコンポーネントの実装言語であるという想定を活用している。Javaコードを動的にダウンロードして実行できることが、Jiniアーキテクチャの多くの機能の中心となっている。
【0009】
Jiniアーキテクチャの目的は、デバイスとソフトウェア・コンポーネントからなる複数のグループを単一の動的分散システムとして連合させることである。Jiniアーキテクチャの概念で重要なのは、サービスという概念である。サービスは、人、プログラム、または他のサービスが使用できるエンティティである。サービスの例としては、文書を印刷するサービスと、一方のワードプロセッサ形式から他方の形式に変換するサービスの2つがある。Jiniを使用すると、Jiniシステムのメンバがサービスへのアクセスを共有することができる。Jiniシステム内のサービスは、Javaプログラミング言語で書かれた一組のインターフェースである、サービス・プロトコルを使用することにより互いに通信する。サービスの探索およびソリューションは、Jiniシステム内でルックアップ・サービスを使用して行う。ルックアップ・サービスにより、サービスによって提供される機能を示すインターフェースを、そのサービスを実装するオブジェクト群にマッピングする。
【0010】
記述エントリもサービスに関連付けることができる。デバイスとアプリケーションは、発見(discovery)と呼ばれるプロセスを使用してJiniネットワークに登録する。デバイスまたはアプリケーションは、いったん登録されると、ルックアップ・サービス内に入る。ルックアップ・サービスでは、ネットワーク上のこれらのサービスへのポインタを格納するだけでなく、これらのサービスにアクセスするためのコードも格納する。たとえば、プリンタはルックアップ・サービスに登録されると、そのプリンタ・ドライバおよび/またはドライバとのインターフェースをルックアップ・サービスにロードする。クライアントがプリンタの使用を要求すると、そのドライバおよびドライバ・インターフェースはルックアップ・サービスからそのクライアントにダウンロードされる。このようにコードを移動できることは、クライアント側で、ドライバやその他のソフトウェアをプリインストールしたりロードをすることなく、ネットワークからのサービスを利用することができることを意味する。
【0011】
Jiniシステム内のサービス間の通信は、Java Remote Method Invocation(RMI)を使用してを行う。RMIは、従来のリモート・プロシージャ・コールのメカニズムに対するJavaプログラミング言語対応の拡張機能である。RMIでは、Jiniネットワーク内でオブジェクトからオブジェクトへデータを渡すことができるだけでなく、コードを含む完全なオブジェクトも渡すことができる。Jiniシステムは、コードがJavaオブジェクトとしてカプセル化された形式でネットワーク内を移動できることに依存している。
【0012】
Jiniシステム内のサービスへのアクセスはリースに基づく。リースとは、一定期間保証されたアクセスを許可することである。各リースはサービスの利用者とサービスのプロバイダとの間で、サービス・プロトコルの一環として交渉される。ある期間サービスが要求されると、ある期間、たぶん要求期間と考えられるが、アクセスを許可できる。サービスがJiniシステムの一部としてとどまるためにはリースを更新する必要がある。
【0013】
図1は、Jiniの基本的な技術の積み重ねを示している。Jini技術では、分散プログラミング・モデル12(JavaSpaces、リース、およびオブジェクト・テンプレートによってサポートされている)を定義する。Jiniのオブジェクト通信は、TCP/IP対応ネットワーキング・レイヤ16上のRMIレイヤ14に基づいている。
【0014】
Jiniは、分散コンピューティングを簡素化するための有望な技術である。ただし、デバイスの種類によっては、Jiniが適さない場合もある。コンピューティング技術の流れは、分散Web中心サービスおよびコンテンツ・モデルに向かっており、クライアント・サービスとコンテンツの内容は急激に変化している。将来のクライアントは、ユーザがどこへでも持ち運べるコンパニオン・タイプのデバイスになると思われる。このようなデバイスとしては、たとえば、携帯電話とPDAとの組み合わせが考えられる。このようなデバイスがより強力なデバイスとだけでなく、より軽量なシン・デバイスまたは非力なデバイスとも通信し、リソースを共有できることが望ましい。
【0015】
さらに、インターネットが出現し、その結果ネットに接続したデバイスが爆発的に増え、こうした現象を活用するように設計された分散プログラミング・モデルが必要になった。クライアントが信頼できる、セキュリティで保護され安全な方法でサービスに接続するための実現技術が要求される。シック(thick)・クライアントからシン・クライアントに至るさまざまなクライアントとサービスをインターネット、企業内イントラネット、またさらには単一コンピュータ内で接続する必要がある。クライアントとサービスの両方から距離、待ち時間、実装を抽象化(abstract)することが望ましい。
【0016】
分散コンピューティング技術で重要な課題は、パワーのあるシック・クライアントから組み込み型モバイル・デバイスなどの非常に軽量なシン・クライアントに至るまでスケーラブルにすることである。Jiniなどの現在の分散コンピューティング技術は、あらゆる種類のクライアントのニーズに応じられるほどスケーラブルでないといえる。省スペース・デバイスや組み込み型デバイスなどの一部のデバイスでは、メモリリソースが十分でなかったり、十分なネットワーキングの帯域幅を欠いていたりして、現在の分散コンピューティング技術に十分に参加できない。組み込み型モバイル・デバイスなどのクライアント製品群のローエンドは、多くの場合、コード実行環境が限られていたり固定されている。これらのデバイスもまた、ストレージ能力が最低限であったりあるいは全く永続性がない場合がある。大半の小型組み込み型モバイル・デバイスは、Java仮想マシンをサポートしていない。ほとんどのコード実行可能小型クライアントはネイティブ・コードのみを実行する。さらに、ほとんどの小型デバイスは、その単独の永続的ストレージ・メディアとしてせいぜいフラッシュ・メモリーやバッテリ・バックアップRAMを備えているぐらいである。ストレージの容量は非常に小さく、時には本質的に読み取り専用であることが多い。さらに、このタイプのストレージ・メディアのアクセス・タイムは、より強力なクライアントのハード・ディスクのアクセス・タイムに比べて1桁以上遅いことが多い。
【0017】
Jiniなどの既存の接続技術は、サイズが大きいことから、望んでいるほどはスケーラブルでありえない。たとえば、Jiniでは、すべての参加者がJavaをサポートする必要があるが、小さなクライアントの多くはJava仮想マシン用にリソースを確保することはできない。さらに、JiniではRMIを使用するため、クライアント側でコードとコンテンツをダウンロードできる必要がある。Jiniは、新しいクラスをダウンロードすることにより既存のクライアント・プラットフォームを補強しているので、組み込む型デバイスなどの小型デバイスにセキュリティおよびサイズの面で問題が生じることがある。Jiniは、コードとデータを渡すことによりクライアントとリソースが通信するという形で動作する。クライアントがJiniサービスをアクティブにすると、このサービスは結果をクライアントに返すが、これには大量のコードまたはコンテンツが含まれる場合がある。Jiniでは、クライアントはメソッドを呼び出し、大きなオブジェクトが返され、それをダウンロードすることがある。クライアントは、返されたオブジェクトを受け入れるだけのリソースを持たないことがある。さらに、RMIとJava自体が大量のメモリを必要とする。多くの省スペース・デバイスは、現在の分散コンピューティング技術に事実上または少しでも加わるだけのリソースを持たないことがある。
【0018】
既存の分散コンピューティング技術の問題としては他に、多くの場合、複数のレベルの接続能力およびプロトコルを必要とするという点があげられる。たとえば、Jiniでは、コンピュータとデバイスを接続するための妥当な速度のネットワークが存在していることを想定している。またJiniでは、TCP/IPネットワーク・トランスポート・プロトコルをサポートするデバイスも必要とする。しかし、多くの小型デバイスは接続能力が限られている。小型デバイスは、ネットワーク接続の待ち時間が長かったり、または低速であったりし、TCP/IPをサポートしない場合もある。
【0019】
上述のように、Jiniでは、JavaをサポートするJava仮想マシンを備えるデバイスを必要とし、そのため、多くの小型デバイスには備えられないような処理能力およびストレージ機能を必要とする。このこともまた、Java対応でないデバイスはJiniシステムに直接参加できないという点でJiniの柔軟性を制約している。JiniはJavaを必要とするため、均質的な環境とみなすことができる。ただし、非常に小型の組み込み型デバイスからPDA、携帯電話、さらにラップトップおよび最強のコンピュータに至るまでの異機種分散コンピューティングに対応する分散コンピューティング機能を備えることが望ましい。コモン・オブジェクト・リクエスト・ブローカ・アーキテクチャ(CORBA)など他の異機種ソリューションも存在する。CORBAは、プログラム・オブジェクトが、作成に使用されたプログラミング言語に関係なく、またはそのオブジェクトが実行されるオペレーティング・システムに関係なく互いに通信できるようにするアーキテクチャである。しかし、CORBAはJiniで取り扱われている接続問題をすべて取り扱えるわけではない。さらに、CORBAにはJiniと似たスケーラビリティの問題もある。
【0020】
JiniやCORBAなどの技術では、コード中心のプログラミング・モデルを使用して、リモート・コンピュータ間のインターフェースを定義している。コード中心プログラミング・モデルでは、リモート・クライアントまたはコンポーネント間の通信にプログラム・インターフェースまたはAPIを定義する。APIは、特定のプログラミング言語で定義することができる。APIは、適切な相互運用性を確実なものとするために、すべてのソフトウェア・コンポーネントで矛盾がないようになっていなければならない。コンポーネントに対するアクセスはすべてこれらの標準APIを通じて行うため、これらのAPIを実装するコードがクライアント・プラットフォーム内に存在している必要がある。コードは、プラットフォームに静的にリンクすることも、また必要に応じて動的にダウンロードすることもできる。多くの組み込み型またはモバイル・デバイスは、単に、品質管理問題がかかわっているだけでなく、単一の言語およびプログラム実行環境に依存しているということから、コードをネットワークから動的に受け入れることができないのである。ネットワーキング・プロトコルなどのデータ中心モデルは、コードの移動に依存することを避けているが、このようなプロトコルは簡単に分散コンピューティングに対応できるほど機能豊富でなく、型安全性などコードやその他のプログラミング機能によるプログラミングを簡単に行うことができない。
【0021】
従来の分散コンピューティング・システムは、第1のデバイスで実行されるプログラムが第2のデバイスのプログラムをリモート・コールできるということに依存しており、結果は第1のデバイスに返される。リモート・プロシージャ・コール(RPC)は、プログラムまたはプロシージャのリモート・コールを行うための基本的メカニズムである。CORBAとJiniは両方とも、プログラム・メソッドをリモートから呼び出す機能に基づいている。ただし、JiniやCORBAなどのコードまたはオブジェクトを渡すことで通信を行うのは幾分複雑になることがある。たとえば、上述のように、JiniではJava Remote Method Invocation(RMI)を使用してサービス間の通信を行う。クライアントがJavaオブジェクトをリモート・位置との間で移動するには、シリアライゼーション/デシリアライゼーションの何らかの手段が必要になる。Java開発キット(JDK)におけるこのような現在の機能は、Javaオブジェクトの内容を判別するためにリフレクションAPIに依存しており、最終的にはそのコードが仮想マシンに問い合わせを行う必要がある。このコードはかなり大きく、非効率である。
【0022】
シリアライゼーション/デシリアライゼーションを行うための現在の方法には、サイズ、速度、およびオブジェクト・トラバーサル・モデルに関する基本的な問題がある。JVMの外部のコードは、Javaオブジェクトの構造またはグラフを認識しないため、オブジェクト・グラフをトラバースし、引き離して、最終的にJVMを呼び出す必要がある。Javaオブジェクトの格納および移動を行う従来のシリアライゼーションおよびリフレクション・メカニズムは、すべての種類のデバイス、特により軽量のシン・デバイスについては実用的でない。Javaリフレクションおよびシリアライゼーションの問題点として、オブジェクトのグラフ(オブジェクトの推移的閉包(transitive closure))リフレクションがJVMの外部で実行することが困難であるという点があげられる。シリアライゼーションは、大量のコードを必要とし、大きすぎる。さらに、シリアライゼーションはJava固有のオブジェクト交換形式であり、Java非対応のデバイスでは使用できない。
【0023】
Jini分散コンピューティング・モデルでは、Javaデバイス間でJavaオブジェクトを移動する必要がある。そのため、Java対応でないプラットフォーム側でオブジェクトの発送および受取に使用することができないためシリアライゼーション・メカニズム自体はプラットフォーム独立ではない。シリアライゼーションは、均質的なオブジェクト形式であり、Javaプラットフォームでのみ動作する。シリアライゼーションでは、リフレクションAPIを使用するため、セキュリティ関連の制限を受ける場合があり、しばしば、ネイティブのJVM依存メソッドを使用して対処する必要がある。リフレクションAPIは、オブジェクトのグラフを提供できるが、JVMとリフレクション・メソッドを呼び出すコードとの間で何回も呼び出しが行われるため非効率である。
【0024】
Javaリフレクションを使用してオブジェクトをシリアライズするには、オブジェクトの推移的閉包を動的に解析するときに、アプリケーション側がJVMとピンポンのようにやり取りし、一度にフィールド1つずつオブジェクトを取り出す必要がある。Javaデシリアライゼーションを使用してオブジェクトをデシリアライズするには、オブジェクトの推移的閉包を動的に解析するときに、アプリケーション側がJVMと緊密に連携し、一度にフィールド1つずつオブジェクトを再構成する必要がある。そのため、Javaシリアライゼーション/デシリアライゼーションは時間がかかり、扱いにくく、しかも、アプリケーションとJVMのコードを大量に書く必要があるだけでなく、永続的な記憶領域も必要である。
【0025】
Javaをサポートするシン・クライアントの場合も、Jini RMIは、最小限のメモリ専有面積と最低限の帯域幅を備えるシン・クライアントの場合には実用的でないと思われる。Jini RMIと関連するシリアライゼーションは、実行時間が長く、コード・サイズが大きく、JVMリフレクションAPIを必要とし、Java固有オブジェクトの表現である。Javaデシリアライゼーションも実行に時間がかかり、コード・サイズが大きく、シリアライズ・オブジェクト・パーサを必要とする。Javaベースのシン・クライアントであっても、Jini内で要求されたときにクライアントへネットワーク経由で(必ず)返される巨大なJavaオブジェクト(必要なクラスに沿って)を受け入れられない場合がある。さらにスケーラブルな分散コンピューティング・メカニズムが必要である。よりスケーラブルな分散コンピューティング・メカニズムでセキュリティ問題に対処すること、またJavaオブジェクトなどのオブジェクトの受け渡しを可能にし、さらに一方のネットワーク・モードから他方のネットワーク・モードにプロセスを移行できるように、拡張可能であることが望ましい。
【0026】
オブジェクト・ベースの分散コンピューティング・システムでは永続的記憶領域が必要である。ただし、上述のように、オブジェクト記憶領域での試みは多くの場合言語とオペレーティング・システムに特有のものである。さらに、これらのオブジェクト・ストレージ・システムは、複雑すぎて、多くの小さな組み込み型システムでは使用できない。たとえば、Jini技術では、JavaSpacesを永続的オブジェクト・コンテナとして使用する。しかし、JavaSpaceは、Javaオブジェクトを格納するだけであり、小型デバイスに実装できない。JavaSpace内の各オブジェクトは。シリアライズ化され、Javaシリアライゼーションと関連する上述のペナルティを払う。小型デバイスから大型デバイスに至るまでの分散コンピューティング用に異機種オブジェクト・リポジトリを備えることが望ましいと考えられる。
【0027】
Sun Microsystems,Inc.のJavaSpacesは、エール大学コンピュータ・サイエンス学部のDavid Gelernter教授の並列処理の成果を利用している。Gelernter教授の「Linda」という名前の機能セットでは、TupleSpaceと呼ばれる共有メモリ空間を作成し、コンピュータのプロセスの結果またはそれらのプロセス自体を格納し、複数のCPUでアクセスできるようにする。Lindaは、したがって複数のプロセッサ用にグローバルな共有メモリを備える。
【0028】
Lindaを拡張するもう1つの技術がIBM CorporationのTSpaceである。TSpaceは、基本的なLinda TupleSpaceフレームワークを拡張し、実データ管理を行い、新しいデータ型および新しいセマンティック機能をダウンロードできるようにしている。TSpaceは、一組のネットワーク通信バッファとこれらのバッファにアクセスするための一組のAPIを備えている。したがって、上述の多くのソリューションのように、TSpaceはコード中心プログラミング・モデルを使用しており、そのようなモデルの欠点も共有している。さらに、TSpaceは、Javaプログラミング言語で実装されているため、Java仮想マシンやJavaバイトコードを実行する、Java実行可能マイクロプロセッサなどの他の手段を必要とする。したがって、TSpaceは、十分なリソースをJavaバイトコードの実行専用に割り当てることができない省スペース・デバイスには不適切と思われる。
【0029】
オブジェクト指向分散システムでは、オブジェクト・リポジトリを特定し、それらのリポジトリ内で特定のオブジェクトを見つけることができることが望ましい。供述のように、Jiniルックアップ・サーバはメモリ専有面積の小さな小型デバイスには実用的でないと思われる。オブジェクト・ストアを特定するより効率的なメカニズムがあることが望ましい。
【0030】
分散ネットワーク・コンピューティング・モデルでは、クライアントがサービスを特定する機能を備えることが望ましい。現在のネットワーク・プロトコルは、ネットワーク・サービスにアクセスするときにセキュリティを一切持たない単一の標準サービス・アクセス・インターフェースのみを提供するか、または管理者もしくは特権のある機能も含めて、サービスの全機能に対する「オール・オア・ナッシング」アクセス機能を提供する。また、サービスを特定する現在のネットワーク・プロトコルでは、サービスを見つける柔軟なメカニズムを提供していない。現在のプロトコルは、選択的サーチ機能をまったく備えていないか(たとえば、UPnP)、またはプリミティブ・キーワードおよび属性文法メカニズムのみを備える(たとえば、SLP)。そのため、現在のサービス発見メカニズム(service discovery mechanism)はセキュリティおよびサーチ基準メカニズム(search criteria mechanism)に関してあまりにも柔軟性が不足していると考えられる。
【0031】
さらに、現在のサービス発見モデルは、サービスを特定するために対称モデルを使用している。ただし、近さに基づく機能を使用できるデバイスなどある種のサービス・デバイスが発見モデルをサポートするのはリソースの無駄と考えられる。これは、このようなデバイスが近いところにあるためすでに特定されているためである(たとえば、他方のデバイスを物理的にポイントしている一方のデバイス)。そのため、代替えとなる軽量発見メカニズムもこのようなデバイスに対して望ましいと考えられる。
【0032】
分散オブジェクト・アクセスにも、偏りのない効率のよい共有メカニズムを必要とする。上述のように、Jiniは今のところ、リース・メカニズムを使用してオブジェクトを共有している。ただし、Jiniのリースは時間に基づいているため、さまざまな問題が発生しうる。たとえば、現在のオブジェクト・ホルダは、オブジェクトをどれだけの期間リースするかという考え方がなく、保持期間が長くなりすぎる場合がある。さらに、時間に基づくリースを使用するには、複数のマシンの間で時間が同期している必要がある。さらに、時間に基づくリースには、オペレーティング・システムのサポートも必要と考えられる。さらに、Jiniのリースは、RMI経由で確立され、解放される。そのため、Jiniのリース・メカニズムには、RMIを使用する上述の問題が発生する。さらに、Jiniのリース・メカニズムは、リースの確立、更新、および取り消しのためのセキュリティ・メカニズムを備えていない。他のリース・メカニズムも望ましいと考えられる。
【0033】
一般的に、メモリ専有面積の小さなモバイル・クライアント・デバイスは分散環境でさまざまなサービス、つまりレガシサービスと新サービスの両方を実行できることが望ましい。小型クライアントとしては、携帯電話およびPDAがあり、通常は低帯域幅のさまざまなネットワーキング・インターフェースを備える。これらのデバイスは多くの場合、グラフィック機能が限られた非常に小さなディスプレイを備えているが、大画面のディスプレイを備え、グラフィック機能も高度なものを使用するラップトップやノートブック・コンピュータもある。サービスは、さまざまなアプリケーションだけでなくプリンタなどのデバイス用の制御プログラムもある。モバイル・クライアントは、使用できる場所であればどこでもこれらのサービスを使用できることが望ましい。
【0034】
モバイル・クライアントは、多くの場合、一時的な動的ネットワーク・アドレスが割り当てられ、このクライアントが送るネットワーキング・メッセージはそのネットワーキング・インターフェースを超えて配信することはできない(そうでないと、異なるネットワーク上の2つの異なるクライアントが同じ動的アドレスを持つときに競合が発生することがある)。モバイル・クライアントは、多くの場合、全機能搭載のブラウザやその他の高度なソフトアウェア用の機能を持たない。ディスプレイが制限となって、クライアントが一部のアプリケーションを実行できない場合もある。従来のアプリケーション・モデルは、所定のユーザ・インターフェースまたはデータ特性に基づいている。アプリケーションに変更を加えると再コンパイルが必要になる。
【0035】
このようなクライアントは分散アプリケーションまたはサービスを見つけて呼び出すメカニズムを備えることが望ましい場合がある。クライアントは、クライアントのメモリ専有面積に収まり切らない可能性のある一層大きなレガシ・アプリケーションを実行する必要がある場合もある。上述のように、Jiniなどの現在の技術は、省スペース・デバイスには実用的でない場合がある。また、モバイル・シン・クライアントが普及することでさらにニーズも高まる可能性がある。たとえば、ユーザとそのユーザのモバイル・クライアントの物理的な場所に基づいてサービスを特定することが望ましい場合がある。たとえば、現地のレストラン、天候、道路交通現況図、および映画情報など現地周辺のサービスに関する情報が非常に役立つことがある。それと同様に、特定の場所にあるプリンタなど計算リソースに関する情報が役立つ。現行技術では、クライアントの物理的場所に基づいてサービスを特定する自動的なメカニズムを備えていない。シン・モバイル・クライアントによって生じるニーズとしては、他に、人的要因を取り扱うものがある。シン・モバイル・クライアントは、通常、エルゴノミック・キーボードおよびモニタを備えない。このような人的要因サービスを提供することおよび/または分散コンピューティング環境でこのようなサービスを特定する機能があると望ましい。分散コンピューティング・モデルは、クライアントは一時的ドキュメントおよびサービスを見つける手段を備える必要がある。ドキュメントが拡張マークアップ言語(XML)によって提供されるものなどプラットフォーム独立および言語独立の型で表される汎用ドキュメント(サービスおよび/またはサービス通知を含む)を見つけるメカニズムを備えることが望ましい場合がある。Jini、Universal Plug and Play(UPnP)、およびService Location Protocol(SLP)のルックアップ・メカニズムを含む現在のアプローチでは、このような汎用ドキュメントルックアップ・メカニズムをサポートしていない。たとえば、Jiniルックアップ・メカニズムは、Java言語型付けに限定されており、したがって、言語独立ではない。UPnPおよびSLPは、サービスのみについて発見プロトコルをサポートしており、汎用ドキュメントについては発見プロトコルをサポートしていない。
【0036】
(発明の要旨)
上で概要を示した問題は、主に、分散コンピューティング環境内でサービスを通知し、アドレッシングし、かつ/またはアクセスするシステムおよび方法のさまざまな実施態様によって解決される。分散コンピューティング環境は、「スペース」またはオブジェクト・リポジトリに頼って、クライアントとサービスの間の相互作用のためのランデブー機構または触媒を提供することができる。サービスプロバイダは、スペース内のサービスを通知することができる。クライアントは、スペース内の通知を見つけ、通知からの情報を使用して、分散コンピューティング環境のXML(拡張マークアップ言語)メッセージング機構を使用してサービスにアクセスすることができる。サービスまたはコンテンツを記述するXML通知がそれぞれに含まれる、多数のスペースが存在することができる。したがって、スペースは、結果などの生データまたはデータに関する通知とすることができる、サービスのXML通知および/またはXMLデータのリポジトリとすることができる。
【0037】
一実施態様では、スペース自体がサービスである。他のサービスと同様に、スペースは通知を有する。この通知は、スペースのクライアントが、スペース・サービスを実行できるようになるために最初に得なければならない。スペース自体の通知には、XMLスキーマ、1つまたは複数の証明書、およびスペースにアクセスする方法を示すURI(Uniform Resource Identifier)を含めることができる。クライアントは、スペースにアクセスするために、スペース・サービスの通知からゲートを構築することができる。スペースのクライアント自体を、そのスペース内の通知を探すか既存の通知を変更することを求めるサービス・プロバイダとすることができる。あるいは、スペースのクライアントを、スペースによってリストされるサービスまたはコンテンツへのアクセスを求めるアプリケーションとすることができる。したがって、スペースは、分散コンピューティング環境でのクライアントとサービスの間の相互作用の触媒を提供することができる。
【0038】
スペースに、名前付きの通知の集合を含めることができる。スペースは、スペース自体を記述した単一のルート通知を用いて作成することができる。追加の通知を、スペースに追加することができる。通知の名前によって、名前の階層などの必要なグラフ化情報の指定を含めて、スペース内の通知を特定することができる。好ましい実施態様では、スペースの構造が、分散コンピューティング環境によって指示されない。すなわち、スペースは、たとえば通知のフラットな関連しないセットまたは関連する通知のグラフ(たとえば市販データベース)などとして構成することができる。好ましい実施態様では、分散コンピューティング環境が、スペースが実際にその内容を格納する方法を指定しないので、スペースを、小さいデバイスから大きいデバイスまでによってサポートすることができる。たとえば、単純なスペースを、PDAなどの小さいデバイスにおさまるように調整することができる。より高度なスペースを、大規模な市販データベースを使用して大型サーバで実施することができる。
【0039】
上で述べたように、スペースに、分散コンピューティング環境内のサービスに関する通知を含めることができる。通知は、分散コンピューティング環境内のサービスおよび/またはコンテンツのアドレッシングおよびアクセスの機構を提供することができる。通知はサービスのURIを指定することができる。いくつかの実施態様で、URIはサービスをインターネットを介してアクセス可能にすることができる。通知には、サービスに関するXMLスキーマを含めることもできる。XMLスキーマでは、サービスのクライアントがサービスの機能を呼び出すためにサービスに送ることができるメッセージのセットを指定することができる。XMLスキーマでは、クライアントとサービスのインターフェースを定義することができる。通知で指定されるURIとXMLが一緒になって、サービスのアドレッシングとアクセスの方法を示すことができる。URIとスキーマの両方を、スペース内の通知としてXMLで提供することができる。したがって、分散コンピューティング環境内のサービスのアドレッシングおよびアクセスの機構を、スペース内の通知としてパブリッシュすることができる。クライアントは、スペースを発見し、その後、サービスまたはコンテンツに関する個々の通知をルックアップすることができる。スペースとあるスペース内のすべての通知を、URIを使用してアドレッシングすることができる。一実施態様では、スペース名および通知名を、URL(Uniform Resource Locator)命名規約に従うものとすることができる。いくつかの実施態様で、スペースのアドレッシングに、たとえばURLなどのURIを使用することによって、スペースを、インターネット全体を通じてアドレッシング可能にすることができるようになる。
【0040】
スペースのクライアントがスペース・サービスの通知を見つけた後に、スペースのそのクライアントは、他のサービスと同様に、スペース・サービスを実行することができる。スペース・サービスのクライアントが、別のサービス(たとえば、スペース内の通知を探すサービス)である場合があることに留意されたい。一実施態様では、スペース・サービスを実行するために、スペースのクライアントが、まず、スペースに関する認証サービスを実行して、認証トークンを得ることができる。認証サービスは、スペース・サービスのサービス通知で指定することができる。スペースのクライアントは、認証トークン、スペースのXMLスキーマ(スペースのサービス通知から)、およびスペースのURI(スペースのサービス通知から)を使用して、スペース用のゲートを構築する。スペースのクライアントは、その後、ゲートを使用してスペース・サービスにメッセージを送ることによって、スペース・サービスを実行することができる。
【0041】
認証を使用する実施態様に関して、スペース・サービスが、認証トークンを埋め込まれた最初のメッセージをクライアントから受け取る時に、スペース・サービスは、同一の認証サービス(スペース・サービスのサービス通知で指定される)を使用して、クライアントを認証し、したがって、クライアントの識別を確立する。スペース・サービスは、クライアントの機能を判定し、それらを認証トークンにバインドすることができる。
【0042】
スペースのクライアントは、スペース・サービスにメッセージを送ることによって、さまざまなスペース機能を実行することができる。一実施態様では、スペースのクライアントは、スペース・サービスに要求を送る時に、その要求で認証トークンを渡し、したがって、スペース・サービスが、クライアントの特定の機能に対して要求を検査することができる。
【0043】
各スペースは、通常はサービスであり、スペース・サービスのコア機能を定義するXMLスキーマを有することができる。XMLスキーマによって、スペース・サービスへのクライアント・インターフェースを指定することができる。一実施態様では、すべてのスペース・サービスが、スペース関連メッセージのベースレベルを提供することができる。ベースレベル・スペース機能は、PDAなどの小さいデバイスを含むほとんどのクライアントが使用できる基本的なスペース機能とすることができる。たとえばより高度なクライアント用など、追加の機能を提供することが望ましいであろう。ベースレベル・スペースに対する拡張は、スペースを通知するXMLスキーマにより多くのメッセージを追加することによって達成することができる。たとえば、一実施態様では、ベースレベル・メッセージが関係グラフを通知に押し付けない。たとえば、通知の階層をトラバースするメッセージをスペース拡張とすることができる。そのような追加の機能の提供は、1つまたは複数の拡張されたXMLスペース・スキーマまたはスペース用のスキーマ拡張を提供することによって行うことができる。拡張されたスキーマに、ベース・スキーマを含めることができ、その結果、拡張されたスペースのクライアントが、今まで通りベース・スペースとしてスペースにアクセスできるようになる。
【0044】
一実施態様では、スペースが、スペース内で通知されるサービスをクライアントがインスタンス化する機能を提供することができる。サービスのインスタンス化は、クライアントがサービスを実行できるよう行う初期化である。サービスをインスタンス化するために、クライアントは、まず、スペース内でパブリッシュされるサービス通知の1つを選択することができる。クライアントは、スペース内で通知されるさまざまな通知をルックアップするためにスペースによって提供されるルックアップ機能などのさまざまな機能を使用することができる。その後、クライアントは、サービスをインスタンス化することをスペースに要求することができる。
【0045】
一実施態様では、サービス・インスタンス化に、下記のアクションを含めることができる。クライアントが、選択されたサービスをインスタンス化することをスペース・サービスに要求した後に、スペース・サービスは、要求されたサービスをクライアントがインスタンス化できることを検証する。スペース・サービスは、クライアント・メッセージに含まれる認証トークンを検査することによって、この検証を実行することができる。認証トークンは、クライアントがスペース・サービスとのセッションを確立する時に受け取りた証明書である。スペース・サービスは、クライアントの認証トークンおよびそのクライアントについて示される機能に従って、クライアントが、要求されたサービスをインスタンス化できるかどうかを検証することができる。
【0046】
クライアントができると仮定すると、スペース・サービスは、クライアントによって指定されるリース要求時間を有する、クライアントに関するサービス通知に対するリースを得ることもできる。スペース・サービスは、その後、割り振られたリースおよびサービスのサービス通知を含むメッセージをクライアントに送ることができる。一実施態様では、クライアントが、サービス通知で指定された認証サービスを実行し、認証トークンを得ることができる。次に、クライアントは、サービス用のゲートを構築することができる(たとえば、認証トークンと、通知からのXMLスキーマおよびサービスURIを使用して)。上で述べたクライアントとスペース・サービスの間の通信は、分散コンピューティング環境のXMLメッセージングを使用して実行される。クライアントは、その後、構成されたゲートとXMLメッセージングを使用してサービスを実行することができる。サービスは、同様に、クライアントとのXMLメッセージ通信用のサーバ・ゲートを構築することができる。
【0047】
スペースは、クライアントによって実行されるサービスからの結果を格納する便利な機構を提供することができる。結果用のスペースを使用することによって、小さいクライアントが、サービス実行の結果を切れ切れに受け取ることができるようになる。いくつかのサービスは、大量の結果を生成することがある。サービスからの結果を格納するのにスペースを使用することによって、すべての結果を一度に受け取るリソースを有しないクライアントが、それでもサービスを使用できるようになる。さらに、スペースを使用して結果を格納することによって、高速だが忙しいサーバで動作するサービスが、大量の結果を返す時に、そのサービスを低速のクライアントと直接対話することから解放することできる。したがって、サービスを、他のクライアントによる使用のためにより早期に解放することができる。
【0048】
スペースは、異なるクライアントによるおよび/または異なる時刻での結果のアクセスの便利な機構を提供することができる。たとえば、あるクライアントが、結果の全体を使用することができないが、ユーザが、後でその結果にアクセスできる別のクライアントを使用して結果の残りにアクセスすることを望む場合がある。たとえば、結果を、現在の株価(PDAによってアクセス可能)を示し、株価のチャート(後でラップトップ機によってアクセス可能)を示す株式市況情報とすることができる。また、分散コンピューティング環境で結果にスペースを使用することによって、クライアントが、まず結果をダウンロードする必要なしに、あるサービスの結果を別のサービスに供給できるようになる。たとえば、上の株式市況情報の場合に、PDAが、チャート自体をダウンロードする必要なしに、チャートを印刷する別のサービスにチャートを供給することができる。したがって、結果スペースは、クライアントが結果を処理または受け取るする必要なしに、クライアントが別のクライアントまたはサービスに渡す機構を提供することができる。
【0049】
一実施態様では、結果にスペースを使用することが、必ずしもそのサービスがすべての結果をそのスペースに置かなければならないことを意味しない。サービスが生成するすべての結果について、異なる代替物を設けることができる。たとえば、結果の一部またはすべてを、メッセージ内で直列にしてクライアントに送ることができる。その代わりに、結果をスペース内に置くことができ、その後、結果を参照する(たとえば、結果のURIまたは結果に関する通知を含む)通報メッセージをクライアントに送ることができる。もう1つのオプションが、結果をスペースに置き、スペースからのイベントを介する通報を用いることである。たとえば、クライアントおよびサービスが、結果をある特定の名前で呼ぶことに合意し、その後、クライアントが、スペースに登録して(下で説明するものなどのスペース機能を使用して)、そのように命名された結果がスペースに追加される時にイベントを受け取るようにすることができる。イベント通報に関する上の説明を参照されたい。
【0050】
したがって、サービスがクライアントに結果を返すために、分散コンピューティング環境内でさまざまな異なる機構を使用することができる。実際の結果を、XMLメッセージ内の値によってクライアントに返すことができ、あるいは、結果を、スペース内に置かれた実際の結果に関する参照(または実際の結果に関する通知)によってクライアントに返すことができ、このクライアントは、スペース内の結果を参照するメッセージを受け取る。さらに、結果または結果通知を、スペースに置き、クライアントにイベントによって通報することができる。
【0051】
結果を処理するもう1つの機構は、クライアントが、結果を供給されるもう1つのサービスを指定することである。たとえば、クライアントが、結果を作るサービスを実行する時に、クライアントは、そのサービスに(たとえばXMLメッセージングを介して)さらなる処理のためにもう1つのサービスに結果を送るように指示することができる。これには、クライアントが、他方のサービスに関する通知のURIを示し、その結果、結果を作るサービスが、他方のサービスを実行し、それに結果を渡すために他方のサービスへのゲートを生成できるようにすることを含めることができる。この例では、結果を作るサービスが、他方のサービスのクライアントになることができる。さらなる処理のためのサービスの例が、元のクライアントのために結果を表示することができる表示サービスである。この表示サービスは、クライアントと同一のデバイス上にあるか、それに関連するものとすることができる。
【0052】
結果スペースは、分散コンピューティング環境が、最小限のメモリ・フットプリントおよび最小限の帯域幅を有するシン・クライアントに実用的である単純なリモート・メソッド呼出しを提供できるようにすることができる。というのは、従来のリモート・メソッド呼出し技法のように、巨大なプログラム・オブジェクト(必要なクラスと共に)を(必ず)ネットワークを介してクライアントに返すという悪い副作用を有する必要がないからである。その代わりに、結果を、結果スペースに返すことができ、望まれる場合に限って(それらがクライアント側に存在することができる場合に)、実際のオブジェクトをクライアントにダウンロードすることができる。
【0053】
さまざまな実施態様で、結果を、複数の方法で、たとえば、メッセージ内で、スペース内で、クライアントがイベントを介して通報されるスペース内で、メッセージ内で返される通知を使用して、スペース内で返される通知を使用して、およびクライアントがイベントを介して通報されるスペース内で返される通知を使用して、クライアントに返すことができる。この複数の方法の使用可能性によって、異なる機能を有するクライアントに関するものなどのさまざまな情況に関する分散コンピューティング環境の柔軟性および適応性を強化することができる。追加の柔軟性について、結果を別のサービスに効率的に渡すこともできる。
【0054】
クライアントは、第1のメッセージをサービスに送り、そのサービスの1つまたは複数の関数の呼出しを要求することができる。サービスに関するスキーマで、サービスの関数の呼出しに使用可能である第1のメッセージを含む複数のメッセージを指定することができる。メッセージおよびスキーマは、XMLなどの、プラットフォーム独立および/またはプログラミング言語独立のデータ表現言語で表現することができる。第1のメッセージに応答して、サービスの関数を呼び出すことができる。その後、サービスが、結果のセットを生成することができる。結果を、データ表現言語(たとえばXML)で表現することができる。サービスは、結果のセットをスペース内の位置に格納することができ、この場合に、スペースに、ネットワーク・アドレッシング可能なストレージ位置が含まれる。一実施態様では、結果のセットの格納の準備としてスペースを作成することができる。一実施態様では、イベントを生成し、クライアントに送り、結果がスペースに格納されたことをクライアントに通報する。その後、クライアントは、スペースから結果のセットにアクセスし、読み取ることができる。一実施態様では、第2のクライアント(すなわち、関数を呼び出すメッセージを送りたクライアントと異なるクライアント)が、スペースから結果のセットを読み取ることができる。この形で、第1のクライアントが結果の読取および表示などの作業を達成するのに十分なリソースを有しない可能性がある時に、ユーザが、第2のクライアントを使用して結果を読み取り、表示することができる。
【0055】
一実施態様では、結果をスペースに格納するのではなく、結果を、メッセージ内でクライアントに送ることができる。このメッセージは、データ表現言語(たとえばXML)で表現することができ、一実施態様では、サービスに関するスキーマで指定することができる。
【0056】
一実施態様では、結果を、結果に関する通知を使用して返すことができる。前に説明したように、クライアントは、第1のメッセージをサービスに送り、サービスの1つまたは複数の機能の呼出しを要求することができる。第1のメッセージに応答して、サービスの機能を呼び出すことができ、サービスが結果のセットを生成することができる。一実施態様では、サービスが、結果のセットをスペース内の位置に格納することができ、スペースに、ネットワーク・アドレッシング可能なストレージ位置が含まれる。サービスは、結果に関する通知を生成することができる。この通知に、スペースからなど、結果にアクセスし、読み取るのに使用可能な情報を含めることができる。たとえば、通知に、結果にアクセスできる場所のUniform Resource Identifier(URI)を含めることができる。一実施態様では、通知に、結果のフォーマットを指定するスキーマ(たとえばXMLスキーマ)を含めることができる。一実施態様では、通知を、XMLなどのデータ表現言語で表現することができる。
【0057】
一実施態様で、サービスが、通知を含むメッセージをクライアントに送ることができる。このメッセージは、データ表現言語(たとえばXML)で表現することができ、一実施態様では、サービスに関するスキーマ内で指定することができる。もう1つの実施態様では、通知を、スペースに格納することができる。スペースは、結果が格納されるスペースと同一または異なるスペースとすることができる。クライアントは、そのスペースから通知を読み取ることができる。一実施態様では、イベントを生成し、クライアントに送り、結果に関する通知がスペースに格納されたことをクライアントに通報することができる。
【0058】
クライアントは、通知を使用して結果のセットにアクセスし、読み取ることができる。一実施態様では、第2のクライアント(すなわち、関数を呼び出すメッセージを送りたクライアントと異なるクライアント)が、通知を使用して結果を読み取ることができる。
【0059】
本発明は、さまざまな修正形態および代替形態を許すが、その特定の実施形態を、例として図に示し、以下で詳細に説明する。しかし、図面およびそれに対する詳細な説明が、開示される特定の形態に本発明を制限することを意図されておらず、逆に、その意図が、本発明の趣旨および範囲に含まれるすべての修正形態、同等物、および代替形態を包含することであることを理解されたい。
【0060】
(発明の実施形態の詳細な説明)
分散コンピューティングの実施形態の概要
図2には、分散コンピューティング環境のプログラミング・モデルが示されている。このモデルには、分散コンピューティングを使いやすくするAPIレイヤ102が含まれている。APIレイヤ102は、クライアントとサービスとの接続を容易にするインターフェースを備えている。APIレイヤ102は、クライアントおよびサービスの発見(discovery)および接続に関係する。APIレイヤ102は、メッセージ発送およびメッセージ受取機能を備える。このメッセージングAPIは、拡張マークアップ言語(XML)など、表現データまたはメタデータ形式による単純メッセージ用のインターフェースを提供する。実施形態はここではXMLを採用しているものについて説明しているが、他の実施形態では他のメタデータ型言語または形式を使用することもできることに注意されたい。いくつかの実施形態では、APIレイヤは、さらに、Javaオブジェクトなど、オブジェクト間の通信やオブジェクトの受け渡しのためのメッセージのインターフェースを備えることもできる。オブジェクト・リポジトリまたは「スペース」を発見し、特定のオブジェクトを見つけ、オブジェクトの要求および解放を行い、オブジェクトをオブジェクト・リポジトリに書き込んだり、オブジェクト・リポジトリからオブジェクト取り出したりするAPIが用意される場合もある。APIレイヤ102を通じてアクセス可能なオブジェクトは、XMLなどの表現データ形式で表現することができる。そのため、オブジェクト自体とは反対に、オブジェクトのXML表現は操作が可能である。
【0061】
APIレイヤ102は、メッセージング・レイヤ104の上にある。メッセージング・レイヤ104は、XMLなどの表現データ形式に基づいている。一実施形態では、XMLメッセージは、APIレイヤ102の呼び出しに従って、メッセージング・レイヤ104によって生成される。メッセージング・レイヤ104は、クライアントとサービスとの間で送ることができる定義済みの静的メッセージを備えている。メッセージング・レイヤ104は、さらに、動的に生成されるメッセージにも対応している。一実施形態では、JavaオブジェクトなどのオブジェクトをXML表現に動的に変換することができる。メッセージング・レイヤ104により、XMLオブジェクト表現はメッセージとして送ることができる。逆に、メッセージング・レイヤ104は、オブジェクトのXML表現を受け取ることができる。その後、そのメッセージからオブジェクトは再構成できる。一実施形態では、メッセージング・レイヤ104によって送られるメッセージは、アドレス、認証証明書、セキュリティ・トークン、およびメッセージ本体など、複数の基本要素を含むことができる。メッセージ・システムの発送および受取メカニズムは、完全に状態を保持しないようにできる。状態という概念を、発送側と受取側との間のメッセージ・ストリームに埋め込むことができる。そのため、メッセージ発送は非同期に行われる。好ましい実施形態では、接続モデルは課されていない。したがって、TCPなどのトランスポートは不要である。また、エラー条件は不達またはセキュリティ例外に限られる。
【0062】
メッセージング・レイヤ104は、メッセージ対応ネットワーキング・レイヤ106の上にある。好ましい実施形態では、メッセージング・レイヤ104は、特定のネットワーキング・プロトコルを使用する必要がない。TCP/IPおよびUDP/IPは、メッセージ対応ネットワーキング・レイヤ106に使用できるメッセージ対応プロトコルの例である。ただし、ワイヤレス・アプリケーション・プロトコル(WAP)などの他の専用プロトコルも使用できる。他にも、トランスポート・レイヤの下のIrDAやBluetoothネットワーク・ドライバのメッセージ・プロトコルも考えられる。ネットワーキング・レイヤ106は、TCP/IPなどの単一の信頼できる接続プロトコルに限られない。したがって、さまざまなデバイスとの接続が可能である。
【0063】
一実施形態では、メッセージ対応ネットワーク・レイヤ106は、Java2 Micro Edition(J2ME)プラットフォームが提供するネットワーキング・クラスから実装することができる。Java2 Micro Editionプラットフォームは、完全なJavaプラットフォーム用のリソースを持たないまたは完全なJavaプラットフォームを実行するのは効率的でない省スペース・デバイスに適している。J2MEがすでにネットワーキング・プロトコルのメッセージ対応ファミリ(ソケットをサポートする)を備えているため、メッセージング・レイヤ104を追加した場合の省スペース・コストについて、分散コンピューティング機能をすでにJ2MEを含んでいる小型デバイス用に提供することができる。
【0064】
メッセージ対応ネットワーキング・レイヤ106はさらに、Java開発キット(JDK)のjava.netネットワーキング・クラスでも用意できる。それとは別に、メッセージ対応ネットワーキング機能をメッセージ対応ネットワーキング・レイヤ106に使用することもできる。好ましい実施形態では、信頼できるトランスポートは不要であり、したがって、UDP/IPなどの信頼できないデータグラム・トランスポートをサポートする組み込み型デバイスもまたメッセージング・レイヤをサポートできる。したがって、シン・クライアントは、単にシン・メッセージング・レイヤ104を基本ネットワーキング・プロトコル・スタックの上に追加するだけで分散コンピューティング環境に参加することができる。図3に示されているように、基本システムはネットワーキング・レイヤ106の上にメッセージング・レイヤ104を備える。ネットワーキング・レイヤは、信頼できるメッセージ、たとえばTCP、または信頼できないメッセージ、たとえばUDPに対応できる。インターネット・プロトコル(IP)は、図3に、ネットワーキング・レイヤ106で使用できるプロトコルの例として示されている。ただし、分散コンピューティング環境ではIPを必要としない。分散コンピューティング環境では、IPに加えて、他のプロトコルも使用できる。Ethernet(登録商標)、Token Ring、Bluetoothなどのネットワーク・ドライバも、ネットワーキング・レイヤの一部とすることができる。多くの小さなクライアントがすでに、UDP/IPなどのネットワーク・ドライバおよびトランスポート・プロトコルを備えている。そこで、シンXMLベースのメッセージング・レイヤを追加する際に、デバイスは分散コンピューティング環境に参加できる。
【0065】
そこで、分散コンピューティング環境の基礎は、信頼できる接続および/または信頼できないデータグラムの上に実装された単純なメッセージ通信レイヤである。このメッセージング技術は、Javaリモート・メソッド呼び出し(RMI)を採用するJiniなどの他の分散コンピューティング・システムで採用されている通信技術とはかなり異なる。メッセージ通信レイヤ104は、RMIで記述される状態を保持する同期スタイルではなく、状態を保持しない非同期スタイルの分散プログラミングをサポートしている。さらに、メッセージ通信レイヤ104は、XMLなどのデータ表現言語に基づいており、そのため、RMIと異なり、コピー元からコピー先へデータをコピーするが、コードはコピーしない。Javaコードはメッセージの発送側または受取側に想定されていないため、XMLなどの表現データ言語を使用することにより、メッセージング・レイヤ104は非Javaおよび非Jiniプラットフォームとの相互運用性をシームレスに実現できる。さらに、RMIとは異なり、メッセージング・レイヤ104は、TCP/IPなどの信頼できるトランスポート・メカニズムを必要としない。
【0066】
メッセージ通信レイヤは、たとえば、バイトの配列またはバイト列として指定されたメッセージを送るために単純なsend()およびreceive()メソッドを提供することができる。send()メソッドは即座に戻り、データ転送を非同期に実行することができる。フロー制御のため、send()メソッドがsend()リクエストを処理できないことを示す例外をスローした場合に呼び出されるコールバック・メソッドを提供できる。receive()メソッドは同期メソッドで、次に使用可能なメッセージを返す。
【0067】
このメッセージ通信レイヤは、さらに、「スペース」内にオブジェクト、サービス、およびコンテンツのXML表現を格納するメソッドを備えることもできる。スペースは、URI(Uniform Resource Identifier)を使用してネットワーク上で名前が指定されアクセスされる。URIは、URL(Uniform Resource Locator)またはURLの簡易版でもよい。いくつかの実施形態では、URLクラスは大きすぎる場合がある。このような実施形態では、より単純なリソース・ロケータを使用し、クライアントとサーバとの間のメッセージの移動に使用するプロトコル、プロトコル依存ホストID、プロトコル依存ポートID、スペース名を指定する。
【0068】
メッセージング・レイヤで提供しているwrite()メソッドを使用してオブジェクトのXML表現をスペースに追加することができる。一実施形態では、クライアント指定名とオブジェクトをパラメータとして与えることができる。一実施形態では、writeメソッドは、オブジェクトをそのXML表現に変換する。オブジェクトを返し、スペースから削除するためにtake()メソッドを用意することができる。スペース内のXML表現から指定されたオブジェクト返すためにfind()メソッドを用意することができる。find()メソッドもまた、クラスが与えられた場合にスペース内のマッチするオブジェクトの配列を返すのに使用できる。これらのスペース・メソッドはそれぞれ、メッセージ通信レイヤを使用して実装される。リース・メカニズムも、後述のように提供することができる。
【0069】
発見サービスを、特定のスペースを見つけるためにクライアントが使用できる一般的なサーチ機能としてクライアントに提供することができる。シン・クライアントが実装することができないと思われる複雑なサーチ・プロトコルを定義しようとするのではなく、発見サービスが実際のサーチをXMLベースのサーチ機能にオフロードし、発見サービスがインターフェース機能をクライアントに簡単に提供できるようにする。このアプローチは図4に示されている。一実施形態では、発見サービスは特定するものを指定するストリングを受け取り、XMLメッセージを既知の発見フロント・エンド(たぶん、デフォルトのスペースで見つかる)に送り、その後、ストリングを解析し、サーチ機能に対し対応するXMLクエリを実行する(これは、インターネットサーチ機能でもよい)。発見フロント・エンドは、サーチ機能から受け取ったものを解析し、ストリングの配列(各ストリングは見つかったそれぞれのスペースのURI)としてそれを再パッケージし、XMLメッセージでクライアントに送ることができる。発見サービスでは、メッセージングが接続指向トランスポートの上にあることを要求していないことに注意されたい。したがって、TCPを持たない非常に軽量のシン・クライアントであってもこのような発見サービスを使用できる。発見フロント・エンドでは、クライアントがクライアント上にブラウザまたはサーチ機能なしでスペースを発見することが可能である。クライアントは、キーワードを指定するストリングを、サーチ機能とインターフェースするフロント・エンドに送る単純な機能だけあればよい。
【0070】
クライアントは、少なくともAPIとメッセージング・レイヤのサブセットを使用してメッセージを送ることができるプラットフォームであれば何でもよい。一実施形態では、APIレイヤは、静的(またはraw)および書式付き(またはcooked)メッセージの両方に対応できる。サーバは、メッセージ要求を受け取り、遂行できるプラットフォームであれば何でもよい。クライアントからサーバへ、または他のクライアントへバイト列を移動する明示的rawメッセージを送ることができる。メッセージ・タイプは、信頼できるメッセージ(たとえばTCP)、または信頼できないメッセージ(たとえばUDP)として指定できる。デバイスのうち最も小さいものは、rawの信頼できないメッセージ通信を、分散コンピューティング環境に参加する単独の手段として使用する。デバイスは、これらのメッセージを使用してその存在と状況をアナウンスする。このような小さなデバイスは、さらに、rawメッセージを受け取りて、機能のオン/オフなどのいくつかの機能を実行できる。
【0071】
スペースなどのメッセージベースのサービスでは、信頼できる書式付きメッセージを送受取できる。スペース・メッセージは、きちんと定義されたヘッダーを備える形式とし、XMLを使用する。一実施形態では、書式付きメッセージは、クライアントがスペース・メソッドを使用して、スペースにオブジェクトを要求したり、スペースにオブジェクトを書き込んだり、スペースからオブジェクトを取り出したりする。メッセージ・コンテンツは、動的にXML形式にすることができ、きちんと定義されたヘッダを備える。図5は、書式付きの静的メッセージをサポートするクライアント・プロファイルを示している。静的メッセージを使用することにより、小さなデバイスはコードのさらに小さなプロファイルを使用して、分散コンピューティング環境に参加することができる。たとえば、小さなデバイスは基本的なあらかじめ定められたメッセージだけを送ることができる。クライアントにもよるが、静的なあらかじめ定義されたメッセージが占有するメモリは少ないと考えられる(たとえば、200バイト未満)。静的メッセージは、さらに、大きなデバイスにあってはオプションとしてもよい。他方、動的XMLメッセージは、オブジェクト値がコンパイル時にわかっていないときに役立つ。
【0072】
図6には、メッセージング・システムとXMLメッセージおよびXMLオブジェクト表現とを組み合わせた分散コンピューティング・モデルが示されている。プラットフォームがXMLから独立していることを利用すると、システムを異機種分散コンピューティング環境に対応させることができる。したがって、クライアント110は、Javaなどの特定のプラットフォームではなくほとんどどのようなプラットフォームにでも実装することができる。メッセージング・システムは、インターネット・プロトコル(たとえば、TCP/IPやUDP/IP)などのネットワーク対応メッセージング・レイヤに実装することができる。そのため、コンピューティング環境をインターネットに分散させることができる。一実施形態では、メッセージング・システムはさらに、クライアントおよび/またはスペース・サーバおよび/またはサービスが同じコンピュータ・システムにあるときに、共有メモリを高速なプロセス間メッセージ・パッシング・メカニズムとして使用することもできる。図6の分散コンピューティング・モデルは、さらに、ほとんどどのような規模のクライアントであってもXMLメッセージの発送および/または受取を行えるように設定できるため、非常にスケーラブルである。
【0073】
図6に示されているように、分散コンピューティング・モデルで、サービス112およびクライアント110の2種類のソフトウェア・プログラムを実行することができる。サービス112は、サービスの使用を望んでいるクライアントに機能を通知することができる。サービス112は、スペース114で機能を通知する。図7に示されているように、クライアント110およびサービス112は同じネットワーク・デバイス内に常駐することもまた常駐しないこともある。たとえば、デバイス120および124はそれぞれ、1つのクライアントをサポートするが、サービス112aおよびクライアント110bは同じデバイス122内に実装される。また、図7に示されているように、デバイスがクライアントとサービスをサポートするのに特定のプラットフォームを必要としない。たとえば、デバイス120は、Javaベースとし、デバイス124はネイティブ・コードのランタイム環境を備える。
【0074】
デバイスは、ネットワーキング・トランスポートでアドレス指定可能なユニットである。デバイスの例としては、それらに限定はされないが、PDA、携帯電話、ノートパソコン、ラップトップ、デスクトップ・コンピュータ、より強力なコンピュータ・システム、さらにはスーパー・コンピュータもある。クライアントとサービスは両方とも、デバイスで実行されるソフトウェア(またはファームウェア)のURIアドレス指定可能なインスタンスとすることができる。クライアントは、分散コンピューティング環境アーキテクチャを使用してサービスを実行する。スペースとは、XMLドキュメントのリポジトリを管理するサービスである。これが冗長であっても、読みやすさのために、ここではスペース・サービスという用語を使用する。ソフトウェア・コンポーネントは、別々の時にクライアントでかつサービスであってもよい。たとえば、サービスがスペースを使用するときに(たとえば、自分を通知するために)、そのサービスはスペースのクライアントとなる。
【0075】
図8は、一実施形態における分散コンピューティング環境の基本モデルを示している。この分散コンピューティング環境は、ネットワーク全体を通してクライアント110をサービス112に接続する。ネットワークは、インターネットなどのワイド・エリア・ネットワークでよい。また、ネットワークは、インターネットで無線ネットワークに接続されたローカル・エリア・ネットワーク(LAN)などのネットワークの組み合わせとすることもできる。図8に示されているように、サービス112は、スペース114内で自分自身に対し通知132をパブリッシュする(XMLで表される)。通知132で、サービスのXMLスキーマとURIアドレスを指定する。その後、クライアント110は、通知132をルックアップする。クライアント110は、通知132を使用して、ゲート130をインスタンス化する。ゲート130により、クライアント110はサービス112を実行するが、その際に、XMLメッセージをサービス112に(から)発送(し、そして受取)する。
【0076】
サービスを実行した結果は一部、XMLメッセージでクライアントに返すことができる。ただし、小さなクライアントでは他の結果が大きすぎ一度に受け取りて消費することができないため、サービス112は、図9に示されているように、それらの結果または結果134のXML表現をスペース114に入れ、値で返すのではなく、(XMLメッセージによる)参照でクライアント110に返す。結果への参照を返す方法の例として、それらに限定されないがスペース内の結果を参照しているURIをメッセージで返す方法や、結果のURIを含むXMLドキュメントをメッセージで返す方法がある。後で、クライアント110は、結果にアクセスするか、または結果を参照で他のサービスに受け渡すことができる。結果を格納するスペースはサービスが通知されるスペースと異なっていてもよい。
【0077】
一実施形態では、分散コンピューティング環境はコンテンツの定義、通知、および記述にXMLを使用する。分散コンピューティング環境の新しいコンテンツ(たとえば、メッセージおよび通知)はXMLで定義される。既存のコンテンツ・タイプ(たとえば、他の環境用に開発されたもの)も、XMLを使用して、あるレベルの間接化(メタデータ)として記述することができる。XMLは、Javaがユニバーサル・コードを提供するのと似た方法で、ユニバーサル・データを提供するため、分散システム全体を通じてデータを表現する強力な手段となっている。XMLは、言語にとらわれない手段であり、自己記述的である。XMLコンテンツは、強い型付けで、スキーマを使用して妥当性を確認できる。システムは、用意されたXMLスキーマを使用する際に、有効なXMLコンテンツのみがメッセージで確実に渡されるようにできる。XMLコンテンツはさらに、HTMLやWMLなどの他のコンテンツ・タイプに変換することもできる。したがって、XMLを認識しないクライアントでも、そのまま、分散コンピューティング環境のサービスを使用できる。
【0078】
一実施形態では、分散コンピューティング環境のメッセージで、クライアントをサービスと接続し、スペースおよびストア内のコンテンツを取り扱うために使用されるプロトコルを定義することができる。メッセージを使用してプロトコルを定義すると、さまざまな種類のデバイスをプロトコルに参加させることができる。各デバイスは、その能力と役割に最適の方法でプロトコルを自由に実装することができる。たとえば、すべてのデバイスがJavaランタイム環境をサポートできるわけではない。分散コンピューティング環境のプロトコル定義では、デバイスでJavaを使用する必要もなければ使用することを暗示してもいない。また除外することもない。
【0079】
サービスの機能は、そのサービスが受け入れるメッセージに関して表すことができる。サービスのメッセージ・セットは、XMLスキーマを使用して定義することができる。XMLメッセージ・スキーマにより、XML型付きタグを使用して各メッセージ形式を定義する。タグの使用規則もまた、スキーマで定義できる。メッセージ・スキーマは、メッセージを受け取るために使用するサービスのメッセージ・エンドポイントとともにXML通知の一コンポーネントであってよい。分散コンピューティング環境では、クライアントがサービスの機能のすべてのサブセットまたは一部のサブセットを使用することができる。クライアントに与えられた機能セットを強制するためにセキュリティ・ポリシーを採用する。たとえば、一組の機能をクライアントに与えた後、クライアントは適切な承認がないとそのセットを変更することはできない。この機能定義のモデルにより、基本機能セットから拡張機能セットまでのサービス・レベルに対応できる。認識されたメッセージの数に加えることにより、拡張機能をサービスに追加することができる。
【0080】
一実施形態では、分散コンピューティング環境内のすべてのオペレーションは、クライアントとサービスとの間で送られるXMLメッセージとして実現される。ストレージ(一時的記憶と継続的記憶の両方)プロバイダは、クライアントとサービスがコンテンツを格納し、通知し、アドレス指定できるようにするサービスの例である。クライアントおよびサービスは、一時的ストレージ・スペースを使用して互いを見つけまたブローカ・コンテンツを見つけることができる。サービスは、コンテンツまたはサービス通知をスペース内に配置する。通知を使って、コンテンツ・タイプまたはサービスの機能を記述することができる。クライアントは、その後、スペースをブラウズして、目的の機能セットとマッチする通知を探す。クライアントがマッチする通知を見つけると、通信チャネルを確立し、その通知を裏付けるサービスとの間で双方向メッセージ通信を行えるようにする。一実施形態では、通信チャネルは認証される。サービスのオペレーションの結果(もう1つのコンテンツ・タイプにすぎない)は、応答メッセージでクライアントに直接返され、スペース内で通知され格納されるか、またはスペース内で通知されるが永続的に格納される。格納されている結果は、URI(たとえば、応答メッセージで返される)を使用して取り扱われ、関連する認証証明書が割り当てられる。
【0081】
メッセージ・ゲート
上述のように、分散コンピューティング環境では、XMLなどのデータ記述言語を使用する。XMLを使用してターゲット・エンティティ(たとえば、ドキュメント、サービス、またはクライアント)を記述し、そのエンティティにアクセスするためのコードを生成することができる。ターゲット・エンティティにアクセスするため生成されるコードは、メッセージ・ゲートと呼ばれる。したがって、一実施形態では、この分散コンピューティング環境は、他のオブジェクトにアクセスするために必要なオブジェクト間の必要なコードを受け渡す代わりに、この分散コンピューティング環境ではオブジェクトまたはターゲットXML記述にアクセスできるようにしてターゲットにアクセスするためXML記述に基づいてコードを生成するという点で、他の分散コンピューティング環境とは異なる。分散コンピューティング環境では、XMLスキーマを使用して、言語固有のAPIに依存することなくXMLスキーマだけで型安全性とともにプログラミング・モデル(たとえば、サポートされているメッセージ)を確実なものにすることができる。XMLスキーマから生成されたコードはさらに、ローカル・プラットフォームの言語、セキュリティ、型安全性、および実行環境の特性を組み込むこともできる。したがって、ローカル・プラットフォームでは、バグが入り込まないように、またスキーマに従って有効なデータのみが生成されるように、生成されるコードを制御する。生成されるコードは、クライアントのコード実行環境(たとえば、Java、C++、Smalltalk)だけでなく、その管理およびセキュリティ・フレームワーク(Webサーバおよび/またはオペレーティング・システム)に適合する。
【0082】
分散コンピューティング環境では、XMLスキーマから生成されるコードが実行時に「オンザフライで」生成されることを要求していないことに注意されたい。その代わりに、コードの一部または全部をサービスのカテゴリ(またはクラス)に合わせて事前に生成し、その後、プラットフォームのビルド・プロセスでリンクする。コードの事前生成は、いくつかのXMLスキーマがすでに知られている組み込みデバイスなどのある種のクライアントに対し有用である。一実施形態では、コードの一部または全部が実際に、全く生成されなくてもよい。一実施形態では、プライベート・コード・ロード方式(クライアント内の)を使用して生成プロセスを補強することができる。さらに、いくつかの実施形態では、分散コンピューティング環境でサービスにアクセスする際に追加機能のコードをダウンロードするためのインターフェースを指定することができる(たとえば、後述のメッセージ・コンダクタを参照)。通常、ダウンロードされるこのようなコードは小さく、クライアントにはコードをダウンロードするかしないかのオプションが用意される。
【0083】
「生成されるコード」というフレーズは、クライアント・コード実行環境の制御のもとでクライアント内で起動されるコードまたは別のところで(サービス・システムまたはスペース・サービス・システム上で)生成され、生成後クライアント・システムにダウンロードできるコードを指す。ただし、バインド時は実行時となる。実行時に、生成されたコードは、サービス・アドレス(URI)にバインドされ、メッセージがそのサービスのインスタンスに送られる。
【0084】
上述のように、分散コンピューティング環境のサービスとのインターフェースをXMLスキーマで指定し、クライアントがそのサービスに送る(そしてそのサービスから受け取る)メッセージの集まりを定義することができる。図10に示されているように、クライアント110およびサービス112は、それぞれ、メッセージ・ゲート130を構築し、指定されたXMLスキーマに従って通信する。サービス112について通知されたXMLスキーマ(および場合によってはサービス通知の他の情報)から、クライアント110aまたは110bがそれぞれメッセージ・ゲート130aまたは130bを構築できる。同じXMLスキーマから生成される対応するメッセージ・ゲート130cも、サービス112a上に存在する。ゲート130は、型安全なXMLメッセージの発送および/または受取を行え、またメッセージの発送および/または受取のときにXMLメッセージの型の正しさを検証できるメッセージ・エンドポイントである。メッセージ・ゲートはさらに、メッセージ・エンドポイントがセキュリティで保護されていることを確認する認証および/またはその他のセキュリティ・メカニズムにも対応する。一実施形態では、メッセージ・ゲートは常にセキュリティで保護されている。
【0085】
上記の分散コンピューティング環境のメッセージング・レイヤをゲートに結合するか、またはゲートの一部とすることができる。メッセージング・レイヤは、非同期にネットワーキング・トランスポートを使用し、バイトの順序列を発送側から受取側へ送り、発送側と受取側の両方でこのバイト列が1つのアトミック・ユニット、つまりメッセージであるという概念を維持する。分散コンピューティング環境では、ネットワーキング・トランスポートがIPベースであるという仮定を置かない。その代わりに、メッセージング・レイヤは、デバイスによってどのようなネットワーキング・トランスポート・レイヤがサポートされていようと一番上に置かれる。
【0086】
メッセージ・ゲートは、クライアントとサービスとの間でXMLメッセージを送り受け取るメカニズムを備えることができる。XMLメッセージは、「型付けする」ことができる。たとえば、メッセージに、メッセージ・データ・フィールドが、たとえば整数、浮動小数点、テキスト・データなどであるかどうかを示すタグを入れることができる。メッセージ・ゲートは、発送または受け取ったメッセージの型の正しさを検証するように構築することができる。メッセージ・ゲートはさらに、受け取ったメッセージの発送側を認証(たとえば、セキュリティ保護機能を使用して識別)することもできる。サービスによって受け入れられるかつ/またはサービスによって送られるメッセージ・セットを記述するXMLスキーマをサービスに対し提供することができる。メッセージ・ゲートは、そのゲートが構築されたXMLスキーマに従って発送または受け取ったメッセージの正しさを検証する。
【0087】
ゲートは、分散コンピューティング環境で、型検証および/またはメッセージの正しさの検証および/またはクライアントとサービスとの間のメッセージに対する発送側識別を実行するコードおよびデータの単一のアトミック・ユニットとして構築することができる。一実施形態では、メッセージ・ゲートに対するコードおよびデータのアトミック・ユニットが作成されると、これはその型付け、メッセージ記述子、および発送側識別に関して変更することはできない。他の実施形態では、ゲートは、作成後、メッセージ・スキーマ内のメッセージの削除、追加、または修正を含めて、メッセージ・スキーマのコンテンツに関して修正することができる。
【0088】
メッセージ・ゲートは、分散コンピューティング環境におけるクライアントまたはサービスのメッセージ・エンドポイントである。メッセージ・ゲートは、型安全なXMLメッセージを送り受け取るセキュリティで保護されたメッセージ・エンドポイントを備える。メッセージ・ゲートを使用すると、クライアントとサービスは、適当なメッセージ・トランスポート(たとえば、HTTP)で、セキュリティで保護され信頼できる方法により、XMLメッセージを交換することができる。クライアントでは、メッセージ・ゲートは、サービスの機能の一部または全部を使用する権限を表す。各機能は、サービスに送ることができるメッセージによって表すことができる。このようなメッセージはそれぞれ、メッセージの正しさを検証するクライアント・メッセージ・ゲートを通じて送ることができる。メッセージを受け取るには、メッセージを認証し、その正しさを検証するサービス・メッセージ・ゲートを使用する。
【0089】
メッセージ・ゲートは、XMLメッセージの型検査を行うセキュリティで保護された通信エンドポイントを備えることができる。後述するように、メッセージ・ゲートはさらに、クライアントとサービスとの間のメッセージの流れを制限するメカニズムを備えることができる。一実施形態では、クライアントがサービスにアクセスしようとする場合、クライアントとサービスのメッセージ・ゲートのペアが、すでに存在しているのでなければ、作成される。一実施形態では、サービス・メッセージ・ゲートは、サービスがクライアント・メッセージ・ゲートから第1のメッセージを受け取ったときに作成される。一実施形態では、1つまたは複数のサービス・メッセージ・ゲートをサービスの初期化時に作成し、これを使用して、作成の際にクライアント・メッセージ・ゲートとペアを組むようにできる。メッセージ・ゲートを作成する場合、目的のレベルのセキュリティを交渉する認証サービスおよびクライアントとサービスとの間で受け渡すことができるメッセージ・セットが必要になることがある。一実施形態では、認証サービスはクライアントIDトークン(クライアント・トークンともいう)、サービスIDトークン(サービス・トークンともいう)、およびサービスに発送またはサービスから受け取ることができるデータ表現言語メッセージ・セットを記述するデータ表現言語メッセージ・スキーマを受け付けることができる。たとえば、サービスを呼び出す、またはサービスのいくつかの一部を呼び出すために、クライアントからサービスに送られるメッセージを記述できる。また、応答メッセージやイベント通知メッセージなど、サービスから送るメッセージも記述できる。メッセージ・ゲートの構築および使用での認証サービスの使用方法の詳細については、以下の「認証とセキュリティ」の項を参照のこと。
【0090】
クライアント・メッセージ・ゲートとサービス・メッセージ・ゲートのペアにより、クライアントとサービスとの間でメッセージを送ることができる。一実施形態では、サービスのメッセージ・スキーマに記述されているとおり全メッセージ・セットのサブセットを発送かつまたは受け取るだけのメッセージ・ゲートを作成することができる。分散コンピューティング環境でこのような制限されたアクセスを利用することにより、セキュリティ・ポリシーに基づいて特定の個別メッセージ・タイプへのアクセスのみをクライアントに許可する最低限の特権のポリシーを実施することができる。ゲートの使用法およびゲートの作成方法の詳細については、以下の「認証とセキュリティ」の項を参照のこと。
【0091】
クライアント・ゲートとサービス・ゲートは、サービス通知(サービス通知内のサービスのURI)で指定されたプロトコルを使用して、クライアントからサービスへのメッセージの実際の発送(および受取)を実行する。クライアントは、このメッセージ・パッシングでサービスを実行する。メッセージ・ゲートは、クライアントとサービスとの間の抽象(abstraction)のレベルを与える。クライアントは、サービス・オブジェクトに直接アクセスする代わりにメッセージ・ゲートを通じてサービス・オブジェクトにアクセスすることができる。ゲートはクライアントからのサービスを抽象化しているので、クライアントが最初にサービスを使用するまで、サービスのコードをロードして開始する必要はない。
【0092】
クライアント・ゲートも、XMLスキーマと突き合わせてメッセージの検証を実行するか、または、たとえば、メッセージがまだ検証されていないことをクライアントが示した場合に、XMLスキーマと突き合わせてメッセージの検証をサービス・ゲートによって実行することができる。いくつかの実施形態では、単純なクライアントの場合に検証は実用的でなく、クライアント側に必要ない場合がある。いくつかの実施形態では、サービス側で検証を実行できる。ゲートではさらに、認証有効化および/またはセキュリティ方式を実行することもできる。一実施形態では、クライアントがサービス通知で指定されたプロトコルをサポートしない場合、正しいゲートを構築できないことがある。この問題を避けるために、サービス通知(ゲート構築に使用される)はサービスに使用可能なURIのリストを含め、さまざまなクライアントをサポートできるようにする。
【0093】
基本メッセージ・ゲートは、メッセージを発送および受け取るためのAPIを実装できる。このAPIは、ゲートとの間でデータ(たとえば、XMLメッセージ)を出し入れし、送る前および/または受取後のメッセージの妥当性を確認する。一実施形態では、メッセージ・ゲートは、メッセージを発送および受け取るための定められた最低限のAPIをサポートできる。後述のように、このAPIは他の機能に拡張することができる。図10bに示されているように、ゲート130は、XMLスキーマ132に従って生成することができる。生成されたゲート・コードは、XMLスキーマに基づいてメッセージを検証する。このゲートは、メッセージAPIを通じてメッセージ・タイプおよび/またはコンテンツが正しいかどうかを検証する。図10bに示されているように、検証されたメッセージは、メッセージAPIを通じて、サービスに送られる。このメッセージを、サービス側の対応するゲートで受け取る。このメッセージへの応答として、サービスは結果180を生成することができる。サービスは、そのゲートを通じて結果データ182を返す。結果データは、それ自体結果であるか、または、スペースに格納されている結果へのURIなど結果に対する参照である。さまざまな実施形態において、メッセージAPIは、たとえば、同期メッセージ(要求応答)、非同期メッセージ(応答は要求から切断される)、ユニキャスト・メッセージ(2地点間)、マルチキャスト・メッセージ(ブロードキャスト)、およびパブリッシュとサブスクライブ(イベント・メッセージ)をサポートできる。リモート・メソッド呼び出しメッセージなどの他のタイプのメッセージもサポートできる。
【0094】
ゲートによって送られた各メッセージは、受取ゲートがメッセージを認証するための認証証明書を含むことができる。各メッセージは、さらに、メッセージが損なわれていないあるいは改変されていないことを受取ゲートが検証するための情報を含むトークンも含む。たとえば、発送側は、受取側が検証するメッセージのハッシュまたはチェックサムを計算することができる。発送側はさらに、発送側の秘密鍵を使用してこのトークンおよび/またはメッセージ全体を暗号化し、暗号化されたメッセージに対応する公開鍵を含め、トークンが変更されていないことを受取側が検証できるようにする。詳細については、以下の「認証とセキュリティ」の項を参照のこと。
【0095】
メッセージ・ゲートのペアは、クライアントからサービスへの要求およびサービスからクライアントへの応答を伝達するメカニズムを備える。2つの関連するメッセージ・ゲート・エンドポイントを使用して、要求応答メッセージ通信用のセキュリティで保護された双方向アトミック・メッセージ・チャネルを作成することができる。そこで、分散コンピューティング環境では、メッセージ・ゲートがクライアントとサービスの両方の側に存在するメッセージ・トランスポートを採用する。この2つのゲートは連携して、セキュリティで保護され信頼できるメッセージ・チャネルを実現する。
【0096】
図11aには、サービス通知またはその他のサービス記述132からクライアント110内にゲート130aを構築することを示す一実施形態の図が示されている。クライアントは、XMLサービス記述に基づいてゲートを生成するクライアント上の信頼できるコードであるゲート・ファクトリ140を備える。ゲート・ファクトリ140を使用すると、生成されるゲートが信頼できるコードでもあること、またそのコードがサービス通知に関して正しいものであることを確認することができる。図11bに示されているように、ゲート130cはさらに、サービス112に構築することもできる。クライアント・ゲート130aおよびサービス・ゲート130cは、クライアントとサービスとの間の通信を行うためのメッセージ・エンドポイントを提供する。一実施形態では、ゲート・ファクトリがゲート130を構築するために必要とする断片はサービス(サービス通知から)のXMLスキーマとサービス(サービス通知から)のURIである。他の実施形態では、さらに、サービスを通知で指定された認証サービスを実行することにより、認証証明書を取得し、ゲート構築で使用することができる。
【0097】
ゲート・ファクトリは、メッセージ・ゲートを作成するための信頼できるメカニズムを備える。いくつかの実施形態では、メッセージ・ゲートが信頼できるメッセージ・エンドポイントであることを確実なものとするために、ゲートを作成するために使用されるコードは信頼できるコードである必要がある。ゲート・ファクトリ140は、ゲートを作成するために使用されるコードの信頼できるパッケージとすることができる。一実施形態では、分散コンピューティング環境でメッセージの発送および受取を望む各クライアントおよびサービス・デバイス・プラットフォームはゲート・ファクトリを備える。いくつかの実施形態では、別のゲート・ファクトリによりゲートをあらかじめ構築して、あらかじめ構築されたゲートを備えたデバイスで完全なゲート・ファクトリを必要としなくて済むようにするか、またはゲートは、サービスURIおよび/または認証証明書の実行時に(たとえば、メッセージ通信が必要なときに)あらかじめ構築されたゲートにバインドする部分ゲート・ファクトリを備えることができる。
【0098】
デバイス用のゲート・ファクトリは、ローカル・デバイス・プラットフォームの言語、セキュリティ、型安全性、および/または実行環境の特性を組み込むゲート・コードを生成できる。デバイスは、ゲート自体を構築することにより、生成されたゲート・コードにバグがないこと、有効なデータのみを生成すること、型安全であることを確認することができる。サービスにアクセスするためコードをダウンロードするのではなく自分のゲート・コードをデバイスで生成する利点は、クライアント・コード管理環境に制御権があるという点である。生成されるコードは、クライアントのコード実行環境(たとえば、Java、C++、Smalltalk)だけでなく、その管理およびセキュリティ・フレームワーク(Webサーバおよび/またはオペレーティング・システム)に適合する。生成されたコードは、クライアントの実行時環境がコード作成に関わっていたため信頼できるコードでもある。したがって、信頼できる生成されたコードにより信頼できるセキュリティ情報も追加できる。そのため、デバイスはサービスに対するXMLメッセージ・スキーマを受け取りてから、その後デバイスにアクセスするためにそのスキーマに基づいてゲートを構築することができる。XMLスキーマは、サービスとの契約を定義することとみなすことができ、生成されたゲート・コードは、その契約を実行するセキュリティで保護された手段を提供することとみなすことができる。信頼できない(たとえば、ダウンロードされた)コードが実行される開いているデバイスは、信頼できるコードでのみゲートを生成できるように設定できることに注意されたい。開いているデバイスは、ゲートの実装、特にゲート認証証明書を発見することができるデバッガなど、ゲートがツールからアクセスできない保護され分離されているコード・コンテナに封じ込められているプロセス・モデルを採用することができる。
【0099】
ゲート・ファクトリ140は、クライアントのためにサービスと交渉し、メッセージをサービスに送るためのゲートを作成する。同様に、ゲートをサービスで構築し、クライアント・ゲートからメッセージを受け取り、メッセージをクライアント・ゲートに送るようにできる。それとともに、クライアントとサービス・ゲートは、セキュリティで保護された双方向通信チャネルを形成できる。
【0100】
ゲート・ファクトリは、ゲートを作成する際にあるレベルの抽象化を行う。たとえば、クライアントがサービスを使用することを望んでいる場合、クライアントが直接サービスにアクセスするゲートを作成する代わりに、サービスをインスタンス化する一環としてゲート・ファクトリによりゲートを作成できる。
【0101】
ゲート・ファクトリは、構築するゲートの認証証明書を受け取るため認証サービス(たとえば、サービス通知により指定された)と通信するために使用される信頼できる独自のメッセージ・ゲートを作成または備えることができる。アクセスが制限されているサービスでは、認証証明書なしでゲートを構築することができる。サービスではアクセスを制限しないので、このようなサービスのゲートは、各メッセージを有する認証証明書を送る必要がない場合がある。認証サービスは、一実施形態では、アクセスを制限しないサービスの一例である。したがって、サービスでアクセスを制限するかどうかをチェックすることによりゲート構築を最適化するようにゲート・ファクトリを設定できる。サービスがアクセスを制限しない場合、ゲート・ファクトリはゲート構築の一環として認証サービスの実行を回避することができ、また構築されたゲートの一部として認証証明書に対する取り込まれた規定を回避できる。ゲート・ファクトリはさらに、XMLメッセージ・スキーマ(たとえば、サービス通知によって指定される)を受取またはダウンロードし、そのスキーマとマッチするゲートを作成することもできる。ゲート・ファクトリはさらに、URIと通信するクライアント・メッセージ・ゲートの作成に使用するサービスおよび/またはサービス・メッセージ・ゲート用にURIを受取またはダウンロードすることもできる。
【0102】
さらに、サービスのXMLスキーマと突き合わせてメッセージのチェックを実行することを望んでいないいくつかのクライアントに対して別のゲート構築最適化を採用することができる。クライアントは、軽量過ぎてチェックを実行できなかったり、チェックを実行するのにサービス・ゲートに依存していたり、単にチェックの実行を選択しなかったりする(たとえば、ゲート・メモリ占有面積を減らすため)。提供されるXMLスキーマと突き合わせてメッセージを検証するためにゲートを構築するかどうかの表示を受け取るようにゲート・ファクトリを設定できる。いくつかの実施形態では、いくつかのクライアントが、構築されたゲートのスキーマと突き合わせてメッセージの検証を行う機能を備えていないゲート・ファクトリを備えることができる。いくつかの実施形態では、メッセージを検証しないようにゲートを事前に構築する。いくつかの実施形態では、送出メッセージのみを検証するか、または受け取ったメッセージのみを検証するように、ゲートを構築することができる。したがって、いくつかの実施形態では、クライアントは、XMLスキーマと突き合わせてメッセージをチェックするゲート・コードの一部または全部の構築を回避するか、または回避することを選択できる。
【0103】
いくつかの実施形態では、デバイスは、同じサービスが実行されるごとに構築するのを回避するためにゲートのキャッシュを維持することができる。たとえば、新しいゲートがゲート・ファクトリにより構築されるときに、ゲートをゲート・キャッシュ内に維持することができる。ゲートが使用されなくなったら、削除する代わりに、ゲート・キャッシュ内に保持する。ゲート・キャッシュがいっぱいになったら、最近最も使用されていないデータを追い出すアルゴリズムなどのキャッシュ置換アルゴリズムに従って1つまたは複数のゲートをゲート・キャッシュから削除することができる。ゲートを構築するためゲート・ファクトリが呼び出された場合、ゲート・ファクトリはまず、新しいゲートの構築を回避できるようにゲート・キャッシュをチェックしてマッチするゲートがすでに存在していないか調べる。
【0104】
他のゲートを構築するのに使用した断片を適切に再利用することによりゲートの構築を軽量化することができる。各ゲートのいくつかの部分は同じでよいため、メッセージ検証コードの一部など、ゲートからゲートへ再利用することができる。さらに、いくつかのデバイスについては、共通ゲート・コードをデバイスのシステム・ソフトウェアに組み込み、そのデバイスのすべてのゲートと共有することができる。したがって、ゲート・ファクトリは、ゲートごとにこの共通コードを再構築することを回避することができる。その代わりに、ゲート・ファクトリは、単に、ゲートをこのシステム・ソフトウェア部分にバインドすることができる。たとえば、デバイスにどのようなトランスポートが提供されていようとメッセージ・レイヤを取り扱えるシステム・ソフトウェア部分を用意することができる。
【0105】
特に、スペース・サービスは、スペース・サービスに対して構築されたサービス・ゲートがそのスペース・サービスの他のサービス・ゲートと同じ多くの機能を実行できるため、上述のゲート構築最適化の多くに対して適切な候補といえる。スペース・サービスの詳細については、以下の「スペース」のセクションを参照のこと。
【0106】
いくつかの場合において、より効率的なメソッド呼び出し形式が存在することがある。たとえば、ターゲット・サービスがクライアント・アプリケーションと同じJava仮想マシンで実行される場合、より効率的なメソッド呼び出し形式は、サービスに対しJava Dynamic Proxy Classを作成することである。このような場合、java.lang.reflect.Method呼び出しは、メッセージの発送よりも高速なことがある。ゲート・バインド時間プロシージャは、このような最適化をチェックし、ゲート・ファクトリを実行する代わりにそれを使用して、ゲートを作成するか、または既存のゲートをバインドする。
【0107】
一実施形態では、専用クライアントや小型埋め込み型デバイスの場合などで、実行時のゲート・コードの生成は、メモリの消費とコード生成時間の観点から、望ましくないことがある。したがって、実行時にゲートを生成するゲート・ファクトリを用意する代わりに、いくつかの実施形態では、ゲートを事前に生成し、デバイスに組み込む。たとえば、埋め込み型ソフトウェアのビルド時に、実行時に構築しなくてよい組み込みのセキュリティで保護されたメッセージ・エンドポイントを含める手段としてメッセージ・ゲートを生成することができる。したがって、組み込み型ゲートを持つクライアントは、完全なゲート・ファクトリを必要としないか、またはURIおよび/または認証証明書など、組み込みゲートへのある種の実行時バインドを実行するために部分的ゲート・ファクトリのみあればよい。
【0108】
ゲートの事前構築用に生成ツールを用意することができる。そのゲート生成ツールは、XMLパーサ、コード・ジェネレータ、およびコード・コンパイラを備える。一実施形態では、コード・ジェネレータはJavaソース・コード・ジェネレータであり、コード・コンパイラはJavaコード・コンパイラである。組み込みメッセージ・ゲートが望まれるソフトウェアのビルド時に、ゲートが望まれる関連するすべてのXMLスキーマからの入力とともに生成ツールが実行される。
【0109】
たとえば、デバイスがデジタル・カメラとの間でメッセージを送受取できる組み込みメッセージ・ゲートを備えることが望ましい場合、デバイス・ソフトウェアのビルドは、カメラのXMLメッセージ・スキーマを入力としてゲート生成ツールを実行する作業を含む。XMLスキーマは、XMLスキーマをメッセージ検証プロセスで高速アクセスするのに適している内部形式に変換するXMLパーサにより解析することができる。ツールのコード・ジェネレータは、カメラのスキーマに対応するゲートのソース・コードを提供することができる。いくつかの実施形態では、生成ツールはさらにソース・コードをコンパイルし、ゲート・コードはデバイスのソフトウェア・パッケージにリンクすることができる。実行時に、分散コンピューティング環境でカメラ・サービスを発見することができる。カメラ・サービスのメッセージURIをデバイス内でカメラの組み込みゲートにバインドすることができる。事前に構築されたゲートへのURIのバインドは、デバイス内のゲート・コンストラクタによって実行される。このゲート・コンストラクタは、かなり小さく、単純なゲート・ファクトリである。カメラ・サービスがインスタンス化されると、カメラ・サービスのURIがXMLメッセージとしてゲート・コンストラクタに渡される。その後、ゲート・コンストラクタはURIを事前構築されたゲートにバインドする。
【0110】
したがって、ゲートは、実行時に部分的にまたは完全に生成されるか、またはゲートは、実行時に実行されるバインド・プロセス(たとえば、URIまたは証明書の)で実行時の前に事前生成される。一実施形態では、ゲート・ファクトリなどのゲート生成ツールまたは事前構築されたゲートの生成ツールを、あるレベルのプラットフォーム独立性を実現するJavaベースのツールとすることができる。それとは別に、ゲート生成ツールは、分散コンピューティング環境では特定のデバイスのネイティブ・コードなど任意の言語のものが提供できる。分散コンピューティング環境では、デバイスがゲートのコードの一部または全部をダウンロードできないことはないことに注意されたい。たとえば、いくつかの実施形態では、サービスは、そのサービスへのアクセスを望むクライアントによってダウンロードできるゲート・コードを提供する。ただし、ダウンロードされたコードは、サイズ、セキュリティ、および/または安全に関する危険性を示す場合がある。
【0111】
一実施形態の考えられるゲート・コンポーネントの詳細な図を図12に示す。ゲートは、そのアドレス(または名前)150、デスティネーション・ゲート・アドレス152、有効なXMLスキーマ(または内部形式)154、およびトランスポートURI 153を備えることができる。他の実施形態では、ゲートに認証証明書156を含むことができる。一部のゲートは、さらに、リース158および/またはメッセージ・コンダクタ160を備え、メッセージ順序付けを検証することができる。ゲートの名前150は、そのゲートを参照するだけの一意的なIDでよい(そのゲートの存続期間中)。ゲートは、ゲート名150を使用してアドレス指定することができる。一実施形態では、ゲート名はXMLスキーマのストリング(たとえば、サービス通知からのストリング)と128ビット乱数などの乱数の組み合わせとして生成することができる。名前150を使用する際に、クライアントおよびサービスはネットワークに関して移行することができ、またそのまま協調動作する。好ましい実施形態では、ゲート・アドレスは、物理的メッセージ・トランスポート・アドレスおよび/またはソケット・レイヤと独立である。したがって、ゲート名はメッセージ・トランスポート・アドレスに対するバインドおよびバインド解除できる仮想メッセージ・エンドポイント・アドレスを与えることができる。一実施形態では、ゲートの名前は、そのゲートの存続期間中、そのゲートを参照するだけのUniversal Unique Identifier(UUID)でよい。
【0112】
ゲート名は、ゲートは存続している限り存続するため、同じデバイス内で実行する異なるアプリケーションとクライアントは特定のゲートを繰り返し見つけて、使用することができる。たとえば、サービスにアクセスするためデバイス内で実行している第1のクライアント・プロセスについてゲートを作成することができる。第1のクライアント・プロセスがそのサービスに対する活動を完了した後、ゲートを解放する。ゲートを解放する作業では、ゲートの第1のクライアント・プロセスのメッセージ・トランスポート・アドレス(たとえば、IPおよび/またはポート・アドレス)へのバインドを解除する必要がある。ゲートは、ゲート・キャッシュまたはリポジトリに格納することができる。同じサービスを実行する必要がある同じデバイス内で実行している第2のクライアント・プロセスは、そのゲートを名前で特定し、そのゲートを使用してサービスにアクセスする。ゲートを使用するために、第2のクライアント・プロセスはゲートをそのメッセージ・トランスポート・アドレスにバインドし、第2のクライアント・プロセスに対するメッセージ・エンドポイントがゲート名と第2のクライアント・プロセスのトランスポート・アドレスとの組み合わせになるようにする。他の実施例では、クライアントは動的IPアドレスを受け取ることができる(たとえば、モバイル・クライアント)。クライアントのトランスポート・アドレスが変更されると、(1つまたは複数の)ゲート名がクライアントの新しいトランスポート・アドレスに再バインドされ、クライアントがそのまま、サービスを再配置しゲートを再作成せずにすでにアクセスしているサービスにアクセスできる。ゲート名は、プロセスの移行にも使用できる。プロセスおよび関連するゲートを、分散コンピューティング環境の一ノードにチェックポイント化するかまたは保存して、他のノードに移動することができる。プロセスを新しいノードで再起動し、関連するゲートをその新しいノードのトランスポート・アドレスにバインドすると、プロセスは、移行前のアクセス先であった外部サービスにそのままアクセスすることができる。ゲートは、ペアの相手である他のゲートの現在の場所を追跡することができる。したがって、サービスまたはクライアントを移行しても、そのままアクセス可能である。たとえば、複製または負荷バランスをとったサービス実装をゲートによってサービスのクライアントから抽象することができる。そこで、ゲート名150は、分散コンピューティング環境でメッセージ・エンドポイントのアドレス指定を行う柔軟性の高いメカニズムを提供する。ゲート名を使用して、ローカル・ネットワークからインターネットにいたるさまざまなネットワーク上でゲートを特定および/またはアドレス指定することができる。ゲート名は、メッセージ・トランスポートとは無関係で、メッセージ・エンドポイント(ゲート)を基礎となる異なるトランスポート・アドレス(たとえば、IP/ポート・アドレス・ペア)へのバインド解除および再バインドによりトランスポートからトランスポートへ移動することができる。
【0113】
一実施形態では、ゲートをさらにサービスから分離し、同じゲートを使用して時間がたつうちに要求を異なるサービスに送ることができる。この作業には、ゲートのデスティネーション・ゲート・アドレス152のバインドを解除し、新しいデスティネーション・ゲート・アドレスをゲートにバインドする作業が必要である。
【0114】
ゲートは、デバイスのトランスポート・レイヤの上のレイヤとして実装することができる(たとえば、ネットワーキング・ソケット)。各ゲートは、トランスポート参照153を含む。ゲート名150は、上述のようにトランスポート参照153にバインドされる。複数のゲートが、同じメッセージ・トランスポートを共有することができる。たとえば、複数のゲートが同じTGP/IPソケットへのトランスポート参照153を持つことができる。同じメッセージ・トランスポートを共有することにより、各ゲートのサイズおよび複雑さを低減することができる。分散コンピューティング環境内のデバイスは、メッセージの送受取に必要なゲートの数が増える場合がある。複数のゲートに対するメッセージ処理の複雑さは、共通メッセージ・トランスポートを共有することにより低減される。トランスポート参照153は、トランスポートURI(たとえば、URL)またはソケット参照であり、基礎のトランスポートに名前を付け、そのトランスポートを他のゲートと共有するメカニズムを提供することができる。複数のローカル・ゲートは、同じトランスポートへの参照153を含むが、各ローカル・ゲートは、ペアのリモート・ゲートとの間でメッセージの送受取を行う他のローカルゲートとは無関係に動作する。
【0115】
スキーマ154は、ゲート・ファクトリによってスペースからゲート内にダウンロードすることができる。スキーマを、メッセージ検証プロセス中に素早くアクセスするのに適している内部形式にコンパイルすることができる。一実施形態では、スキーマは、クライアント・サービス・メッセージおよびプロバイダ・サービス・メッセージという2つのメッセージのグループを指定できる。クライアント・サービス・メッセージ・グループは、クライアントが送ることができるすべてのメッセージの記述(プロバイダがサポートする)を含み、プロバイダ・サービス・メッセージ・グループは、プロバイダが送ることができる(クライアントが受け取る)すべてのメッセージの記述を含む。一実施形態では、クライアントまたはプロバイダのいずれかがスペース・サービスに対し特定の要求を送り、クライアント・サービス・メッセージ全体、プロバイダ・サービス・メッセージ全体、クライアントおよびプロバイダ・サービス・メッセージ全体、またはクライアント・サービス・メッセージまたはプロバイダ・サービス・メッセージのいずれかの特定のメッセージのいずれかのメッセージとともに応答メッセージを取得する。さらに、ゲートが構築された後、クライアントは、ゲートが実際にメッセージを送りなくても、ただし、その代わりに、ゲートのメッセージ群を検査することにより、サービスの機能に関してクエリを実行することができる。
【0116】
上述のように、メッセージ・ゲートは、認証証明書を使用するメッセージの発送側、型安全性に対するメッセージ・コンテンツをXMLスキーマに従って検証することができる。ただし、クライアントとサービスとの間でメッセージが正しい順序で送られることを検証することが望ましい。クライアント上のアプリケーションに関係する既存の特定の機能なしで(たとえば、クライアント上のアプリケーションにGUIがない場合)実行するクライアント用のアプリケーション(サービス)を提供できることが望ましい。たとえば、クライアント上でWebブラウザをサービスのGUIとして使用し、アプリケーション固有のGUIを使用しないようにできる。XMLスキーマ内の可能なメッセージのうち、クライアントは次にサービスに送るメッセージを知る必要がある。クライアントはサービスに関する特定の情報がないまま次に送るメッセージを判別できることが望ましい。一実施形態では、サービスは必要な次の入力を示す応答メッセージを継続的に送ることができる。サービスは、その後、要求入力が指定されているクライアントから対応するメッセージのみを受け入れる。メッセージ順序付けに対する他のアドホックな方式も採用できる。
【0117】
他の実施形態では、各メッセージのシンタックスを検証する(スキーマに従ってゲート内ですでに実行されている可能性がある)のとは反対に、メッセージ・コンダクタ160をゲート内で採用するか、またはゲートに関連付け、メッセージの正しい順序を検証することができる。メッセージ・コンダクタ160は、アプリケーションの準備のためのより一般的なアプローチをとることができる。メッセージ・コンダクタ160は、サービスの通知で指定できる。スキーマ内のメッセージ・コンダクタ指示により、ゲート構築中に、クライアント上に生成するか、またはクライアントにダウンロードすることができ、次にサービスに送るメッセージを決定するのに必要なコレオグラフを提供できる。メッセージ・コンダクタは、Javaアプリケーション、Java Script、およびWMLスクリプトとして、または他のプログラミングまたはスクリプティング言語で実装できる。
【0118】
一実施形態では、メッセージ・コンダクタは入力を、クライアントとサービスの間で送ることができるメッセージの有効な順序またはコレオグラフを表示するXML文書(たとえば、サービス通知からの)として受け入れることができる。このXML文書はさらに、ユーザ・インターフェース情報とその他の規則を指定することもできる。コンダクタは、このXML文書を解析して、内部形式にし、囲まれている順序付け情報に従ってメッセージ順序付け(および/またはその他の規則)を強制する。コンダクタは、メッセージの発送順序が狂うのを防ぐことができる。または、メッセージの発送順序が狂った場合、発送デバイス内に例外を発生させることができる。メッセージの受取順序が狂った場合、コンダクタは順序付けエラーを宣言する自動応答メッセージを送る。これで、発送側はメッセージを正しい順序で再送することができる。いくつかの実施形態では、コンダクタの一部または全部を複数のゲートで共有することができることに注意されたい。そのため、コンダクタを複数のゲートにリンクすることができる。
【0119】
分散コンピューティング環境の一実施形態では、サービスのフロント・エンド(サービス・インターフェース)をクライアントに組み込むことができる。一実施形態では、サービス・インターフェースを、サービスによってクライアントに提供される事前構築ユーザ・インターフェースとすることができる。一実施形態では、サービス・インターフェースを、サービス通知でクライアントに提供することができる。サービス・インターフェースは、クライアント上でサービスのユーザと対話し、サービスを実行するための入力を取得し、サービスを実行した結果をクライアントに表示することができる。「ユーザ」は、人間でも、組み込みシステムでも、他のクライアントまたはサービスなどでもよい。一実施形態では、クライアント・デバイスは、フロント・エンドを組み込んでいるサービスを実行できるだけなので、任意のサービスを用意することができない場合がある。一実施形態では、サービスのサービス・インターフェースは、クライアント上のWebブラウザに実装することができる。
【0120】
一実施形態では、メッセージ・コンダクタおよび/またはサービス・インターフェースはゲートの外部にあってもよく、したがって、ゲートとクライアントから抽象することができる。抽象されたメッセージ・コンダクタは、任意のクライアント・デバイスに対し任意のサービスを提供することができる。一実施形態では、メッセージ・コンダクタを、実質的にどのようなプラットフォームでも実行できるコードで書くことができる。一実施形態では、メッセージ・コンダクタは、Java言語で書く。一実施形態では、メッセージ・コンダクタは、クライアント・デバイスに返される、オブジェクト、たとえば、Javaオブジェクトの任意のダウンロードを必要としない。たとえば、非常に大きなオブジェクトを返す場合、メッセージ・コンダクタは、そのような非常に大きなオブジェクトをダウンロードしないことを選択できる。一実施形態では、メッセージ・コンダクタは、クライアントのために、XMLメッセージをクライアント・デバイスからサービスに送ることができる。メッセージ・コンダクタは、サービスのユーザと対話して、入力を受け取り、結果を表示することができる。
【0121】
一実施形態では、クライアントと対話し(たとえば、ユーザ・インターフェースを介して)、サービスを実行するためのすべての情報を取得するサービス・インターフェースを提供し、これにより、サービスを実行した結果または結果の場所に関する情報のいずれかを適宜表示することができる。サービス・インターフェースは、メッセージ・コンダクタ160の一部でもよく、またはメッセージ・コンダクタ160に加えてそれと連携することもできる。サービス・インターフェースは以下のいずれかである。
1.クライアント・デバイスに組み込まれ、クライアント上で実行される。
2.スペース・サーバからクライアント・デバイスにダウンロードされる。
3.スペース・サーバ上で実行される。
4.サービス・プロバイダ上で実行される。
【0122】
一実施形態では、クライアントに対して、分散コンピューティング環境のスペース・サーバは#1を常にサポートし、#2がサポートされていればそのことを示し(スペース内の通知で)、#3と#4のうち少なくとも1つがサポートされていればそのことを示す必要がある。#4をサポートしているかどうかは、サービス・プロバイダが#4をサポートしているかどうかにかかっていることに注意されたい。一実施形態では、サービス・プロバイダに対し、分散コンピューティング環境のスペース・サーバは#4を常にサポートし、#3をサポートしていればそのことを示す必要がある。
【0123】
サービス・インターフェースがどこで実行されようと、サービスがアクティブ化された後、サービス・インターフェースはクライアントと対話し、クライアントの表示装置に入力に対する要求を(リモートから)表示し、サービスの実行結果を(リモートから)表示することができる。クライアントとのこのような対話は、XMLメッセージとして実装される。このようなサービス・インターフェースおよび/またはメッセージ・コンダクタは、サービスを発見したけれども、ふつうサービスの使い方を知るために大部で無味乾燥のコンピュータ・マニュアルを読みたくないクライアント・ユーザのニーズに応えられる。サービス・インターフェースおよび/またはメッセージ・コンダクタがユーザと対話して、サービスが必要とするすべての入力を要求するときに、ユーザが要求した場合に、要求された入力の短い説明を用意することさえできる。サービス・インターフェースがクライアントから必要な情報を取得した後、XMLメッセージを、そのサービスを実行するサービス・プロバイダに送る。メッセージの順序は、ゲート内のメッセージ・コンダクタ160によって検証される。
【0124】
好ましい実施形態では、すべてのメッセージはゲート内を流れる。ゲートは、フロー制御メカニズムを提供するように構成することができる。たとえば、サービスが大量の着信メッセージおよび発信メッセージを処理する必要がある。フロー制御により、サービスは高トラフィック・ボリュームに追随することができる。フロー制御タグについてメッセージを監視するようにゲートを構成することができる。ゲートがメッセージを受け取ると、ゲートはそのメッセージに対するフロー制御タグを調べる。フロー制御タグはXMLタグとすることができる。たとえば、メッセージには、OFFタグまたはONタグのいずれかを記述できる。受け取ったメッセージにOFFタグが含まれる場合、受取ゲートはペアのデスティネーション・ゲートへの発送メッセージを停止する。ゲートは、ONタグを含むメッセージを受け取ると、メッセージの発送を再開する。
【0125】
そこで、サービス側ゲートはそのリソースの使用を監視し、そのリソースの使用がしきい値を超えた場合にフロー制御を起動する。たとえば、サービスが、OFFタグを含むメッセージを1つまたは複数のクライアント・ゲートに送ることにより負荷を低減することができる。OFFタグを含むメッセージを受け取ったクライアント・ゲートは、サービスへのメッセージ発送を停止する。クライアント内の保留メッセージは、バッファリングするか、または内部フロー制御メカニズムによって処理することができる。サービスがさらに要求を処理できるようになると、ONタグを含む1つまたは複数のクライアントにメッセージを送り、クライアントはメッセージ発送を再開する。他の実施形態では、ONおよびOFFに加えて、またはONおよびOFFの代わりに、他のフロー制御タグをサポートすることができる。他のフロー制御タグはメッセージ・フローの低減を示すか、またはそのメッセージ・フローを高くすることができる。
【0126】
メッセージ・ゲートはリソース監視を実行するように構成することができる。たとえば、すべてのメッセージはゲート内を流れるため、ゲートはクライアントがサービス(および場合によっては、メモリーやスレッドなどの関連するリソース)を使用する状況を管理しかつ/または追跡するように構成することができる。ゲートは、サービスなどのリソースがどれだけ使用されているか、またどのサービス・リソースをどれだけ使用しているかを監視することにより、クライアントなどのソフトウェア・プログラムの活動を追跡するように構成できる。一実施形態では、ゲートはクライアント活動ログを生成するか、またはクライアント活動ログの生成を簡単に行えるようにする。各メッセージおよびその宛先または発送側をログに記録することができる。
【0127】
さらにゲートは、ゲート・ペアのローカル(発送)側からフロー制御に関するリソース監視を実行するように構成することもできる。クライアントが、割り当てられたサービス(またはリソース)使用の帯域幅を超えた場合、たとえば、ゲートは自動的にメッセージの流れを絞る。したがって、クライアント側メッセージ・ゲートは、発信メッセージの流れを監視することにより異なるフロー制御モードを自動的に起動することができる。発信メッセージ・フローがしきい値を超えた場合、ゲートは発信メッセージの流れを減らすかまたは遮断する。サービスのXMLスキーマまたは通知でしきい値を指定することができる。いくつかの実施形態では、しきい値は特定のサービス・リソースを使用するメッセージのみまたはすべてのメッセージについて指定することができる。
【0128】
ゲートは、さらに、メッセージ・フローが増えるか、または再開するのを判別するように構成することもできる。一実施形態では、ゲートは、マッチする返信(応答)を受け取ることなく、送られた発信メッセージのカウントを保持することができる。マッチする応答がクライアント側ゲートに届いたら、未処理の要求メッセージのカウントを減らす。このカウントが未処理要求メッセージの指定されたしきい値以下に減ったら、ゲートは新しい要求メッセージを増やすか、またはその発送を再開することができる。
【0129】
ゲートは、メッセージ・ベースの課金請求機能をサポートするように構成できる。請求システムは、メッセージ・ゲートで発送および/または受け取ったメッセージの個数および/または種類に基づいて実装することができる。クライアントとの間でやり取りされるすべてのメッセージはゲートを通過するので、たとえば、1メッセージごとにまたは「即金で支払う」方式でサービス使用料金を簡単にクライアントに請求できるようにゲートを構成することができる。したがって、たとえば、ユーザの代わりに実行されているソフトウェアがメッセージを発送および/または受け取るごとにユーザに課金できる請求システムを分散コンピューティング環境内に実装することができる。
【0130】
一実施形態では、メッセージ・ゲートは、たとえば、サービスに関してXMLスキーマから請求情報を受け取る。請求情報は請求ポリシーとチャージ・バックURIを表すことができる。チャージバックURIは、メッセージ・ゲートがユーザの代わりに時間課金または使用度課金する場合に使用する。メッセージ・ゲートは、課金メッセージをXMLスキーマで指定したチャージバックURIに送ることによりチャージバックを実行する。このように構成されたゲートは請求ゲートと呼ばれる。請求ポリシーは、1メッセージ当たりの課金金額または累積メッセージ合計に対する課金金額などを示す。請求ポリシーは、ユーザに対しどれだけおよび/またはどのような頻度で(たとえば、x個のメッセージを発送および/または受け取った後)課金するかを示す。このポリシーはある種のメッセージのみが課金を発生させ、このようなメッセージにより指定されたサービス・リソースが要求されることを示す。請求ポリシーはさらに、異なるクライアントまたはクライアントのクラスに対して異なる請求モデルを示す場合もある。たとえば、いくつかのクライアントがサービスにアクセスするためゲートを作成するときに一度限りの課金の対価を支払うように請求ポリシーを(たとえば、サービスのXMLスキーマで)構成することができる。ポリシーは、即金で(たとえば、メッセージごとに)支払うクライアントを示す場合もあれば、または全く課金されないクライアントを示す場合もある。
【0131】
いくつかの実施形態では、クライアントは軽量すぎて完全なゲートをサポートできなかったり、クライアントに、直接分散コンピューティング環境に参加するためのソフトウェアを組み込めない場合がある。このような実施形態では、サーバ(サービスが通知されるスペース・サーバや他のサーバなど)はそのクライアントに対して完全または部分的なプロキシ・ゲートとすることができる。サーバは、クライアントで使用するサービスごとにサービス・エージェント(ゲートを含むことがある)をインスタンス化する。サービス・エージェントは、メッセージを送る許可を確認し、メッセージをプロバイダに送り、その際、場合によってはプロバイダが次のメッセージを受け付けるようになるまでキューに入れておき、メッセージをクライアントに送り、その際、場合によってはクライアントが次のメッセージを受け付けるようになるまでキューに入れておき、結果またはアクティブ・スペースに結果を格納する作業を管理するという操作を行うことができる。「ブリッジ」のセクションを参照されたい。たとえば、図13に示されているように、クライアントは、ゲートが上述のメッセージング方式に直接参加することをサポートしていない従来のブラウザ400とすることができる。ブラウザ400は、プロキシ・サーブレット(エージェント)402によって補助される。ブラウザのユーザは、サーチ・エンジンを使用して、分散コンピューティング環境内のスペース通知サービスの前面に置かれる(その内容を表示する)Webページを見つけることができる。ユーザは、スペースのWebページをポイントしてクリックし、サーブレットの助けを借りて、サービスにアクセスすることができる。Webページには、スクリプト、たとえば、JavaやWMLスクリプトを含むことができ、これを使用して、ブラウザをプロキシ・サーブレットに接続する。また、スクリプトを使用して、メッセージをプロキシ・サーブレットに送ることもできる。サーブレット・エージェントは、ブラウザ・クライアントに代わってWebページ・アクションをメッセージに翻訳する。これらのはアクションは、スペースのナビゲート、サービスの起動、および結果の返却を含む。結果ページURI(XMLを含むページを参照する)は、直接(または必要ならばHTMLまたはWAPに変換されて)ブラウザに返され、ユーザに対し表示される。したがって、ブラウザ・ベースのクライアントは、サービスの起動方法を知る必要がなく、またサービス使用セッションで送るメッセージを知る必要もない。たとえば、WAPブラウザのユーザ(たとえば、携帯電話の)は、スペース・ページに接続し、そのコンテンツ(サービス)を参照し、サービスを起動するが、すべてポイントしてクリックする操作により行える。エージェント402は、従来のクライアントと分散コンピューティング環境との間のクライアント・インターフェースを備える。
【0132】
分散コンピューティング環境は、異なる機能をサポートするクライアントとサービスとの間の通信を行うための数種類のメッセージ・ゲートを備えることができる。たとえば、上述のように、いくつかのゲートは、フロー制御または請求機能をサポートする。他の種類のメッセージ・ゲートでは、特定の形式のリモート・メソッド呼び出しをサポートする。このタイプのゲートは、メソッド・ゲートと呼ばれる。
【0133】
ゲートは、型安全なメッセージ、たとえばXMLメッセージを送り受け取るセキュリティで保護されたメッセージ・エンドポイントである。リモート・メソッド呼び出し(RMI)スタイルのゲートは、メソッド・ゲートと呼ばれる。直接データ中心ゲートは、メッセージ・ゲートと呼ばれる。メソッド・ゲートは、メッセージ・ゲートの上の「レイヤ」として実装することができる。正確な実装は、プラットフォームのバインドで定義することができる。
【0134】
図14は、メソッド・ゲートを使用してリモート・メソッド呼び出しインターフェースをサービスに提供する方法を示す。メソッド・ゲートは、クライアントとサービスとの間のメソッド・インターフェースを提供する。メソッド・ゲートは双方向にすることができ、クライアントからサービスへ、またサービスからクライアントへのリモート・メソッドを呼び出しが可能である。XMLスキーマ情報170から(たとえば、スペース内のサービス通知から)メソッド・ゲート172を生成することができる。XMLスキーマ情報170は、メソッド・インターフェースを定義するXMLを含む。この情報から、1つまたは複数のメソッドとのインターフェースのコードをゲートの一部として生成することができる。生成されたコード内の各メソッドを呼び出し(たとえば、クライアント・アプリケーション176からの)により、マーシャリングされたメソッド・パラメータを含むメッセージをサービスに送ることができる。含まれるメッセージのシンタックスおよびパラメータをXMLスキーマで指定する。したがって、メソッド・ゲート172は、サービス・メソッドをリモートから呼び出すXMLメッセージ・インターフェースを備える。メソッド・ゲートは、クライアント上に生成するか、またはサービス・メソッドが通知されたスペース・サーバまたは特別ゲートウェイ・サーバなどのサーバをプロキシとすることができる。
【0135】
サービスは、サービスのXMLスキーマで定義されたメソッド・メッセージ・セットに対応するオブジェクト・メソッド・セットを実装するかまたは、それにリンクされている対応するメソッド・ゲートを備えることができる。サービスのメソッド・ゲートよって実装された、またはそれにリンクされているオブジェクト・メソッドとサービスのXMLスキーマによって定義されたメソッド・メッセージとの間に一対一の対応関係がある。サービスの対応するメソッドがクライアントからメッセージを受け取りサービスのメソッドの1つを呼び出すと、サービスのメソッド・ゲートはメッセージ呼び出しのパラメータのアンマーシャリングまたはアンパックを行い、受け取ったメッセージによって示されるメソッドを呼び出し、アンマーシャリングされたパラメータを渡す。
【0136】
メソッド・ゲートは、同期要求応答メッセージ・インターフェースを備え、クライアントがこれを使用してリモートからメソッドを呼び出し、サービスが結果を返すようにする。基礎のメッセージ・パッシング・メカニズムは、クライアントから完全に隠されている。この形式のリモート・メソッド呼び出しでは、メソッドの結果を次のように処理することができる。一実施形態では、結果オブジェクト(および関連するクラス)をクライアントにダウンロードする代わりに、結果の参照のみをXMLメッセージで返す。オブジェクト参照178は実際のオブジェクト結果180(たとえば、ネット上にそのまま格納)を表す生成されたコード・プロキシ(たとえば、結果ゲート)である。他の実施形態では、クライアントは実際の結果オブジェクトを受け取ることを選択できる。さらに、クライアントが結果オブジェクト参照を受け取った後、クライアントはこの参照を使用して実際の結果オブジェクトを受け取ったり操作したりできる。一実施形態では、結果参照に実際の結果への1つまたは複数のURIを含める。
【0137】
実際の結果オブジェクトは、サービス結果スペース内に格納される(これは、たとえば、サーブレットにより動的に作成できる)。この一時的結果スペースは、クエリ結果キャッシュとして機能することができる。古い結果領域をクリーンアップするサーバ・ソフトウェア(ガベージ・コレクタ)が結果キャッシュ(スペース)内を巡回する。メソッドを呼び出しごとに返される結果は、結果スペース内に通知される。クライアントがリモートから結果自体をインスタンス化し、その固有のメソッド・ゲートを生成できるメソッドである場合もあれば、そのようなメソッドを含む場合もある。したがって、分散コンピューティング環境では再帰的リモート・メソッドを呼び出しサポートすることができる。
【0138】
上述のように、クライアントはメソッド・ゲートを使用してリモートからサービス・メソッドを呼び出すと、サービス・メソッド・ゲートから実際の結果ではなくメソッド結果への参照が返される。この参照から、結果ゲートを生成して実際の結果にアクセスする。したがって、クライアントまたはクライアント・メソッド・ゲートは結果URI、それとたぶん、結果XMLスキーマおよび/または認証証明書を受け取り、これを使用してゲートを構築しリモート・メソッド結果にアクセスする。
【0139】
一実施形態では、サービス・ゲートは結果に対する「子ゲート」を作成する。この子結果ゲートは、親ゲートと同じ認証証明書を共有することができる。いくつかの実施形態では、結果は異なるアクセス権限セットを備え、したがって、その親と同じ認証証明書を共有しない。たとえば、給料支払い簿サービスではユーザの異なる集まりが給料支払い簿サービスの結果(給与)を読み取るためにそれを起動することができる。
【0140】
サービス・メソッド・ゲートは、子結果ゲートをメソッドの結果としてクライアント・ゲートに返す。クライアントは、その結果ゲートを使用して実際の結果にアクセスする。一実施形態では、結果ゲートを受け取るソフトウェア・プログラム(クライアント)は結果ゲートと結果自体とを区別することはできず、その場合、結果ゲートは実際の結果オブジェクトのオブジェクト・プロキシとなる。結果ゲートはさらに、結果オブジェクトへのリモート・メソッド呼び出しをサポートするメソッド・ゲートとすることもできる。このようにして、親と子のメソッド/結果ゲートのチェーンを作成できる。
【0141】
一実施形態では、メッセージ・ゲートおよびリモート・メソッドは、Javaで書れている。この実施形態では、Java入力システムに従ってメソッド結果が正しく入力される。上述のようにJavaメソッドをリモートから呼び出した場合、結果ゲートは結果の型とマッチするJavaの型にキャストすることができる。この実施形態では、分散コンピューティング環境でメソッド・ゲートを使用して、リモートJavaオブジェクトがローカルJavaオブジェクトとして動作するようにできる。メソッド呼び出しおよび結果は、実際のオブジェクトがローカルであるかリモートであるかに関係なくJavaソフトウェア・プログラムと同じように表示される。結果に対するスペースの使用の詳細については、以下の「スペース」セクションを参照のこと。
【0142】
メッセージ・ゲートは、さらに、イベントのパブリッシュおよびサブスクライブ・メッセージ通信もサポートする。イベント・サポートのあるメッセージ・ゲートは、イベント・ゲートと呼ぶ。サービスのXMLスキーマは、サービスによってパブリッシュされる1つまたは複数のイベントの集まりを示す。イベント・ゲートは、XMLスキーマから構築できる。イベント・ゲートは、サービスによってパブリッシュされたイベントの集まりの一部または全部を認識し、それらのイベントにサブスクライブし、各イベントを、サービスによって生成されるのといっしょに配布するように構成できる。
【0143】
サービスに対するイベントの集まりは、サービスのXMLメッセージ・スキーマで記述することができる。XMLスキーマのイベント・メッセージごとに、イベント・ゲートはそのイベントの消費者としてサブスクライブする。一実施形態では、イベント・ゲートはXMLスキーマで示されるすべてのイベントにサブスクライブする。XMLタグを使用してそれぞれのイベント・メッセージに名前を付ける。イベント・ゲートは、サブスクライブ先のイベントのXMLタグを含むサブスクライブ・メッセージを送ることによりサブスクライブすることができる。
【0144】
サービスで対応するイベントが発生した場合、そのサービスはイベント・メッセージをサブスクライバに送り、そのイベントの発生を知らせる。イベント・メッセージは、XMLイベント・ドキュメントを含み、このメッセージはそれぞれのサブスクライブされたゲートに送られる。サブスクライブされたゲートがイベント・メッセージを受け取ると、XMLイベント・ドキュメントがそのメッセージから削除され、配布プロセスが開始する。イベント配布は、クライアント・プラットフォーム内のイベント・ドキュメントを配るプロセスである。クライアント・プラットフォーム内の各イベント消費者は、各タイプのイベントのイベント・ゲートにサブスクライブすることができる。Javaプラットフォームで、入力システムはJavaである(XMLイベント型から変換される)。イベント消費者は、イベント・ハンドラ・コールバック・メソッドをイベント・ゲートに供給する。イベント・ゲートは、これらのサブスクライブのリストを保存する。各イベント・メッセージがゲートに届くと(イベントを発生したサービスから)、ゲートはクライアント消費者のリストをトラバースし、各ハンドラ・メソッドを呼び出して、XMLイベント・ドキュメントをパラメータとして渡す。一実施形態では、XMLイベント・ドキュメントはハンドラ・コールバック・メソッドに渡される唯一のパラメータである。
【0145】
一実施形態では、イベント・ゲートはローカルの消費者クライアントのためにイベントに関して自動的にサブスクライブする。クライアントがインタレストをゲートに登録すると、ゲートはインタレストをイベント・プロデューサ・サービスに登録する。クライアントはさらに、インタレストのサブスクライブ解除も行い、これにより、ゲートはそのイベントを生成するサービスから登録を解除する。
【0146】
イベント・ゲートは、上述の標準要求応答メッセージ通信スタイルで通常のメッセージ・ゲートが行うのと全く同じようにしてXMLスキーマを使用しイベント・ドキュメントの型検査を行う。イベント・ゲートは、さらに、送られたメッセージ内の認証証明書を含み、受け取ったイベント・メッセージの認証証明書を検証することができる。
【0147】
上述のゲート機能の組み合わせは単一のゲートでサポートされることに注意されたい。それぞれのタイプは、分かりやすくするため、別々に説明した。たとえば、ゲートは、メッセージ・ゲート、メソッド・ゲート、およびイベント・ゲートであって、フロー制御とリソース監視をサポートする。
【0148】
サービス発見メカニズム
一実施形態では、分散コンピューティング環境は、クライアントがサービスを見つけだし、サービスの機能の一部または全部を使用する権限を交渉するための手段を提供するサービス発見メカニズムを備える。スペースはサービスの一例であることに注意されたい。サービス発見メカニズムは、セキュリティで保護され、発信クライアント要求を追跡し、着信サービス応答とマッチングを行うことができる。
【0149】
サービス発見メカニズムは、それらに限定されないが、以下のようなさまざまな機能を提供することができる。柔軟なサーチ基準を使用してサービスを見つける機能、サービスの機能セット全体またはそのサブセットを使用する権限をクライアントに伝達することができる、承認メカニズム、たとえば認証証明書を要求する機能、クライアントにサービスのインターフェースを伝達するための証明書、ドキュメント、またはその他のオブジェクトを要求する機能などがある。一実施形態では、サービスのインターフェースは、サービスの機能の要求されたセットとのインターフェースを含むことができる。
【0150】
発見の追跡が最初の要求に応答する。一実施形態では、各クライアント要求は、マッチする応答で返されるデータの集合を含み、要求と応答の相関を求めることができる。
【0151】
分散コンピューティング環境の一実施形態では、サービス発見メカニズムは拡張可能文法に基づいて柔軟なサーチ基準を提供することができる。一実施形態では、サーチ対象のサービス名、サービス・タイプ、およびもしあればその他の要素とXMLドキュメント内の要素とをマッチングすることができる。一実施形態では、XMLドキュメントはサービスに対するサービス通知である。XMLは、サーチのための柔軟で拡張可能な文法を提供する。XMLはさらに、マッチする要素について型安全であるという特徴も備える。一実施形態では、サービス名およびサービス・タイプは、XMLサービス通知の要素タイプと突き合わせて型検査を行うことができる。
【0152】
一実施形態では、分散コンピューティング環境はクライアントがサービス・アクセス権を交渉するためのメカニズムを備えることができる。一実施形態では、このメカニズムを使用して、サービスの全機能のサブセットについて交渉することができる。交渉の結果は、クライアントにサービスの機能の要求されたサブセットを使用する権限を伝達する認証証明書などの承認である。
【0153】
一実施形態では、サービス発見メカニズムを使用する際に、クライアントはサービスにセキュリティ能力証明書を要求することができる。一実施形態では、クライアントはサービスに対し、保護された(セキュア)通知の形で望む機能群を示すことができる。それに対してサービスは、クライアントに保護された通知で記述されている要求された機能を使用する権限を伝達することができる能力証明書で応答することができる。
【0154】
一実施形態では、分散コンピューティング環境は、クライアントがサービス・アクセス権限を交渉し、その後、サービスのアクセス・インターフェースをクライアントによって要求されたサービスの機能のセットまたはサブセットに提示するために使用できるセキュリティ証明書またはドキュメントを取得するためのメカニズムを備えることができる。
【0155】
一実施形態では、サービスから能力証明書を受け取ったクライアントは、「完全通知」と呼ばれるカスタム・サービス・アクセス・インターフェース・ドキュメントを生成することができる。一実施形態では、完全通知はXMLドキュメントである。生成された通知を利用し、受け取った能力証明書によってクライアントに対し許可されるサービス機能にアクセスすることができる。一実施形態では、通知により、クライアントが能力証明書によりアクセスを許可されたサービス機能のみのインターフェースが提供される。一実施形態では、クライアントに対し、必要な機能に限りクライアントがアクセス特権を持つアクセスを許可することができる。
【0156】
一実施形態では、分散コンピューティング環境はクライアントがサービスと機能を交渉するためのメカニズムを備えることができる。一実施形態では、クライアントはサービスに対する機能を交渉することができる。サービスはその後、クライアントと交渉したパラメータに基づいて結果をカスタマイズする。たとえば、160×200の解像度で1ビット表示が可能なクライアントは、サービスに対しそれらのパラメータを交渉し、それにより、サービスはクライアントに対し結果をカスタマイズできる。
【0157】
以下に、XML機能メッセージの一例を示したが、何らかの形で制限することを意図していない。
【0158】
分散コンピューティング環境は、サービスがサービス呼び出しの結果を返す方法をクライアントが交渉できるようにするメカニズムを備える。一実施形態では、能力証明要求時に、結果返却方法の1つを選択する手段をサービスに伝達することができる。その後、サービスはクライアントに、使用する結果メカニズム、さらにサービス・インターフェースを伝達することができるカスタム・サービス通知を生成する。
【0159】
一実施形態では、分散コンピューティング環境はサービス発見サーチ要求および要求への応答を追跡するメカニズムを備える。一実施形態では、サーチ要求および応答メッセージは、フィールドを備え、このフィールドを使用してストリングまたはXMLドキュメントを含むことができる。一実施形態では、要求メッセージのフィールドに含まれるストリングまたはXMLドキュメントはさらに、応答メッセージでも返される。一実施形態では、ストリングまたはXMLドキュメントは応答メッセージで返す必要がある。一実施形態では、ストリングまたはXMLドキュメントは、応答メッセージで返すときにストリングまたはドキュメント内に挿入または付加される追加情報を含むことができる。一実施形態では、このメカニズムを複雑なシステムのデバッグに使用することができる。一実施形態では、このメカニズムはさらに、クライアントに対し、ストリングまたはXMLドキュメントを使用して、クライアントとサービスのみが理解できるクライアントとサービスとの間のカスタムサーチ情報を渡すことによりアクセスするサービスを選択するためのメソッドを提供することができる。
【0160】
コンポーネント(サービス)インターフェースのマッチング
分散コンピューティング環境は、コンポーネント(たとえば、サービス)仕様インターフェースと要求されたインターフェースとのマッチングを行うメカニズムを備えることができる。たとえば、クライアント(サービスでもよい)は、一組のインターフェース要求条件を満たすサービスを必要とすることがある。各コンポーネントは、それが適合するインターフェースの記述を含む。仕様インターフェース・マッチング・メカニズムを使用すると、リクエスタのインターフェース要求条件と最もよくマッチするコンポーネントを配置することができる。仕様インターフェース・マッチング・メカニズムではさらに、インターフェース要求条件の「ファジー」マッチングを実行できる。つまり、このメカニズムを使用すると、インターフェースのすべての側面を正確に指定しなくてもマッチングを実行でき、最近マッチング(ファジー)メカニズムを実現できる。一実施形態では、仕様インターフェース・マッチング・メカニズムを、単一のインターレス・レベルで仕様を要求しないマルチレベル・サブクラス化モデルとして実装できる。
【0161】
一実施形態では、コンポーネントは、XMLスキーマ定義言語(XSDL)を使用してそのインターフェースを記述することができる。XSDLでは、インターフェースを記述する人間が解釈可能な言語を実現し、デバッグなど人間の介入を必要とする活動を簡素化することができる。一実施形態では、インターフェース記述を本書の別のところで説明しているように通知の一部(たとえば、サービス通知)として提供することができる。
【0162】
仕様インターフェース・マッチング・メカニズムを使用すると基本的な望ましいインターフェースとコンポーネントの一組のインターフェース記述とを比較することができる。基本的な望ましいインターフェースとマッチする1つまたは複数のコンポーネントが識別される。インターフェース記述は、コンポーネントによって提供されるインターフェースをより具体的に記述するサブクラス記述を含む。サーチ・プロセスで、クラス・タイプ階層を調べて、所定のクラスがサーチ・タイプのサブクラスであるかどうかを判別することができる。一実施形態では、サブクラスは基本クラスのプロパティーを継承する。このフェーズではサブクラス特有の情報は調べることができない。そのため、サーチは一般的に実行するということができる。識別されたコンポーネントは、次の(サブクラス)レベルでサーチできる。サーチは、サブクラスに特有なものとなり、インターフェース記述に含まれるサブクラス情報を解釈することにより実行できる。サーチは、リクエスタの望むインターフェースとの最近マッチのある1つまたは複数のコンポーネントが判別されるまで1つまたは複数のサブクラスについて続けられる。
【0163】
一実施形態では、インターフェース・マッチング・メカニズムは、類似のインターフェースを実装する2つまたはそれ以上のコンポーネントを区別する機能を備える。一実施形態では、インターフェース・マッチング・メカニズムは、同じコンポーネントの異なるリビジョンを区別する機能を備える。
【0164】
一実施形態では、コンポーネントが適用するインターフェースの仕様を含むコンポーネント記述を提示することができる。コンポーネント記述にさらに、コンポーネント自体に関する情報を含めることができる。インターフェース記述および/またはコンポーネント情報を使用して、所定のインターフェースの異なる実装を区別することができる。コンポーネント記述には、標準識別子とバージョン情報を入れることができる。バージョン情報を使用すると、コンポーネントのリビジョンを区別することができる。一実施形態では、コンポーネント記述を本書の別のところで説明しているように通知の一部(たとえば、サービス通知)として提供することができる。
【0165】
一実施形態では、特定の標準識別子についてコンポーネントをサーチする。マッチする標準識別子を持つ2つまたはそれ以上のコンポーネントを識別することができる。マッチする標準識別子を持つコンポーネントのうちから1つまたは複数のコンポーネントを選択することができる。選択手順では、インターフェース仕様バージョン、コンポーネント実装仕様、コンポーネント実装仕様バージョン、コンポーネント記述からのその他の情報または情報の組み合わせを使用して、リクエスタの要求条件に最もよくマッチする1つまたは複数のコンポーネントの集まりを出力することができる。
【0166】
スペース
上述のように、分散コンピューティング環境はスペースに依存し、サービスまたはコンテンツをクライアントに仲介するランデブー・メカニズムを備える。図15は、スペース114の基本的な使用法を示している。サービス・プロバイダは、スペース114でサービスを通知することができる。クライアント110は、スペース114で通知を見つけ、通知からの情報を使用し、分散コンピューティング環境のXMLメッセージング・メカニズムを利用してサービスにアクセスする。多くのスペースが存在し、それぞれサービスまたはコンテンツを記述するXML通知を含む。したがって、スペースは、サービスおよび/またはXMLデータのXML通知のリポジトリと考えることができ、これは結果などの未処理データまたはデータの通知とすることができる。
【0167】
スペース自体はサービスである。サービスのように、スペースには通知があり、スペースのクライアントはまず、そのスペース・サービスを実行するためにそれを取得する必要がある。スペースの自通知は、XMLスキーマ、1つまたは複数の証明書、およびスペースにアクセスする方法を示すURIを含むことができる。クライアントは、スペースにアクセスするためにスペース・サービスの通知からゲートを構築することができる。スペースのクライアントはそれ自体、そのスペース内で通知するまたは既存の通知を修正することを求めるサービス・プロバイダである。または、スペースのクライアントはスペースによってリストに入れられたサービスまたはコンテンツにアクセスすることを求めるアプリケーションである。したがって、スペースは分散コンピューティング環境においてクライアントとサービスとの間の対話に対する触媒の働きをする。
【0168】
スペースは、名前付きの通知の集合といえる。一実施形態では、通知に名前を付ける作業は、名前ストリングを通知に関連付けるプロセスである。この関連付けは、スペースに通知を格納した後発生する。スペースから通知を取り除くと、名前と通知との関連付けが解除される。スペースは、スペース自体を記述する単一のルート通知で作成できる。追加通知をスペースに加えることができる。通知の名前で、スペース内の通知を特定できるが、これは、名前の階層など必要なグラフ化情報を指定する操作を含む。好ましい実施形態では、分散コンピューティング環境はスペースの構造を規定しない。つまり、たとえば、スペースをフラットな関係付けのない通知の集まりまたは関係付けのされている通知のグラフ(たとえば、商用データベース)として構造化される。好ましい実施形態では、分散コンピューティング環境はスペースに実際にその内容を格納する方法を規定しないので、小さなデバイスから大きなデバイスまでスペースをサポートすることができ。たとえば、単純なスペースは、PDAなどの小さなデバイスに収まるように手直しすることができる。より高度なスペースは、大規模な商用データベースを採用している大規模なサーバー上に実装することができる。
【0169】
上述のように、スペースは分散コンピューティング環境でサービスの通知を含むことができる。通知は、分散コンピューティング環境内でサービスおよび/またはコンテンツのアドレスを指定し、アクセスするためのメカニズムを提供する。通知により、サービスのURIを指定することができる。いくつかの実施形態では、URIを使用すると、インターネット上でサービスにアクセスすることができる。また、通知はサービスのXMLスキーマも含む場合がある。XMLスキーマにより、サービスのクライアントがそのサービスの機能を呼び出すためにサービスに送る一組のメッセージを指定することができる。XMLスキーマでは、クライアント・サービス・インターフェースを定義する。それとともに、URIおよび通知で指定されたXMLは、サービスのアドレスを指定し、サービスにアクセスする方法を指示する。URIとスキーマは両方とも、XMLで、スペース内の通知として用意される。そのため、分散コンピューティング環境でサービスのアドレスを指定し、サービスにアクセスするメカニズムをスペース内の通知として公開することができる。クライアントは、スペースを発見し、サービスまたはコンテンツについて個々の通知をルックアップする。
【0170】
図16は、一実施形態による通知構造を示す。通知500は、他のXMLドキュメントのように、階層状に配列された一連の要素502を含むことができる。各要素502は、データまたは追加要素を含む。要素はさらに属性504を持つ。属性は、名前−値ストリングのペアである。属性は、メタデータを格納し、これにより、要素内のデータを記述することが簡単になる。
【0171】
いくつかの実施形態では、通知は異なる状態で存在してもい。このような状態の1つにドラフト状態がある。一実施形態では、スペースの範囲外に存在するドラフト状態で通知を最初に構築する。通知の作成者は、XMLエディタを使用するなどさまざまな方法で構築することができる。ドラフト状態の要素および属性へのアクセスは、適当な手段を使用して未処理データおよびメタデータ・レベルで行われる。通常、ドラフト状態で通知に加えられた変更についてはイベントを発生しない。したがって、通知の作成者は、自由に、要素を追加、変更、または削除できるだけでなく、目的の属性セットを用意し、確認する分散コンピューティング環境の残り部分に対する通知をパブリッシュすることができる。
【0172】
一実施形態では、通知に対する可能な状態としてほかに、パブリッシュ状態がある。通知は、スペースに挿入されるとパブリッシュ状態に移行する。通知がスペース内に入ると、関連するクライアントおよびサービスが、たとえば、名前および/またはその要素をサーチ基準として使用してそれを特定することができる。たとえば、サーチ基準は、スペース内の通知と(たとえば、スペース・サービスにより)比較できるXMLテンプレート・ドキュメントとして指定できる。パブリッシュされた通知は、クライアントが使用できる状態にある「オンライン」サービスを表す。サービスのメッセージ・アドレス(URI)は、通知内に要素として格納できる。スペースから削除される通知は、破棄されるかまたは保持されるドラフト状態に遷移して戻る。削除により、イベントが発生し、関連するリスナーが変更に気づく。メッセージ・ゲートは通常、パブリッシュされた通知から作成される。
【0173】
一実施形態では、通知に対する可能な状態としてほかに、永続的アーカイブ状態がある。アーカイブ・プロシージャは、ライブ・パブリッシュ通知を、後で再構成するため永続的に格納できるバイトのストリームに変換する。アーカイブ通知が、スペースからアーカイブ・サービスに送られる(たとえば、raw XML形式で)。通知のアーカイブ・サービスのURIは、通知内に要素として格納できる。XMLは、通知の格納および取り出しを行い、通知オブジェクトを再構成するのに十分な通知要素の状態を表す形式を用意できる。通知は、アーカイブ・サービスの実装に応じて、他の形式でも格納できる。パブリッシュされた通知を永続的にするプロセスでは、永続的アーカイブ状態の通知を準備する。将来使用するため永続的通知を(たとえば、アーカイブ・サービスにより)、ファイルやデータベースなどの永続的記憶場所に格納できる。スペースは、アーカイブ・プロシージャを介して、通知を格納できるが、スペースは必ずしも、永続通知エントリを実際に格納する際に重要な役割を果たすわけではない。永続通知を格納する方法は、通知のアーカイブ・サービスにより決定される。通常、アーカイブ通知の代わりに生成されるイベントはない。また、永続的アーカイブ状態での通知に対し変更が許されない場合がある。通知は、アーカイブと削除、またはアーカイブだけが許される。通知が、スペースから削除することなくアーカイブされると、スペースはシャドウ・バージョンの通知を格納する。アーカイブされたサービスにアクセスすると、通知がオンデマンドで永続的バッキング・ストアから「フォールトイン」する。この機能を使用すると、たとえば、オンデマンドで、LDAP(ライトウェイト・ディレクトリ・アクセス・プロトコル)エントリから通知に入力することができる。
【0174】
図17は、通知がその存続期間中に置かれる通知状態遷移の一例を示す図である。まず、1に示されているように、通知を構築することができる。構築のときに、通知はドラフト状態にある。その後、2に示されているように、通知がスペースの中に挿入される。通知は、パブリッシュされた親として挿入できる。通知は、スペースに挿入された後、パブリッシュ状態にある。イベント(たとえば、AdvInsertEvent)は、通知がスペース内に挿入されたときに生成される。イベントについては以下で詳述する。通知は、3に示されているように、アーカイブされ、永続的にされ、これにより、通知が永続的アーカイブ状態に遷移する。通知はさらに、4に示されているように、永続的アーカイブ状態からパブリッシュすることもできる。通知は、スペースから除去され、5に示されているように、ドラフト状態に遷移し戻される。イベント(たとえば、AdvRemoveEvent)は、通知が削除されたときに生成される。
【0175】
一実施形態では、アーカイブされた永続的状態は使用されない。この実施形態では、状態変化3および4も使用されない。この実施形態では、通知はドラフト状態またはパブリッシュ状態のいずれかである。
【0176】
スペース内に格納された通知は、バージョン(要素の場合もある)、作成日(属性の場合もある)、変更日(属性の場合もある)、実装サービスURI(要素の場合もある)、および/または永続的アーカイブ・サービスURI(要素の場合もある)などの標準化された要素および/または属性を備える。
【0177】
スペース自体は通常サービスである。スペース・サービスは、スペース内の通知をサーチする機能を備え、これは、通知のタイプによるスペースのサーチを含む。スペース・サービスはさらに、通知を読み込み、通知を書き込み(パブリッシュする)、通知を取る(削除する)機能も提供することができる。スペースはさらに、スペース・イベント通知メッセージのサブスクライブを行う機能も備える。スペースには、位置によりスペース関係グラフをナビゲートする機能、通知要素の読み込み、書き込み、または取り出しの機能、通知属性の読み込み、書き込み、または取り出しの機能、および通知イベントの通知メッセージのサブスクライブの機能など、拡張機能を備えるものもある。スペースの機能については、以下で詳述する。スペースの機能は、スペース通知のメッセージ・スキーマで具現化される。メッセージ・スキーマ、スペース・アドレス、および認証証明書から、クライアント・メッセージ・ゲートを作成し、スペースとその機能にアクセスできる。
【0178】
スペースおよびスペース内のすべての通知は、URIを使用してアドレス指定できる。一実施形態では、スペースおよび通知名は、URL命名規則に従う。いくつかの実施形態では、スペースのアドレス指定にURI、たとえばURLを使用すると、インターネット全体からスペースにアクセス可能になる。スペース・メッセージ受取側(スペース・サービス)を指定するには、そのスペースについてサービス通知で受け取ったURIを使用する。URIには、プロトコル、ホスト、ポート番号、および名前を含めることができる。プロトコルでは、クライアントとスペースの間でメッセージを移動するために使用できるプロトコルに名前を付ける(たとえば、信頼できるソケットまたは信頼できないソケット)。ホストおよびポート番号は、プロトコル依存のIDである。名前は、スペース名の後に通知、要素、および/または属性名を続けたものである。一実施形態では、パス名を使用して、スペース内の通知を識別することができる。パス名は絶対パスまたは相対パスのいずれかである。絶対パス名では、スペースだけでなく、通知も指定できる。相対パス名は、想定されるスペース内で指定通知に相対的である。一実施形態では、パス名の作成に適用されるシンタックスは、URI(統一リソース識別子)のシンタックスである。したがって、その実施形態では、通知およびスペース名はURI予約語文字または一連の文字を含むことができない。要素および属性へのパス名も、URIを使用して指定できる。一般に、要素名および属性名は、http://java.sun.com/spacename/advertisement/element/attributeなど通知のパス名に付加することができる。
【0179】
一実施形態では、分散コンピューティング環境は、クライアントがスペースのURIを発見できるようにするが、そのスペースに対するサービス通知へのアクセスを制限するメカニズムを備える。一実施形態では、完全通知をスペースに戻すのではなく、スペースのURIとスペースに対する認証サービスのURIを返す。クライアントは、スペース内で通知されたドキュメントまたはサービスにアクセスするために、まず、リターン・メッセージで与えられるURIで認証サービスに対し自己認証を実行する。認証サービスは、認証証明書を返し、これを使用して、クライアントはスペースに対する部分的または完全アクセスを実行できる。クライアントは、認証証明書を受け取ると、スペースに接続し、スペース内のドキュメントまたはサービス通知にアクセスしようとする。
【0180】
分散コンピューティング環境は、クライアントをスペースに接続できるようにするメカニズムを備える。接続メカニズムの実施形態は、クライアント−スペース・アドレス指定、クライアント承認、セキュリティ、リース、クライアント能力判別、およびクライアント−スペース接続管理に対応している。クライアント−スペース接続をセッションと呼ぶ。一実施形態では、セッションに一意的なセッション識別番号(セッションID)を割り当てることができる。セッションIDにより、クライアント−スペース接続を一意に識別することができる。一実施形態では、クライアントがリースを更新しない場合にセッション・リース・メカニズムを使用してセッションの透過的ガベージ・コレクションを実行する。
【0181】
一実施形態によるこのような接続メカニズムの使用例を以下に示す。クライアントは、認証証明書を取得する。一実施形態では、スペースでは、クライアントがスペースへのアクセスを要求したことに応答して行う認証サービスを提供する。クライアントは、認証サービスを通じて認証証明書を取得することができる。クライアントは、認証証明書を受け取ると、接続要求メッセージを送ることによりスペースとの接続を開始できる。一実施形態では、接続要求メッセージに、スペース・サービスのURIアドレス、クライアントの認証証明書、およびクライアントが要求している接続リースに関する情報を含めることができる。スペースは、接続要求メッセージを受け取った後、そのメッセージの妥当性を確認する。一実施形態はXMLスキーマを使用してメッセージの妥当性を確認できる。クライアントは認証証明書を使用して認証を受けることができる。一実施形態では、接続要求メッセージで受け取った情報を使用してスペースを使用するクライアントの能力を判別することができる。一実施形態では、スペースの各クライアントにスペースを使用するそれぞれの能力の集まりを割り当てることができる。一実施形態では、スペースの1つまたは複数のクライアントに関する能力情報を含むアクセス制御リスト(ACL)をクライアント能力判別で使用することができる。一実施形態では、接続要求メッセージで受け取った情報を使用してACL内のクライアントの能力をルックアップすることができる。
【0182】
クライアントを認証し、クライアントの能力を判別した後、クライアントを許可する接続リースを判別できる。リースが判別された後、クライアント−スペース間接続を維持する構造を生成できる。接続に対するセッションIDを生成する。一実施形態では、各クライアント−スペース間接続に一意的セッションIDを割り当てる。一実施形態では、アクティブ化スペースを作成し、クライアント−スペース間セッションに割り当てるか、またはそれとは別に、既存のアクティブ化スペースをクライアント−スペース間セッションに割り当てることができる。一実施形態では、アクティブ化スペースを使用すると、スペースを使用したときにクライアントのサービスの結果を格納することができる。一実施形態では、クライアントの能力を使用して、アクティブ化スペースがクライアントに対し作成されるかどうかを判別する。たとえば、クライアントは、結果を格納し取り出すアクティブ化スペースにアクセスする能力を持たないことがある。1つまたは複数のメッセージをクライアントに送り、接続が確立されたことをクライアントに通知することができる。その1つまたは複数のメッセージに、セッションIDとリースに関する情報を入れることができる。その後、クライアントでは、それらに限定されないが、通知ルックアップ、通知登録、および通知取り出しなどのスペースを使用できる。一実施形態では、割り当てられたリースの有効期限が切れるか、またはクライアントがスペースにリース取り消しを要求するメッセージを送るまで接続は開いたままである。一実施形態では、クライアント側で、そのリースの有効期限が切れる前にそのリースを更新する必要がある。クライアントがリースを更新する前にリースの有効期限が切れた場合、接続は切断され、クライアントとスペースとの接続が途絶える。一実施形態では、再接続するには、クライアントは接続手順を繰り返す必要がある。
【0183】
一実施形態では、スペースのクライアントはスペースの通知をいくつかの異なる方法で取得することができる。クライアントがスペースの通知を取得する方法のうちいくつかを図18に示す。たとえば、スペース発見プロトコルを分散コンピューティング環境の一部として提供することができる。スペース発見は、クライアントまたはサービスがスペースを見つけるために使用するプロトコルである。リスナー・エージェント202は、発見要求が来ないか監視するように1つまたは複数のスペースと関連付けて設定できる。発見リスナー・エージェント202は、さまざまなネットワーク・インターフェース上で待機し、スペースを探しているクライアント200aからブロードキャスト要求またはユニキャスト要求を(エージェントのURIで)受け取る。その後、リスナー・エージェント202は要求されたスペースのサービス通知に関してサービス通知またはURIで応答する。一実施形態では、リスナー・エージェントは、一般に、スペースから分離されているが、それは、その機能がスペース・サービスの機能と直交しているからである。ただし、リスナー・エージェントは、スペース・サービスと同じデバイスまたは異なるデバイスに実装することができる。
【0184】
一実施形態では、発見プロトコルはデフォルト・スペース内で通知されるサービスでよい。クライアントは、追加スペースを発見するためにクライアントのデフォルト・スペースから発見プロトコルをインスタンス化する。発見プロトコルは、クライアントのデフォルト・スペースに事前に登録できる。それとは別に、発見プロトコルは、たとえば、クライアントは発見サービスによって処理されるローカル・ネットワークに接続した時に、そのスペース内に通知を置くことによりデフォルト・スペースに自己登録することもできる。
【0185】
一実施形態では、スペース発見プロトコルを、SLP、Jini、UPnPなどの他のプラットフォーム用の基本デバイス発見プロトコルにマッピングすることができる。そこで、クライアントは分散コンピューティング環境の発見プロトコルを使用して他の環境内のサービスを見つける。これらの他の環境とのブリッジを用意し、それらの他の環境内のサービスに通知を送って、ここで説明した分散コンピューティング環境のクライアントがそれらにアクセスできるようにする。「ブリッジ」のセクションを参照のこと。
【0186】
通知される発見プロトコルごとに、分散コンピューティング環境では発見プロトコルの結果を保持するための後続結果スペースを作成することができる。一実施形態では、分散コンピューティング環境内のスペース・サービスはMulticast Announcement Protocol(マルチキャストUDP)を使用してLAN上でアナウンスすることができる。リスナー・エージェントがこの情報を記録する。デバイス(クライアントまたはサービス)は、Multicast Request Protocol(マルチキャストUDP)を使用して、スペース・マネージャの発見を開始する。一実施形態では、スペース・マネージャは、それぞれのスペースのURIを示す情報で応答する。それとは別に、リスナー・エージェントは複数スペースについて応答することができる。発見応答は、さらに、各スペースにラベルを付ける短いストリング(たとえば、スペースのキーワードから取得する)と、たとえばそれぞれのスペースに対し操作を実行する各スペース・マネージャとのTCP接続を設定するために使用できる情報を含むことができる。要求側デバイスは複数のスペース・マネージャから応答(またはリスナー・エージェントから複数のスペース・リスティング)を受け取るので、この情報は、クライアントが接続先スペースを選択する場合に役立つ。
【0187】
上述のマルチキャスト発見に加えて、発見サービスではさらに、ネットワーク(たとえば、インターネット、他のWAN、LANなど)上の既知のアドレスでスペース・マネージャを発見するために使用できるユニキャスト・メッセージング(たとえば、TCPで)を使用して発見を実行することもできる。ユニキャスト発見メッセージは、サービス通知を送るため既知のURIのスペース・サービスの要求を含むことができる。マルチキャスト発見プロトコルをおよびユニキャスト発見プロトコルは、メッセージ・レベルで定義され、そのため、発見に参加しているデバイスがJavaをサポートしていようと他の特定の言語をサポートしていようと関係なく使用することができる。
【0188】
発見プロトコルを使用すると、分散コンピューティング環境内のクライアントをサポートするサーバ・コンテンツを拡散することとは独立にクライアントを拡散させることが容易にできる。たとえば、モバイル・クライアントは、その初期デフォルト・スペースをそのローカル・プラットフォームに組み込むことができる。デフォルト・スペースで通知されたローカル・サービスに加えて、モバイル・クライアントは、発見プロトコルにアクセスするためのサービスやスペースサーチ・エンジンにアクセスするためのサービスなど、追加スペースをサーチするサービスを備えることができる。
【0189】
一実施形態では、分散コンピューティング環境のスペース発見プロトコルは、一組のXMLメッセージとその応答を定義し、クライアントが以下のことを行えるようにする。
・ ネットワーク・インターフェース上でプロトコル定義スペース発見メッセージをブロードキャストする。
・ リスナーから、それらのリスナーが表す候補スペースを記述するXMLメッセージを受け取る。
・ クライアントが選択されたスペースのアドレスを知らなくても、発見されたスペースの1つをデフォルトとして選択する。
・ そのアドレスなど選択されたスペースに関する情報を取得し、クライアントが後で発見プロトコルの外部の手段により同じスペースを見つけることができるようにする(これは、後でクライアントがローカルでなくなったがまだクライアントに関わっているスペースにアクセスする場合に役立つ)。
【0190】
いくつかの実施形態では、マルチキャストおよびユニキャスト発見プロトコルはIPネットワークを必要とする。これらの発見プロトコルは、IPネットワーク対応のデバイスの必要条件を満たすが、これらの発見プロトコルで直接サポートされないデバイスも多くある。分散コンピューティング環境でスペースの発見にこのようなデバイスの要求条件を満たすには、事前発見プロトコルを使用してIPネットワーク対応のエージェントを見つける。事前発見プロトコルは、ネットワーク・エージェントを要求する非IPネットワーク・インターフェース上でメッセージを送るデバイスを含むことができる。ネットワーク・エージェントは、それ自身とデバイスとの間の接続を設定する。デバイスとエージェントの間の接続が設定されると、エージェントはこれがエージェントとして使用されるデバイスのためにIPネットワーク上で発見プロトコルに参加する。ネットワーク・エージェントは、さらに、一般に分散コンピューティング環境にデバイスを接続するためのインターフェースとなる。たとえば、発見されたスペース内で通知されるサービスを実行するためにデバイスのためにエージェント内にゲートを構築することができる。「ブリッジ」のセクションを参照されたい。
【0191】
クライアントが分散コンピューティング環境でスペースを特定するための方法としては他に、他のスペース内でスペースを通知する方法がある。スペースはサービスなので、他のサービスと同様、他のスペース内で通知を受けることができる。図18に示されているように、クライアント200bは、第2のスペース204bについて第1のスペース204a内で通知206を見つける。スペース204bは、次に、追加スペースへの通知を含む。サービス(スペースを実装する)はさらにクライアントとしても機能するため、スペースは通知を交換するかまたは一緒に連鎖し、図19に示されているように、ベースの連合を実現する。分散コンピューティング環境にはスペースをいくつでも含めることができる。スペースの個数とトポロジは、実装に依存する。たとえば、IPネットワーク上に実装されたスペースは、それぞれ異なるサブネットに対応していることがある。
【0192】
クライアントでスペースを特定する第3の方法として、図18に示されているように、サービス208を実行する方法がある。サービス208は、実行され、その結果としてスペース・サービスのサービス通知を返す。サービス通知はXML文書であり、分散コンピューティング環境はインターネットを含むため、サービス208はWebベースのサーチ・ツールとすることができる。このようなサービスの一例として、図4で説明しているスペース・ルックアップ・サービスがある。一実施形態では、分散コンピューティング環境内のスペースはWebページとして実装することができる。それぞれのWebページ・ベースは、Webページを分散コンピューティング環境内のスペースとして識別するためにサーチできるキーワードを含むことができる。スペースは、その他のサーチ可能なキーワードを含むだけでなく、さらにスペースを定義することができる。クライアントは、サーチ・サービス208に接続し、キーワードをXMLメッセージの形式でサーチ・サービスに供給する。サーチ・サービスは、クライアントからキーワードを受け取りそのキーワードをインターネットサーチ・エンジンに送るが、これは従来のサーチ・エンジンまたはサードパーティ製のサーチ・エンジンでもよい。サーチ・サービスは、XMLメッセージとして直接にまたは結果スペースへの参照によりインターネットサーチ・エンジンからクライアントに結果を返す。結果は、サーチ要求とマッチするスペースのURIである。それとは別に、サーチ・サービスは、サーチによって識別されたスペースにコンタクトし、このようなそれぞれのスペースについてサービス通知を取得し、XMLメッセージとして直接に、または結果スペースでの参照により、スペース・サービス通知をクライアントに返すことができる。クライアントは、その後、サーチ結果からスペースを選択し、ゲート(それ自身によりまたはプロキシを通じて)を構築し、選択したスペースにアクセスすることができる。選択されたスペースにアクセスした後、クライアントはそのスペース内のサービス通知をルックアップし、これによりスペースが追加される。
【0193】
上述のように、スペースはXMLペースのWebサイトとすることができ、そのため、インターネットWeb上でサーチ・メカニズムによりサーチすることができる。スペースはインターネットサーチ可能キーワードを含むことができる。小型クライアント・デバイスなどいくつかのデバイスでは、インターネット・ブラウザをサポートしていない。ただし、このようなデバイスであっても、分散コンピューティング環境内でスペースについてインターネット・サーチを実行することができる。デバイスは、キーワードの列を受け付けるプログラムを備え、これらのキーワードはサーバ上のプロキシ・プログラムに送られる(たとえば、サーチ・サービス)。プロキシは、これらのキーワード列をブラウザ・ベースのサーチ機能に送り(たとえば、インターネットサーチ機能)、サーチを実行することができる。プロキシは、サーチの出力を受け取ってサーチ結果の各URIを表すストリング(たとえば、XMLストリング)に解析し、応答ストリングをクライアントに送り返す。したがって、クライアントは、Webブラウザなどのプログラムをサポートしていなくてもインターネットを介してスペースを特定することができる。さらに高機能のデバイスでは、プロキシの使用を避けて、インターネット・ベースのルックアップ・サービスを直接開始することができる。
【0194】
クライアントはスペースを特定するための第4の方法は、新規作成された空のスペースまたは既存のスペースが生成されるときには生成されたスペースに関する情報を取得または受け取る方法である。既存のスペースは、生成元のスペースと同じ機能(たとえば、同じXMLスキーマ)を持つ空のスペースを生成するインターフェースを備えることができる。スペースの生成については以下で詳述する。
【0195】
スペースのクライアントはスペース・サービスの通知を見つけると、スペースのそのクライアントは他のサービスの場合と同様にスペース・サービスを実行できる。スペース・サービスのクライアントは別のサービスでもよいことに注意されたい(たとえば、スペース内で通知すること求めるサービス)。一実施形態では、図20に示されているように、スペース・サービスを実行するため、スペースのクライアントはまずスペースに対し認証サービスを実行し、300に示されているように、認証証明書を取得する。認証サービスは、スペース・サービスのサービスを通知で指定することができる。スペースのクライアントは、302に示されているように、認証証明書、スペースのXMLスキーマ(スペースのサービス通知からの)、およびスペースのURI(スペースのサービス通知からの)を使用して、スペースのゲートを構築する。次に、スペースのクライアントは、そのゲートを使用してメッセージをスペース・サービスに送ることによりスペース・サービスを実行する。第1のそのようなメッセージは304に示されている。
【0196】
認証を採用する実施形態では、スペース・サービスがクライアントから第1のメッセージを認証証明書が埋め込まれた状態で受け取ったときに、スペース・サービスは同じ認証サービス(スペース・サービスのサービス通知で指定されている)を使用して、クライアントを認証し、306で示されているように、その素性を確定する。スペース・サービスは、クライアントの能力を判別し、308で示されているように、クライアントを認証証明書にバインドする。
【0197】
310に示されているように、スペースのクライアントは、メッセージをスペース・サービスに送ることによりさまざまなスペース機能を実行することができる。一実施形態では、スペースのクライアントがスペース・サービスに要求を送るときに、クライアントはその要求で認証証明証を渡し、スペース・サービスがクライアントの特定の能力について要求をチェックできるようにする。
【0198】
各スペースは、通常、サービスであり、スペース・サービスのコア機能を定義するXMLスキーマを備える場合がある。XMLスキーマでは、スペース・サービスとのクライアント・インターフェースを指定する。一実施形態では、すべてのスペース・サービスは、基本レベルのスペース関係のメッセージを出すことができる。基本レベルのスペース機能は、PDAなどの小型デバイスをはじめとするほとんどのクライアントで使用できる基本的なスペース機能である。たとえば、より高機能なクライアントについては、機能を増やすことが望ましい場合がある。基本レベルのスペースの拡張は、スペースを通知するXMLスキーマにさらにメッセージを追加することにより実現できる。たとえば、一実施形態では、基本レベルのメッセージは、通知に対して関係グラフを強制しない。たとえば、通知の階層をトラバースするメッセージはスペース拡張である。このような追加機能は、スペースの1つまたは複数の拡張をXMLスペース・スキーマまたはスキーマ拡張を通じて提供することができる。拡張されたスキーマは、基本スキーマを含むので、拡張スペースのクライアントもまた、基本スペースとしてスペースにアクセスすることができる。
【0199】
一実施形態では、基本スペース・サービスは、XMLドキュメントの一時的リポジトリを備える(たとえば、サービスの通知、実行中サービスの結果)。ただし、一実施形態の基本スペース・サービスは、スペース・コンテンツの永続性、スペース構造(たとえば、階層)のナビゲーションまたは作成、およびトランザクション・モデルをサポートする高度な機能に対応していない場合がある。永続性、階層、および/またはトランザクションをサポートするメカニズムは、XMLスキーマを拡張することによって実現される。拡張されたスペースはそれでも基本XMLスキーマを含むので、必要なのが、あるいはサポートできるのが基本スペースの機能だけの場合に、クライアントは拡張スペースを基本スペースとして取り扱うことができる。
【0200】
一実施形態では、基本スペースは一時的なものとすることができる。基本スペースは、さまざまな目的のために受け入れることができる。サービス・プロバイダは、さまざまなスペースでサービスを登録することができる。一実施形態では、サービスはスペース内の情報のパブリッシュ後継続的にリースを更新する必要がある。このような性質があることから、サービス通知は、多くの場合に再構築かつ/または再確認するという点で一時的なものである。ただし、スペース内に何らかの永続性を実現することが望ましい。たとえば、結果があるスペースは、一定期間結果が失われないようにしたいユーザに対しては何らかの永続性を提供できる。一実施形態では、クライアントが永続的ストアによって裏付けられているスペース内のオブジェクトを制御し、その永続性ストアのメンテナンスを管理することができるスペース・インターフェースを指定することにより永続性を実現することができる。永続性インターフェースは、永続性に関してインターフェースを定義するスペースの拡張XMLスキーマで指定することができる。
【0201】
一実施形態では、基本スペースは、XMLドキュメントがスペースに追加され、ストリングによって識別できるインターフェースを備える。基本スペースは、スペース内のさまざまな名前をつけられたXMLドキュメントの階層を実現することはできない。階層のサポートが望ましい実施形態では、ユーザが階層を指定することができる追加インターフェースを定義するとよい(XMLスキーマを拡張する)。階層をナビゲートしたり、関係グラフを位置でナビゲートするように他のインターフェースを指定することもできる。ただし、他のユーザはそれでも、基本スペース・インターフェースを使用して、階層を使わずに、同じドキュメントにアクセスすることができる。拡張スペース・スキーマでは、他のスペースの構造に対するインターフェースも実現できる。
【0202】
拡張XMLスペース・インターフェースもまた、スペース・トランザクション・モデルについて実現することができる。たとえば、拡張スペースXMLスキーマがACIDトランザクションのインターフェースを指定する。ACIDは、エンタプライズ・レベルのトランザクションの4つの特性を記述するために使用される頭字語である。ACIDは、Atomicity(原子性)、Consistency(一貫性)、Isolation(独立性)、およびDurability(耐久性)のそれぞれの頭文字をとったものである。原子性とは、トランザクションを完全に完了するか、または元に戻すかのいずれかであることを意味する。障害が発生した場合、すべての操作およびプロシージャを元に戻し、すべてのデータを前の状態にロールバックする必要がある。一貫性とは、トランザクションがシステムを一方の一貫性のある状態から他方の一貫性のある状態に変換することを意味する。独立性とは、各トランザクションが同時に発生する他のトランザクションとは独立に発生することを意味する。耐久性とは、完了したトランザクションが、たとえばシステムに障害が発生したときでも、内容を失うことなく恒久的であるということを意味する。他のトランザクション・モデルはさらに、拡張スペース・スキーマで指定することができる。
【0203】
拡張スペース・スキーマは、拡張されたスペースの特徴、機能性、または機能を使用するためのメッセージ・インターフェース(たとえば、XMLメッセージ)を指定するXMLドキュメントとすることができる。スペースには、基本スキーマおよび複数のを拡張スキーマを用意できる。これにより、クライアントの認証に応じて、異なるレベルのサービスを異なるクライアントに簡単に提供することができる。
【0204】
スペースの永続性、構造、およびトランザクションの拡張のほかに、必要に応じて、他のスペース拡張機能も指定できる。たとえば、通知要素の読み込み、書き込み、または取り出しの機能、通知属性の読み込み、書き込み、または取り出しの機能、および通知イベントの通知メッセージのサブスクライブの機能など、要素または属性のレベルで通知を操作するための拡張機能を備えることもできる。スペースは仮想的にいくつの機能でも提供でき、必要に応じて、基本スキーマおよび拡張スキーマに配列することができる。一実施形態では、すべての基本スペースは通知の読み込み、書き出し、取り込み、およびルックアップの機能、さらにスペース・イベント・サブスクライブの機能を備える必要がある。さまざまなスペース機能を用意できる。いくつかの実施形態では、スペースとのセッションを確立するための機能を備えることができる。このような実施形態では、スペース機能のうちの残りの機能は、これが完了するまでに利用できない。他の実施形態では、セッションという概念がないか、またはオプションであるか、および/または実装に依存する。
【0205】
他のスペース機能として、スペースにサービス通知を追加したり、スペースからサービス通知を削除する機能もある。さらに、XMLドキュメントを追加または削除するスペース機能も用意できる(通知ではなく、おそらくスペース内の結果)。スペース・サービスは、アイテムの追加を許可する前にアイテムの一意性を検査する。たとえば、スペースに追加される各アイテムは、アイテムを識別し、そのアイテムの一意性を検査するために使用できるユーザ指定のストリングと関連付けることができる。
【0206】
一実施形態では、クライアントはスペース内で通知されるすべてのサービスのリスティング、ツリー、またはその他の表現を要求することができる。ユーザは、その後、通知をスクロールまたは操縦して、目的のサービスを選択する。また、スペースはキーワードまたはストリング名を与えることによりクライアントがサービスをサーチできるようにするルックアップ機能も備える。一実施形態では、スペース機能は、スペースに追加されているスペース・エントリをルックアップするためのメカニズムを備える。ルックアップ機能は、名前とマッチするストリング、またはワイルドカード、またはデータベース・クエリでルックアップすることができる。ルックアップ機能は、クライアントが1つ選択できる、またはさらに絞り込みサーチを実行できる複数のエントリを返す。一実施形態では、ルックアップ機能は特定のXMLスキーマとマッチするサービス通知を特定するためのメカニズムを備える。クライアントは、スペース内でサーチ対象となる、特定のXMLスキーマ、または特定のXMLの一部を指定することができる。したがって、インターフェース機能に従ってスペース内でサービスをサーチすることができる。
【0207】
分散コンピューティング環境で提供できるスペース機能としては他に、サービスおよびクライアントがXMLなどの型付けモデルに基づき一時的ドキュメントを見つけられるメカニズムがある。このメカニズムは、汎用の型付けドキュメント・ルックアップ・メカニズムである。一実施形態では、このルックアップ・メカニズムはXMLに基づく。このルックアップ・メカニズムを使用すると、クライアントおよびサービスは、サービス通知を介したサービスを含めて、一般にドキュメントを見つけることができる。
【0208】
一実施形態では、スペース・ルックアップおよび応答メッセージのペアを使用することにより、クライアントおよびサービスがネットワーク一時ドキュメント・ストア(スペース)内に格納されているXMLドキュメントを見つけられるようにできる。スペースは、さまざまなドキュメントを格納するために使用されるドキュメント・スペースである。一実施形態では、ドキュメントはXMLドキュメントまたはXMLでカプセル化された非XMLドキュメントである。スペースについては他のところでさらに詳述する。ルックアップ・メッセージは、サービス通知およびデバイス・ドライバ通知を含む、スペース内に格納されているあらゆる種類のXMLドキュメント上で機能する。一実施形態では、クライアント(他のサービスでもよい)は別のところで説明しているように発見メカニズムを使用して、1つまたは複数のドキュメント・スペースを見つけることができる。その後、クライアントはスペース・ルックアップ・メッセージを使用して、スペース内に格納されているドキュメントを特定することができる。
【0209】
分散コンピューティング環境には、サービスおよびクライアントがXMLドキュメントの発行に関するイベントのサブスクライブおよび受取を行うためのメカニズムが備えられる。イベントは、スペースなどの一時的XMLドキュメント・リポジトリにXMLドキュメントをパブリッシュしたり、そこから除去したりする機能を含むことができる。一実施形態では、イベントは、他のXMLドキュメントを参照するXMLドキュメントである。
【0210】
一実施形態では、スペース・イベント・サブスクライブおよび応答メッセージのペアを使用することにより、クライアントおよびサービスがスペースに追加またはスペースから削除されるドキュメントに関するイベントのサブスクライブを行える。一実施形態では、他のところで説明しているリース・メカニズムを使用して、イベント・サブスクライブをリースすることができる。一実施形態では、リースが取り消されるかまたはその有効期限が切れたときにサブスクライブを取り消すことができる。一実施形態では、サブスクライブ上のリースを更新する際に、サブスクライブを更新できる。
【0211】
一実施形態では、イベント・サブスクライブ・メッセージに、ドキュメント・マッチング・メカニズムとして使用できるXMLスキーマを含めることができる。スキーマとマッチするドキュメントはサブスクライブによって取り扱われる。一実施形態では、スペースに追加され、XMLスキーマとマッチするドキュメントは、スペース・イベント・メッセージを生成する。
【0212】
また、スペースに何かを追加したときやスペースから何かを削除したときにその通知を取得するためクライアントが登録できる(または登録解除できる)スペース機能を提供することができる。スペースは一時的コンテンツを格納することができ、これはスペースに追加されたまたはスペースから削除されたサービスを反映する。たとえば、サービスが利用できるようになったときまたは利用できなくなったときにそのことをクライアントに通知するメカニズムを用意することができる。クライアントは、このような通知を取得するためイベント・サービスに登録することができる。一実施形態では、クライアントは指定されたストリングとマッチする名前または指定されたスキーマ(またはスキーマ部分)とマッチするスキーマを持つサービスをスペースに追加したりスペースから削除したりするときにそのことを通知するように登録することができる。したがって、スペース・イベント通知機能に登録するクエリは、上述のサービス・ルックアップ機能のものと同じであるか類似している。
【0213】
図43は、一実施形態による、分散コンピューティング環境での、サーチ・サービスを使用するスペースのサーチを示す流れ図である。一実施形態では、デバイスのクライアントが、同一のまたは異なるデバイスのサーチ・サービスと対話して、データの格納および/または取出のためのスペース(すなわち、ネットワーク・アクセス可能オブジェクト・リポジトリ)を見つけることができる。この対話の実施形態を、さらに図46aおよび46bに示す。クライアント110は、2000に示されているように、サーチ・サービス2102にサーチ要求を送ることができる。サーチ要求には、スペースからサーチされる1つまたは複数の所望の特性を含めることができる。一実施形態では、サーチ要求が、拡張マークアップ言語(XML)などのデータ表現言語で表現される。一実施形態では、サーチ要求の所望の特性に、1つまたは複数のキーワードを含めることができる。クライアントに、キーワードを受け入れ、それらをサーチ・サービス2102に送るプログラム2100を含めることができる。一実施形態では、キーワードを、XMLメッセージ2106としておよび/または本明細書に記載のゲートを使用して送ることができる。
【0214】
サーチ要求に基づいて、サーチ・サービス2102が、サーチを行うことができる。図46aに示された実施形態では、サーチを行う際に、サーチ・サービス2102が、インターネット・サーチ・エンジンなどのサーチ・エンジン2104と対話することができる。この形で、サーチ・サービスが、クライアントとサーチ・エンジンの間のプロキシとして働くことができる。プロキシは、ウェブ・ブラウザの使用またはサーチ結果のセット全体の受取によるなど、サーチ・エンジンとの対話のためのリソースを有しない小さいデバイスのクライアントに特に望ましい可能性がある。サーチ・エンジンに、ブラウザ・アクセス可能なインターネット・サーチ・エンジンなどの、ネットワーク・アクセス可能なサードパーティ・サーチ・エンジンを含めることができる。図46bに示された実施形態では、サーチ・サービス2102に、サーチ・エンジン2104を含めるか、他の形で密に結合することができる。2002に示されているように、サーチ・サービス2102は、サーチ要求を、データ表現言語(たとえばXML)から、サーチ・エンジン2104によって使用可能なテキスト・フォーマットに変換することができる。2004に示されているように、サーチ・サービス2102は、変換されたサーチ要求をサーチ・エンジン2104に送ることができる。
【0215】
2006に示されているように、サーチをサーチ・エンジン2104によって実行して、サーチ結果を生成することができる。サーチ結果には、たとえば2120a、2120b、および2120cなどの1つまたは複数の結果のスペースの位置(たとえばURI)を含めることができる。一実施形態では、スペースに、インターネット2110を介してアクセス可能な1つまたは複数のウェブ・ページを含めることができる。ウェブ・ページには、ウェブ・ページを分散コンピューティング環境内のスペースとして識別する識別キーワードを含めることができる。サーチ要求に、このキーワードを、スペースについて望まれる特性を記述する1つまたは複数の他のキーワードと共に含めることができる。
【0216】
2008に示されているように、サーチ・サービス2102は、サーチ・エンジン2104からテキスト・フォーマットでサーチ結果を受け取ることができる。2010に示されているように、サーチ・サービス2102は、テキスト・フォーマットのサーチ結果をデータ表現言語(たとえばXML)のサーチ結果に変換し、その結果をクライアント110に送る。一実施形態では、サーチ・サービス2102が、結果のスペース2120a、2120b、および2120cのそれぞれに関するサービス通知を得ることができる。各サービス通知に、めいめいのスペースにアクセスするのに使用可能な情報が含まれる。サーチ・サービス2102は、これらの通知への参照(たとえばUniform Resource Identifier)または通知自体をサーチ結果として送って、2012に示されているように、クライアントが、めいめいの位置の結果のスペースにアクセスできるようにする。一実施形態では、結果位置のスペースに、Uniform Resource Identifier(URI)が含まれる。
【0217】
一実施形態では、サーチ結果をクライアント110に送る際に、サーチ・サービス2102が、サーチ結果を結果のスペース(すなわち、ネットワーク・アクセス可能なストレージ・リポジトリ)に格納し、その結果スペースのアドレスをクライアント110に送ることができる。クライアント110は、適当な時に、結果スペース内のサーチ結果にアクセスすることができる。結果スペースの使用は、結果のセット全体を受け取って表示するリソースを有しない小さいクライアントに特に望ましい。この情況では、一実施形態によれば、ユーザが、異なるクライアントを使用して結果スペースから結果を読み取ることができる。
【0218】
いくつかの実施形態では、サーチ・サービスが、サーチ・サービスを介して見つけることができるスペースを制限またはフィルタリングするか、分散コンピューティング環境内の少数のサポートされるスペースだけをサーチするようにクライアントを制限することができる。許可されるサーチの範囲は、クライアント認証に従って決定することができる。
【0219】
図47は、一実施形態の分散コンピューティング環境での、スペース内のドキュメントのサーチを示す流れ図である。一実施形態では、クライアントが、サーチメッセージを介してスペースと対話して、スペース内のドキュメントを見つけることができる。2200に示されているように、クライアントは、ルックアップ・メッセージをスペースに送ることができる。スペースには、1つまたは複数のドキュメントを格納するために動作可能であるネットワーク・アドレッシング可能記憶場所を含めることができる。格納されたドキュメントは、拡張マークアップ言語(XML)などのデータ表現言語で表現することができる。ルックアップ・メッセージが格納されたドキュメントの所望の特性を指定することができる。一実施形態では、ドキュメントに、XMLサービス通知およびXMLデバイス通知ならびに汎用XMLドキュメントを含めることができる。たとえば、スペース内のXMLドキュメントに、XMLで表現された、サービスの結果を含めることができる。
【0220】
2202に示されているように、ルックアップ・メッセージにマッチするドキュメントのセットを発見することができる。発見されるドキュメントには、ルックアップ・メッセージで指定された所望の特性にマッチするすべての格納されたドキュメントを含めることができる。0個以上の格納されたドキュメントが、所望の特性にマッチする可能性がある。一実施形態では、ルックアップ・メッセージに所望の名前を含めることができる。一実施形態では、ルックアップ・メッセージで指定された所望の名前に、1つまたは複数のワイルドカードを含めることができる。発見されるドキュメントのそれぞれが、所望の名前とマッチする名前を有することができ、名前によって、スペース内で発見されたドキュメントを識別することができる。一実施形態では、ルックアップ・メッセージに、データ表現言語で表現された所望のスキーマを含めることができる。発見されるドキュメントのそれぞれが、所望のスキーマとマッチするスキーマまたはスキーマの一部を有することができる。一実施形態では、ルックアップ・メッセージに、所望の名前および所望のスキーマの両方を含めることができる。この場合には、発見されるドキュメントのセットに、所望の名前とマッチする名前を有する発見されたドキュメントと、所望のスキーマとマッチするスキーマを有する発見されたドキュメントの両方を含めることができる。一実施形態では、ルックアップ・メッセージに、所望の名前も所望のスキーマも含めないことができる。この場合には、ルックアップ・メッセージは、本質的に、スペース内のすべてのドキュメントに関する要求であり、発見されるドキュメントのセットに、スペースに格納されたドキュメントの実質的にすべてを含めることができる。
【0221】
マッチするドキュメントが見つかった後に、2204に示されているように、スペースが、クライアントにサーチ応答メッセージを送ることができる。一実施形態では、サーチ応答メッセージに、発見されたドキュメントの名前を含めることができる。一実施形態では、サーチ応答メッセージに、0個以上の発見されたドキュメントのそれぞれに関する通知メッセージを含めることができる。各通知に、めいめいの発見されたドキュメントを得るか、ドキュメントが通知するリソース(たとえばサービス)にアクセスするために、クライアントによって使用可能な情報を含めることができる。一実施形態では、各通知に、めいめいの発見されたドキュメント(または、ドキュメントによって通知される、サービスなどのリソース)にアクセス可能である場所のUniform Resource Identifier(URI)を含めることができる。一実施形態では、発見されるドキュメントの少なくとも1つを、サービスに関する通知とすることができる。サービスに関する通知に、スキーマを含めることができ、このスキーマによって、サービスの1つまたは複数の関数を呼び出すのに使用可能な1つまたは複数のメッセージが指定される。通知は、XMLなどのデータ表現言語で表現することができる。
【0222】
一実施形態では、ルックアップ・メッセージおよびサーチ応答メッセージが、XMLなどのデータ表現言語で表現される。スペースに関するスキーマで、ルックアップ・メッセージおよびサーチ応答メッセージの形式を指定することができる。一実施形態では、このメッセージの対を、下記のようにXMLで表現することができる。
ルックアップ・メッセージ
サーチ応答メッセージ
【0223】
XMLルックアップ・メッセージでは、「名前」を、ストリング値とすることができ、名前によって、スペース内の一意の識別子を指定することができる。ワイルドカードが使用される場合には、識別子が、一意でない場合がある。「AdvSchema」は、ルックアップがマッチすると期待されるスキーマである。一実施形態では、両方のフィールドが任意選択である。XMLルックアップ応答メッセージでは、「Adv」が、0個以上のマッチする通知のグループであり、「Names」が、通知に対応する名前のグループである。
【0224】
図48は、一実施形態による、分散コンピューティング環境での、スペース内に格納された通知を使用する、サービスのアドレッシングを示す流れ図である。一実施形態では、2300に示されているように、サービスが、スペース内でサービス通知をパブリッシュすることができる。スペースは、拡張マークアップ言語(XML)ドキュメントなどのドキュメントが格納されるネットワーク・アドレッシング可能記憶場所とすることができる。通知のパブリッシュは、この詳細な説明の他所で詳細に説明する。一実施形態では、通知に、サービスのUniform Resource Identifier(URI)およびスキーマを含めることができる。URIでは、サービスにアクセスできるネットワーク・アドレスを指定することができ、スキーマでは、サービスの1つまたは複数の関数を呼び出すのに使用可能である1つまたは複数のメッセージを指定することができる。一実施形態では、スキーマおよびメッセージを、XMLなどのデータ表現言語で表現することができる。2302に示されているように、クライアントは、スペースにアクセスし、通知を見つけることができる。たとえば、クライアントは、発見サービスを使用してスペースを見つけ、その後、図47に示されたものなどのルックアップ・サービスを使用して、スペース内の通知を見つけることができる。
【0225】
一実施形態では、通知に、特定のサービスにアクセスするためにクライアントが必要とする情報の実質的にすべてが含まれる。2304に示されているように、クライアントは、スペースから通知を読み取ることができる。一実施形態では、クライアントは、通知内のURIおよびスキーマを使用して、サービスにアクセスするためのゲートを構築することができる。2305に示されているように、クライアントは、URIにあるサービスにスキーマで指定された第1のメッセージを送って、サービスの1つまたは複数の関数を呼び出すことができる。それに応答して、2308に示されているように、サービスの関数を呼び出すことができる。一実施形態では、サービスが、第2のメッセージ(たとえば、呼び出された関数の結果を含むメッセージ)をクライアントに送ることができ、この第2のメッセージは、そのサービスのスキーマで指定されたものである。
【0226】
スペースのクライアントが、XMLドキュメント(たとえばサービス通知)がスペースに追加または除去される時に通報されるように契約する時に、そのクライアントは、通報のためのこの契約に対するリースを得ることができる。リースを用いて、スペース・サービスが、特定のクライアントへの通報の発送を継続するかどうかを知ることができる。たとえば、通知機能に対するリースは、更新されない場合に、ある時間の後に満了するようにすることができる。クライアントがスペースとのアクティブ・セッションを確立している間は、リースが不要である可能性があることに留意されたい。クライアントは、スペースとのアクティブ・セッションを切断した後に、対応するリースがアクティブのままである限り、そのイベント契約に従ってイベント通報の受取を継続することができる。下のリースの節を参照されたい。
【0227】
クライアントは、異なる型のイベントに対して契約することができる。例は、上で説明したように、スペースに追加または除去されるサービス通知である。クライアントは、クライアント(またはほかの誰か)によって開始されたサービスからの結果がスペースに置かれる時にも通報を受けることができる。たとえば、クライアントとサービスが、サービスの結果を参照する名前を相互に選択することができる。クライアントは、選択された名前によって参照される結果がスペースに追加される時にイベントを受け取るために、結果がポストまたは通知されるスペース・サービスに登録することができる。
【0228】
スペースは、クライアントが契約することができる異なる型のイベントを生成することができる。スペース変更の合成物として、イベントを、そのようなイベントについて契約したクライアントおよびサービスに対して作ることができる。一実施形態では、2つの主なスペース・イベント・カテゴリすなわち、スペースに関するカテゴリ(通知の挿入および除去)と、通知に対する変更を示すのに使用されるカテゴリ(要素または属性の追加、除去、変更)を設けることができる。どのイベントがサポートされるかは、スペースのXMLメッセージ・スキーマで示すことができる。
【0229】
下記のイベントは、スペース・イベントまたは通知イベントを示すためにスペース・サービスによって作られる可能性があるイベントの例である。
【0230】
【表1】
【0231】
イベントは型付けされる。いくつかの実施形態では、スペースによってサポートされるイベント機能を使用すると、イベント・リスナーがたとえば、Javaクラス(またはXMLの型)階層を利用することができる。たとえば、AdvElementEventが発生するのを待つことで、リスナーは型AdvElementEventおよびそのサブクラス(XML型)のすべてのイベントを受け取る。したがって、この例では、要素変更に関係するすべてのイベントは(通知の挿入および削除はないが)、受取される。
【0232】
他の例では、トップレベルのイベント・クラスまたは型、たとえば、SpaceEventのサブスクライブまたは待機する際に、すべてのスペース・イベントが受取される。イベント・クラスの型は、たとえば、Javaのinstance of演算子またはXML型付けシステムを介して区別することができる。
【0233】
イベントには、影響を受ける通知または要素へのURIが含まれる。たとえば、AdvertisementEventおよびそのすべてのサブクラスは影響を受ける通知への参照(たとえば、URIまたはURL)を含む。AdvElementEventおよびそのサブクラスは、影響を受ける要素の名前について調査することができる。たとえば、前の要素値(URIまたはURL)は、AdvElementRemoveEventおよびAdvElementValueChangeEventから利用することができる。
【0234】
一実施形態のスペース・イベントの型階層を図21に示した。型は、XMLで定義し、JavaやC++などの他の適当なオブジェクト指向言語で使用することができる。
【0235】
スペースは、クライアントがスペース内で通知されたサービスをインスタンス化する機能を備える。サービスのインスタンス化は、クライアントがサービスを実行できるよう行われる初期化である。サービスのインスタンス化の一実施形態を図22に示す。サービスをインスタンス化するために、クライアントはまず、320で示されているように、スペース内でパブリッシュされたサービス通知のうちから1つ選択する。クライアントは、スペースに用意されているルックアップ機能などのさまざまな機能を使用して、スペース内のさまざまな通知をルックアップすることができる。次に、クライアントは、322に示されているように、スペースに対しサービスのインスタンス化を要求する。
【0236】
一実施形態では、サービス・インスタンス化は、以下の操作を含む。クライアントがスペース・サービスに対し選択されたサービスのインスタンス化を要求した後、322に示されているように、スペース・サービスは、324に示されているように、クライアントが要求されたサービスをインスタンス化できることを確認する。スペース・サービスは、クライアントのメッセージに含まれる認証証明書を調べることによりこの確認を実行する。認証証明書は、スペース・サービスとのセッションを確立したときにクライアントが受け取る証明書である。スペース・サービスは、クライアントがそのクライアントに指示されているクライアントの認証証明書および能力に応じて要求されたサービスをインスタンス化できるかどうかを検証する。以下の「認証とセキュリティ」の項を参照のこと。
【0237】
クライアントが承認されていると仮定すると、スペース・サービスはさらに、326に示されているように、クライアントによって指定されているリース要求時間でクライアントに対するサービス通知のリースを取得することができる。リースについては以下で詳述する。スペース・サービスは、328に示されているように、割り当てられたリースとサービスのサービス通知を含むメッセージをクライアントに送る。一実施形態では、クライアントはサービス通知で指定された認証サービスを実行し、330で示されているように、認証証明書を取得する。認証サービスの詳細については、「認証とセキュリティ」の項を参照のこと。次に、332で示されているように、クライアントはサービスのためにゲートを構築する(たとえば、認証証明書と通知からのXMLスキーマおよびサービスURIを使用する)。「ゲート」の項を参照のこと。クライアントとスペース・サービスとの上述の通信は、分散コンピューティング環境のXMLメッセージングを使用して実行される。その後、クライアントは、構築されたゲートとXMLメッセージングを使用してサービスを実行する。サービスは、同様に、XMLメッセージによるクライアントとの通信用にサービス・ゲートを構築する。
【0238】
まとめとして、スペースの使用例を以下で説明する。クライアントは、スペース・サービスにアクセス(たとえば、接続)することができる。(サービスは、スペースにアクセスするかまたはその他の方法でスペースを使用するためにクライアントとして機能する。)スペース・サービスは、1つまたは複数のサービス通知および/またはその他のコンテンツス・ペース内に格納し、サービス通知のそれぞれが、対応するサービスにアクセスし、実行するために使用できる情報含む。スペース・サービスは、スペース・サービスの機能を呼び出すために使用できる1つまたは複数のメッセージを指定するスキーマを備えることができる。たとえば、スキーマはスペースから通知を読み込み、スペース内で通知をパブリッシュするメソッドを指定できる。スキーマおよびサービス通知は、拡張可能マークアップ言語(XML)などのオブジェクトを表現言語で表すことができる。スペース・サービスにアクセスする場合、クライアントはXMLメッセージ(スキーマで指定されている)などの情報をインターネット・アドレスにあるスペース・サービスに送る。スペース・サービスにアクセスする際に、クライアントはスペースに格納されている1つまたは複数のをサービス通知をサーチする。クライアントは、スペースからサービス通知の1つを選択できる。一実施形態では、クライアントは、スペースから目的のサービス通知を選択した後インスタンス化要求をスペースに送る。目的のサービスに対するリースを取得し、リースおよびスペース・サービスによって、選択されたサービス通知をクライアントに送る。その後、クライアントは目的のサービスに対するアクセスのためのゲートを構築する。目的のサービスをクライアントのために実行できる。
【0239】
スペース・サービスによって提供される機能としてはほかに、空のスペースの生成または作成の機能がある。このスペース機能を使用する際に、クライアント(他のクライアントへのサービスであってもよい)は新しいスペースを動的に作成することができる。一実施形態では、このスペース機能は、生成元のスペースと同じ機能(同じXMLスキーマまたは拡張スキーマ)を持つ空のスペースを生成するインターフェースを備えることができる。この機能は、結果に対しスペースを(たとえば、動的に)生成する場合に使用できる。たとえば、クライアントは、サービスで結果を生成されたスペースに置くかまたは結果を生成されたスペースで通知するよう要求するスペースを生成することができる。クライアントは、生成されたスペースのURIおよび/または認証証明書をサービスに渡す。または、サービスは、結果に対しスペースを生成し、生成されたスペースのURIおよび/または認証証明書をクライアントに渡す。いくつかの実施形態では、スペースがいったん生成されると、他のスペースと同様に、ここで説明したスペースを発見メカニズムのうち1つまたは複数を使用して発見することができる。
【0240】
他のスペース内のインターフェースを介してスペースを作成するメカニズム(たとえば、スペース生成機能)を使用して、新しいスペースを効率よく作成することができる。たとえば、一実施形態では、格納用の元のスペースで使用しているのと同じ機能を使用して、生成されたスペース用の記憶域を割り当てることができる。また、生成されたスペースは共通サービス機能を元の(または親の)スペースと共有することができる。たとえば、新しいURIを新しいスペースに割り当てることができる。一実施形態では、新しいURIは元のスペースと共有される共通スペース機能へのリダイレクションとすることができる。したがって、新しく生成されたスペースは元のスペースと同じサービス・コードまたはその一部を使用することができる。
【0241】
スペース機能はさらに、たとえば、スペースのさまざまなセキュリティ・ポリシーおよびその他の管理機能を更新するためのセキュリティ管理機能を備える。たとえば、通知の個数および経過時間を、ルート・スペース・サービスにより制御し監視することができる。旧い通知を収集して処分することができる。たとえば、通知を旧いとみなすことができる場合については「リース」の項を参照のこと。スペースを実装するサービスは管理者の制御の下にある。管理者は、サービスに依存する形でポリシーを設定することができる。スペースで機能はさらに、空のスペースを削除する機能を備える。
【0242】
いくつかのスペースでは、モバイル・クライアントなどのある種のクライアントの拡散をさらにサポートする機能またはサービスを備えることができる。たとえば、モバイル・クライアントが発見プロトコルなどにより発見できるスペース内のサービスは、モバイル・クライアントに対し次のようにサポートする
・ クライアントに対し一時的ネットワーク・アドレスを割り当て管理する。
・ クライアントに対しメッセージ通信をプロキシに通す。
・ 追加スペースに対しサーチ機能を用意する。たとえば、サービスにより、クライアントは単純なインターフェースを介してキーワードを指定することができる。その後サービスは、ここで詳述しているように、Webサーチ・エンジンでそのキーワードを使用して、Web上でスペースをサーチする。他の実施形態では、サーチ・サービスは、クライアントを分散コンピューティング環境内でごく少数のサポートされているスペースをサーチすることに制約する。
【0243】
前に述べたように(図9および付属の文章を参照)、スペースはクライアントによって実行されるサービスからの結果を格納する便利なメカニズムを提供する。結果にスペースを使用する際に、小型クライアントはサービスを実行した結果をバラバラにして受け取ることができる。いくつかのサービスでは、大量の結果が生成されることがある。スペースを使用してサービスからな結果を格納することにより、一度に全部の結果を受け取るだけのリソースがないクライアントでもそのサービスを使用することができる。さらに、スペースを使用して結果を格納することにより、大量の結果が返されるときに高速な使用中サーバ上で実行されているサービスを低速なクライアントとの直接的な対話操作から解放することができる。したがって、サービスをすぐに解放することができ、他のクライアントで使用できる。
【0244】
スペースは、異なるクライアントにより、かつ/または異なるときに、結果にアクセスするための便利なメカニズムを備える。たとえば、クライアントは結果をまるごとは使用できない場合があるが、ユーザはその結果にアクセスできる他のクライアントを後で使用してその結果の残り部分にアクセスすることを望む。たとえば、結果には、株式市況や、現在の株価の表示(PDAからアクセス可能)、および株価チャートの表示(後でラップトップからアクセス可能)などがある。また、結果に対し分散コンピューティング環境でスペースを使用すると、クライアントは一方のサービスの結果を他方のサービスに供給することができ、しかも、結果を最初にダウンロードする必要がない。たとえば、上の株式市況の場合、PDAはチャートを他のサービスに送り、そこでチャートを印刷することができ、PDAでチャート自体をダウンロードする必要はない。したがって、結果スペースは、クライアントが結果を処理または受け取らずに、他のクライアントまたはサービスに渡すためのメカニズムを提供する。
【0245】
異なる実施形態では、結果に対しスペースを使用する決定は、サービスによって命じられるか、クライアントによって命じられるか、および/またはクライアントによって要求される。サービスは、たとえば、その通知で、結果に対しスペースを使用することを提案することがある。一実施形態では、クライアントまたはサービスのいずれかが結果に対する新しいスペースを生成するか、または結果に対し既存のスペースを使用することができる。スペースの生成に関する説明を参照のこと。
【0246】
一実施形態では、結果に対しスペースを使用しても、必ずしも、サービスがすべての結果をそのスペースに入れる必要があるわけではない。サービスが生成する結果に対し代替えもありうる。たとえば、結果の一部または全部をメッセージによりインラインでクライアントに送ることができる。それとは別に、結果をスペースに入れ、その後、通知メッセージをクライアントに送り、結果を参照するようにできる(たとえば、結果へのURIや結果の通知へのURIを含める)。他のオプションとして、結果をスペースに入れ、スペースからのイベントにより通知を送る方法もある。たとえば、クライアントおよびサービスは何らかの特定の名前で結果を呼び出し、クライアントはそのように名前を付けられた結果をスペースに追加するときにイベントを受け取るため(上記のものなどのスペース機能を使用して)スペースに登録することができる。イベント通知に関する上の説明を参照のこと。
【0247】
したがって、サービスが結果をクライアントに返すいくつかの異なるメカニズムを分散コンピューティング環境内で使用することができる。実際の結果をXMLメッセージ内の値でクライアントに返すか、または結果をスペースに置かれている実際の値(または、実際の結果に対する通知)による参照でクライアントに返され、クライアントはスペース内の結果を参照しているメッセージを受け取る。さらに、結果または結果通知をスペース内に置き、イベントでクライアントに通知できる。
【0248】
結果を処理する他のメカニズムでは、クライアントが供給する結果に対し他のサービスを指定する。たとえば、クライアントは、結果を出力するサービスを実行する場合、そのサービスに(たとえば、XMLメッセージングを介して)、結果を他のサービスに送ってさらに処理するよう指示することができる。これには、他のサービスを実行して結果を渡すために、クライアントが他のサービスに通知のURIを指示し、結果出力サービスが他のサービスへのゲートを生成するようにする必要がある。この例では、結果出力サービスは他のサービスのクライアントでよい。いくつかの実施形態では、クライアントはスキーマまたは事前構築されたゲートを結果出力サービスに送り、サービスにアクセスしてさらに処理する。さらに処理するサービスの例として、元のクライアントの結果を表示することができる表示サービスがある。この表示サービスは、クライアントと同じデバイスにあるか、またはそのようなデバイスと関連付けられる。
【0249】
図41は、1実施形態による分散コンピューティング環境での新しいスペースの作成を示す流れ図である。1900に示されているように、クライアントは、第1スペース・サービスにアクセス(すなわち接続)することができる(サービスは、スペースへのアクセスまたは他の使用のためにクライアントとして働くことができる)。第1スペース・サービスは、1つまたは複数のサービス通知および/または他のコンテンツを第1スペースに格納することができ、サービス通知のそれぞれに、対応するサービスへのアクセスおよび実行に使用可能な情報を含めることができる。第1スペース・サービスに、第1スペース・サービスの関数を呼び出すのに使用可能な1つまたは複数のメッセージを指定する第1スキーマを含めることができる。たとえば、第1スキーマによって、第1スペースから通知を読み取るメソッド、および第1スペースで通知をパブリッシュするメソッドを指定することができる。第1スキーマおよびサービス通知は、拡張マークアップ言語(XML)などのオブジェクト表現言語で表現することができる。第1スペース・サービスにアクセスする際に、クライアントは、XMLメッセージなどの情報(第1スキーマで指定される)を、第1インターネット・アドレス(たとえばURI)にある第1スペース・サービスに送ることができる。第1スペース・サービスにアクセスする際に、クライアントが、第1スペースに格納された1つまたは複数のサービス通知をサーチすることができる。
【0250】
1実施形態では、スペースに、新しいスペースを作成する機能を含めることができる。1902に示されているように、クライアントが第1スペースのインターフェースに適当な要求を送ることによるなど、第2スペースの作成を要求することができる。1実施形態では、要求を、第1スペースの第1スキーマに従うXMLメッセージとしてフォーマットすることができる。1904に示されているように、それに応答して、第2スペースを有する第2スペース・サービスを、第2インターネット・アドレス(たとえばURI)などで、作成することができる。上と同様に、第2スペース・サービスに、第2スペース・サービスの関数を呼び出すのに使用可能な1つまたは複数のメッセージを指定する第2スキーマを含めることができる。第2スキーマに少なくとも第1スキーマを含めることができ、第2スキーマに追加の機能性も含めることができる。1実施形態では、第2スペースのスキーマに第1スキーマの一部を含めることができ、あるいは、第2スキーマを第2スペースの作成の時点で指定することができる。1906に示されているように、クライアントは、第2スキーマで指定されるメッセージの少なくとも1つを第2スペースに送ることによって、第2スペースにアクセスすることができる。
【0251】
スペースの作成に、セキュリティに関するものなどの管理初期化を含めることができる。1実施形態では、要求する側がスペースを作成した時に、当初は、要求する側だけが、作成されたスペースへのアクセスを許可される。そのような作成されたスペースへのアクセスの制限は、クライアントおよびサービスがその作成されたスペースを使用して結果を格納する時に有用になるであろう。作成されたスペースの認証およびセキュリティに関する情報については、「認証およびセキュリティ」の節を参照されたい。クライアントは、新しいスペースを作成した後に、作成されたスペースにアクセスするゲートを構築することができる。
【0252】
したがって、さまざまな実施形態で、結果を、複数の方法で、たとえば、メッセージ内で、スペース内で、クライアントがイベントを介して通報されるスペース内で、メッセージ内で返される通知を使用して、スペース内で返される通知を使用して、およびクライアントがイベントを介して通報されるスペース内で返される通知を使用して、クライアントに返すことができる。結果を返すこのさまざまな方法を、図44aから44gに示す。この複数の方法の使用可能性によって、異なる機能を有するクライアントに関するものなどのさまざまな情況に関する分散コンピューティング環境の柔軟性および適応性を強化することができる。追加の柔軟性について、図45に示されているように、結果を、別のサービスに効率的に渡すこともできる。
【0253】
図44aは、1実施形態による分散コンピューティング環境での、サービスの結果をスペースに格納する方法を示す流れ図である。2050に示されているように、クライアントは、第1メッセージをサービスに送って、サービスの1つまたは複数の関数の呼出しを要求することができる。サービスのスキーマによって、第1メッセージを含む、サービスの関数を呼び出すのに使用可能な、複数のメッセージを指定することができる。メッセージおよびスキーマは、XMLなどの、プラットフォーム独立および/またはプログラミング言語独立のデータ表現言語で表現することができる。
【0254】
2052に示されているように、第1メッセージに応答して、サービスの1つまたは複数の関数を呼び出すことができる。2054に示されているように、サービスが、結果のセットを生成することができる。結果は、データ表現言語(たとえばXML)で表現することができる。2056に示されているように、サービスは、結果のセットをスペース内のロケーションに格納することができ、このスペースには、ネットワーク・アドレッシング可能なストレージ位置が含まれる。1実施形態では、結果のセットの格納の準備としてスペースを作成することができる。
【0255】
2058に示されているように、クライアントは、スペースから結果のセットにアクセスし、読み取ることができる。1実施形態では、第2のクライアント(すなわち、関数を呼び出すメッセージを送ったクライアントと異なるクライアント)が、スペースから結果のセットを読み取ることができる。この形で、第1のクライアントが結果の読取および表示などの作業を達成するのに十分なリソースを有しない可能性がある時に、ユーザが、第2のクライアントを使用して結果を読み取り、表示することができる。1実施形態では、クライアントが、サービスが結果のセットのアドレスを第2サービスに渡すことを要求するメッセージをサービスに送ることができ、その結果、第2サービスが、スペース内のアドレスから結果のセットを読み取ることができるようになる。第2メッセージに、第2サービスの通知のUniform Resource Identifier(URI)を含めることができ、この第2サービスの通知には、第2サービスにアクセスするのに使用可能な情報が含まれる。この形で、結果を、クライアントに渡さずに、第1サービスから第2サービスに効率的に渡すことができる。
【0256】
図44bは、1実施形態による、サービスの結果をスペース内に格納し、イベントを使用してクライアントに通報する方法を示す流れ図である。2050に示されているように、クライアントが、第1メッセージをサービスに送って、サービスの1つまたは複数の関数の呼出しを要求することができる。2052に示されているように、第1メッセージに応答して、サービスの1つまたは複数の関数を呼び出すことができる。2054に示されているように、サービスが、結果のセットを生成することができる。結果は、データ表現言語(たとえばXML)で表現することができる。2056に示されているように、サービスは、結果のセットをスペース内のロケーションに格納することができ、スペースに、ネットワーク・アドレッシング可能なストレージ位置が含まれる。2057に示されているように、イベントを生成し、クライアントに送って、結果がスペース内に格納されていることをクライアントに通報することができる。2058に示されているように、クライアントは、イベントに応答して、スペースから結果のセットにアクセスし、読み取ることができる。
【0257】
図44cは、1実施形態による、サービスの結果をメッセージ内でクライアントに送る方法を示す流れ図である。2050に示されているように、クライアントは、第1メッセージをサービスに送って、サービスの1つまたは複数の関数の呼出しを要求することができる。2052に示されているように、第1メッセージに応答して、サービスの1つまたは複数の機能を呼び出すことができる。2054に示されているように、サービスが、結果のセットを生成することができる。結果は、データ表現言語(たとえばXML)で表現することができる。2055に示されているように、サービスは、結果を含むメッセージをクライアントに送ることができる。メッセージは、データ表現言語(たとえばXML)で表現することができ、1実施形態では、サービスのスキーマで指定することができる。
【0258】
図44dは、1実施形態による、通知を使用してサービスの結果を返す方法を示す流れ図である。2050に示されているように、クライアントが、第1メッセージをサービスに送って、サービスの1つまたは複数の関数の呼出しを要求することができる。2052に示されているように、第1メッセージに応答して、サービスの1つまたは複数の機能を呼び出すことができる。2054に示されているように、サービスが、結果のセットを生成することができる。結果は、データ表現言語(たとえばXML)で表現することができる。1実施形態では、サービスが、結果のセットをスペース内のロケーションに格納することができ、このスペースには、ネットワーク・アドレッシング可能なストレージ位置が含まれる。2060に示されているように、サービスが、結果に関する通知を生成することができる。通知には、スペースからなど、結果にアクセスし読み取るのに使用可能な情報を含めることができる。たとえば、通知に、結果にアクセスできる場所のUniform Resource Identifier(URI)を含めることができる。1実施形態では、通知に、結果のフォーマットを指定するスキーマ(たとえばXMLスキーマ)を含めることができる。1実施形態では、通知を、XMLなどのデータ表現言語で表現することができる。2068に示されているように、クライアントは、通知を使用することによって、結果のセットにアクセスし、読み取ることができる。1実施形態では、第2のクライアント(すなわち、関数を呼び出すメッセージを送ったクライアントと異なるクライアント)が、通知を使用することによって結果のセットを読み取ることができる。
【0259】
図44eは、1実施形態による、メッセージ内でクライアントに送られる通知を使用してサービスの結果を返す方法を示す流れ図である。2050に示されているように、クライアントが、第1メッセージをサービスに送って、サービスの1つまたは複数の関数の呼出しを要求することができる。2052に示されているように、第1メッセージに応答して、サービスの1つまたは複数の機能を呼び出すことができる。2054に示されているように、サービスが、結果のセットを生成することができる。結果は、データ表現言語(たとえばXML)で表現することができる。1実施形態では、サービスが、結果のセットをスペース内のロケーションに格納することができ、このスペースには、ネットワーク・アドレッシング可能なストレージ位置が含まれる。2060に示されているように、サービスが、結果に関する通知を生成することができる。通知には、スペースからなど、結果にアクセスし読み取るのに使用可能な情報を含めることができる。たとえば、通知に、結果にアクセスできる場所のUniform Resource Identifier(URI)を含めることができる。1実施形態では、通知に、結果のフォーマットを指定するスキーマ(たとえばXMLスキーマ)を含めることができる。1実施形態では、通知を、XMLなどのデータ表現言語で表現することができる。2061に示されているように、サービスが、通知を含むメッセージをクライアントに送ることができる。メッセージは、データ表現言語(たとえばXML)で表現することができ、1実施形態では、サービスのスキーマで指定することができる。2068に示されているように、クライアントは、通知を使用することによって、結果のセットにアクセスし、読み取ることができる。
【0260】
図44fは、1実施形態による、スペースに格納された通知を使用してサービスの結果を返す方法を示す流れ図である。2050に示されているように、クライアントが、第1メッセージをサービスに送って、サービスの1つまたは複数の関数の呼出しを要求することができる。2052に示されているように、第1メッセージに応答して、サービスの1つまたは複数の機能を呼び出すことができる。2054に示されているように、サービスが、結果のセットを生成することができる。結果は、データ表現言語(たとえばXML)で表現することができる。1実施形態では、サービスが、結果のセットをスペース内のロケーションに格納することができ、このスペースには、ネットワーク・アドレッシング可能なストレージ位置が含まれる。2056に示されているように、サービスは、結果のセットをスペース内のロケーションに格納することができ、スペースに、ネットワーク・アドレッシング可能なストレージ位置が含まれる。2060に示されているように、サービスが、結果に関する通知を生成することができる。通知には、スペースからなど、結果にアクセスし読み取るのに使用可能な情報を含めることができる。たとえば、通知に、結果にアクセスできる場所のUniform Resource Identifier(URI)を含めることができる。1実施形態では、通知に、結果のフォーマットを指定するスキーマ(たとえばXMLスキーマ)を含めることができる。1実施形態では、通知を、XMLなどのデータ表現言語で表現することができる。2062に示されているように、通知を、スペースに格納することができる。スペースは、2056で結果が格納されたスペースと同一のまたは異なるスペースとすることができる。2066に示されているように、クライアントは、スペースから通知を読み取ることができる。1実施形態では、第2のクライアント(すなわち、関数を呼び出すメッセージを送ったクライアントと異なるクライアント)が、スペースから通知を読み取ることができる。2068に示されているように、クライアントは、通知を使用することによって、結果のセットにアクセスし、読み取ることができる。
【0261】
図44gは、1実施形態による、スペースに格納された通知と、イベントを使用することによるクライアントへの通報とを使用してサービスの結果を返す方法を示す流れ図である。2050に示されているように、クライアントが、第1メッセージをサービスに送って、サービスの1つまたは複数の関数の呼出しを要求することができる。2052に示されているように、第1メッセージに応答して、サービスの1つまたは複数の機能を呼び出すことができる。2054に示されているように、サービスが、結果のセットを生成することができる。結果は、データ表現言語(たとえばXML)で表現することができる。1実施形態では、サービスが、結果のセットをスペース内のロケーションに格納することができ、このスペースには、ネットワーク・アドレッシング可能なストレージ位置が含まれる。2056に示されているように、サービスは、結果のセットをスペース内のロケーションに格納することができ、スペースに、ネットワーク・アドレッシング可能なストレージ位置が含まれる。2060に示されているように、サービスが、結果に関する通知を生成することができる。通知には、スペースからなど、結果にアクセスし読み取るのに使用可能な情報を含めることができる。たとえば、通知に、結果にアクセスできる場所のUniform Resource Identifier(URI)を含めることができる。1実施形態では、通知に、結果のフォーマットを指定するスキーマ(たとえばXMLスキーマ)を含めることができる。1実施形態では、通知を、XMLなどのデータ表現言語で表現することができる。2062に示されているように、通知を、スペースに格納することができる。スペースは、2056で結果が格納されたスペースと同一のまたは異なるスペースとすることができる。2064に示されているように、イベントを生成し、クライアントに送って、結果に関する通知がスペースに格納されていることをクライアントに通報することができる。2066に示されているように、クライアントは、スペースから通知を読み取ることができる。2068に示されているように、クライアントは、通知を使用することによって、スペースから結果のセットにアクセスし、読み取ることができる。
【0262】
図45は、1実施形態による、分散コンピューティング環境での、あるサービスの結果を別のサービスに送る方法を示す流れ図である。2070に示されているように、クライアントが、第1メッセージを第1サービスに送って、サービスの1つまたは複数の関数の呼出しを要求し、関数の結果を第2サービスに渡すことを要求することができる。第1サービスのスキーマによって、第1メッセージを含む、第1サービスの関数を呼び出すのに使用可能な複数のメッセージを指定することができる。メッセージおよびスキーマは、XMLなどのプラットフォーム独立のデータ表現言語で表現することができる。1実施形態では、第1メッセージに、第2サービスの通知のUniform Resource Identifier(URI)を含めることができ、第2サービスの通知には、第2サービスへのアクセスに使用可能な情報が含まれる。
【0263】
2072に示されているように、第1メッセージに応答して、第1サービスの関数を呼び出すことができる。2074に示されているように、第1サービスが、結果のセットを生成することができる。結果は、データ表現言語(たとえばXML)で表現することができる。2076に示されているように、第1サービスは、結果をクライアントに直接に送らずに、メッセージ内で結果を第2サービスに送ることができる。この形で、結果を、クライアントに渡さずに、第1サービスから第2サービスに効率的に渡すことができる。
【0264】
結果スペースおよびメソッド・ゲートにより、分散コンピューティング環境では、メモリが最低限しかなく、帯域幅の非常に狭い、シン・クライアントにとって実用的な単純なリモート・メソッド呼び出しを提供することができるが、それは、従来のリモート・メソッドを呼び出し手法のように巨大なプログラム・オブジェクトが(必要なクラスとともに)ネットワーク上で(必ず)クライアントに返される困った副作用がないからである。その代わり、結果は、結果スペースに返すことができ、必要な場合のみ(そして、クライアントに常駐できる場合)、クライアントにダウンロードされる実際のオブジェクトである。
【0265】
分散コンピューティング環境がリモート・メソッドを呼び出すため備えているメカニズムは以下のとおりである(「ゲート」の項のメソッド・ゲートの説明も参照のこと)。スペース内でオブジェクトを通知することができる(たとえば、サービスとして、またはサービスの一部として)。通知は、オブジェクトのURI(たとえば、URL)をセキュリティ証明書およびXMLスキーマなどの他のアクセス・パラメータとともに含む参照を含む。クライアントは、オブジェクトに対しクライアント・メソッド・ゲートを設定しているか、または構築し、これは、オブジェクト(またはサービス)自体のすべてのメソッドについて、メソッド・パラメータを取り、要求XMLメッセージを作成してオブジェクトのメソッドを呼び出すラッパー・メソッドを備える。XMLメッセージは、サービス・オブジェクト上で実際のメソッドを呼び出すサービス・ゲートに送られる。そのメソッドが結果オブジェクトを返すと、サービス・ゲートは結果オブジェクトを結果スペース内にポストし、メッセージを結果オブジェクトへの参照とともにクライアントに返す。
【0266】
したがって、クライアントがリモートメソッドを呼び出すためには、クライアントはまず、上述のように、オブジェクト(たとえば、サービス)をインスタンス化するメッセージを送る。一実施形態では、オブジェクトのインスタンス化を行うには、結果スペースを作成するかまたは生成する。他の実施形態では、結果スペースの作成は、オブジェクトのインスタンス化とは別である。インスタンス化により、オブジェクトURIがクライアントに返され、クライアントとサービス・ゲートは、クライアントはインスタンス化を要求したときに動的に作成される。いくつかの実施形態では、結果スペースはすでに存在しており、オブジェクト(サービス)によって通知される。これらのゲートの一部または全部も事前に構築されるかまたは再利用されている。
【0267】
クライアントがオブジェクトをインスタンス化した後、適切なクライアント・メソッド・ゲートをローカルで呼び出すと、上述のように、実際のリモート・オブジェクトへのリモート・コールが影響を受ける。分散コンピューティング環境のリモート・メソッド呼び出しの方式は再帰的であり、クライアント・ゲートが呼び出されると、オブジェクト自体ではなく、オブジェクト参照がクライアントに返される。このような返されたオブジェクトはすでにインスタンス化されていることに注意されたい。いくつかの実施形態では、クライアント側は、リモートで呼び出すだけでなく、オブジェクト自体を丸ごとダウンロードする決定を下す。
【0268】
上述のように呼び出されたメソッドまたはサービスは、結果ドキュメントと関連付けられている子ゲートを生成する。メソッドは、参照自体ではなく、参照の子ゲート(またはクライアントが子ゲートを構築するためのスキーマ、URIおよび証明書)を返す。その後、クライアントは、子ゲートを通じて参照にアクセスすることができる。子ゲートは、メソッド・ゲートでもよい。
【0269】
上述のように、分散コンピューティング環境で提供されるこのリモート・メソッド呼び出しにより、実際の結果オブジェクトを、サービス結果スペース内に格納できる(これは、たとえば、サーブレットにより動的に作成できる)。結果スペースは一時的である。結果スペースは、クエリ結果キャッシュとして機能することができる。古い結果領域をクリーンアップするサーバ・ソフトウェア(ガベージ・コレクタ)が結果キャッシュ内を巡回する。分散ガベージ・コレクションを採用するが、それは、クライアントがスペースを必要としなくなったことを示すか、またはサーバの管理者が適切な制限値を設定することにより、破棄されるまで結果スペースが満たされるからである。
【0270】
図23に戻ると、デフォルトのスペース350の図が示されている。分散コンピューティング環境は、少なくとも1つのデフォルト・スペースを用意し、クライアントは通知の初期セットを見つけられるようにする。デバイスは、事前構築されたゲートを組み込んだ、ローカルに存在するデフォルト・スペースを備えることができる。そのデフォルト・スペースで通知されたサービスは、ローカルでそのデバイスに存在し、デバイスが分散コンピューティング環境に参加するのを有効にするかまたは容易にするシステム・ソフトウェアを備える。
【0271】
デフォルト・スペース350は、図23に示されているように、外部スペースを特定する1つまたは複数のメカニズム352を備える。デフォルト・スペース内の1つのサービスが、上述のスペース発見プロトコルを実行して外部スペースを見つけることができる。また、デフォルト・スペース内で外部スペースを通知することができる。さらに、外部スペースを決定するまたは見つけるデフォルト・スペース内でサービス(たとえば、サーチ・エンジンまたはサーチ・エンジンへのプロキシ・サーバ)を通知する。各スペースは、ファイル・システムのマウント・ポイントに似ている。したがって、分散コンピューティング環境はサービスに対しサーチ可能な動的マウント・ポイントを提供できる。デフォルト・スペースは、分散コンピューティング環境へのクライアントの初期マウント・ポイントである。
【0272】
デフォルト・スペースまたはデフォルト・スペースへのアクセス機能をデバイスに組み込むことができる。デバイスに存在するデフォルト・スペースおよびローカル・サービスを通じて、分散コンピューティング環境にクライアント実行環境を用意できる。デバイスのローカル・サービスおよびデフォルト・スペース・サービスは、事前構築ゲートを組み込んでいる。デフォルト・スペース内にリストされている組み込みサービスの1つは発見プロトコルを実行するサービスであり、クライアントは追加(たとえば、外部)スペースを特定することができる。デフォルト・スペースは、クライアント・ユーザがスペースを参照し、サービスを選択し、インスタンス化するために使用するクライアント用の実行環境を提供する組み込みサービスを備える。このようなサービスは、クライアントがストリング全体(たとえば、スペースサーチのためのキーワード)を操作する、結果参照(たとえば、スペースのリスティング、またはスペース内のサービス・リスティング)を表示または参照する、アイテム(たとえば、サービスを選択してインスタンス化するため)を選択するなどのための単純なユーザ・インターフェースを備える。
【0273】
主にサービスを提供するデバイスは、さらに、デフォルト・スペースも備え、サービスでさまざまなスペース内での自己通知を管理できるようにする組み込みサービスをデフォルト・スペースに備えることができる。たとえば、プリンタなどのデバイスは、ローカル・エリア・ネットワーク上でスペースを(たぶん、発見プロトコルを利用して)見つけ、プリンタ・サービスの通知をそのスペースに追加する組み込みデフォルト・サービスを備える。このサービスはさらに、たとえば、リースを更新したり、プリンタのXMLスキーマを更新するなどして、LANスペース内のプリンタ・サービス通知を維持することもできる。
【0274】
サービスを提供するいくつかのデバイスでは、サービスを通知し、その通知を維持するのにスペースを見つけるオーバーヘッドは望ましくない。一実施形態では、サービス通知をパブリッシュするために1つまたは複数のスペースをサーチし維持するのではなく、いくつかのデバイスのサービスが接続要求に対する応答としてそれらの通知を送る。たとえば、プリンタ・サービスを近接性ベースで利用できるプリンタ・デバイスは、スペース内で通知を維持しない(デバイスで、またはデバイスの外部で)。その代わり、他のデバイスがプリンタ・デバイスとの接続を確立すると(たとえば、クライアントを実行しているラップトップを所有するユーザがドキュメントを印刷しようとする)、プリンタ・サービスはサービス通知を送り、プリンタ・デバイスで印刷機能を提供するサービスに接続し、そのサービスを実行するXMLサービス・スキーマを提供することができる。さらに、いくつかのデバイスではある近傍またはローカル・ネットワークでサービスに対する通知を維持するのみである。このようなデバイスでは、広範にアクセス性に関してトランスポートへのアクセスをサポートすることを望まない、またはアクセスできない場合がある。
【0275】
デバイスがスペース内でサービス通知を避けるまたは制限することが望ましいサービス・デバイスの一例として、機能を近接性ベースで利用できるデバイスがある。近接性ベース・サービスは、要求があった場合に機能の通知を行うことができる。これらの通知は、広くアクセスできない場合がある。たとえば、近接性ベース・サービスは無線通信システムで提供できる。「無線」という用語は、電磁波または音波が電線ではなく大気中を通して信号を伝送する通信、監視、または制御システムを意味する。ほとんどの無線システムでは、無線周波(RF)または赤外線(IR)の波長を使用する。通常、近接ベースの無線システムでは、トランシーバを備えるデバイスは通信チャネルを確立し維持するために他のデバイスから到達範囲内(近接)になければならない。デバイスは、他のデバイスを無線ローカル・エリア・ネットワーク(LAN)に接続するためのハブとすることもできる。
【0276】
前述のように、分散コンピューティング環境の実施形態では、クライアントがサービスとランデブーするためのルックアップ・スペースを使用するメカニズムを提供する。近接コンピューティング環境では、分散コンピューティング環境の一実施形態は、クライアントがランデブー・ポイントとしてルックアップ・スペースを使用せずにサービスを発見するために使用するサービス発見メカニズムを提供する。近接コンピューティング環境の一例として、IrDAポイントツーポイント通信環境がある。近接コンピューティング環境では、近接メカニズムがクライアントに対するサービスの「物理的」位置を見つけることができる。たとえば、IrDA環境では、クライアント・デバイスは、クライアントが使用することを望んでいるサービスを含むデバイスを物理的に指している。
【0277】
近接サービス発見メカニズムを使用すると、クライアントは、サービス通知を求めるためにサーチ要求をルックアップ・スペースに送るのではなく、直接サービス通知を求めることができる。クライアント・デバイスはサービス・デバイスへの近接接続を確立しているため、クライアントは目的のサービスを直接要求できる。たとえば、PDAクライアント・デバイスはプリンタ・デバイスとの近接接続を確立している場合があり、クライアントはプリンタ・デバイスのプリンタをサービス接続を要求することを「知っている」。
【0278】
一実施形態では、クライアントは、近接サービス発見メッセージをサービス・デバイスに送ることができる。メッセージには、クライアント・デバイスが近接接続を行う相手であるサービス・デバイスの目的のサービスを指定する情報を含む。一実施形態では、サービス・デバイスのサービスは近接サービス発見メッセージに応答し、クライアントに、目的のサービスに接続するためにクライアントが使用するサービス通知を送る。近接サービス発見メッセージは、さらに、クライアントの認証を行い、サービスでクライアントの能力を確定するために使用される情報を含む。受け取ったサービス通知を使用する際に、クライアントは、目的のサービスとの通信を確立するためのゲートを確立することができる。しかしながら、広くアクセス可能なスペースで通知を維持することを望まない、または維持できないサービスに対し通知をパブリッシュすることが望ましい。分散コンピューティング環境の一実施形態では、近接ベース・デバイスなどのサービス通知をパブリッシュしないデバイスとの接続を確立するデバイスは、非パブリッシュ・デバイスから受け取ったサービス通知をパブリッシュすることができる。たとえば、近接ベース・デバイスとの接続を確立し、代替えトランスポート接続を設定するデバイスは、代替えトランスポート環境で近接ベース・デバイスから受け取ったサービス通知をパブリッシュ(または再パブリッシュ)し、近接ベース・デバイス・サービスをデバイスの通常の近接範囲の外にある他のデバイスにより((再)パブリッシュされたサービス通知を通じて)使用できるようにする。
【0279】
パブリッシュ・デバイスが、発見および/またはルックアップ・サービスを通じて近接ベース・デバイスのローカルでパブリッシュされたサービスを通知を特定するか、またはそれとは別に、サービス通知をローカル・サービス・デバイスがパブリッシュしないが、その代わりに、そのサービス通知を、上述のように、接続の確立後、ローカル・デバイスがパブリッシュ・デバイスに送る。一実施形態では、通知を維持するデバイスがローカル・デバイスに接続されているか、接続することが可能である限り、再パブリッシュされたサービス通知は使用可能にできる。たとえば、パブリッシュ・デバイスがローカル・デバイスから切断された場合(たとえば、デバイスの近接範囲から外へ移動する)、サービス通知はステールになるか、または削除される。通知が格納されているスペースがリース更新メッセージをパブリッシュ・デバイスに送ることができるようにするリース・メカニズムを実現できる。パブリッシュ・デバイスは、ローカル・デバイスとの接続を確認し、これによりローカル・デバイスが利用できなくなったときにそのことをスペースが検出できるようにする。ローカルの近傍(たとえば、近接領域)またはローカル・ネットワークに対し、ローカル・デバイスまたは管理ポリシーにより、サービス通知を再パブリッシュする規則を定める。図24は、一実施形態により、近傍ベースのデバイスから提供されるサービスをデバイスの近傍の範囲外にあるデバイスでアクセスできるようにする近傍ベースのデバイスを他のトランスポート・メカニズムにブリッジするデバイスの一例を示す図である。パブリッシュ・デバイス1404は、Ethernet LANまたはインターネットなどのネットワーク1412に接続され、近接デバイス1400および1404との近接接続1414を確立して維持する。近接接続は、たとえば、無線接続または有線LAN接続とすることができる。近接デバイス1400および1402は、それぞれ、接続後サービス通知をパブリッシュ・デバイス1404に送るか、または、それとは別に、パブリッシュ・デバイスが近接接続に発見および/またはルックアップ・サービスを使用してサービス通知を特定する。パブリッシュ・デバイス1404は、スペース1406内のサービス通知1416および1418を再パブリッシュすることにより、近接デバイスによって提供されるサービスをネットワーク1412上の他のデバイス1408および1410から利用できるようにする。スペース1406は、パブリッシュ・デバイスまたはLANに接続された他のデバイス(デバイス1408および1410を含む)上に格納できる。
【0280】
デバイス1408および1410を含むLAN上の他のデバイスは、スペース1406を発見し、再パブリッシュされたサービス通知1416および1418を近接ベース・デバイスについてルックアップし、前記のXMLメッセージ・パッシング方式を使用して近接ベース・デバイス1400および1402上でこれらのサービス(デバイス1404はプロキシまたブリッジとして機能する)とのデートの通信を確立し、近接デバイスとの間の要求の発送および結果の受取を行う。パブリッシュ・デバイス1404は、ネットワーク1412と近接ベース・デバイスへの近接接続1414との間のブリッジとして機能する。
【0281】
リース
リースは、分散コンピューティング環境で、部分的な障害、リソースの同期(スケジューリング)を処理し、秩序だったリソースのクリーンアップ・プロセスを実施するために使用される。リースを使用すると、分散システム全体で行き来する独立のクライアントおよびサービスを管理することができる。クライアントがサービス(スペース・サービスを含む)から取得するさまざまなリソースは、これらのサービスからリースすることができる。一般に、すべてのリソースをリースするできるわけでも、またリースする必要があるわけでもない。一実施形態では、どのリソースをリースする必要があるかの決定は、それぞれの特定のサービスの実装に任されている。特に、大量のクライアントが使用するリソースが同時に、リースを必要としない場合があったり、あるいはその代わりに、カスタム・リース・プロトコルを必要とする場合もある。このようなはリースのクラスは、サービス・プロバイダに任されている。たとえば、トランザクションを実装するものなどのカスタム・プロトコルは、基本リース方式に基づいて構築できる。一実施形態では、基本リース・モデルは相対的な時間ベースのモデルである。
【0282】
サービスは、リースをクライアントに発行し、リースに対し操作を実行する。一実施形態では、サービスのこのようなリース機能はすべてそのサービスのXMLスキーマの一部である。したがって、クライアントはそのゲート(サービスに対応し、サービスのXMLスキーマに対し構築される)を使用してリース操作を実行することができる。一実施形態では、リースを発行するサービスはすべて、(i)リースの更新(リースの指定されたパラメータ(たとえば、リースID、リース証明書)、要求された新しいリース時間)、および(ii)リースの取り消し(リースの指定されたパラメータ(たとえば、リースID、リース証明書)という2つのリース操作を行える(リースの所有者によってのみ使用可能)。一実施形態では、すべてのリースは交渉可能な特定の相対的時間(リースの持続時間)について認可される。リクエスタではある時間を指定し(たとえば、秒で)、グランタ(grantor)ではその時間が経過するまでの間リースを認可できる。一実施形態では、値を−1にすると、無期限のリースを指定することができる。
【0283】
一実施形態では、サービス通知に1つまたは複数のリース・アドレスを含めることができる。一実施形態では、リース・アドレスはURIとすることができる。サービス・リソース・リースを更新する、または取り消す標準リース・メッセージを、リースURIに送ることができる。リースURIの例:
【0284】
通知は、さらに上述のように、さまざまなリース・メッセージを含む。リース・メッセージは、サービスのリソースに対するリースを更新するメッセージおよびリースを取り消すメッセージを含むことができる。一実施形態では、通知にメッセージをXMLスキーマで含めることもできる。
【0285】
リース・メカニズムは、サービスおよびクライアントの障害を検出するメカニズムを備える。リースはさらに、共有および排他的リソース・アクセスを実現するメカニズムも備える。一実施形態では、すべてのサービス・リソースはリースがないか(リソースがリースされておらず、したがって使用できない)、共有リソースがあるか(リソースは複数のクライアントによりアクセスされる)、または排他的リースがあるか(リソースは一度に1つのクライアントだけによりアクセスされる)のいずれかである。一実施形態では、すべてのリソースはリースがない状態から始まる。リースがない状態は、現在基礎となるリソースにアクセスがないことを意味し、リソースのインタレストが存在していてリースに使用可能であることを示す。リース・レベルは、「なし」から「共有」へ、「なし」から「排他的」へ、または「共有」から「排他的」へ上げることができる。リース独立レベルも、「排他的」から「共有」へ、「排他的」から「なし」へ、または「共有」から「なし」へ下げることができる。一実施形態では、クライアントは自発的にリース独立レベルを上下させるか、またはサービスによりそのようにすることを要求することができる。サービスからの応答メッセージは、独立レベルの変更が受け入れられたかどうかを示す。
【0286】
要求−応答メッセージのペアを使用して、リースの請求、解放、および更新を行うことができる。予約されているXMLタグを使用して各メッセージにタグを付け、メッセージがリース・メッセージであることを示す。分散コンピューティング環境では、メッセージの完全な構成を必ずしも定義しない。このような実施形態では、メッセージがリース・メッセージとしてタグ付けされる限り、サービス開発者側でカスタム・メッセージ・コンテンツを付加することができる。
【0287】
一実施形態では、リースされたリソースを使用するクライアントは、(i)リソースを共有または排他的として請求する、(ii)リソース請求を解放する(要求された場合またはリソースで終了した場合)、および(iii)更新メッセージに応答する(同じまたは異なる独立レベルの他の請求により)のいずれかを行うことを期待される。更新メッセージは、サービスにより(たとえば、定期的間隔で)クライアントの障害を検出するために送られる。この間隔(更新メッセージが送られる)は、サービス固有である。一定時間経過後更新メッセージへの応答が発行されない場合(たとえば、サービス通知で知らされた時間に基づき)、リソース再利用プロセスがサービス内で開始し、そのリースを完全に破棄する。このような実施形態では、クライアントに送られる更新メッセージは、タイミングよく取り扱うべきである。図25は、クライアントとインスタンス化されたサービスとの間の更新メッセージ、およびサービス・プロバイダとスペース・サービスとの間の更新メッセージの使い方を示している。両方とも、クライアントとサービスとの間の更新メッセージの使用と考えることができるが、それは、サービス・プロバイダがスペースの通知サービスへのクライアントであるためであることに注意されたい。
【0288】
更新メッセージは、クライアントには取り扱いが不便な「アウトオブバンド」方式で到着する。つまり、クライアントは、更新メッセージがいつサービスから送られるかを予測できないということである。アウトオブバンド・メッセージ処理により、クライアントのロジックがやっかいなものになり、その複雑度が増す。この問題を解決するために、自動リース更新メカニズムを実装し、アウトオブバンド・メッセージを取り扱う必要があるクライアントの労力を軽減し、クライアントの複雑さを低減する。自動リース更新メカニズムで、それぞれのゲート(メッセージ、メソッド、および/またはイベント・ゲート)は更新メッセージを受け取り、クライアントの助けを借りずにそれに自動的に応答することができる。更新要求に対するデフォルトの応答は、現在のレベルでリースを請求することである。それぞれのメッセージ・ゲートは、ゲートが更新メッセージを受け取ったときに自動的に通知スペース・サービスに送られる単一の留保更新応答メッセージを含むことができる。この「アウトオブバンド」メッセージは、クライアントの代わって処理され、クリーンなクライアント・プログラミング・モデルを生み出す。一実施形態では、ゲートにより、クライアントはリース・イベント・ハンドラを登録し、応答メッセージの中で異なる独立レベルを指定できる。
【0289】
リース・メカニズムは、さらに、ステール(無効の)通知を検出するメカニズムも備える。サービスがスペース内の通知をパブリッシュすると、そのサービスはこれが通知をパブリッシュしたことに基づいてリースを取得する。それぞれの通知には、サービスが通知を更新することを約束している時間が記述される。一実施形態では、すべてのタイムアウト値を秒単位で指定する。サービスがリースの更新を続ける場合、通知されたサービスがまだ提供中であるという何らかの確認をスペースで行うようにする。更新時間は、スペース・サービスによりゼロになるまでカウントダウンされる。サービスがリースを更新しない場合、サービスは失敗している可能性があるか、またはサービスを提供しなくなっているか、または提供できなくなっている。リースが更新されない場合、スペース・サービスはサービス通知をステールにするため、クライアントから使用できなくなる。サービスでは、スペースに更新メッセージを送ることにより通知を更新する。スペース・サービスは、これらのメッセージを受け取りて、通知更新時を初期値にリセットする。
【0290】
一実施形態では、ステール状態の通知は自動的には削除されない。スペースのポリシーに応じて、十分に長い期間期限切れになっているステール状態のサービス通知の削除を選択できる。削除ポリシーは、スペース・サービスで設定できる。スペース・サービスは、ステール状態の通知をサーチし、たとえば、それを削除するか、または管理者に知らせる。
【0291】
スペース・サービスは、リースを使用して、その機能によってスペースのクライアント(他のサービスを含む)に提供されるリソースを管理することができる。たとえば、クライアントがサービスを使用することを希望する場合、スペース・サービスはサービスのインスタンス化の一部としてクライアントにリースを要求する。サービスのインスタンス化を実行する際に、クライアントはサービスを実行できる。サービスをインスタンス化するために、クライアントはまず、スペース内でパブリッシュされたサービス通知のうちから1つ選択する。クライアントは、スペースに用意されているさまざまな機能を使用して、スペース内の通知をルックアップすることができる。次に、クライアントは、スペースに対しサービスのインスタンス化を要求する。サービスのインスタンス化のときに取得されたリースは、サービス通知を使用したときのものである(サービス通知をパブリッシュしたときのリースと同じではない)。スペース・サービスでは、共有されていることを示す通知の場合に複数のクライアントがサービス通知の使用についてリースすることができることに注意すべきである。そうでない場合、スペース・サービスでは、一度に1つのクライアントがサービス通知についてリースするだけである(排他的)。
【0292】
スペース・サービスがリースを使用してその機能によりクライアントに提供されるリソースを管理するもう1つの例として、XMLドキュメント(たとえば、サービス通知)がスペースに追加されるかまたはスペースから削除されるときにそのことを通知するようスペースのクライアントが登録する場合が上げられる。スペースの登録クライアントは、通知に対するこのサブスクライブでリースを取得できる。このリースにより、スペース・サービスは通知を送り続けるかどうかを知ることができる。このようなリースは、クライアントがスペースとのアクティブなセッションを確立している場合には、必要ないと思われる。また、スペースのクライアント(サービスの場合もある)がスペースとのセッションを確立するときに、クライアントがそのセッションでリースを取得することができることに注意されたい。このため、スペースはセッションと関連するリソースを管理することができる。
【0293】
他の実施形態では、分散コンピューティング環境は時間ベースではないリース・メカニズムを採用する。このリースは、オブジェクトに対し使用が請求されたときに生成される。時間ベースのメカニズムの代わりに請求メソッドでは、他の何かのパーティが同じオブジェクト(たとえば、サービス)にアクセスしたいということを現在のリースホルダに通知するコールバックを受け付ける。したがって、時間ベースのリースに対する他の実施形態として、代わりに、クライアントがスペース・オブジェクト(たとえば、サービス)に対する請求を行うことができる。他のクライアントが現在のリースホルダのリースと互換性のないリースを望んでいる場合、サービスは、「コールバック・メッセージ」をクライアントに送る。コールバック・メッセージを受け取ると、クライアント(つまり、クライアント・ゲート)はコールバック・メソッドを呼び出して、コールバック・メッセージに応答するかどうかを決定する(リースを持続する、リースを取り消す、アクセス・レベルを共有に変更するなど)。応答が決定されたら、クライアント・ゲートは応答メッセージをサービスに送る。リースを管理するこのような配布メカニズムは、XMLメッセージ通信レイヤを使用して実装できる。
【0294】
時間ベースでないリース実施形態では、分散コンピューティング環境は複数のレベル(または種類)のアクセスをサポートするリースを提供し、これにより、分散アルゴリズムでリース互換性を判別することができる。レベルには、(i)オブジェクトをスペース内に保持する(keepInSpace)、(ii)スペース内のオブジェクトを読み込む(readShared)、および(iii)スペース内のオブジェクトを排他的に読み込む(readExclusive)というレベルがある。
【0295】
認証とセキュリティ
分散コンピューティング環境は、非同期メッセージ通信モデルに基づく自然発生の分散システムと異機種分散システムに対応し、データおよび/またはオブジェクトはXMLなどの表現言語により表現することができる。分散コンピューティング環境では、たとえば、クライアントは、インターネット全体を通してサービスに接続することができる。分散コンピューティング環境では、大量のネットワーク・デバイスがセキュリティで保護された信頼できる動的な方式で連携動作する。分散コンピューティング環境により、準拠するソフトウェア・コンポーネント(クライアントおよびサービス)の間の相互運用性を実質的に可能にするプロトコルが定義される。
【0296】
分散コンピューティング環境のコンテキストでは、デバイスはネットワーキング・トランスポートでアドレス指定可能なユニットである。クライアントとサービスは、デバイスで実行されるソフトウェアまたはファームウェアのUniversal Resource Identifier(URI)アドレス指定可能なインスタンスとして実装することができる。
【0297】
インターネット・スペースには、多数のコンテンツ・ポイントが配置されている。URIは、コンテンツ・ポイントを識別するのに使用される方法であり、テキストのページ、ビデオまたはサウンド・クリップ、イメージ、ソフトウェア、ファームウェア、またはその他のインターネット・コンテンツである。URIの最も一般的な形式は、Webページ・アドレスであり、これは、Uniform Resource Locator(URL)と呼ばれるURIの特定の形式またはサブセットである。URIは、通常、リソース、リソースが置かれている特定のコンピュータ、およびコンピューター上のリソースの特定の名前(通常、ファイル名)にアクセスするために使用されるメカニズムを記述する。
【0298】
クライアントおよびサービス(両方とも、デバイスにソフトウェアおよび/またはファームウェアとして実装できる)は、インターネット、企業イントラネット、動的近接ネットワーク上で、単一コンピュータ内で、またはその他のネットワーク接続モデルにより接続できる。たとえば、クライアントおよびサービスをサポートするデバイスのサイズおよび複雑さは、単純な照明スイッチから複雑な高可用性のサーバーまでさまざまなものがある。デバイスの例としては、それらに限定されないが、PDA、携帯電話、ノートブック・パソコン、ラップトップ・パソコン、より強力なPC、さらに強力なコンピュータ・システム、そしてスーパー・コンピュータに至るまで、さまざまなものがある。いくつかの実施形態では、クライアントおよびサービスの距離、待ち時間、および実装を抽象化し、共通の発見および通信方法を使用し、「ブラック・ボックス」効果を生み出している。この定義方法により、ソフトウェアの実装問題は、根幹のプラットフォームで取り扱うことができ、インターネット規模に合わせて拡大縮小できる粗結合システムを実現できる。
【0299】
分散コンピューティング環境は、WEBおよびXMLコンテンツ表現、動的デバイス発見、およびさまざまなネットワーク・デバイスからアクセス可能なセキュリティで保護されたデバイス通信など、インターネット中心のプログラミング・モデルを提供する。分散コンピューティング環境は、CPUレベルよりも上で抽象化されたネットワーク・プログラミング・モデルを含む。このプログラミング・モデルは、以下の特性を持つ。
URIアドレス
コンテンツと呼ばれる強く型付けられたデータ(URIでアドレス指定)
実質的に無制限の永続的コンテンツ記憶域(たとえば、ストア)(MIMEタイプで識別されるものなどのXMLおよび非XMLコンテンツを含む)
スペースと呼ばれる実質的に無制限の一時的コンテンツ・メモリ(XMLコンテンツを含む)
関係するクライアントに通知するためにスペース内に格納できる記述的XMLメタデータ(データに関するデータ)コンテンツ通知。
実質的に無制限の数の命令(メッセージとして埋め込まれる)
URIによりアドレス指定されるセキュリティで保護されたメッセージ・エンドポイント(ゲート)
分散ソフトウェア・プログラム間のワーク・フローを調整するデータ・フローのサポート(イベント・メッセージ)
【0300】
サービスおよびクライアントは、分散コンピューティング環境内でプログラムとして実行できる。サービスは、サービスの使用を望んでいるクライアントに機能を通知することができる。クライアントは、同じネットワーク・デバイス内に常駐する場合も常駐しない場合もあり、デバイスのコード実行環境はJavaプラットフォームをサポートする場合もあればしない場合もある。URIを使用してコンテンツおよびメッセージ・エンドポイントをアドレス指定する際に、分散コンピューティング環境は強力なアドレス指定方式となる。アドレスにより、コンテンツまたはエンドポイントの位置を指定し、また使用するルート(またはトランスポート・プロトコル)を指定することができる。URIを使用してアドレス指定したアイテムはさらに、関連付けられたセキュリティ証明書を持つ。セキュリティ証明書を使用して、どのようなクライアントにアイテムへのアクセスを許可するか、また承認されたクライアントでそのアイテムに対しどの操作の実行を許可するかを制御することができる。
【0301】
分散コンピューティング環境によって提供される高度なアクセスは、適切な認証およびセキュリティ・システムおよび方法により制御できる。分散コンピューティング環境における認証とセキュリティには、メッセージ内のXMLコンテンツの型付けの正しさの検証、受取側に対し発送側を安全に識別する操作、クライアントからサービスに、その逆にサービスからクライアントに送られるメッセージの完全性を検査するメカニズム、およびクライアントに対し受け付けられたサービスのメッセージ群を記述し、サービスで受け取ったメッセージに対しメッセージ要求条件を強制するメカニズムがある。上記のセキュリティおよび認証の機能は、コードおよびデータの単一アトミック・ユニットで活用できる。コードおよびデータのアトミック・ユニットを動的に作成できる。一実施形態では、コードおよびデータのアトミック・ユニットは、いったん作成されると、メッセージ・エンドポイント(ゲート)を表し、作成時に実装されたセキュリティおよび認証ポリシーに関して改変できない。
【0302】
ゲートは、サービスの機能の一部または全部を使用する権限を表す。各機能は、サービスに送ることができるメッセージに関して表すことができる。ゲートはさらに、クライアントがリソースをリースするときに障害が発生した場合を検出するのに使用できる。
【0303】
認証およびセキュリティはさらに、サービスを使用しようとするクライアントがそのサービスを使用することを承認されていること、クライアントがサービス通知を受け取る先であるスペースがサービス通知を提供することを承認されていること、および/またはサービス通知自体が承認されていることを検証するメカニズムを備えることができる。
【0304】
メッセージ通信は、クライアントからサービスに要求を伝達する手段およびサービスがクライアントに結果を応答する手段としてメッセージング・レイヤに実装できる。分散コンピューティング環境のメッセージング・レイヤでは、有効なXMLメッセージが送られることを実質的に保証し、また言語独立のセキュリティ・モデルを使用可能にするメカニズムを備えることができる。メッセージング・レイヤでは、送るメッセージ・エンドポイントを受け取るメッセージ・エンドポイントにリンクさせることができる。2つの関連するメッセージ・エンドポイントは、クライアントとサービスとの間の要求−応答メッセージ通信に適したセキュリティで保護された双方向のアトミック・メッセージ・チャネルを提供することができる。
【0305】
分散コンピューティング環境の実施形態では、サービスに関してスペース内で通知をパブリッシュすることができる。通知は、サービスのXMLスキーマおよびURIを含むXMLドキュメントとすることができる。サービスはさらに、通知の中にサービスIDトークンまたは証明書を含めることもでき、通知で、クライアントとサービスの両方により使用される認証サービスを指定することができる。その後、クライアントはスペースのサービス通知を特定し、その通知を使用してクライアントでメッセージ・ゲートをインスタンス化する。クライアントは、通知で指定された認証サービスを使用して、メッセージでクライアントに送るための認証証明書を取得する。一実施形態では、クライアントはサービスIDトークンまたは証明書をサービス通知から認証サービスに渡し、続いて認証サービスはサービス・トークンと、または証明書を使用して、そのクライアントの認証証明書を生成することができる。一実施形態では、クライアントはメッセージ・ゲートを作成するために必要な情報を受け取るゲート・ファクトリを備え、そのゲート・ファクトリはメッセージ・ゲートを構築し、認証サービスと通信して、クライアントの認証証明書を取得する。対応するサービス・メッセージ・ゲートが、サービス側でインスタンス化される。
【0306】
クライアントは、ある時点で、第1のメッセージをサービスに送る。一実施形態では、クライアント・メッセージ・ゲートは認証サービスにより構築されたクライアントの認証証明書をメッセージ内に埋め込む。サービスがメッセージを受け取ると、同じ認証サービスを使用してメッセージで受け取った認証証明書を検証する。同じ認証サービスを共有することにより、さまざまな認証プロトコルを採用し、しかも、認証証明書の生成の詳細をクライアントとサービスから分離することができる。したがって、クライアントは異なる認証証明書プロトコルを異なるサービスとともに使用することができる。
【0307】
一実施形態では、認証サービスは、サービスからクライアント認証証明書を最初に受け取った後クライアントの能力を判別することができる(たとえば、サービスに対しクライアントがどのようなことを許されているか)。クライアントの能力は、クライアントの素性に縛られる。そこで、クライアントのメッセージ・ゲートはクライアントからサービスに送られるすべてのメッセージに認証証明書を埋め込む。メッセージは、サービス・メッセージ・ゲートに届き、そこで、認証サービスによりチェックされ、そのメッセージがクライアントからのものであること、メッセージ要求がクライアントの能力範囲内にあることを確認する。他の実施形態では、サービス・メッセージ・ゲートは、認証サービスを使用せずに、能力を判別および能力に関するメッセージ検査を処理する。
【0308】
クライアントおよびサービス・メッセージ・ゲートは連携して、セキュリティで保護され信頼できるメッセージ・チャネルを実現する。ゲートはセキュリティで保護されたメッセージ・エンドポイントとして使用され、クライアントはセキュリティで保護され承認されているXMLメッセージをサービスとの間で送受されることによりサービスを実行できる。
【0309】
分散コンピューティング環境内のオペレーションは、クライアントとサービスとの間で送られるXMLメッセージとして実現される。クライアントをサービスと接続し、スペースおよびストア内のコンテンツをアドレス指定するのに使用されるプロトコルは、クライアントとサービスとの間で送ることができるメッセージによって定義される。メッセージを使用してプロトコルを定義すると、さまざまな種類のデバイスをプロトコルに参加させることができる。各デバイスは、その能力と役割に最適の方法でプロトコルを自由に実装することができる。
【0310】
サービスの機能は、そのサービスが受け入れるメッセージに表すことができる。サービスのメッセージ・セットは、XMLスキーマを使用して定義することができる。XMLメッセージ・スキーマにより、XML型付きタグを使用して各メッセージ形式を定義する。タグの使用規則もまた、スキーマで定義できる。メッセージ・スキーマは、メッセージを受け取るために使用するサービスのメッセージ・エンドポイント(ゲート)とともにXML通知の一コンポーネントであってよい。メッセージをXMLメッセージ・スキーマに加えることにより、拡張機能(さらに多くの能力)をサービスに追加することができる。
【0311】
分散コンピューティング環境では、承認されたクライアントがサービスの能力すべてを使用できるか、またはサービスの能力のサブセットの使用に限定される。一実施形態では、一組の機能をクライアントに与えた後、クライアントは適切な承認がないとそのセットを変更することはできない。この機能定義のモデルにより、基本機能セットから拡張機能セットまでのサービス・レベルに対応できる。
【0312】
サービスのインスタンス化を実行する際に、クライアントはサービスを実行できる。サービスをインスタンス化するために、クライアントはまず、スペース内でパブリッシュされたサービス通知のうちから1つ選択する。クライアントは、スペースに用意されているさまざまな機能を使用して、スペース内の通知をサーチすることができる。次に、クライアントは、スペースに対しサービスのインスタンス化を要求する。サービスのインスタンス化は、以下のことを含むが、これに限られるわけではない。
1.クライアントは、スペース・サービスにサービスをインスタンス化するよう要求する。
2.スペース・サービスは、クライアントがサービスをインスタンス化することを許可されていることを検証する。
3.スペース・サービスは、クライアントによって指定されたリース要求時間にクライアントのサービス通知でリースを取得する。それとは別に、サービス通知をクライアントに送るができ、しかもリース・メカニズムを使用しない。
4.スペース・サービスは、ステップ3で割り当てたリースとサービスのサービス通知を含むメッセージをクライアントに送る。
5.クライアントは、サービス通知で指定された認証サービスを実行し、認証証明書を取得する。
6.クライアントは、サービスと通信するためクライアント・メッセージ・ゲートを構築する。
分散コンピューティング環境でクライアントとサービスとの間に信頼性を築くために、一連の動的に生成される数値(キー、またはトークン)を、クライアントのセキュリティまたは認証証明書として使用する。1つまたは複数の証明書を使用して、クライアントがサービスを使用する権限を検証し、クライアントとサービスとの間でやり取りするメッセージを検証することができる。それぞれクライアントおよびサービスは、固有の証明書を備える。
【0313】
サービスを使用するのに必要な認証証明書の種類がサービス・サーチを実行するクライアントに返される。一実施形態では、認証証明書は、クライアントがサービスを使用するごとに提示する必要がある隠蔽型オブジェクトである。一実施形態では、認証証明書はサービスに送られるすべてのメッセージ内でクライアントのためにメッセージ・ゲートにより提示される。どのような種類の認証証明書をサービスが必要としようと、クライアントとサービスの外部の認証サービスを使用することにより、クライアントおよびサービスは認証証明書構造または認証プロセスを意識する必要がない。
【0314】
認証証明書はさらに、サービス・チケットに加えてトランスポート固有のチケットを備えることができる。サービスを実行するときに、サービス通知で指定されるネットワーキング・トランスポートに応じて、トランスポートはセキュリティで保護された接続を提供できる。場合によっては、データ・リンク・レイヤがすでにセキュリティで保護されている場合、すでにセキュリティで保護されているデータ・リンク・レイヤ上でセキュリティで保護されたトランスポートを使用する必要はないと考えられる。
【0315】
認証証明書の概念は、証明書実装に基づくさまざまなレベルのセキュリティを可能にするだけの十分な抽象性を備えている。セキュリティのレベルにはそれらに限定されないが以下のものがある。
1.なし(空のメッセージにセキュリティ証明書はないか、または証明書がない)
トランスポートの物理的接続特性によりセキュリティが強制されるときは、証明書が空であるか、または証明書がないメッセージで十分である。たとえば、照明スイッチ・コントローラ1つだけに接続されたスマート・ライト・スイッチはそのスイッチが安全な方法で配線されているので安全である。
2.シグネチャ付きメッセージ(電子シグネチャ)
シグネチャ付きメッセージは、サービスがメッセージの発信源(クライアント)を検証できるようにする電子シグネチャを含む。
3.暗号化メッセージ(トランスポートでこれを取り扱う)
暗号化メッセージは、メッセージの内容をスクランブルし、他の証明書でそのスクランブルを解除する必要があるようにするという方法により、別のレベルのセキュリティを追加する。
4.能力メッセージ(サービス機能およびユーザ認識)
このレベルのセキュリティは、ユーザごとのセキュリティ機能を実現し(たとえば、ユーザが実行を許されているもの)、サービスおよび個々のサービス機能に対する精密なアクセス制御を行うことができる。
【0316】
高いレベルのセキュリティ(能力および暗号化)を実現するのに必要な実装が重いため、複数レベルのセキュリティ・ゾーンを使用する。メッセージ・トランスポートでこのようなセキュリティ・レベルをサポート(またはボートを支援)する場合、このサポートを活用して一方のレベルのセキュリティから他方のレベルのセキュリティへ橋架けするセキュリティ・レベル・ブリッジ・サービスを提供する。
【0317】
上述のように、セキュリティ・モデルのないサービスでは、空の認証証明書を受け付けることができる。アクセスが制限されていないサービスでは、認証証明書なしでまたは「空の」認証証明書付きでゲートを構築することができる。このようなサービスのゲートは、それぞれのメッセージとともに認証証明書を送らないか、または空の証明書を送る。認証サービスは、アクセスを制限しないサービスの一例である。他のサービスでは、ユーザIDとパスワードのペアを必要とする。
【0318】
証明書を使用するサービス・アクセスの認証
いくつかの実施形態では、サービスを実行しようとするクライアントが承認されているクライアントであることを検証し、クライアントによって受取されるサービス通知が承認されたサービス通知であること検証し、かつ/またはクライアントがサービス通知を受け取った発送元のスペースが承認されていることを検証するメカニズムは、公開鍵/秘密鍵非対称暗号メカニズムに基づく。このメカニズムでは、承認された発送側エンティティは公開鍵をメッセージに埋め込み、秘密鍵で公開鍵を含むメッセージを暗号化する。暗号化メッセージを受け取るエンティティは、公開鍵を使用してメッセージを復号化し、復号化されたメッセージに埋め込まれている同じ公開鍵を見つけ、そのメッセージが承認されたエンティティからのものであることを検証するが、それは、そのエンティティのみがメッセージを暗号化するのに必要な秘密鍵を持っているからである。そこで、エンティティは、実質的に忘れることができない、他のエンティティが復号化して(適切な公開鍵で)、エンティティによって送られたメッセージを検証することができる証明書を発行する。
【0319】
さまざまな鍵生成アルゴリズムを分散コンピューティング環境で使用できる。鍵の構成は、クライアントとサービスの両方から隠されており、クライアントとサービスはどのような鍵生成アルゴリズムを使用しているかを問わない。
【0320】
Kerberosチケットは、分散コンピューティング環境で使用されるセキュリティ証明書の一例である。Kerberosは、コンピュータ・ネットワーク内のサービスの要求を認証するセキュリティで保護された方法である。Kerberosを使用すると、ユーザは特定のサービスを要求するために使用できる認証プロセスに暗号化された「チケット」を要求することができる。ユーザのパスワードは、ネットワークに通す必要はない。
【0321】
分散コンピューティング環境では、クライアントとサービスとの間で送られるメッセージの品質が損なわれないよう実質的に保証するメカニズムを提供する。一実施形態では、メッセージが改変されていないことを検証するため発送側は受取側が使用できる情報を含むトークンを埋め込む。メッセージに埋め込む情報を生成する方法はいくつかある。一実施形態では、メッセージのハッシュを計算し、それをメッセージとともに送る。ハッシュ法は、文字列を元の文字列を表す通常短い固定長の値または鍵に変換する操作を含む。メッセージを受け取ると、受取側はそのハッシュを再計算し、送られたハッシュに照らしてチェックする。メッセージが改変されていた場合、同じハッシュが生成される可能性はほとんどない。発送側は、ハッシュを暗号化し、対応する公開鍵を暗号化されたメッセージに入れて送り、そのハッシュが損なわれないように実質的に保証する。
【0322】
他の実施形態では、巡回冗長検査などの誤り検出方式を使用する。巡回冗長検査は、通信リンクで送られたデータ内にエラーがないか調べる方法である。巡回冗長検査を使用する実施形態では、発送側はnビットの多項式をメッセージに適用し、その結果の巡回冗長検査(CRC)をメッセージに付加する。受取側は、同じ多項式(メッセージでも渡される)をメッセージに適用し、その結果を発送側が付加した結果と比較する。マッチする場合、メッセージは正常に受け取られたということである。マッチしない場合、発送側はメッセージの再送を通知される。
【0323】
ゲート・ファクトリは「信頼できる」コードなので、ゲート・ファクトリもまたセキュリティで一定の役割を果たす。信頼できるゲート・ファクトリを使用してゲートを生成することにより、ゲートが信頼できるコードであり、そのコードがサービス通知に関して正しいものであることを保証できる。クライアントは、認証の一手段として、クライアントIDトークンまたは証明書をゲート・ファクトリに提示する必要がある。サービスは、クライアントがゲートを作成するときに、サービスIDトークンまたは証明書をクライアントに提示する(たとえば、通知を通じて)。ここで説明したように、クライアントおよびサービス・トークンのペアを使用して、クライアントがメッセージをサービスに送ることができるようにするために使用される第3の証明書を作成する。この第3の証明書は、認証証明書と呼ばれる。認証証明書は、認証プロセスの実行時に認証サービスにより作成される。一実施形態では、サービスは認証ポリシーを自由に使用できる。一実施形態では、認証サービスはサービスに代わって認証ポリシーを管理するため、サービス側では、使用されている特定の認証ポリシーを意識する必要はない。
【0324】
クライアントはサービス通知で指定した認証サービスを実行することにより受け取った認証証明書を使用してゲートを構築する。これにより、構築されたゲートは認証証明書をそれぞれのメッセージとともにサービスに送ることができる。サービスがクライアントから第1のメッセージで第1の認証証明書を受け取ると、サービスはサービス通知で指定されている認証サービスを使用してクライアントを認証し、認証証明書のクライアントのIDへのバインドを確立する。
【0325】
すでに述べたように、サービスによって出力されるいくつかの結果がスペース内で通知され、最終的に結果ゲートを使用してアクセスされる。結果ゲートは、結果を生成するために使用する入力ゲートと同じセキュリティ証明書を含む場合もあれば含まない場合もある。サービスへの入力は出力(結果)と非同期であるため、結果は、異なるアクセス権限セットが関連付けられる。たとえば、給料支払い簿サービスではクライアントの異なる集まりが給料支払い簿サービスを起動して給料支払い簿サービスの結果(給与)を読み取ることができる。そこで、クライアントは、結果へのアクセス権を取得するために別の認証プロセスを適用される必要があり、これは、結果に関する通知で指定された認証サービスから結果に対する認証証明書を受け取る作業も含む。
【0326】
メッセージ・ゲートにより、ほとんどのセキュリティ・チェックの負担がサービスから取り除かれる。サービスでは、能力の発揮と、クライアントの認証に集中することができる。クライアントが要求された(または割り当てられた)能力にのみアクセスできるようにする際に、特権は最低限にするという原則が守られる。
【0327】
セキュリティ・チェックは、ゲートの作成時および/またはゲートの使用時(メッセージを発送かつ/または受け取るとき)に実行される。クライアントが通知されたアイテム(サービス)へのアクセスを要求したときに、ゲート作成のプロセスが開始する。このプロセスで、クライアント・ゲート・ファクトリは、サービスと連携して、互いに相互認証を行う。ゲート作成時に実行されるチェックは広範にわたり、ゲートの使用時に実行されるチェックの回数が最小限に抑えられる。サービスでクライアントを認証した後、サービスはクライアントの特定の能力を判別し(たとえば、サービスでクライアントがどのようなことを実行することを許されているか)、その能力をクライアントの認証証明書に関連付けることができる。これらの特定の能力により、サービス上でクライアントがどのような操作を実行することを許されるかを指定できる。ゲートではすべてのメッセージに認証証明書が含まれることを確認するので、サービスでは、受け取ったときのそれぞれの要求を認証されたクライアントの能力に照らし合わせてチェックすることができる。
【0328】
ゲート作成チェックでは、XMLメッセージ・スキーマによって指定されたサービス能力の一部または全部を使用する許可がクライアントにあることを確認する。一実施形態では、これらのチェックは、Kerberosなどの認証サービスとともにアクセス制御リスト(ACL)を使用して実施する。チャレンジ−応答シーケンス(パスワードなど)も、クライアントの認証に使用できる。いくつかの実施形態では、ハードウェア・ベースの物理的識別方法を使用してクライアントを認証することができる。たとえば、ユーザは、識別と承認のためにスマート・カードなどの物理的識別機能を提供することができる。認証のための他のメカニズムも、他の実施形態で使用できる。
【0329】
一実施形態では、クライアントを認証するためにどのような手段を使用するとしても、認証はクライアントとサービスの両方に見えないものであり、ゲート・ファクトリが使用する認証サービスを認識し、その認証サービスが認証メカニズムとポリシーを取り扱う。ゲート・ファクトリは、製品と環境に依存しているか、または構成管理システムによって制御することさえできる。一実施形態では、クライアント独立の程度と方法はプラットフォーム依存であるが、ゲート・ファクトリには認識される。いくつかの実施形態では、ハードウェア・ベースの物理的識別方法を使用してクライアントを認証することができる。たとえば、ユーザは、識別と承認のためにスマート・カードなどの物理的識別機能を提供することができる。認証のための他のメカニズムも、他の実施形態で使用できる。
【0330】
分散コンピューティング環境のメッセージ・ゲートは、通常、単一のクライアントと関連付けられている。ゲート・ファクトリは関連付けの手段を決定する。メッセージを送るときに実行されるチェックにより、適切なクライアントがゲートを使用していることが確認される。一実施形態では、ゲートはメッセージで渡され、新しいクライアントがそのゲートを使用することを望んでいる場合、クローンが作成される。クローン・プロセスで、一組の作成チェックが新しく実行される。
【0331】
スペースのクライアントがスペース・サービスの通知を見つけると(クライアントは他のサービスでもよい)、スペースのクライアントは他のサービスの場合と同様にスペース・サービスを実行する。スペース・サービスを実行するには、認証メカニズムを使用する必要がある。スペース・サービスの実行ではそれに限定されないが、以下のことを行う。
1.スペースのクライアントは、まず、スペース・サービスのサービス通知で指定されている認証サービスを実行して認証証明書を取得する。
2.スペースのクライアントは、認証証明書、スペースのXMLスキーマ(スペースのサービス通知からの)、およびスペースのURI(スペースのサービス通知からの)を使用して、スペースのゲートを構築する。一実施形態では、クライアントはゲート構築するための情報をゲート・ファクトリに渡す。
3.スペースのクライアントは、そのゲートを使用してメッセージをサービスに送ることによりそのスペース・サービスを実行する。
4.スペース・サービスは、クライアントから認証証明書を埋め込んだ第1のメッセージを受け取ったときに、クライアントが使用したのと同じ認証サービスを使用してクライアントを認証するための認証証明書を取得し、クライアントの素性を確定する。
5.スペース・サービスは、その後、クライアントの能力(たとえば、クライアントがスペース・サービス上で実行を許されているもの)を判別し、その能力を認証証明書にバインドする。
【0332】
「スペース」の項で説明しているように、スペース機能は、生成元のスペースと実質的に同じ機能(同じXMLスキーマ)を持つ空のスペースを生成するインターフェースを備えることができる。
【0333】
図42は、一実施形態による、分散コンピューティング環境での、新しいスペースの保護された作成を示す流れ図である。1950に示されているように、クライアントは、第1のスペース・サービスにアクセス(たとえば接続)することができる(サービスは、アクセスまたは他の形でのスペースの使用に関してクライアントとして働くことができる)。1952に示されているように、クライアントが第1のスペースのインターフェースに適当な要求を送ることによるなど、第2のスペースの作成を要求することができる。スペースの作成を要求するクライアント(スペース・サービスのクライアントとして働くサービスを含む)を、要求元クライアントと呼ぶ場合がある。それに応答して、1954に示されているように、第2のスペースに伴う第2のスペース・サービスを、第2のインターネット・アドレスで作成することができる。上と同様に、第2のスペース・サービスに、第2のスペース・サービスの関数を呼び出すのに使用可能である1つまたは複数のメッセージを指定する第2のスキーマを含めることができる。第2のスキーマに、少なくとも第1のスキーマを含めることができ、第2のスキーマに、追加の機能も含めることができる。
【0334】
第2のスペースを、当初は、要求元クライアントだけにアクセスを許可するように構成することができる。一実施形態では、1956に示されているように、第2のスペースに関してルート認証トークンを作成する。やはり1956に示されているように、第2のスペースに関連する認証サービスを初期化することができ、これによって、第2のスペースを、ルート認証トークンを保持するクライアントだけにアクセスを許可するように構成する。1958に示されているように、ルート認証トークンを、要求元クライアントまたはサービスに送ることができる。1960に示されているように、要求元クライアントが、第2のスキーマで指定されたメッセージの少なくとも1つを第2のスペースに送ること、ルート認証トークンを使用することによって、第2のスペースにアクセスすることができる。
【0335】
したがって、一実施形態では、要求する側が、スペースを作成した時に、その要求する側だけが、作成されたスペースへのアクセスを許可される。たとえば、作成されたスペースを、保護されることをクライアントが必要とするサービスからの結果を格納するためのものとすることができる。一実施形態では、このセキュリティを、下記によって保証することができる。
・ 1956で示されるように、初期ルート認証トークンを作成し、生成されたスペースの認証サービスを初期化する際に、認証サービスがルート認証トークンのみを認証し、他の認証証明書を返さないようにする(最初に許可されている生成されたスペースのクライアントはほかにない)。
・ 生成されたスペースのセキュリティ・ポリシーを初期化し、ルート認証トークンに関連付けられたルートIDで、セキュリティ管理機能を含むスペースのすべての機能にアクセスできるようにする。
・ 1958で示すように、ルート認証トークンおよび生成されたスペースのサービス通知を生成されたスペースのリクエスタに返す。
【0336】
リクエスタは、生成されたスペースにアクセスするためのゲートを構築するが、それは、認証証明書と生成されたスペースのサービス通知を返すからである。一実施形態では、リクエスタとリクエスタが認証証明書と生成されたスペースのサービス通知を渡すクライアントまたはサービスのみが生成されたスペースにアクセスできる。生成されたスペースへのアクセスをこのように制限することは、たとえば、クライアントとサービスが結果をプライベートの状態に保持する場合にクライアントおよびサービスがその生成されたスペースを使用して結果を格納するときに役立つ。
【0337】
サービスを実行した後、クライアントはセキュリティ管理スペース機能を使用して生成されたスペースの認証ポリシーを変更し、その後、他のクライアントまたはサービスはその生成されたスペースにアクセスできる。さらに、発見プロトコルまたはその他の手段を用いて、生成されたスペースのサービス通知を生成されたスペースの他のクライアント(他のクライアントはサービスでもよい)から利用できるようにする。
【0338】
分散コンピューティング環境でのメッセージ・トランスポート・レイヤは、トランスポート時にクライアントとサービスとの間の通信のセキュリティおよび安全性を保護するメカニズムを備える。このようなセキュリティは、「ワイヤ・セキュリティ」または「トランスポート・セキュリティ」と呼ばれるものであり、これにより、ゲートを含むメッセージング・システムにより実装された認証セキュリティから区別できる。メッセージの暗号化は、分散コンピューティング環境のメッセージ・トランスポート・レイヤで行われる。暗号化されたトランスポートを要求するサービスは、XML通知にタグを付けることによりそのような作業を行う。その後、ゲート・ファクトリは、BluetoothやHTTPSによって提供されるものなどのセキュリティで保護されたメッセージ・トランスポートを使用するゲート(または複数のゲート)を作成する。
【0339】
HTTPS(Secure Hypertext Transfer Protocol)は、ユーザ・ページ要求さらにWebサーバによって返されるページの暗号化および復号化を行うWebプロトコルである。HTTPSでは、ストリーム暗号化アルゴリズム(たとえば、RC4)に多ビット鍵サイズ(40〜128ビット以上)を使用して、商用のデータ交換に対し十分な暗号化を行う。HTTPSは、分散コンピューティング環境でトランスポートとして使用できる。
【0340】
Bluetoothは、新しく登場したピアツーピアの無線通信規格である。Bluetooth鍵生成アルゴリズムを分散コンピューティング環境で使用できる。Bluetoothでは暗号鍵をサポートする。暗号鍵はトランスポートに依存しているが、クライアント、サービス、および組み合わせ鍵はトランスポートに依存しないようにできる。
【0341】
図26a−クライアントに認証証明書を提供する認証サービス
図26aは、一実施形態により、認証証明書をクライアントに提供する認証サービスを示す流れ図である。分散コンピューティング環境のクライアントは、クライアントのために1つまたは複数の機能を実行するサービスを必要とすることがある。一実施形態では、セキュリティで保護されたメッセージング・チャネルを設定するときにクライアントとサービスで使用する認証サービスを提供する。認証サービスは、クライアントおよび/またはサービスの認証および望むレベルのセキュリティおよびクライアントとサービスとの間で渡されるメッセージ・セットを交渉するなどの機能をクライアントおよび/サービスのために実行する。認証サービスは、分散コンピューティング環境内で実行されているプロセスでもよい。認証サービスは、サービスおよび/またはクライアントと同じデバイスで実行するか、またはそれとは別に、認証サービスは、認証サーバなどの別のデバイスで実行する。一実施形態では、認証サービスはインターネット・ベースのサービスである。認証サービスは、それ独自のアドレス、たとえば、Universal Resource Identifier(URI)を持ち、これにより、クライアントおよび/またはサービスは認証サービスと通信できる。一実施形態では、認証サービスのアドレスを、サービスのサービス通知でクライアントに提供する。認証サービスを共有するクライアントおよびサービスを使用すると、クライアントとサービスとの間でセキュリティで保護されたメッセージング・チャンネルを確立し、いくつかのセキュリティおよび認証プロトコルのどれかをメッセージング・チャネルで使用できる。
【0342】
一実施形態では、クライアントはクライアントIDトークンまたは証明書を認証サービスに提示する。クライアント・トークンまたは証明書は十分に忘れがたいものであり、クライアントの素性を証明するものとして使用できる。次に、認証サービスは、クライアントIDトークンまたは証明書をチェックし、クライアントに、認証サービスのみが作成できる認証証明書を発行する。クライアントに返された認証証明書は、次に、クライアントによりすべてのメッセージに入れられてサービスに送られる。一実施形態では、クライアント・メッセージ・ゲートはゲート・ファクトリによって作成され、認証証明書をメッセージ・ゲートに格納すると、メッセージ・ゲートはクライアントに代わって認証証明書をすべてのメッセージに入れてサービスに送る。メッセージを受け取ると、サービスは認証証明書をチェックする。認証サービスのみが認証証明書を作成できるので、クライアントが認証証明書を改ざんしていないとサービスは認識する。一実施形態では、サービスは認証証明書をクライアントによって使用される同じ認証サービスに渡し、認証証明書が有効であることを確認し、クライアントが承認されたクライアントであることを検証し、クライアントの素性を調べる。
【0343】
スペース・サービスおよび認証サービスを含むすべてのサービスはそのクライアントを認証することができる。サービスによってクライアントの認証が行われると、クライアントはそのサービスにアクセスできる。たとえば、スペース・サービスの場合、クライアントはスペースからXML通知を取得する。
【0344】
一実施形態では、サービスはそのサービスのすべてのクライアントが使用するあらかじめ整えられている証明書を用意する。この実施形態では、認証により、そのあらかじめ整えられた証明書が要求側クライアントに提供される。クライアントはあらかじめ整えられている証明書をサービスに提示すると、サービスによって承認される。
【0345】
ステップ1000で、クライアントは認証証明書を認証サービスに要求する。一実施形態では、クライアントは目的のサービスのサービス通知をサーチし、特定する。一実施形態では、サービス通知はサービスにアクセスする際に使用される認証証明書を取得するために使用する認証サービスの通知を含む。一実施形態では、サービス通知は、認証サービスのURIなどのアドレスを含む。一実施形態では、クライアントは認証証明書を要求する認証サービスに情報を送る。一実施形態では、クライアントは情報をゲート作成プロセス、たとえば、ゲート・ファクトリに送り、ゲート作成プロセスは認証サービスにアクセスして認証証明書を取得する。
【0346】
ステップ1002で、認証サービスはクライアントのために認証証明書を生成する。認証証明書は、メッセージング・システムのメッセージに埋め込むことができ、これによりメッセージの受取側がメッセージの発送側を認証し、メッセージが承認された発送側からのものであることを検証し、メッセージが発送側が受取側に送ることを許可されているメッセージであることを検証できるようにするデータ要素またはデータ構造である。分散コンピューティング環境の一実施形態では、認証証明書は特定のクライアントと特定のサービスとの間に設定されるメッセージング・チャンネルに固有のものである。ステップ1002は、図26bに詳しく示され、説明されている。図26aのステップ1004で、認証サービスはクライアントに認証証明書を返す。一実施形態では、認証証明書は、クライアントに直接返すことができる。一実施形態では、認証証明書をゲート作成プロセス、たとえば、ゲート・ファクトリに返し、このプロセスが次に、認証証明書を使用してゲートを生成する。
【0347】
図26b−認証証明書を生成する認証サービス
図26bは一実施形態により、図26aのステップ1002で展開し、認証証明書を生成する認証サービスを示す流れ図である。一実施形態のステップ1002aで、認証サービスはクライアント・トークンとサービス・トークンを取得する。他の実施形態では、認証サービスはクライアント・トークンのみを取得する。一実施形態では、クライアント・トークンは分散コンピューティング環境におけるクライアントの一意的な識別子である。一実施形態では、サービス・トークンは分散コンピューティング環境におけるサービスの一意的な識別子である。たとえば、公開/秘密鍵暗号化メカニズムの公開鍵をクライアントとサービスに対する一意的な識別子として使用することができる。一実施形態では、クライアントはサービス通知でサービス・トークンを受け取り、クライアントはクライアント・トークンとサービス・トークンを認証サービスに送る。他の実施形態では、クライアントはクライアント・トークンとサービス通知URIを認証サービスに送り、認証サービスはサービス通知からサービス・トークンを取り出すことができる。
【0348】
ステップ1002bで、認証サービスはクライアントおよび/またはサービスを検証する。一実施形態では、認証サービスはステップ1002aで取得したクライアント・トークンおよびサービス・トークンを使用して、クライアントおよび/またはサービスを検証する。他の実施形態では、ステップ1002aでクライアント・トークンのみを取得しており、1002bでクライアント・トークンのみを使用してクライアントを検証する。一実施形態では、クライアントはそのクライアント・トークンをすでに認証サービスに登録しており、認証サービスは受け取ったクライアント・トークンを登録されているクライアント・トークンと比較し、クライアントが有効なクライアントであるかどうかを検証することができる。一実施形態では、クライアントはパスワードが設定されているログオン・アカウントなどのチャレンジ/応答メカニズムを使用して認証サービスにアクセスし、クライアントを有効なクライアントとして検証することができる。一実施形態では、サービスはすでに認証サービスに登録されており、そのサービス・トークンを認証サービスに提供してある。認証サービスは、次に、受け取ったサービス・トークンをすでに登録されているサービス・トークンと比較して、クライアントが有効なサービスにアクセスしようとしていることを検証する。他のタイプのクライアントおよびサービス認証も使用できる。たとえば、クライアントは、認証サービスがクライアントを認証するためにかつ/またはクライアントがアクセスしようとしているサービスを認証するために使用できる電子シグネチャまたは電子証明書を提供する。
【0349】
ステップ1002cで、認証サービスは認証証明書を生成する。一実施形態では、認証証明書は、認証サービスのみが作成できる認証トークンを含む。一実施形態では、認証サービスはクライアント・トークンとサービス・トークンを使用して認証証明書を生成する。他の実施形態では、認証サービスはクライアント・トークンだけを使用して、認証証明書を生成する。さらに他の実施形態では、認証サービスは認証証明書の生成に取得されているトークを使用しないが、その代わりに、認証証明書生成アルゴリズムを使用して実質的に忘れることはできない認証証明書を生成することができる。一実施形態では、認証サービスはサービス・トークンとクライアント・トークンを組み合わせて、一意的な認証証明書を生成する。たとえば、サービス・トークンとクライアント・トークンを64ビット値とし、この2つのトークンを組み合わせて128ビットの認証証明書を生成することができる。他の実施形態では他の方法を使用して、認証証明書を生成することができる。
【0350】
デバイスを分散ネットワーク環境にブリッジする方法
分散コンピューティング環境で実装されるメッセージ通信モデルをサポートしないデバイスが、分散コンピューティング環境の外部にある。これらのデバイスは、分散コンピューティング環境のクライアントにとって有用と思われるサービスを備えている場合がある。分散コンピューティング環境には、このような外部デバイスを分散コンピューティング環境にブリッジするメカニズムが備えられている。分散コンピューティング環境内のクライアントはこのようなデバイスに用意されているサービスにアクセスすることができる。分散コンピューティング環境ではさらに、分散コンピューティング環境で使用するこのような外部デバイスを発見するため既存のデバイス発見プロトコルを活用することができる。
【0351】
多くの技術が、ネットワークのデバイス構成をパブリッシュし、監視するための発見プロトコルを定義している。これらの技術には、これらに限定されないが、Jini、SLP、Bluetooth、UPnPがある。さらに、LonWorks、USB、および1394などの多くの入出力バスも動的発見プロトコルをサポートしている。分散コンピューティング環境では、実装をAPIでラップすることにより、デバイス発見技術を活用する。他のデバイス発見プロトコルを活用し、他の発見プロトコルにブリッジする方法を使用することにより、分散コンピューティング環境で、さまざまなネットワークおよび入出力バス上のデバイスまたはサービスを発見することができる。分散コンピューティング環境のデバイス発見は、したがって、分散コンピューティング環境に直接参加していなくても、PDAなどの小型デバイスを含むさまざまなデバイスに応用できる。発見プロトコルは、メッセージ・レベルで定義することができる。
【0352】
ブリッジ・メカニズムは、分散コンピューティング環境用のメッセージングAPIでBluetoothなどの1つまたは複数のを特定のデバイス発見プロトコルを「ラップ」する方法として提供される。ラップでは、コードおよび/またはデータ(API)でデバイス発見プロトコルの枠組みを作り、プロトコルを分散コンピューティング環境内のクライアントおよび/またはサービスによって実行できるようにするが、そうでないとこれは実行できない。ブリッジ・メカニズムを実行すると、特定のデバイス発見プロトコルによりデバイスを発見する発見エージェントが分散コンピューティング環境のスペース内のデバイスに対しサービスをパブリッシュすることができる。サービスが分散ネットワーク環境でXMLメッセージ・スキーマ・インターフェースをクライアントに提示し、特定のデバイス発見プロトコルにより発見されたさまざまなデバイスを動作させることができる。したがって、サービス通知は、基礎のラップされたデバイス発見プロトコルにより発見されたさまざまなデバイスを動作させるサービスに対してパブリッシュされる。そこで、通知されたサービスは、分散ネットワーク環境の外部にあるデバイス(またはサービス)を分散ネットワーク環境上のクライアントにブリッジする。
【0353】
図27は、スペース1200を持つ分散コンピューティング環境の一実施形態を示している。1つまたは複数の発見エージェント1204が、外部発見プロトコルに参加し、ブリッジ・メカニズム1202を通じて分散コンピューティング環境にブリッジする。ラップされたデバイス発見プロトコルを実行すると、ブリッジ・メカニズム1202を介した発見エージェント1204はスペース1200内のサービス通知1206a〜1206cをパブリッシュし、そこで、通知1206a〜1206cのそれぞれが分散コンピューティング環境の外部にある発見プロトコル1204のうちの1つにより発見されるデバイスまたはサービスに対応する。クライアントは、その後、スペース1200内のサービス通知1206a〜1206cを使用して外部デバイスにアクセスし、対応する外部デバイスまたはサービスを動作させるエージェント1204のうちの1つでサービスをインスタンス化する。
【0354】
そこで、分散コンピューティング環境のクライアントは、デバイス発見プロトコルをラップする発見エージェントを使用してデバイスを見つける。これらのデバイスとのブリッジとして機能するサービスをスペース内でパブリッシュし、通知して、分散コンピューティング環境のクライアントが外部デバイスによって提供されるサービスにアクセスできるようにする。通知されたサービスは、他のプロトコルまたは環境により分散コンピューティング環境の外部のデバイスを呼び出すことができる分散コンピューティング環境内のサービスであり、外部のデバイス/サービスを分散コンピューティング環境にブリッジする。分散コンピューティング環境内のクライアントは、分散コンピューティング環境内の通知されたサービスのみを「見」、外部のデバイス/サービスに気付くことすらしない。
【0355】
一実施形態では、分散コンピューティング環境は上述のラップされたデバイス発見プロトコルを含む基礎の外部デバイス発見プロトコルにマップされる、「スペース」の項で説明した発見プロトコルなどの特定のバージョンのスペース発見メッセージ・プロトコルを提供する。マップされた発見プロトコルは、スペース、デフォルト・スペースに自己登録するかまたは登録されるが、その際に、そのスペースに通知を入れる。通知される発見プロトコルごとに、発見プロトコルの結果を保持する後続の結果スペースが提供される。
【0356】
図28は、一実施形態によりBluetooth発見サービス1220にマップされるスペース発見プロトコルの一例の図である。Bluetooth発見サービス1220は、まず、分散コンピューティング環境に登録する1230。Bluetooth発見サービス1220は、ブリッジAPIでラップされ、発見サービス1220の通知1225がスペース1224に追加される1232。クライアントまたはサービスが、スペース1224上の発見サービス通知1225を特定する。発見サービス1220が実行されると(発見プロトコル1220と分散コンピューティング環境1222との間のブリッジとしてAPIラッパを使用して)、発見プロセスの結果を格納するための新しいスペース1226が作成される1234。発見サービス1220は、それらの結果を(再び、APIラッパを使用して)1つまたは複数の通知1227として発見結果スペース1226に格納する。それとは別に、発見サービス1220を実行した結果は分散コンピューティング環境のスペース1224または他の既存のスペースに格納される。図28に示されているような方法を使用してデバイスを発見し、他の基礎の発見プロトコルを使用して他のサービスを発見する。
【0357】
上述のように、分散ネットワーク環境で実装されるメッセージ通信モデルをサポートしないデバイスが、分散ネットワーク環境の外部にある。これらのデバイスは、分散コンピューティング環境で提供されるサービスを使用する必要があるクライアントを備えることもある。分散コンピューティング環境は、外部クライアントまたはクライアント・デバイスを分散コンピューティング環境にブリッジするメカニズムが備えられており、外部デバイスのクライアントは分散コンピューティング環境内のサービスにアクセスすることができる。
【0358】
分散コンピューティング環境でクライアントとして使用されるエージェントを用意し、外部クライアントを分散コンピューティング環境にブリッジし、外部クライアントが分散コンピューティング環境内でパブリッシュされているサービスにアクセスできるようにする。一実施形態では、エージェントは、フロント・エンドでメッセージ通信モデルと専用プロトコル(たとえば、外部デバイスによってサポートされているプロトコル)を使用して外部デバイスにインターフェースし、さらに外部クライアントにインターフェースする分散コンピューティング環境内のサービスと通信することができるXML対応バックエンドを備える。したがって、分散コンピューティング環境の外部のクライアントは、ブリッジ・エージェントを通じて分散コンピューティング環境内のサービスを特定してアクセスし、要求をサービスに送って結果データを含む応答をサービスから受け取ることができる。たとえば、外部クライアントは分散コンピューティング環境でブリッジ・エージェントを使用してスペース発見を実行し、通知されたサービスをルックアップし、分散コンピューティング環境内のサービスを呼び出す。
【0359】
一実施形態では、分散コンピューティング環境は分散コンピューティング環境クライアントからJiniサービスにアクセスするためのブリッジ・メカニズムを備える。Jiniサービスはリモート・メソッド呼び出し(RMI)を必要とし、また分散コンピューティング環境内のクライアントはXMLメッセージなどのメッセージを使用してサービスと通信するので、分散コンピューティング環境クライアントによりJiniサービスへのアクセスを可能にするプロトコル・ブリッジ・メカニズムを提供できる。一実施形態では、分散コンピューティング環境のスペース内でJiniサービスの動的通知を有効にし、さらに分散コンピューティング環境内のクライアントからJiniサービス・プロキシのアクセスを有効にすることができるコネクタ・メカニズムを定義する。一実施形態では、分散コンピューティング環境にブリッジできないJiniサービスもある。
【0360】
一実施形態では、Jiniサービスによって使用されるJini RMIプロトコルを分散コンピューティング環境のクライアントによって使用されるXMLメッセージングにブリッジするエージェントを分散コンピューティング環境内のサービスとして提供することができる。エージェントを起動すると、エージェントはJiniスペースで一組の属性を持つJiniサービスのルックアップを実行する。登録されているすべてのJiniサービスについて、エージェントは、サービスに対応するXML通知を生成し、分散コンピューティング環境内のスペースで通知を登録する。一実施形態では、エージェントは、Jiniルックアップ・サービスのイベント通知について登録でき、新しいJiniサービスが登録されると実行される。新しいJiniサービスが通知されると、エージェントはJiniスペースで検索を実行し、新たに通知されたJiniサービスを特定し、分散コンピューティング環境のスペースを新しいサービスに対する新しいXML通知で更新する。一実施形態では、Jiniサービスが削除されると、エージェントはJiniサービスの削除を通知するイベントを受け取る。エージェントは、サービスのXML通知をスペースから削除する。
【0361】
一実施形態では、分散コンピューティング環境のスペースのXML通知を介してJiniサービスを呼び出すには、クライアントはスペース内のサービス通知をルックアップし、有効なメッセージをエージェントに送ってサービスにアクセスする。エージェントは、サービス・プロキシに対するRMIコールを介して対応するメソッドを呼び出してJiniサービスに対応するプロキシ・サービスを呼び出す。プロキシがインスタンス化されていない場合、エージェントはプロキシ・コードをダウンロードし、プロキシ・オブジェクトの新しいインスタンスをインスタンス化する。一実施形態では、すべてのクライアント接続は異なるプロキシ・インスタンスを持つ。クライアントから着信したメッセージは、エージェントによってプロキシのメソッド・コールに変換される。メソッド・コールからの結果は発信メッセージとしてクライアントに返される。
【0362】
一実施形態では、RMIメソッドへの引数として、単純なJavaの型のみを使用できる。Javaの複合型が必要な場合、1つまたは複数のデータ通知をコールの引数として渡し、データ通知はJava複合型のデータの位置とアクセス方法を示す。一実施形態では、エージェントがXMLメッセージがRMIメソッド・コール呼び出しへの初期変換を動的に実行する。エージェントはサービス・インターフェースを認識するので、クライアントに通知される対応するメッセージ・セットを生成する。
【0363】
図29は、分散コンピューティング環境の外部にあるクライアント1250を分散コンピューティング環境内のスペース1254にブリッジする方法を示す図である。ブリッジ・エージェント1252は、クライアント1250とスペース1254との間の仲介者として使用される。ブリッジ・エージェント1252は、クライアント1250が理解できる通信プロトコルでクライアント1250と通信する。ブリッジ・エージェント1252は、クライアントの通信プロトコルを、スペース1254によって提供される機能を実行するためにスペース1254と通信するために必要なXMLメッセージング・プロトコルにマップする。ブリッジ・エージェント1252は、クライアント1250の要求があったときに、スペース1254上のサービスを特定して実行する。たとえば、クライアント1250は、スペース1254に特定のタイプのすべてのサービスのリストを要求することができる。ブリッジ・エージェント1252は、サービス通知1256a〜cを特定し、結果をクライアント1250に返す。それとは別に、結果を結果スペースにポストし、結果の位置をクライアント1250に返す。クライアント1250は、その後、サービス通知1256aの実行を選択し、メッセージ(クライアント1250の通信プロトコルで)をブリッジ・エージェント1252に送る。ブリッジ・エージェント1252は、そこで、サービス通知1256aによって表されるサービスを実行するのに必要なXML要求メッセージを送り、サービスの結果をクライアント1250に返す。結果をクライアント1250に直接返す以外のサービスの結果の処理方法は、上の「スペース」の項で説明しているように使用できる。ブリッジ・エージェント1252は、外部クライアント1250のサービスとして機能し(外部クライアントのプロトコルを介して)、また分散コンピューティング環境内のクライアントとして機能して、分散コンピューティング環境内のサービスを外部クライアントにブリッジする。
【0364】
ときには、分散コンピューティング環境内であっても、クライアントおよびサービスは互いに直接通信し、また共通のスペースとのみ通信することはできない。この場合、スペース・サービスはクライアント・サービスにブリッジするサービス・プロキシを自動的に作成する。プロキシの主要な役目は、スペースを介してクライアントとサービスとの間でメッセージをやりとりすることである。サービス・プロキシは動的に作成される。作成メカニズムは、スペースの実装に左右される。プロキシ・メカニズムの説明については、図30を参照のこと。クライアント554およびサービス556は、たとえば、これらが異なるトランスポートまたはネットワーク・プロトコルをサポートしているため、分散コンピューティング環境内で直接通信することができない場合がある。ただし、両方とも両方のプロトコルをサポートするスペース552とは通信できる。スペース・サービスは、クライアント554をサービス556にブリッジするプロキシ550を作成する。プロキシの共通の形態はブラウザ・プロキシである。プラザ・プロキシ(サーブレットとして実装されるは最も一般的である)は、従来のWebページ要求をメッセージに変換する。「スペース」の項のスペースルックアップ・サービス(およびプロキシ)の説明も参照のこと。
【0365】
分散コンピューティング環境は、分散コンピューティング環境内のクライアントをエンタプライズ・サービスにブリッジするメカニズムを備える。分散コンピューティング環境の一実施形態では、クライアントをエンタプライズ・サービスにブリッジする方法は、分散コンピューティング環境内のクライアント、分散コンピューティング環境内のブリッジ・サービス、およびエンタプライズ環境内のエンタプライズ・サービスを含む。分散コンピューティング環境のブリッジ・サービスは、クライアントとエンタプライズ・サービスとの間のブリッジ・サービスとして使用される。エンタプライズは、企業、中小企業、非営利団体、政府機関、またはその他の種類の組織である。エンタプライズでは、その事業の一部を実施するためにエンタプライズ・コンピューティング環境を利用する。エンタプライズ・コンピューティング環境は、さまざまなエンタプライズ・サービスを含む。分散コンピューティング環境内のクライアントは、エンタプライズ・コンピューティング環境のサービスを使用することを望んでいる場合がある。エンタプライズ・サービスは、三層クライアント/サーバ・アーキテクチャなどのさまざまなアーキテクチャに基づく。エンタプライズ・サービスを実装するのに使用できるアーキテクチャの一例としてEnterprise JavaBeansがある。Enterprise JavaBeans(EJB)は、クライアント/サーバ・モデルを使用してエンタプライズ環境のサーバー部分で実行する、Javaプログラミング言語で書かれたプログラム・コンポーネントを設定するアーキテクチャである。オブジェクト指向プログラミングおよび分散オブジェクト技術では、コンポーネントとは、アプリケーションを形成するために分散ネットワーク内で同じコンピュータまたは他のコンピュータ内の他のコンポーネントと組み合わせて再利用可能なプログラムの基本要素のことである。EJBは、プログラム・コンポーネント(Beans)をネットワーク内のクライアントに配布するJavaBeans技術に基づき構築されている。EJB Beanまたはコンポーネントを配置するには、コンテナと呼ばれる特定のアプリケーションの一部である必要がある。Enterprise JavaBeansには、session beansとentity beansの2種類のbeansがある。entity beansは、session beansと異なり、永続性があり、最初の動作または状態を保持できるものである。EJBを使用すると、実質的にすべての主要なオペレーティング・システムに配置することができる。EJBのプログラム・コンポーネントは、一般にサーブレット(小さなサーバ・プログラム)と呼ばれている。サーブレットを実行するアプリケーションまたはコンテナは、アプリケーション・サーバと呼ばれることもある。
【0366】
ブリッジ・サービスは、XMLメッセージ通信を介してクライアントと対話し、分散ネットワーク環境の外にあるエンタプライズ・サービスに要求を行うのに必要な入力パラメータを収集する。たとえば、クライアントが分散コンピューティング環境内の他のサービスとまったく同様にブリッジ・サービスをルックアップし、インスタンス化することができる。ブリッジ・サービスは、エンタプライズ・サービスと対話して、エンタプライズ・サービスを実行する。この対話では、エンタプライズ・サービスが理解できるプロセス間通信アーキテクチャを使用する。たとえば、エンタプライズ・サービスがEnterprise JavaBeans(EJB)で実装されている場合、ブリッジ・サービスはEJBを使用してエンタプライズ・サービスと通信する。ブリッジ・サービスは、エンタプライズ・サービスから結果を受け取り、その結果を直接クライアントに(XMLメッセージで)返すか、またはその結果を分散ネットワーク環境内のスペース(たとえば、結果スペース)に入れることができる。クライアントからは、ブリッジ・サービスは唯一のサービスのように見えるため(エンタプライズ・サービスはクライアントには隠されている)、クライアントはエンタプライズ・サービスのアーキテクチャをサポートする必要がない。複数の分散ネットワーク環境のクライアントが同じブリッジ・サービス(それぞれ、一意的なゲート・ペアを使用する)を使用して、エンタプライズ・サービスと対話する。
【0367】
ブリッジ・サービスまたはその他のエージェントは、分散コンピューティング環境内のスペースでブリッジ・サービス(およびエンタプライズ・サービス)の通知をパブリッシュする。たとえば、ブリッジ・サービスまたはその他のブリッジ・エージェントはJavaリフレクションを使用して、EJBで実装されているエンタプライズ・システム内のサービスについてBeansを調べ、Beansへのブリッジ・サービスのサービス通知を作成し、分散コンピューティング環境内のスペースにそれらの通知をパブリッシュする。リフレクションは、クラスのフィールド、メソッド、およびコンストラクタに関する情報を発見し、セキュリティ制限の範囲内でオブジェクトに対する基礎の対応する部分の上で動作するリフレクトされたフィールド、メソッド、およびコンストラクタを使用するJavaコードのメソッドである。リフレクションAPIは、ターゲット・オブジェクトの公開メンバまたは所定のクラスで宣言されているメンバのいずれかにアクセスするのが必要なアプリケーションに対応している。ブリッジ・サービスが通知されると、クライアントは、サービスを提供するエンタプライズ・サービスのアーキテクチャを詳細を知ることなく、分散ネットワーク環境内の他の通知されたサービスと同様にブリッジ・サービス(およびしたがって対応するエンタプライズ・サービス)にアクセスできる。
【0368】
クライアントのディスプレイ
クライアントによって実行されたサービスからの結果を分散コンピューティング環境内で表示する方法はいくつかある。結果を表示するデバイスとしては、コンピュータのCRT、ラップトップのLCD、ノートブック・パソコンのディスプレーなど、プリンタ、スピーカ、および視覚的、聴覚的、またはその他の知覚可能な形式でサービスの結果を表示できるその他のデバイスがある。結果を表示する方法にはそれに限定されないが、次のものがある。
サービスが結果をクライアントに直接、または参照により返し、クライアントはそれらの結果の表示を処理する。
サービスが結果をクライアントに直接、または参照により返し、クライアントはそれらの結果を表示サービスに直接、または参照により渡し、表示サービスがそれらの結果を表示する。
サービスが結果の表示を直接処理する。
サービスが結果を表示サービスに直接、または参照により渡し、表示装置はそれらの結果を表示する。
【0369】
結果を表示する最後の方法では、クライアントが表示サービスを指定する。たとえば、クライアントがサービスの結果を表示するために使用することを望んでいるクライアントが常駐するデバイスの表示サービスまたは関連する表示サービスがある。クライアントがサービスを実行すると、クライアントはメッセージをサービスに送り、クライアントの表示サービスのサービス通知を指定する。その後、サービスは、ゲートを構築し、メッセージをクライアントの表示サービスに送ることができるようにする。したがって、結果を表示するとき、クライアントによって呼び出されたサービスはクライアントの表示サービスのクライアントとなり、その結果を(直接または参照により)表示のためその表示サービスに送る。クライアント−サービス間の関係、ゲート、およびメッセージングの詳細については、本書の他の項を参照のこと。
【0370】
従来のアプリケーション・モデルは、通常、所定のおおむね静的なユーザ・インターフェースおよび/またはデータ特性に基づく。従来のアプリケーションに変更を加えるには、コードを修正し再コンパイルする必要がある。サービスを通知し、分散コンピューティング環境のサービスと通信するためのXMLメッセージ・スキーマを指定するための記述されたメカニズムを使用して、アプリケーション(クライアント、サービス、など)が自動的に表示オブジェクトの記述するためのメカニズムを提供する。動的表示オブジェクトを使用すると、新しいコードをダウンロードしたり、アプリケーションを再コンパイルしたり、アプリケーションを再リンクすることなく、アプリケーションの動作を変更することができる。同じ結果を異なる形式で表示する、表示のため結果の一部を抽出する、および異なる表示デバイスに結果を表示する表示スキーマを提供する。
【0371】
図31は、一実施形態による関連するディスプレイ1302および表示サービス1304を備えるクライアント1300の一実施形態の図である。表示サービス1304の通知1306をスペース1308に登録する。サービス1310の通知1312をサービス1310によりスペース1314に登録する。それとは別に、サービス通知1312および表示サービス通知1306を同じスペース上に登録する。クライアント1300は、スペース1314上のサービス通知1312をサーチし発見して1320、サービス1310に要求を送る(サービス1310から結果または応答を受け取る)ためのゲートを設定する。一実施形態では、メッセージは通知1312の一部として受け取ったXMLスキーマで指定したXMLメッセージの形式である。クライアント1300は、1つまたは複数のメッセージ(1322)をサービス1310に送る。この1つまたは複数のメッセージは、サービス1310を実行するメッセージと、表示のため結果を表示サービス1304に送るようサービス1310に命令するメッセージを含み、表示サービス通知1306の位置を指定する。通知の位置は、Uniform Resource Identifier(URI)として指定する。
【0372】
クライアント1300からサービス1310にメッセージを命令として送ると、サービス1310は表示可能な結果を出力する1つまたは複数のオペレーションを実行する。サービス1310は、クライアント1300から受け取った位置情報に基づいてスペース1308から表示サービス通知1306を取り出す。サービス通知は、XMLメッセージ・スキーマと、表示サービス1304とインターフェースするのに必要なその他の情報含む。次に、サービス1310は要求を表示サービス1304に送る(そして表示サービス1304から結果を受け取る)ためのゲートを設定する。他の実施形態では、クライアント1300からサービス1310へのメッセージは、XMLスキーマと、サービス1310が表示サービス1304へのゲートを構築するのに必要なその他の情報を含むか、または表示サービス1304への事前に構築されたゲートを備える。
【0373】
クライアント1300によって要求されたオペレーションの実行中、または完了した後、サービス1310は、表示サービス1304のスキーマによって指定されている方法によりオペレーションの結果を表示サービス1304に送る(たとえば、XMLメッセージ・スキーマでまたは表示サービスのパラメータとしての参照により指定されたXMLメッセージ内にカプセル化される)。この点で、サービス1310は、表示サービス1304のクライアントである。その後、表示サービス1304は、クライアントのディスプレイ1302上にサービス1310から受け取った、または指示された結果をフォーマットして表示する。
【0374】
いくつかの実施形態では、サービス1310は、結果スペース(図に示されていない)などのスペースにオペレーションの結果をポストする。その後、サービス1310は、オペレーションも格納されている結果への参照を含むメッセージを表示サービス1304に送る。一実施形態では、参照はURIの形式である。その後、表示サービス1304は、スペースから結果を取り出し、その結果をディスプレイ1302に表示する。
【0375】
従来のアプリケーション・モデルは、通常、所定のおおむね静的なユーザ・インターフェースおよび/またはデータ特性に基づく。従来のアプリケーションに変更を加えるには、コードを修正し再コンパイルする必要がある。サービスを通知し、分散コンピューティング環境のサービスと通信するためのXMLメッセージ・スキーマを指定するための記述されたメカニズムを使用して、アプリケーション(クライアント、サービス、など)が自動的に表示オブジェクトの記述するためのメカニズムを提供する。動的表示オブジェクトを使用すると、新しいコードをダウンロードしたり、アプリケーションを再コンパイルしたり、アプリケーションを再リンクすることなく、アプリケーションの動作を変更することができる。
【0376】
動的表示オブジェクトはXMLスキーマで記述できる。これらのスキーマは、スペース内で通知される。これらのスキーマは、表示スキーマまたは表現スキーマと呼ぶ。その後、アプリケーション(またはアプリケーションの代わりに動作するその他のサービス)は、サービス通知からスキーマにアクセスし、フォーマット、データ型、およびスキーマに格納されているその他の情報に基づきデータを表示する。
【0377】
動的表示オブジェクトを含むスキーマの一例を以下に示す。
【0378】
上記のスキーマは、アプリケーションを再コンパイルすることなく、次のように変更できる。
【0379】
図32Aおよび図32Bは一実施形態により動的表示オブジェクトのスキーマを使用する例を示す図である。図32Aで、アプリケーション1320(クライアント、サービス、またはその他のアプリケーション)はスペース1326に格納されている表現スキーマ通知1324で実装されている。表現スキーマ通知は、データ型、書式指定、フォント、位置、色、およびディスプレイ1322にアプリケーションのデータを表示するために使用されるその他の情報を記述する要素を含む。アプリケーション1320のための複数の表現スキーマ通知がある。たとえば、一連の表示ページ(たとえば、WebサイトのWebページ)内の表示ページごとに1つのスキーマがある。
【0380】
一実施形態では、アプリケーション1320は、発見および/またはルックアップ・サービスを呼び出して、表現スキーマ通知を特定する。発見および/またはルックアップ・サービスは、1つまたは複数の通知、およびURIの一覧を含むXMLドキュメントを特定の表示形式などを記述するスキーマのそれぞれに返す。その後、アプリケーション1320は、XMLドキュメントから1つまたは複数の表現スキーマを選択する。アプリケーション1320は、続いて、そのスキーマを解析し、スキーマ要素をユーザ・インターフェース・コンポーネントに分解する。これらのコンポーネントは、結果データを特定し、フォーマットし、適切なディスプレイ上に表示するために使用される。結果データは、たとえば、サービスの実行または結果スペースから得られる。そこで、静的な表示または所定の表示を用意するのとは反対に、アプリケーション1320は、アプリケーションを再構築することなく動的に変更できる表現スキーマに従って結果を表示するように構成される。
【0381】
同じ結果を異なる形式で表示する、表示のため結果の一部を抽出する、および異なる表示デバイスに結果を表示する表現スキーマを提供する。
【0382】
一実施形態では、1つまたは複数の表現スキーマ通知を分散コンピューティング環境内の1つまたは複数のスペースに格納することができる。1つまたは複数のデバイスでアプリケーションのコピーを呼び出すと、アプリケーションのそれぞれのコピーがサービスに対するサーチを実行し、アプリケーションによって使用される表現スキーマの通知を発見する。そこで、表示情報の中央永続的ストアをアプリケーションの複数のインスタンス用または他のアプリケーション用に保持することができる。表示情報は、アプリケーションを再コンパイルしたり再インストールすることなく、中央の場所で修正することができる。
【0383】
図32Bでは、クライアント1328は、スペースのサービス1330のサービス通知を特定する。サービス1330を呼び出すと、クライアント1328はスペース1326の表現スキーマ通知1324の位置をサービス1330に渡す。サービス1330が結果をクライアント1328に送る用意が整っている場合、表現スキーマ通知1324によって提供される表現スキーマからの表示情報を使用してディスプレイ1322(クライアント1328が実行されているデバイスに結合されている)に結果を表示することができる。結果の表示方法を変更するには、表現スキーマ通知1324のXMLメッセージを修正するか、または異なる表現スキーマを選択すればよく、クライアント1328またはサービス1330で変更する必要はない。サービス1330は表示サービスでよい。
【0384】
クライアント、アプリケーション、またはサービスは、1つまたは複数のサービスによって提供されるさまざまなオペレーションの結果を表示するための複数の表示スキーマを備える。それとは別に、表示スキーマは1つまたは複数のクライアントのさまざまな結果を表示するための情報を含む。そこで、クライアント1328は、1つの表示スキーマまたは複数の表示スキーマを使用することができる。異なる形式で、または異なるディスプレイに同じ結果をフォーマットして表示する2つまたはそれ以上の表示スキーマが用意されている。たとえば、結果セットに対しディスプレイの画面に結果を表示するための表示スキーマを1つ用意し、結果を印刷するための表示スキーマをもう1つ用意する。また、同じアプリケーション、クライアント、またはサービスのコピーを表示能力の異なるデバイスで実行し、異なるデバイスの表示要求条件を満たす2つまたはそれ以上の表示スキーマを提供するようにする。
【0385】
文字列管理
従来のシステムでの文字列処理は、一般に、あまり効率がよくなく、特に、可変サイズの文字列の場合に効率がよくなく、たとえば、文字列をメモリ内でコピーしたり移動したりするときにメモリ空間を浪費することになる。文字列処理がこのように不効率であることは、特に、組み込み型システムなどの省メモリ・システムでは問題になる。メモリ、特にスタック領域、および動的割り当て用の領域のサイズが、省スペース/システムでは制限される。そこで、組み込み型システムなどの省スペース・システム内で実行するプログラムでの文字列処理を効率良く行う方法が望まれる。
【0386】
図33Aは、Cプログラミング言語による代表的文字列表現の図である。Cでは、文字列は、文字列1452の先頭文字のメモリ位置(アドレス)を格納した文字型ポインタ1450(string1)で表される。他の文字は、文字列1452の中の先頭文字の後に続き、通常、メモリ内の連続するアドレス指定可能なバイト位置に格納される。C文字列における文字は通常、8ビットである。C文字列の文字は、ASCII文字である。C文字列は、NULLを終端文字とする必要がある。NULLは、プラットフォームで定義されている256個の使用可能な8ビット値のうちの1つで、通常、2進値0b00000000である。文字列1452は、13バイトを占有する(12個の文字と終端文字を合わせて13個)。
【0387】
Cにおける文字列操作の一例として、strlen()関数があり、これは、通常、標準Cライブラリの実装に付属している。strlen()関数は、入力として文字列ポインタをとり、終端文字を含まない文字列の長さ(バイト)を返す。たとえば、文字ポインタ1450をstrlen()関数に渡すと、長さ12が返される。strlen()関数は、終端文字が見つかるまで文字数を数えながら文字列内を端から端まで走査するという方法で実装できる。
【0388】
Cの文字列コピーは、通常、Cライブラリ関数のstrcpy()またはstrncpy()で処理するが、これは次のように実装されている。
strcpy()関数は、文字ポインタsrcが指している文字列(終端文字を含む)を文字ポインタdestが指している文字列にコピーする。文字列は重なることはなく、コピー先文字列destはコピーを受け入れるだけ十分に大きくなければならない。strncpy()関数も同様であるが、ただし、srcのうちnバイト以下がコピーされる。したがって、srcの先頭nバイトに終端文字がなければ、結果に終端文字は含まれない。必要ならば、strncpy()の後のコードに、終端文字をdest文字列の終わりに追加する命令を入れることができる。srcの長さがn未満の場合、destの残り部分はNULLで埋められる。strcpy()およびstrncpy()関数は、コピー先文字列destへのポインタを返す。図33Bは、文字列1452に対するstrncpy()関数の結果の一例を示しているが、これは以下のパラメータを付けてstrncpy()を呼び出した場合である。
ただし、string2は文字列1452の終端文字の後の最初のバイトを指している文字ポインタ1454であり、string1+3は3バイトだけインクリメントされた文字ポインタ1450であり、5はコピー元の場所string1+3からstring2にコピーする文字の個数(バイト数)である。コピーした後、string1からコピーされた5個の文字の後の次の文字は、終端文字に設定される(文字はコピーの前に終端文字に初期化されている場合がある)。したがって、2つの文字列はメモリ内で(13+6)=19バイトを占有することになる。文字ポインタ1450をコピー元文字列としてstrcpy()関数を適用した場合、元の文字列1452と結果である新しい文字列は(13*2)=26バイトを占有することになる。
【0389】
図33Cは、一般のシステムで、具体的には組み込み型システムなどの省スペース・システムで文字列を表現し、管理する効率的な方法を示す図である。文字列1452は、メモリ内に12バイトとして格納される(終端文字は不要である)。文字列構造1460は、文字列1452の先頭文字と末尾文字へのポインタ(アドレス(A)とアドレス(L))を含む。この文字列構造を使用すると、末尾文字へのポインタから先頭文字へのポインタを引くことで、文字列の長さを効率よく計算できる。
【0390】
文字列コピー操作strcpy()やstrncpy()などの操作も、より効率的に処理できる。図33cに示されているようなものなどの文字列構造を使用して、新しい文字列構造1462を作成し、先頭文字ポインタと末尾文字ポインタを文字列1452内のそれぞれの文字を指すように初期化する。したがって、文字列1452の一部または全部をその文字列用の新しい記憶域にコピーする必要はない。文字列は長さが数百文字あるいは数千文字にさえ達することがあるため、文字列構造とその文字列構造を利用するように実装されている文字列メソッドを使用してメモリを節約することは注目に値する。文字列の一部または全部のコピーを処理するこのような方法のことを、「部分文字列管理」と呼び、文字列の一部(部分文字列)を効率よく処理することができる。
【0391】
標準C文字列ライブラリの他の文字列関数を、図33Cに示されているような文字列構造を利用する文字列関数で置き換えることができる。他のC文字列関数の例として、それに限定されないが、strstr()、strcat()、およびsprintf()がある。図33Cで説明されているような文字列処理構造および方法は、XMLドキュメントの階層構造とともに使用する際に、組み込み型システムなどの省メモリ・システムでXMLテキスト(XMLメッセージなど)を効率よく処理することができる。購買発注書を定義するXMLスキーマの簡単な例を以下に示す。
【0392】
XMLドキュメントの階層構造により、これらを再帰的に処理することができ、それぞれの再帰のレベルで次々にドキュメントのさらに小さな部分を処理してゆく。さまざまな部分への参照が再帰的に記録され、処理される。図33Cに関して説明されているような文字列構造を使用して、さまざまな部分を記録することができる。このようにして、XMLドキュメントの最小単位が再帰的に処理される一実施形態で、特定のXMLタグの内容(上の例の1行)を効率よく決定できる。所定のスコープ内のタグを効率よく列挙し処理できるため、同じスコープ内でタグが繰り返されるドキュメントもまた効率よく処理できる。
【0393】
図33Cで説明しているような文字列構造を使用してXMLドキュメントを処理する再帰的方法では、XMLドキュメント文字列全体を表し、ドキュメント文字列内の先頭バイトと末尾バイトを指している文字列構造を受け付けることができる。この方法では、ドキュメントの次のサブセクションを特定して、そのサブセクションを含むドキュメント文字列全体の部分文字列を表す文字列構造をそのサブセクションの型に対応する処理関数に渡す。サブセクション自体を、サブセクションの型に対応する処理関数に渡される文字列構造により表されるサブセクションの他のレベルに分解できる。この方法は、ドキュメント全体が処理されるまで、XMLドキュメントのサブセクションを再帰的に処理し続けることができる。
【0394】
再帰的処理で文字列構造を使用すると、処理のためサブセクションのコピーを作成しなくても処理を実行できる。サブセクションのコピーは、再帰が深くなるにつれ同じデータのコピーが増えてゆくため、再帰的処理では特にコストがかかる。文字列構造を使用すると、サブセクションの中の先頭バイトと末尾バイトへのポインタを含む文字列構造のみを作成し、次のレベルに引き渡すだけでよい。サブセクションの長さを決定するなどの他の操作は、文字列構造に格納されているアドレス情報を使用することで効率よく実行できる。さらに、文字列構造を使用すると、C文字列の終端に使用される文字などの終端文字は、必要なくなり、組み込み型デバイスなど省スペース・デバイスのメモリを節約できる。
【0395】
オブジェクトのXML表現
前述のように、Jini RMIは、最小限のメモリ占有面積と最低限の帯域幅を備えるシン・クライアントなどのいくつかのクライアントには実用的でないと思われる。Jini RMIと関連するシリアライゼーションは、実行時間が長く、コード・サイズが大きく、JVMリフレクションAPIを必要とし、Java固有オブジェクト表現である。Javaデシリアライゼーションも実行に時間がかかり、コード・サイズが大きく、シリアライズ・オブジェクト・パーサを必要とする。Javaベースのシン・クライアントであっても、Jini内で要求されたときにネットワーク経由で(必ず)返される巨大なJavaオブジェクト(必要なクラスに沿って)を受け入れられない場合がある。
【0396】
分散コンピューティング環境の実施形態を使用するとよりスケーラブルな分散コンピューティング・メカニズムを実現できる。分散コンピューティング環境には、分散コンピューティングを容易に行えるようにするAPIレイヤが含まれる。APIレイヤは、クライアントとサービスとの間のメッセージ発送およびメッセージ受取機能を備える。このメッセージングAPIは、拡張マークアップ言語(XML)など、表現データまたはメタデータ形式による単純メッセージ用のインターフェースを提供する。実施形態はここではXMLを採用しているものについて説明しているが、他の実施形態では他のメタデータ型言語または形式を使用することもできることに注意されたい。いくつかの実施形態では、APIレイヤは、さらに、Javaオブジェクトなど、オブジェクト間の通信やオブジェクトの受け渡しのためのメッセージのインターフェースを備えることもできる。APIレイヤ102を通じてアクセス可能なオブジェクトは、XMLなどの表現データ形式で表現される。そのため、オブジェクト自体とは反対に、オブジェクトのXML表現は操作が可能である。
【0397】
APIレイヤは、メッセージング・レイヤの上に置かれる。メッセージング・レイヤは、XMLなどの表現データ形式に基づいている。一実施形態では、XMLメッセージは、APIレイヤの呼び出しに従って、メッセージング・レイヤによって生成される。メッセージング・レイヤは、クライアントとサービスとの間で送ることができる定義済みの静的メッセージを備えることができる。メッセージング・レイヤは、さらに、動的に生成されるメッセージにも対応できる。一実施形態では、JavaオブジェクトなどのオブジェクトをXML表現に動的に変換(コンパイル)することができる。オブジェクトは、コードおよび/またはデータ部分を含む。オブジェクトのコードおよび/またはデータ部分は、XML表現のXMLタグにより識別されるコード・セグメントとデータ・セグメントにコンパイルすることができる。メッセージング・レイヤにより、XMLオブジェクト表現はメッセージとして送ることができる。逆に、メッセージング・レイヤは、オブジェクトのXML表現を受け取ることができる。その後、そのメッセージからオブジェクトを再構成(逆コンパイル)できる。再構成では、XML表現のコードおよび/またはデータ・セグメントを識別するタグのXML表現を調べ、タグに格納されている情報を使用して、そのオブジェクトのコードおよび/またはデータ部分を識別し、逆コンパイルする。
【0398】
オブジェクトのXML表現の作成と発送
図34は、一実施形態により、クライアント1500とサービス1502の間でJavaオブジェクトを移動するプロセスを示す図である。サービス1502は、スペース・サービスを含む、分散コンピューティング環境でサポートされているサービスであればどのようなものでもよい。クライアント1500は、サービス1502のサービス通知から受け取ったXMLスキーマを使用して作成したゲート1504を使用し、サービス1502の対応するゲート1506と通信する。ある時点で、クライアント1500は、Javaオブジェクト1510をサービス1502に送る必要がある。Javaオブジェクト1510は、他のオブジェクトを参照し、次にこのオブジェクトは他のオブジェクトを参照し、というように続いてゆく。Javaオブジェクト1510とその参照されているオブジェクト、次に参照するオブジェクト、というように続くことを、オブジェクト・グラフと呼ぶ。
【0399】
Javaオブジェクト1510は、Javaオブジェクト・コンパイル・プロセス1512に渡されてコンパイルされ、オブジェクト・グラフのXML表現を出力する。オブジェクト・グラフのXML表現は、XMLデータ・ストリーム1514としてゲート1504に渡される。XMLデータ・ストリーム1514は、オブジェクト・グラフ内のすべてのオブジェクトのXML表現を含む。一実施形態では、オブジェクト・グラフ内のオブジェクトは、XMLデータ・ストリーム1514内に再帰的に格納される。
【0400】
ゲート1504は、その後、XMLデータ・ストリーム1514をメッセージ1516にパッケージして、メッセージ1516をサービス1502のゲート1506に送る。ゲート1506は、XMLメッセージ1516からXMLデータ・ストリーム1514を抽出して、XMLデータ・ストリーム1514をXMLデータ・ストリーム逆コンパイル・プロセス1518に送り、逆コンパイルを行い、Javaオブジェクト1510を含むオブジェクト・グラフを備えるオブジェクトを出力する。一実施形態では、オブジェクト・グラフ内のオブジェクトは、XMLデータ・ストリーム1514内に再帰的に格納され、したがって、再帰的逆コンパイル・プロセスが使用される。
【0401】
サービス1502でJavaオブジェクトをクライアント1500に送る必要がある場合、実質的に類似するプロセスを使用できる。Javaオブジェクト1520は、Javaオブジェクト・コンパイル・プロセス1512に渡されてコンパイルされ、オブジェクト・グラフのXML表現を出力する。オブジェクト・グラフのXML表現は、XMLデータ・ストリーム1522としてゲート1506に渡される。ゲート1506は、その後、XMLデータ・ストリーム1522をメッセージ1524にパッケージして、メッセージ1524をクライアント1500のゲート1504に送る。ゲート1504は、XMLメッセージ1524からXMLデータ・ストリーム1522を抽出して、XMLデータ・ストリーム1522をXMLデータ・ストリーム逆コンパイル・プロセス1518に送って逆コンパイルを行い、Javaオブジェクト1520を含むオブジェクト・グラフを備えるオブジェクトを出力する。
【0402】
他の実施形態では、ゲートはJavaオブジェクトのコンパイルおよび逆コンパイルを実行する役目を持つ。この実施形態では、Javaオブジェクト1510はゲート1504に渡される。ゲート1504は、オブジェクト1510をJavaオブジェクト・コンパイル・プロセス1512に渡してコンパイルし、オブジェクト・グラフのXML表現をXMLデータ・ストリーム1514に出力する。ゲート1504は、その後、XMLデータ・ストリーム1514をメッセージ1516にパッケージして、メッセージ1516をサービス1502のゲート1506に送る。ゲート1506は、XMLメッセージ1516からXMLデータ・ストリーム1514を抽出して、XMLデータ・ストリーム1514をXMLデータ・ストリーム逆コンパイル・プロセス1518に送って逆コンパイルを行い、Javaオブジェクト1510を含むオブジェクト・グラフを備えるオブジェクトを出力する。Javaオブジェクトをサービス1502からクライアント1500に送るプロセスは、オブジェクトをクライアントからサービスに送るプロセスと実質的に類似している。
【0403】
一実施形態では、オブジェクト・コンパイル・プロセス1512とオブジェクト逆コンパイル・プロセス1518は、両方とも、クライアント1500とサービス1502に存在し、プログラムする際に、コンパイルと逆コンパイルを2つのデバイスで実質的に同じように実行できるため、一方のオブジェクト出力は他方のオブジェクト入力と実質的に同一である。一実施形態では、Javaオブジェクトの記述を含むXMLスキーマをコンパイル・プロセスや逆コンパイル・プロセスにおいてクライアントおよび/またはサービスの両方で使用できる。一実施形態では、Javaオブジェクトのコンパイルや逆コンパイルで使用するXMLスキーマをサービスにより、サービス通知でクライアントに渡すことができる。
【0404】
XMLでは、言語独立およびプラットフォーム独立のオブジェクト表現形式を備えている。したがって、オブジェクトをオブジェクトのXML表現にコンパイルし、逆コンパイルしてオブジェクトを再現する場合に、図34に示されているようなプロセスは、Javaオブジェクトの移動に限られず、実施形態によっては、ネットワーク内のエンティティ間で他の型のオブジェクトを移動するのにも適用される。
【0405】
JVMコンパイル/逆コンパイルAPI
図35aおよび図35bは、仮想マシン(たとえば、JVM)がオブジェクト(たとえば、Javaオブジェクト)をオブジェクトのXML表現にコンパイルする拡張機能および(Java)オブジェクトのXML表現を(Java)オブジェクトに逆コンパイルする拡張機能を含む実施形態を示すデータ流れ図である。JVMは、コンパイル/逆コンパイル拡張機能のアプリケーション・プログラミング・インターフェース(API)を備えることができる。クライアント1500およびサービス1502は、JVM内で実行中の場合がある。JVMは、同じデバイスまたは異なるデバイスに置くことができる。
【0406】
図35aと図35bの両方で、JVM XMLコンパイラ/逆コンパイラAPI1530は、Javaオブジェクト1510を入力として受け付け、オブジェクト1510とその参照されているオブジェクト(オブジェクト1510のオブジェクト・グラフ)のXML表現をXMLデータ・ストリーム1514に出力する。さらに、JVM XMLコンパイラ/逆コンパイラAPI 1530は、XMLデータ・ストリーム1522を受け付けることができ、これは、オブジェクト1520のXML表現とその参照されているすべてのオブジェクト(オブジェクト1520のオブジェクト・グラフ)を含み、Javaオブジェクト1520(およびそのオブジェクト・グラフ内のすべてのオブジェクト)を出力する。
【0407】
図35aは、Javaオブジェクト1510を送るときにクライアントがJVM XMLコンパイラ/逆コンパイラAPI1530を呼び出す場合の一実施形態を示している。クライアント1510は、Javaオブジェクト1510をAPI 1530に渡し、オブジェクトをコンパイルして、XML表現を出力し、そのXML表現をXMLデータ・ストリーム1514に格納し、XMLデータ・ストリーム1514を出力する。その後、クライアントは、XMLデータ・ストリーム1514をゲート1504に渡すことができる。ゲート1504は、その後、XMLデータ・ストリーム1514をXMLメッセージ1516にパッケージして、メッセージ1516をサービス1502に送る。
【0408】
XMLメッセージ1524をサービス1502から受け取った後、ゲート1522はメッセージ1524からXMLデータ・ストリーム1522を抽出し、データ・ストリーム1522をクライアント1500に渡す。クライアント1500は、JVM XMLコンパイラ/逆コンパイラAPI 1530を呼び出して、API 1530にXMLデータ・ストリーム1522を渡す。その後、API 1530はXMLデータ・ストリーム1522を逆コンパイルして、Javaオブジェクト1520およびその他のオブジェクトをそのオブジェクト・グラフに出力し、オブジェクトをクライアント1500に返す。
【0409】
図35bは、Javaオブジェクト1510を送るときにJVM XMLコンパイラ/逆コンパイラAPI 1530がゲートによって呼び出される場合の他の実施形態を示している。クライアント1510は、Javaオブジェクト1510をゲート1504に渡す。ゲート1504は、オブジェクト1510をAPI 1530に渡し、オブジェクトをコンパイルしてXML表現を出力し、そのXML表現をXMLデータ・ストリーム1514に格納し、XMLデータ・ストリーム1514を出力する。ゲート1504は、その後、XMLデータ・ストリーム1514をXMLメッセージ1516にパッケージして、メッセージ1516をサービス1502に送る。
【0410】
XMLメッセージ1524をサービス1502から受け取った後、ゲート1522はメッセージ1524からXMLデータ・ストリーム1522を抽出し、データ・ストリーム1522をJVM XMLコンパイラ/逆コンパイラAPI 1530に渡す。その後、API 1530はXMLデータ・ストリーム1522を逆コンパイルして、Javaオブジェクト1520およびその他のオブジェクトをそのオブジェクト・グラフに出力する。そしてゲートは、Javaオブジェクト1520とその他のオブジェクトをクライアント1500に送る。
【0411】
一実施形態では、JVM XMLコンパイラおよび逆コンパイラは、JVMの統合された機能として実装することができる。他の実施形態では、XMLコンパイラおよび逆コンパイラは、JVMの標準拡張機能でのAPIメソッド呼び出しで具現化することができ、そのため、コアJVMを修正する必要はない。JVMは、JVM内で実行するプロセス(クライアントおよび/またはサービス)にJVM XMLコンパイラ/逆コンパイラAPI 1530を供給するため、プロセスはJVMによって提供されているJavaオブジェクト・コンパイル/逆コンパイル機能にアクセスすることができる。一実施形態では、プロセスがオブジェクト・コンパイル/逆コンパイルを利用するために、そのプロセスで実行されるJVMにJVM XMLコンパイラ/逆コンパイラ機能とAPI 1530を備える必要がある。リフレクションとシリアライゼーションを使用してオブジェクトを変換して送るメソッドは、通常、JVMから切り離された別のアプリケーションで実装される。オブジェクトの推移的閉包(trasitive closure)を動的に解析するときに、アプリケーション側がJVMに繰り返しアクセスし、一度にフィールド1つずつオブジェクトを取り出す必要がある。この作業は、遅くかつやっかいなプロセスになりがちであり、またアプリケーションとJVMコードが大量に必要になる。
【0412】
JVM内にJavaオブジェクト・コンパイル/逆コンパイル機能を実装することが好都合なのは、JVMがすでにオブジェクト・グラフの概念、および内容を理解しているからである。そこで、コンパイル/逆コンパイル機能で、XML表現を出力するためのオブジェクト・グラフの解析とオブジェクト・グラフを出力するためのXML表現の解析にJVMの知識を活用(そして、コードを再利用し)することができる。したがって、コンパイル/逆コンパイル機能では、リフレクションとシリアライゼーションを使用するオブジェクト送出メソッドの場合のように、JVMによって提供される機能を複製してはならない。これにより、コンパイル/逆コンパイル機能のコード占有領域を、リフレクションおよびシリアライゼーションを使用するオブジェクト送出メソッドと比べて小さくすることができる。また、オブジェクトは、JVM XMLコンパイラ/逆コンパイラAPIを1回呼び出すだけでコンパイルまたは逆コンパイルすることができる。
【0413】
さらに、オブジェクトのコンパイル逆コンパイルをJVMに統合することにより、オブジェクトのコンパイルおよび逆コンパイルを、リフレクションおよびシリアライゼーションを使用したメソッドよりも高速に実行することができる場合があるが、それは、リフレクションおよびシリアライゼーションで実装されたオブジェクト・トラバーサル・モデルでは、JVMの外部にあるコードはJavaオブジェクトの構造またはグラフを認識せず、オブジェクト・グラフをトラバースして、引き離し、最終的に、JVMを繰り返し呼び出してコンパイル(および逆コンパイルのための反転プロセス)を実行する必要があるからである。このプロセスは、コードの外部で、JVMの呼び出しを繰り返し実行する必要があるため、遅くなることがある。ここで説明したように、コンパイルおよび逆コンパイル機能をJVMに統合することにより、JVMの外部のコードからJVMへ繰り返し呼び出しを行わなくて済むようになる。一実施形態では、オブジェクトは、JVM XMLコンパイラ/逆コンパイラAPIを1回呼び出すだけでコンパイルまたは逆コンパイルすることができる。
【0414】
一実施形態では、コンパイラ/逆コンパイラ機能は分散コンピューティング環境におけるサービスとして実装できる。サービスは、スペース内でサービス通知をパブリッシュする。分散コンピューティング環境内のプロセスは、サーチまたは発見サービスを使用して、コンパイル/逆コンパイル・サービスを特定することができる。このプロセス(サービスのクライアント)は、次に、XML表現にコンパイルするJavaオブジェクトおよび/またはJavaオブジェクトに逆コンパイルするXML表現サービスに渡すことによりそのサービスを使用できる。Javaオブジェクトにコード(オブジェクトのメソッド)およびデータを含めることができる。オブジェクトのコードは、非一時的でなく、オブジェクトが作成された後このコードは変更されない。ただし、オブジェクトのデータは一時的な場合がある。同じJavaクラスから作成された2つのオブジェクトは、同一のコードを含んでいても、2つのオブジェクト内のデータが異なることがある。一実施形態では、コンパイル機能はJavaオブジェクトのデータをオブジェクトのXML表現にコンパイルするが、XML表現の中にオブジェクトの実際のコードが含まれない場合がある。一実施形態では、オブジェクトに関する情報をコンパイルされたXML表現の中に挿入し、そのオブジェクトのコードの再作成方法を受取側に通知するようにできる。XML表現をXMLデータ・ストリームに格納し、受け取り側プロセス(クライアントまたはサービス)に(たとえば、メッセージで)送ることができる。受け取り側プロセスは、XMLデータ・ストリームを逆コンパイル機能に渡すことができる。逆コンパイル機能は、XMLデータ・ストリームを逆コンパイルして、そのデータを含むJavaオブジェクトを出力することができる。一実施形態では、オブジェクトのコードは、XML表現に含まれるオブジェクトに関する情報を使用して逆コンパイル機能により再現することができるが、それはオブジェクトのコードが静的に定義され、そのオブジェクトを受け取るJVMがオブジェクトについての情報を利用して(必要ならば)そのコードを再現することができるからである。
【0415】
一実施形態では、コンパイル機能によって出力されたオブジェクトのXML表現に、にJavaオブジェクトのデータおよびそのJavaオブジェクトに関する情報を格納することができる。その情報は、Javaオブジェクトのクラス情報を含むことができる。オブジェクト・シグネチャを情報に含め、そのシグネチャを利用して、オブジェクトのクラスなどを識別することができる。逆コンパイル機能では、Javaオブジェクトに関する情報を使用してJavaオブジェクトのコードを再作成し、XMLデータ・ストリームからデータをJavaオブジェクトに逆コンパイルすることができる。したがって、逆コンパイルされたデータとオブジェクトを記述している情報から受け取り側クライアントまたはサービスを実行しているJVM上でコードとデータを含む完全なオブジェクトを再現することができる。一実施形態では、オブジェクトを記述する情報を1つまたは複数のXMLタグの中に格納することができる。一実施形態では、XMLデータ・ストリームを受け取るクライアントまたはサービスはオブジェクトを記述するXMLスキーマを含むことができ、またXMLスキーマを使用して、逆コンパイルされたデータとそのオブジェクトに関する情報からJavaオブジェクトを再構成することができる。逆コンパイル・プロセスは、オブジェクト・グラフを再帰的にたどり、オブジェクトによって参照されているオブジェクトを再構成するが、この作業は、XMLデータ・ストリームから参照されているオブジェクトのデータを逆コンパイルし、そのXMLデータ・ストリーム内の参照されているオブジェクトに関する情報から参照されているオブジェクトのコードを再作成することで行う。
【0416】
一実施形態では、コンパイル機能によって出力されたオブジェクトのXML表現に、オブジェクトのデータおよびオブジェクトのコードを識別する情報を格納することができる。一実施形態では、オブジェクトのコードを記述する情報をXMLデータ・ストリーム内の1つまたは複数のXMLタグの中に格納することができる。受け取ると、逆コンパイル機能はXMLデータ・ストリームからのコードに関する情報を使用してJavaオブジェクトのコードを再作成し、XMLデータ・ストリームからオブジェクトのデータを逆コンパイルすることができる。したがって、逆コンパイルされたデータとオブジェクトのコードを記述している情報から受け取り側クライアントまたはサービスを実行しているJVMでコードとデータを含む完全なオブジェクトを再現することができる。
【0417】
オブジェクトのXML表現を使用して分散コンピューティング環境内のエンティティ(通常、クライアントとサービス)間でオブジェクトを転送するシナリオを説明のため取り上げる。これらのシナリオは、例であり、制限することを意図していない。
【0418】
第1のシナリオでは、サービスはXMLコンパイラ/逆コンパイラを使用して、JavaオブジェクトをそのオブジェクトのXML表現にコンパイルし、そのXML表現をクライアントに送る。クライアントは、XMLコンパイラ/逆コンパイラを使用してXML表現を逆コンパイルし、オブジェクト内のデータに対し操作を実行し、後でXMLコンパイラ/逆コンパイラを使用してそのオブジェクトをオブジェクトのXML表現にコンパイルし、そのオブジェクトのXML表現をサービスに返す。
【0419】
第2のシナリオでは、サービスはXMLコンパイラ/逆コンパイラを使用して、JavaオブジェクトをそのオブジェクトのXML表現にコンパイルし、そのXML表現をクライアントに送る。次に、クライアントはXML表現を他のサービスに送り、これはXMLコンパイラ/逆コンパイラを使用してXML表現を逆コンパイルしてオブジェクトを再生成し、クライアントから(場合によってはデータを修正する)要求があったときにオブジェクトに対し操作を実行し、XMLコンパイラ/逆コンパイラを使用してその修正されオブジェクトをそのXML表現に再コンパイルし、そのオブジェクトのXML表現をクライアントに送る。
【0420】
第3のシナリオでは、サービスはXMLコンパイラ/逆コンパイラを使用して、JavaオブジェクトをそのオブジェクトのXML表現にコンパイルし、そのXML表現をオブジェクト・リポジトリまたはストア・スペースに送る。サービスは、次に、メッセージをクライアントに送り、XML表現の位置をクライアントに知らせる。メッセージは、XML表現のUniversal Resource Identifier(URI)を含む。その後、クライアントはストア・スペースからオブジェクトのXML表現を取り出し、XMLコンパイラ/逆コンパイラを使用してその表現を逆コンパイルしてオブジェクトを再現する。それとは別に、クライアントはオブジェクトのXML表現の位置を、そのオブジェクトで実行する操作の要求とともに他のサービスに送る。その後、他のサービスはストア・スペースからXML表現を取り出し、XMLコンパイラ/逆コンパイラを使用してXML表現を逆コンパイルしオブジェクトを再現して、オブジェクトに対し要求された操作を実行する。
【0421】
第4のシナリオでは、プロセス(クライアントまたはサービスの場合がある)は、ストア・スペースでサービス通知をサーチして見つけることにより、分散コンピューティング環境内のオブジェクト・リポジトリまたはストア・スペースを特定することができる。プロセスは、実行時に、複数のJavaオブジェクトを作成し、取得する。プロセスは、XMLコンパイラ/逆コンパイラを使用して、1つまたは複数のオブジェクトをオブジェクトのXML表現にコンパイルし、ストア・スペース・サービスのクライアントとして、オブジェクトのXML表現をストア・スペースに送り、後でアクセスできるように、また他のプロセスによってアクセスできるように格納する。
【0422】
オブジェクトのXML表現の逆コンパイルにおけるセキュリティ問題
スペースは、ここで説明しているように、分散コンピューティング環境でファイル・システムとして使用できる。システム内のファイルに対してはセキュリティをアクセス権限の形で提供する。アクセス権限は、ファイルのアクセス(開く、読み込む、書き出すの操作)ごとにチェックされる。したがって、分散コンピューティング環境でファイルのアクセス・セキュリティを実現する方法が望まれる。この方法はさらに、スペースに格納され、分散コンピューティング環境内のクライアントとサービスとの間で送られるJavaオブジェクトのXML表現に適用できる。
【0423】
一実施形態では、分散コンピューティング環境のデバイスのクライアントのユーザは、最初にクライアントにアクセスしたときに識別され、認証される。一実施形態では、ユーザは、識別と承認のためにスマート・カードなどの物理的識別機能を提供することができる。他の実施形態では、チャレンジ応答メカニズム(ユーザIDとパスワードなど)を使用して、識別と承認を行うことができる。さらに他の実施形態では、識別と承認に電子シグネチャなどの電子識別を使用する。識別と承認に他の方法を使用することもできる。識別されて承認されると、ユーザは、分散コンピューティング環境で1つまたは複数のサービスにアクセスすることを含む、クライアント上のさまざまな操作を実行できる。これらの操作のときに、上述のように、1つまたは複数のオブジェクトを作成する(ローカルで)か、またはどこか他のところ(たとえば、サービスまたはスペース)から取得することができる。オブジェクトは、修正して、オブジェクトのXML表現にコンパイルし、ローカルで、クライアントによって格納するか、または(遷移的または永続的)ストアのためスペース・サービスに送ることができる。オブジェクトのいくつかはサービスからオブジェクトのXML表現の形式で(サービスまたは他のサービスで格納)受取され、これは、XMLコンパイラ/逆コンパイラによって逆コンパイルされ、クライアント上にオブジェクトを再作成することができる。
【0424】
一実施形態では、オブジェクトのXML表現を逆コンパイルするときに、それぞれのXMLメッセージをチェックし、ユーザがそのオブジェクトに対するアクセス権限を持っていることを検証する。ユーザが適切なアクセス権限を持っていない場合、XMLコンパイラ/逆コンパイラはそのユーザに対してオブジェクトを逆コンパイルしない。一実施形態では、XMLコンパイラ/逆コンパイラによってセキュリティ例外がスローされる。一実施形態では、ユーザに対しアクセス違反が知らされる。
【0425】
オブジェクトに対し許されている作成者およびアクセス・レベル(作成者のみアクセス、読み取り専用、読み書き、削除、コピーなど)などのアクセス権限情報は、オブジェクトのXML表現を含むXMLメッセージ内に埋め込むことができる。アクセスの承認は、ユーザの識別と承認を行う際に決定される。たとえば、オブジェクトは、ほとんどのユーザに対し「読み取り専用」アクセスを許可し、オブジェクトの作成者には「読み書き」アクセスを許可する。ユーザが読み書きアクセス権限を使用してオブジェクトにアクセスしようとし、ユーザがオブジェクトを作成していなかった場合、逆コンパイル・プロセスにより、これがアクセス違反として検出され、アクセスが不許可になり、ユーザは通知を受ける。
【0426】
一実施形態では、ユーザがクライアントを使用して完了した場合、ユーザはログオフするか、またはそうでなければ、ユーザがクライアントを終了した(たとえば、スマート・カードを削除した)ことを通知する。逆コンパイルによりクライアント上に作成されたオブジェクトは、ユーザは終了したことをクライアントが検出したときに、自動的に検出される。このため、後からのユーザが故意にまたはうっかりそのユーザのオブジェクトにアクセスしようとしてもできない。一実施形態では、逆コンパイルによって作成されたすべてのオブジェクトは、ユーザが終了したことが検出されたときに削除される。他の実施形態では、クライアント上に永続的に作成されたオブジェクトの少なくとも一部を格納する方法が用意され(たとえば、アクセス権限情報を使用して)、これによりクライアントが後でオブジェクトにアクセスしたり、オブジェクトを他のユーザに提供してアクセスできるようにする。一実施形態では、ユーザは「スマート・カード」またはその他の物理的デバイスを使用し、クライアントへのアクセス権を取得する。ユーザは、スマート・カードをクライアント・デバイスに差し込んで、セッションを開始することができる。クライアントは、終了すると、スマート・カードを取り出す。クライアントは、スマート・カードが取り出されたことを検出し、クライアントが終了していることを検出し、その後、XML表現の逆コンパイルによって作成されたオブジェクトの削除へ進む。
【0427】
XMLベースのオブジェクト・リポジトリ
分散コンピューティング環境では、プロセス(サービスおよび/またはクライアント)には、XMLスキーマ、サービス通知、サービスによって生成された結果、JavaオブジェクトのXML表現、および/または他の言語で実施されたオブジェクトなどの一時的および/または永続的記憶域があると望ましい場合がある。既存のオブジェクト記憶技術は、言語および/またはオペレーティング・システム固有のものになりがちである。これらの記憶域システムは、また、組み込み型システムなどの省スペース・システムで使用するには複雑すぎる傾向もある。
【0428】
JiniのJavaSpacesは、既存のオブジェクト・リポジトリ・メカニズムである。JavaSpacesは、Javaオブジェクトを格納することしかできず、メモリ容量に制限のある小型デバイスには大きすぎて実装できない。JavaSpaceの各オブジェクトは、前記のようにシリアライズされ、そのため、リフレクションおよびシリアライゼーション手法について前述したのと同じ制限がある。
【0429】
異機種混在の(言語またはオペレーティング・システム依存でない)、小型デバイスから大型デバイスまで拡張性のある、オブジェクトの一時的記憶域または永続的記憶域を提供できる分散コンピューティング環境向けのストア・メカニズムを提示する。一実施形態では、分散コンピューティング環境でのストア・メカニズムは、XMLマークアップ言語で定義されているインターネットWebページまたはページ・セットとして実装することができる。XMLは、言語独立およびプラットフォーム独立のオブジェクト表現形式を用意し、Javaおよび非Javaソフトウェアが言語独立オブジェクトを格納し、取り出すことができるようにしている。ストア・メカニズムはWeb上にあるため、すべての型およびサイズ(小型から大型まで)のデバイスでストア・メカニズムにアクセスできる。Webブラウザーを使用して、Webページとして実装されているストア・メカニズムを表示することができる。Webサーチ・エンジンを使用して、Webページとして実装されているストア・メカニズム内のコンテンツをコンテンツすることができる。インターネット管理メカニズム(既存および将来の)およびXMLツールを使用して、XMLベースのストア・メカニズムを管理することができる。
【0430】
一実施形態では、ストア・メカニズムを使用して、XMLで作成され、表現され、またはカプセル化されたオブジェクトを格納することができる。ストア・メカニズムに格納できるオブジェクトの例として、それには限定されないが、XMLスキーマ、オブジェクトのXML表現(たとえば、上述のようにXML表現にコンパイルされたJavaオブジェクト)、サービス通知、およびXMLでカプセル化されたサービス結果(データ)がある。一実施形態では、XMLオブジェクトの無許可アクセスを防止するために、電子シグネチャや証明書などの承認証明書をXMLオブジェクトに付属させ、XMLオブジェクトにアクセスすることを望んでいるクライアントがXMLオブジェクトにアクセスするための適切な承認証明書を持つことを義務づける。一実施形態では、ストア・メカニズムは、「スペース」の項で説明したようにスペースであってもよい。
【0431】
分散コンピューティング環境では、ストア・メカニズムはサービスである。サービスとして実装されたストア・メカニズムは、「ストア・サービス」と呼ばれる。ストア・サービスは、スペース内で通知をパブリッシュする。スペース自体はストア・サービスの一例である。一部のストア・サービスは一時的である。たとえば、サービス通知を格納するスペース・サービスは一時的ストアである。他のストア・サービスは永続的である。たとえば、サービスからの結果を格納するストア・サービスは永続的ストアである。
【0432】
図36は、一実施形態により分散コンピューティング環境でストア・メカニズム1600および1602にアクセスするクライアント1604およびサービスA 1606の図である。この図は、例示を目的としており、本発明の範囲に限定することを求めていない。一実施形態では、ストア・メカニズム1600および1602はそれぞれ、ウェブ・ブラウザおよび他のインターネット・ツールによってアクセス可能なインターネット・ウェブ・ページまたはXMLで定義されるウェブ・ページの集合である。ストア・メカニズム1600は、XMLを使用して実装されたオブジェクトを格納できる一時的ストアである。ストア・メカニズム1602は、これもまたXMLを使用して実装されたオブジェクトを格納できる永続的ストアである。サービスA 1606は、一時的ストア1600でXMLサービス通知1608をパブリッシュする。永続的ストアは、さらに、一時的ストア1600に(または分散コンピューティング環境内の他の一時的ストアに)XMLサービス通知をパブリッシュすることもできる。ある時点で、クライアント1604は、サービスA 1606によって提供される機能を必要とする。クライアント1604は、発見および/またはルックアップ・サービスを使用して、サービス通知1608を特定する。クライアント1604は、ここで説明しているように、メッセージ・ゲートを構築し、サービスA 1606との通信を開始する。クライアント1604は、1つまたは複数のXML要求メッセージをサービスA 1606に送る。サービスA 1606は、その1つまたは複数の要求メッセージに応答して1つまたは複数の機能を実行する。サービスA 1606によって実行される機能の1つまたは複数により、クライアント1604に送る結果を出力する。
【0433】
一時的結果1610については、サービスA 1606は、XML通知1612で結果をカプセル化し、通知1612を一時的ストア1600に(または分散コンピューティング環境内の他の一時的ストアに)パブリッシュする。その後、サービスA 1606は、結果1610が一時的ストア1600の通知1612に格納されることをクライアント1604に通知するか、またはここで述べたように他のメカニズムによりクライアント1604に通知することができる。クライアント1604は、その後、通知1612から一時的結果1610を取り出す。通知1612は、一時的結果1610のフォーマット、コンテンツ、型などを記述するXMLスキーマを含む。結果は、XMLでカプセル化される。たとえば、XMLタグを使用して、次のようにデータの一部を記述することができる。
【0434】
永続的結果1618については、サービスA 1606はサービスまたはここで説明されているようなその他のメカニズムを使用して、永続的ストア1602のXMLサービス通知1616を特定し、永続的結果を格納するため永続的ストア1602を特定する。それとは別に、クライアント1604は、サービス通知1616を特定することにより、すでに永続的ストア1602を特定しており、永続的結果1618の記憶場所のUniversal Resource Identifier(URI)をXMLメッセージでサービスAに送る。一実施形態では、永続的結果1618は、XMLで定義され、Webブラウザによりアクセス可能なインターネットWebページまたはWebページ・セットに格納される。その後、サービスA 1606は、永続的ストア1602に永続的結果1618を格納する。続いてサービスA 1606は、永続的結果1618のXML通知1616を一時的ストア1600に(または分散コンピューティング環境内の他の一時的ストアに)パブリッシュし、通知1616の位置をクライアント1604に返す。通知1616は、永続的結果1618のフォーマット、コンテンツ、型などを記述するXMLスキーマを含む。結果は、前述のようにXMLでカプセル化される。通知はさらに、永続的結果1618のURIを含む。クライアント1604は、次に、通知1616を取り出し、これを使用して永続的結果1618を特定し、取り出す。それとは別に、サービスA 1606は、永続的結果1618の通知をパブリッシュせず、その代わりに、クライアント1604が通知をルックアップせずに結果にアクセスできるように、永続的結果1618のURIをクライアント1604に返す。いくつかの実施形態では、一時的ストア1600に示されるさまざまな通知はそれぞれ、異なる一時的ストアまたはスペースに格納できることに注意されたい。
【0435】
したがって、ストア・メカニズムは、分散コンピューティング環境内でXMLベースのインターネットWebページとして実装することができる。これらのストア・メカニズムは、分散コンピューティング環境内のさまざまなデバイスに実装され、クライアント(他のサービスでもよい)がストア・メカニズムを特定し使用できるようにするサービス通知を実現する。ストア・メカニズムを管理するために使用できるWebおよびXMLツールは既存のものでもこれからのものでもよい。ストア・メカニズムは、XMLで実装されたまたはカプセル化されたさまざまな型のオブジェクトを格納できる。クライアントは、省スペース・デバイスからスーパー・コンピュータに至るまで実質的にいかなるサイズのデバイスのクライアントであっても、ストア・メカニズムにアクセスして、インターネット上でさまざまなオブジェクトを格納し取り出すことができる。クライアントは、XMLによって定められている言語独立の記憶形式であれば、Javaアプリケーションでも非Javaアプリケーションでもよい。一時的または永続的オブジェクト・リポジトリは、分散コンピューティング環境内のファイル・システムに対応しており、ここで説明しているように、アクセス・チェックおよびその他のセキュリティ・メカニズムの機能を備える。
【0436】
JavaオブジェクトをXMLドキュメントに動的に変換する
一実施形態では、分散コンピューティング環境はオブジェクト・クラス・インスタンスをXMLドキュメントに変換しそれを表現するメカニズムを備える。クラス・インスタンスの表現を他のサービスに送るために、オブジェクトは変換されXMLドキュメントとして表現される。一実施形態では、XMLドキュメントを受け取ると、プログラムがドキュメントによって表現されたオブジェクトに対応するクラス・インスタンスをインスタンス化する。一実施形態では、オブジェクトはJavaオブジェクトであり、プログラムはJavaプログラムである。
【0437】
一実施形態では、中間形式を使用してXMLドキュメントを表現し、この中間形式を動的に処理して、XMLドキュメントを表現するクラス・インスタンスを生成することができる。クラスによって、一組のインスタンス変数とインスタンス変数にアクセスするための「セットアンドゲット」メソッドを定義する。対応するXMLドキュメントを一組のタグとして定義し、インスタンス変数ごとに1つのタグを割り当てることができる。ドキュメントの解析を行うときに、ハッシュ可能な表現を構築し、ハッシュ鍵にインスタンス変数名を含め、値にインスタンス変数値を入れる。複合インスタンス変数が複数出現する場合、列挙型値をそのハッシュ・テーブルに格納することができる。一実施形態では、プロセスをインスタンス変数について複合型のうちただ1つのレベルに制限し、要素を均質的なものとすることができる。
【0438】
一実施形態では、保護されたインスタンス変数を、対応するクラスの名前を含めることができるクラス定義に追加することができる。XMLドキュメント表現ではクラス名をドキュメント型として使用できる。ドキュメントにクラス名を埋め込むと、オブジェクトを再構築するときに、正しいクラス・インスタンスのインスタンス化を動的に行うことができる。
【0439】
一実施形態では、ドキュメントを受け取った後、クラス・インスタンス・ジェネレータ・メソッドを使用して、クラス型を抽出し、ドキュメントを解析して中間ハッシュ・テーブル表現を生成することができる。ジェネレータ・メソッドは、新しいクラス・インスタンスをインスタンス化し、セット・メソッドを使用してハッシュ・テーブル値からインスタンス・オブジェクトを初期化することができる。一実施形態では、クラス型が定義され、ハッシュ・テーブルは汎用なので、このプロセスは、上のクラス定義にマッチするクラスに対して実行される。一実施形態では、反転プロセスも実行することができ、クラス・インスタンスを処理して中間ハッシュ・テーブルの表現にし、ジェネレータ・メソッドを使用してハッシュ・テーブル表現からXMLドキュメントを出力することができる。このプロセスはさらに、上の指定にマッチするXMLドキュメントについて実行できるように汎用なものとすることもできる。
【0440】
このメソッドは、Javaクラス・オブジェクトに制限する意図はなく、他のプログラミング言語のクラス・オブジェクト・インスタンスを含む、他のコンピュータベースのオブジェクトにも適用される。さらに、このメソッドは、オブジェクト・インスタンスのXML表現に制限する意図はなく、他のデータ表現言語(HTMLなど)など他の表現形式をXMLの代わりに使用することもできる。
【0441】
XMLベースのプロセスの移行
分散コンピューティング環境では、配布されるアプリケーションの配布および管理を行える。たとえば、分散コンピューティング環境には、モニタ、プリンタ、キーボード、およびPDA、携帯電話などのモバイル・デバイスには通常装備されないさまざまなその他の入出力デバイスを備えるステーションとドッキング可能なモバイル・クライアントが含まれる。これらのモバイル・クライアントは、1つまたは複数のアプリケーションを実行し、分散コンピューティング環境において、一方のステーションから他方のステーションに移行することができる。したがって、分散コンピューティング環境の一実施形態では、分散コンピューティング環境内の一方のノードのモバイル・クライアントから他方のノードの同じモバイル・クライアントまたは他方のモバイル・クライアントに現在状態全体を保持したまま実行中アプリケーション(プロセス)を移行する方法を提示する。
【0442】
一実施形態では、クライアントまたはサービス上で実行しているプロセスの状態のXML表現を作成する。一実施形態では、プロセスの状態のXML表現は、プロセスが実行されているデバイスおよび/または仮想マシンの計算状態を含み、デバイスおよび/または仮想マシンの計算状態はデバイスおよび/または仮想マシン上のプロセスの実行状態に関する情報を含む。プロセス状態は、それに限定されないが、スレッド、スレッドによって参照されているすべてのオブジェクト、プロセスの実行中に作成される一時的変数、オブジェクト、およびそのデータなどである。一実施形態では、プロセスによってスペースから得られ、プロセスが実行されているデバイスおよび/または仮想マシンの外部にある外部サービスへのアクセス権の付与を表す1つまたは複数のリースを記述するデータは、XMLで表され、プロセス状態とともに格納される。リースについては、本書の「リース」の項で詳述する。
【0443】
ここで説明しているようにXMLおよびメッセージング・システムを使用すると、プロセスの状態のXML表現を分散コンピューティング環境内のノードからノードへ、たとえばインターネット上のノードからノードへ移動することができる。プロセスの状態のXML表現はさらに、上述のようにXMLベースのストア・メカニズムによりXMLオブジェクトとして格納することができ、後から、ストア・メカニズムから取り出して、同じノード上、または分散コンピューティング環境内の異なるノード上でプロセスの実行を再開することができる。一実施形態では、ここで説明しているようにXMLオブジェクトのコンパイル/逆コンパイル・プロセスを使用して、プロセスの状態のXML表現を作成(コンパイル)し、プロセスの状態のXML表現を逆コンパイルすることによりプロセスの状態を再生成することができる。
【0444】
このメカニズムを使用することにより、プロセスの状態のXML表現を初期ノードから、スペースなどのXMLベースのストア・メカニズムに格納することができる。それ以降、他のノードでプロセスの格納済みの状態を特定し、プロセスの状態をダウンロードし、状態が格納されたときに実行されていた時点のダウンロードされた格納済みの状態からプロセスを再開できる。プロセス状態はXML形式で格納されるので、ここで説明しているXMLベースのストア・メカニズムでXMLオブジェクトを格納し、特定し、取り出すためのツールおよびサーチ機能を使用して、プロセスの移行を可能にすることができる。プロセスの状態の格納されているXML表現の通知をパブリッシュする際に、同じノードまたは別のノード上で実行されているプロセスの再開するクライアントが格納されている状態を特定し、アクセスできるようにする。
【0445】
プロセスの状態のXML表現をXMLベースの永続的ストア・メカニズムに格納し、プロセスの永続的スナップショットを作成できる。これは、たとえば、ノードを故意にシャットダウンしたり、または故意でなくシャットダウンをしたためノード上のプロセスが中断した後、ノード上のプロセス実行を再開するための方法として使用できる。プロセスの格納されている状態の通知をパブリッシュし、クライアントが分散コンピューティング環境内の格納されている状態を特定できるようにする。一実施形態では、プロセスの格納されている状態のXML表現の無許可アクセスを防止するために、電子シグネチャや証明書などの承認証明書を格納されている状態に付属させ、格納されている状態からプロセスを再開することを望んでいるクライアントが格納されている状態にアクセスするための適切な承認証明書を持つことを義務づける。
【0446】
図37は、一実施形態によりプロセスの状態のXML表現を使用するプロセス移行を示す図である。プロセスA 1636aが、ノード1630上で実行されている。プロセスA 1636aは、クライアントまたはサービスである。プロセスA 1636aの実行中のある時点に、プロセスA 1636aの実行の状態を捕捉し、プロセスA 1638のXMLでカプセル化された状態で格納する。ノード1630上のプロセスA 1636aの実行は停止させられる。後で、ノード1632は、プロセスA 1638のXMLでカプセル化された状態を特定し、ノード1632上でプロセスA 1636bを再開するためにそれを使用する。プロセスAを再開するには、格納されている状態1638を使用してスレッド実行を再開し、一時変数を再計算し、リースされているリソースを再確立し、プロセス1638の格納されているXML状態で記録されているとおりに実行を再開するのに必要な他の機能を実行する。
【0447】
分散コンピューティング環境でXMLベースのプロセス移行を使用する一例を以下に示すが、制限することを意図していない。モバイル・クライアント・デバイスは、ノード1630に接続され、プロセスA 1636aを実行している。モバイル・クライアント・デバイスのユーザは、ノード1630でプロセスA 1636aの実行を停止し、後で、別の(または同じ)ノードから実行を再開しようと考えている。一実施形態では、ユーザは、プロセスA 1636aの状態を格納し、後で実行再開すること望んでいるかどうかを判別するよう求められることがある。ユーザが肯定的に答えた場合、プロセスのXMLでカプセル化された状態を捕捉し、永続的ストア1634に格納する。後から、ユーザはノード1632でモバイル・コンピューティング・デバイスに接続する。一実施形態では、ユーザはプロセス1636bを実行し、[Resume from Stored State]オプションを選択する。次に、ノード1632は、プロセスA 1638のXMLでカプセル化された状態をサーチして特定し、ダウンロードし、それを使用してプロセスA 1636bを再開する。それとは別に、プロセスはそれ自体、他のノード上で「サスペンド」していたことを認識し、ユーザの入力がなくても格納された状態から再開する。
【0448】
アプリケーション
ユーザがリモートの場所からネットワーク・データにアクセスし、ユーザがブラウザにアクセスした場合にリモート・データをユーザにローカル・データのように見せかける技術が存在する。ただし、このような技術では、クライアント・デバイスの位置近くのネットワークにクエリを実行する自動的インフラストラクチャが実現されない。クライアント・デバイス近くにあるネットワークおよびサービスに関する情報を発見するメカニズムがあることが望ましい。たとえば、このようなメカニズムを使用する際に、クライアント・デバイスの一定距離範囲(半径)内にあるレストラン、天候、地図、交通、映画情報などに関する情報を特定し、目的の情報をクライアント・デバイスに表示することができる。このメカニズムを使用する例として、ローカル環境、たとえば映画館の中で現在上映中作品のタイトルや上演時間を表示したり、レストランでメニュー選択と価格を表示するために、サービスを自動的に特定することができる携帯電話が考えられる。ここで説明しているような分散コンピューティング環境では、このようなメカニズムを使用してクライアント・デバイスに近接するローカル情報および/またはサービスを含むスペースを発見することができる。このメカニズムはさらに、他の分散コンピューティング環境、たとえば、Sun Microsystems,Inc.のJiniシステムで応用することができる。
【0449】
一実施形態では、モバイル・クライアント・デバイスは、グローバル・ポジショニング・システム(GPS)機能と無線接続技術を備える。ローカル分散コンピューティング・ネットワークを実現できる。たとえば、都市に、全市内分散コンピューティング環境を築くことができる。他の例としては、ローカル分散コンピューティング環境を備えるショッピング・モールがある。ローカル分散コンピューティング・ネットワークは、クライアント・デバイスが分散コンピューティング環境に接続し、ローカル環境内でサービスおよびデータを発見することができる発見メカニズムを備える。たとえば、環境内の1つまたは複数のデバイスが無線接続技術を備え、これによりモバイル・クライアント・デバイスはネットワークに接続し、前述のXMLメッセージング・システムを介して発見メカニズムにアクセスすることができる。ローカル分散コンピューティング環境は、サービスおよび/またはデータをモバイル・クライアントから利用できるようにするための通知を使用する1つまたは複数のスペースを備える。たとえば、全市内分散コンピューティング環境は、モール、映画館、ローカル・ニュース、ローカルの天候、交通などのエンティティを表すスペースを含む。スペースは、スペースが表すエンティティのサービスおよびそれに関する情報にアクセスするための個々のサービスおよび/またはデータ通知を含む。発見メカニズムは、ローカル分散コンピューティング環境、環境内のスペース・サービスによって表されるエンティティ、および/または環境内のスペースで通知されるさまざまなサービスの1つまたは複数のGPS位置測定機能を含む。
【0450】
一実施形態では、ローカル分散コンピューティング・ネットワークへの有線接続が提供される。この環境では、モバイル・クライアント・デバイスを使用するユーザは、有線接続の「ドッキング・ステーション」を使用してネットワークに直接「プラグイン」することができる。有線接続の例としては、これらに限定されないが、ユニバーサル・シリアル・バス(USB)、FireWire、およびツイストペア・インターネットなどがある。一実施形態では、トーキング・ステーションはさらに、モバイル・クライアント・デバイス用のキーボード、マウス、およびディスプレイなどの入出力機能を備える。この実施形態では、モバイル・クライアント・デバイスの位置が、ドッキング・ステーションによりルックアップ・メカニズム又は発見メカニズムに送られる。
【0451】
一実施形態では、モバイル・クライアント・デバイスは、分散コンピューティング・ネットワークに接続する。モバイル・クライアント・デバイスのユーザが分散コンピューティング・ネットワークの無線通信到達範囲内でナビゲートするときに、モバイル・クライアント・デバイスは、常時、またはさまざまな間隔で、ローカル・ルックアップ・メカニズム又は発見メカニズムへの入力として位置ベクトルを供給する。モバイル・クライアント・デバイスは、モバイル・クライアントに組み込まれている、または関連付けられているGPSシステムから位置ベクトルを取得する。一実施形態では、クライアントは位置情報を(たとえば、XMLメッセージングを介して)ここで説明したスペース特定メカニズムなどのローカル・サービス発見メカニズムに送る。たとえば、クライアントは、クライアントの位置の特定の範囲内でサービスを提供するスペースの発見を指定するスペース発見プロトコルを実行するか、またはクライアントはクライアントの近傍に対して提供されるサービスを通知するスペースをサーチするためのスペース・サーチ・サービスをインスタンス化する。
【0452】
モバイル・クライアント・デバイスが分散コンピューティング環境内のスペースの指定された範囲内に移動したときに、そのスペース内に格納されているサービスおよび/またはデータをモバイル・クライアント・デバイスから利用できるようにする。クライアント・デバイスが定期的にその位置を発見メカニズムに伝える実施形態では、ローカル・サービスおよび/またはデータは自動的に、クライアントのユーザから利用できるようになる。一実施形態では、モバイル・クライアント・デバイスのユーザは、スペースの指定された範囲を調べる。たとえば、ユーザは選択により、現在の位置から1マイルの範囲内にあるすべてのレストランを表示することができる。それとは別に、ローカル分散コンピューティング・ネットワークの構成で範囲を指定することもできる。たとえば、市境から3マイル以内にいるすべてのユーザにそのサービスを提供するように、全市内分散コンピューティング・ネットワークを構成することができる。一実施形態では、スペースによって提供されるさまざまなサービスおよび/またはデータを表す視覚的インジケータ、たとえば、アイコンをモバイル・クライアント・デバイスに表示することができる。そこで、クライアントは、表示されているサービスおよび/またはデータの1つまたは複数にアクセスすることができる。一実施形態では、2つまたはそれ以上のスペースから得た情報を同時に、モバイル・クライアント・デバイスに表示することができる。一実施形態では、ユーザは検出するサービスおよび/またはデータを選択することができる。たとえば、ショッピング・モールでは、モバイル・クライアント・デバイスを携帯するユーザは選択により、モール内のすべての靴屋を表示することができる。
【0453】
一実施形態では、コードの実行で使用される実行可能コードおよび/またはデータをモバイル・クライアント・デバイスにダウンロードし、ユーザがスペース内のサービスによって提供されるアプリケーションを実行するようにできる。たとえば、映画を見に行く人は、モバイル・クライアント・デバイスがあれば、映画館のスペース内のサービスから対話的な映画レビューをダウンロードし、自分が見ている映画に関するフィードバックをリアルタイムで送り返すことができる。一実施形態では、別のところで説明しているように、XMLオブジェクト・コンパイル/逆コンパイル・メカニズムを使用し、コードおよび/またはデータをコンパイルしてコードおよび/またはデータのXML表現を出力したり、XML表現を逆コンパイルしてコードおよび/またはデータをモバイル・クライアント・デバイスに再現することができる。一実施形態では、プロセスの実行可能バージョンがすでにモバイル・クライアント・デバイスに存在し、プロセスの格納された状態をモバイル・クライアント・デバイスにダウンロードすることにより、ユーザが格納されている状態を使用してプロセスを実行することができる。一実施形態では、プロセスの実行可能バージョンがすでにモバイル・クライアント・デバイスに存在し、プロセスのデータをモバイル・クライアント・デバイスにダウンロードできる。たとえば、データをダウンロードして、モバイル・クライアント・デバイスのビューア・プログラムで表示することができる。一実施形態では、プロセスを実行するためのコードおよびデータを含むプロセスの実行可能バージョンをダウンロードして、モバイル・クライアント・デバイスで実行することができる。一実施形態では、モバイル・クライアント・デバイスに代わってサービスがリモートからアプリケーションを実行し、サービスとクライアントが、データおよびオプションでデータを記述するXMLスキーマを含むXMLメッセージを互いにやり取りすることができる。一実施形態では、サービス上で一部のコードを実行し、クライアント上で一部のコードを実行することができる。たとえば、サービスは、数値計算などのデータ・セットに対する演算を行うコードを実行することができる。モバイル・クライアント・デバイスは、XMLメッセージでサービスからクライアントに渡されたデータの一部を表示し、モバイル・クライアント・デバイスのユーザがデータを入力したり選択したり、またデータをサービスに送ってデータに対し1つまたは複数の演算を実行できるようにするコードを実行する。
【0454】
一実施形態では、モバイル・クライアント・デバイスは、分散コンピューティング・ネットワーク内で2つまたはそれ以上のサービスに同時に接続することができる。これらのサービスは、独立に使用することも、また一連のタスクを実行するのと合わせて使用することもできる。たとえば、1つのサービスをリモート・クライアント・デバイスが使用してデータ・セットに対する演算を特定しかつ/または実行し、第2のサービスを使用してデータ・セットを印刷する。
【0455】
図38は、一実施形態によりローカルの分散コンピューティング・ネットワークでスペースにアクセスするモバイル・クライアント・デバイスの図である。GPS対応モバイル・コンピューティング・デバイス1700のユーザは、ローカル分散コンピューティング環境の近傍内に移動する。モバイル・クライアント・デバイス1700は、GPS1702によって提供される位置をローカル分散コンピューティング・ネットワーク内の1つまたは複数の発見メカニズム1706に送る。発見メカニズム1706は、モバイル・クライアント・デバイスの提供されたGPS位置と環境内のスペースの所定の位置を使用して、ユーザがいつ1つまたは複数のスペースの指定された範囲内または環境内の1つまたは複数のスペースが対応する近傍内を移動するかを判別する。たとえば、発見メカニズム1706は、モバイル・クライアント・デバイス1700がスペース1704の範囲内を移動したことを判別できる。発見メカニズム1706は、そこで、スペース1704からモバイル・クライアント・デバイス1700に1つまたは複数の通知1710を送る。それとは別に、発見メカニズム1706は、スペース1704またはスペース1704内の1つまたは複数の通知のUniversal Resource Identifier(URI)をモバイル・クライアント・デバイス1700に送る。サービス通知1708で通知されるさまざまなサービスおよび/またはコンテンツ通知1710で表されるデータを表すアイコンを、モバイル・クライアント・デバイス1700に表示することができる。そこで、ユーザはモバイル・クライアント・デバイスで実行するかつ/または表示するため通知されたサービスおよび/またはデータのうち1つまたは複数を選択できる。モバイル・コンピューティング・デバイス1700は、サービスを提供するデバイスと無線接続を確立し、そのデバイスと通信して、前述のようにXMLベースのメッセージング・システムを使用してサービスを実行する。それとは別に、モバイル・コンピューティング・デバイス1700のユーザはドッキング・ステーションでデバイスに接続する。ドッキング・ステーションの位置は、ユーザがルックアップ・メカニズムまたは発見メカニズム1706と、ドッキング・ステーションの通知を含むスペースを使用してユーザの指定範囲内にあるストッキング・ステーションの位置を発見し利用できるかどうかを判別することにより、発見される。発見メカニズム1706は、さらに、モバイル・クライアント・デバイス1700がスペース1714の選択された範囲内に移動したときにそのことを検出できる。さまざまなサービス通知1718およびコンテンツ通知1720をモバイル・クライアント・デバイス1700のユーザから利用できるようにする。モバイル・クライアント・デバイスがスペースの1つの指定範囲の外に出たときに、そのスペースによって提供される通知はモバイル・クライアント・デバイス1700のディスプレイから削除される。一実施形態では、スペース上の通知は、提供されるサービスまたはデータの位置情報を含む。したがって、発見メカニズム1706は、モバイル・クライアント・デバイス1700がスペース1718上で通知された特定のサービスの指定範囲内をいつ移動したかを判別し、モバイル・クライアント・デバイス1700の位置に基づいてサービス通知を送る(または削除する)。
【0456】
コンピューティング・デバイスは、同時にパワーと機能を獲得する一方でダウンサイジングを進めている。ストレージ・デバイス、CPU、RAM、I/O ASICS、電源など、サイズが小さくなり、小型のモバイル・クライアント・デバイスにフルサイズのパソコンの機能の多くを搭載できる。しかし、コンピュータ・システムのコンポーネントのいくつかは、人的要因およびその他の要因のせいで簡単には縮小できない。こうしたコンポーネントとしては、それらに限定されないが、キーボード、モニタ、スキャナ、およびプリンタがある。一部のコンポーネントのサイズを縮小することに限度があるため、モバイル・クライアント・デバイスはパソコンの役割を真に肩代わりすることはできない。
【0457】
一実施形態では、ユーザがモバイル・クライアント・デバイスを使い、人的要因やその他の要因によりモバイル・クライアント・デバイスでは利用できないコンポーネントに接続し使用できるようにするドッキング・ステーションが提示されている。たとえば、ドッキング・ステーションは、空港や図書館などの公共の場所に備えることができる。ドッキング・ステーションは、モニタ、キーボード、プリンタ、またはモバイル・クライアント・デバイスを使用するユーザ用のその他のデバイスを備える。一実施形態では、ドッキング・ステーションは、ユーザが接続しているモバイル・クライアント・デバイスなどの実際のコンピューティング・デバイスの助けがないと完全には機能しない。ドッキング・ステーションは、さまざまな入出力機能などのサービスを、モバイル・クライアント・デバイスの計算能力を使用するクライアントに提供する。
【0458】
ドッキング・ステーションは、1つまたは複数の接続用オプションをモバイル・クライアント・デバイスに提供する。接続オプションには、無線接続や有線接続がある。無線接続の例としては、それらに限定されないが、ノートブック・コンピュータのネットワーク・インターフェース・カード(NIC)で提供されるようなIrDAなどの赤外線や、無線ネットワーク接続がある。有線接続の例としては、それらに限定されないが、USB、FireWire、およびツイストペアEthernetなどがある。
【0459】
モバイル・クライアント・デバイスは、モバイル・クライアント・デバイスについて上述したものに実質的に似た方法を使用してドッキング・ステーションの位置を発見する。ローカル分散コンピューティング・ネットワーク内の1つまたは複数のドッキング・ステーションの位置を発見するには、発見メカニズムを使用して、ドッキング・ステーションの通知があるスペースを発見する。モバイル・クライアント・デバイスは、位置を発見メカニズムに送る。一実施形態では、発見メカニズムまたはルックアップ・メカニズムは、モバイル・クライアント・デバイスの位置に最も近い1つまたは複数のドッキング・ステーションの位置を返す。それとは別に、発見メカニズムまたはルックアップ・メカニズムはドッキング・ステーションの通知を含むスペースのURIを返し、その後、モバイル・クライアント・デバイスはスペースに接続して、デバイスに近いところにある1つまたは複数のドッキング・ステーションの位置を送る。一実施形態では、モバイル・クライアント・デバイスは、ルックアップ・メカニズム又は発見メカニズムに情報を供給し、モニタの解像度、画面サイズ、グラフィック能力、プリンタやスキャナなどの使用可能なデバイスなどの要求条件を指定することができる。一実施形態では、さまざまなドッキング・ステーションの使用可能性(ドッキング・ステーションを使用する他のユーザから)、コンポーネント、および能力などの1つまたは複数のドッキング・ステーションに関する情報をモバイル・クライアント・デバイスのユーザに提供する。
【0460】
ユーザがドッキング・ステーションに接近すると請求プロトコルが開始する。ドッキング・ステーションがその請求を受理すると、セキュリティで保護された入出力接続が、モバイル・クライアント・デバイスとドッキング・ステーションとの間で確立される。それとは別に、ユーザはモバイル・クライアント・デバイスに表示されるルックアップ・メカニズム又は発見メカニズムを使用して発見された1つまたは複数のドッキング・ステーションのうちからドッキング・ステーションを選択する。ユーザがドッキング・ステーションを選択すると請求プロトコルが開始し請求の持続時間中、ユーザに、ドッキング・ステーションへのセキュリティで保護された排他的接続が与えられる。ユーザがドッキング・ステーション上のセッションを終了し、ドッキング・ステーションを開放して他のユーザが利用できるようにするドッキング・ステーションの解放方法も定める。一実施形態では請求プロトコルは、前述のようにドッキング・ステーション・サービス上のリースとすることができる。
【0461】
図39aは、一実施形態により、モバイル・デバイスのユーザがドッキング・ステーションの場所を発見することを示す図である。モバイル・クライアント・デバイス1750は、発見メカニズム1756と接続する。モバイル・クライアント・デバイス1750は、GPS 1752を使用して得られた位置を発見メカニズム1756に送る。モバイル・クライアント・デバイス1750は、さらに、ドッキング・ステーションの要求条件を発見メカニズム1756に送る。発見メカニズム1756は、モバイル・クライアント・デバイス1750の要求条件を満たすドッキング・ステーション1758の通知に対して1つまたは複数のスペース1754をサーチする。一実施形態では、ルックアップ・メカニズム又は発見メカニズムが、通知1758に格納されている位置情報をモバイル・デバイス1750の与えられた位置と比較してモバイル・デバイス1750の指定範囲内にある1つまたは複数のドッキング・ステーションを特定する。発見メカニズム1756は、そこで、モバイル・クライアント・デバイス1750の指定範囲内にある1つまたは複数のドッキング・ステーションの位置を与える。それとは別に、発見メカニズム1756はモバイル・クライアント・デバイス1750に最も近いドッキング・ステーションを特定し、その位置をモバイル・クライアント・デバイス1750に送る。
【0462】
図39bは、一実施形態によるドッキング・ステーション1760に接続するモバイル・クライアント・デバイス1750の図である。一実施形態では、ユーザはモバイル・クライアント・デバイス1750をドッキング・ステーション1760に無線で接続する。他の実施形態では、ユーザはドッキング・ステーション1760とモバイル・クライアント・デバイス1750とを1つまたは複数のケーブルで接続してクッキング・ステーション1760との有線接続を確立する。一実施形態では、モバイル・クライアント・デバイス1750のユーザはドッキング・ステーション1760への請求を確立する。この請求により、接続時間中、ドッキング・ステーションへのセキュリティで保護された排他的権限を確立する。一実施形態では請求メカニズムは、前述のようにリソース(ドッキング・ステーション)のリース・メカニズムである。一実施形態では、ユーザは、ドッキング・ステーションの使用に対し対価支払いを請求される。たとえば、ユーザは、ドッキング・ステーションを請求するプロセスの一部としてクレジット・カード番号を指定する。「メッセージ・ゲート」の項の請求書ゲートの説明を参照のこと。いったん接続されると、ユーザはキーボード、モニタ、プリンタなど、ドッキング・ステーション1760によって提供されるさまざまな機能を使用できる。ドッキング・ステーション1760はさらに、ローカル分散コンピューティング・ネットワークへの接続も含み、ドッキング・ステーション1760に接続されているモバイル・クライアント・デバイス1750のユーザに対しネットワーク内の他のデバイスのサービスおよびコンテンツ通知を特定する発見サービスを提供しているため、ユーザは前述のように、分散コンピューティング環境内のさまざまなサービスおよびコンテンツを特定し、使用することができる。
【0463】
ユーザは、終了すると、モバイル・クライアント・デバイス1750をドッキング・ステーション1760から切断する。一実施形態ではドッキング・ステーションの解放メカニズムは、モバイル・クライアント・デバイス1750がドッキング・ステーション1750から切断されると自動的に開始する。この解放メカニズムにより、モバイル・クライアント・デバイス1750のユーザが確立したドッキング・ステーション1760の請求がクリアされる。一実施形態では、この解放メカニズムは、ドッキング・ステーションが利用できることを発見メカニズムに1756および/またはドッキング・ステーション通知1758に通知する。
【0464】
一実施形態では、ユーザは発見メカニズムを使用せずにモバイル・クライアント・デバイスをドッキング・ステーションに接続することができる。たとえば、空港内にいるユーザは、ドッキング・ステーションで目で見て見つけ、モバイル・クライアント・デバイスを接続する。他の例としては、複数のドッキング・ステーションを配置したドッキング・ステーション室を備える図書館が考えられ、ユーザはそこで利用可能なドッキング・ステーションにアクセスすることができる。
【0465】
省スペースおよび/または組み込み型デバイス
単純な組み込み型または省スペース・デバイスでは、プログラムの命令を格納し実行しようにもメモリ容量が限られている場合がある。単純な組み込み型デバイスは、デバイスの機能を開始するための制御入力とデバイスのステータスを報告するための出力に制限があることを認識する必要がある。単純な組み込み型デバイスの一例として、スイッチとそのスイッチにより制御されるデバイスを制御するための回路を組み込んだ「スマート」スイッチ(照明スイッチなど)がある。スマート・スイッチは、2つの制御要求(デバイスの状態を変更する、デバイスの状態を要求する)を認識し、1つのステータス・メッセージ(デバイスの状態)を送るだけでよい。スマート・スイッチは、1つまたは複数の制御システムから制御要求を受け取り、その1つまたは複数の制御システムにステータス・メッセージを報告することにより、接続されているデバイスを管理することができる。
【0466】
一実施形態では、分散コンピューティング環境は、分散コンピューティング環境の完全なプロトコルを実装するのに必要なリソース(メモリなど)が足りない小型デバイスを含めるためのフレームワーク(プロトコル)を提供する。一実施形態では、小型デバイス対応プロトコルと完全なプロトコルとの間にブリッジとしてエージェントを用意する。このエージェントは、小型デバイスのために完全なプロトコルの発見を実行するので、デバイスは完全な発見プロトコルおよびサービス・アクティブ化を実行する必要がない。一実施形態では、小型デバイスはサービス特有のメッセージを送るだけでよい。一実施形態では、これらのメッセージは、小型デバイスで事前に加工され、小型デバイスはサービス・アクティブ化の一部であるメッセージをエージェントに送るだけである。エージェントは、サービスに対し完全なプロトコルを介してサービス・アクティブ化を実行し、サービスからサービスへ着信メッセージを転送したり、サービス化がクライアントへ返信を転送したりすることができる。したがって、エージェントは小型クライアントのサービス・コネクタとして機能する。分散コンピューティング環境の一実施形態では、特定の制御要求セットをXMLメッセージの形式で受け取り、要求、報告ステータスなどを作成する特定のXMLメッセージ・セットを送るように組み込み型デバイスを構成することができる。一実施形態では、制御システムは、制御される各デバイスまたはデバイスのカテゴリに固有のXML要求メッセージを送り、デバイスからXMLメッセージを受け取ることによりさまざまなデバイスを管理するように構成できる。一実施形態では、1つまたは複数のXMLスキーマを使用して、組み込み型デバイスの固有のXMLメッセージ・セットを定義することができ、スキーマは、XMLメッセージを送受される際に組み込み型デバイスおよび/または制御システムによって使用される。
【0467】
組み込み型デバイスは、単純な組み込み型デバイスを制御し監視するための特定のメッセージ・セットをサポートする前述のようなXMLメッセージング・システムの「軽量(シン)」実装を含む。XMLメッセージング・システムの実装は、省スペースの単純な組み込み型デバイスで使用できるように手直しされ、省スペース・デバイスの限られたメモリにも適合する。一実施形態では、XMLメッセージング・システムは、省スペース組み込み型デバイスをターゲットとする仮想マシン(たとえば、KVM)を備える省スペース・デバイスに実装することができる。ネットワーキング・スタック(1つまたは複数の制御システムとの通信のためのトランスポート・プロトコルをサポートする)は、仮想マシンと関連付けられ、XMLメッセージング・レイヤはネットワーキング・スタックの「上に置かれる」。メッセージング・システムのこのような実装は、省スペース・デバイスや組み込み型デバイス以外のデバイスでも使用できることに注意されたい。
【0468】
一実施形態では、静的メッセージまたは事前に生成されたメッセージを、制御システムから組み込み型デバイスへの要求に使用する。静的メッセージは、プリコンパイルされ、組み込み型デバイス内に格納される。着信メッセージを格納されている静的メッセージと比較し、メッセージのマッチがないか調べてメッセージで要求された機能を実行するので、着信メッセージを解析するためのコードの必要性が減じられるか、またはその必要がない。発信メッセージは、格納されている静的メッセージから直接読み取られるため、発信メッセージを動的にコンパイル必要は少ないか、またはその必要がない。したがって、静的メッセージは、組み込み型システムのメッセージング・レイヤのコード量を減らすために使用される。たとえば、静的なJavaオブジェクト(Java opコード)を要求メッセージとステータス・メッセージに使用できる。
【0469】
図40aは、一実施形態により、制御システム1800により制御される組み込み型デバイス1804aと1804bの一実施形態を示す。制御システム1800は、そのシステムが制御するデバイス1804aおよび1804bとさまざまな方法でネットワークにつながっている。ネットワーク1810は有線(Ethernet、同軸、ツイストペア、電力網など)および/または無線(IrDA、マイクロ波など)を利用できる。一実施形態では、組み込み型デバイス1804aおよび1804bは、ネットワーク1810上で制御システム1800と通信するためXMLメッセージング・システムのシン実装を備える。制御システム1800は、組み込み型デバイス1804aおよび1804bに要求を送り、そこから応答を受け取るためのXMLメッセージング・システムの実装を用意する。一実施形態では、制御システム1800は、ユーザが組み込み型デバイス1804aと1804bのステータスを表示し、遠隔制御するためのインターフェースを備えるように構成されたソフトウェアおよびハードウェアを搭載する。一実施形態では、制御システム1800は、組み込み型デバイス1804aおよび1804bの自動制御を行うためのソフトウェアおよび/またはハードウェアを備える。
【0470】
一実施形態では、組み込み型デバイス1804aと1804bは、他の環境の一部である。それらのデバイスは、分散ネットワーク環境で実装されているメッセージ通信モデルをサポートしていない。たとえば、これらのデバイスは、LonWorksネットワークなどのネットワークで接続されたオートメーションおよび制御システム内のノードである。制御システム1800は、他の環境内のデバイスを制御するための制御システムのハードウェアおよび/またはソフトウェアを含む。制御システム1800は、分散コンピューティング環境と他の環境との間のブリッジとして使用される。分散コンピューティング環境ではさらに、分散コンピューティング環境からアクセスするデバイスを発見するため既存のデバイス発見プロトコルをラップする1つまたは複数の方法も備える。ブリッジおよびラップを行うプロトコルについては「ブリッジ」の項で詳述する。
【0471】
制御システム1800は、リモートまたはローカルで、分散コンピューティング環境内の1つまたは複数の他のシステムに接続する。図40aは、インターネット1802を介してクライアント1806に接続されている制御システム1800を示している。クライアント1806は、制御システム1800を通じて、組み込み型デバイス1804aおよび1804bのステータスを間接的に要求し、その制御要求を送る。したがって、制御システム1800は、組み込み型デバイス1804aおよび1804bのプロキシまたはブリッジとして使用される。「ブリッジ」の項を参照されたい。クライアント1806と制御システム1800との間の高度な通信を有効にするために、クライアントと制御システムは、組み込み型デバイス1804aおよび1804b上のシン実装と異なるXMLメッセージング・システムの実装を備える。一実施形態では、クライアント1806は、ユーザが組み込み型デバイス1804aと1804bのステータスを表示し、遠隔制御するためのインターフェースを備えるように構成されたソフトウェアおよびハードウェアを搭載する。一実施形態では、クライアント1806は、正しい承認証明書を制御システム1800に提示し、クライアント1806が組み込み型デバイス1804aおよび1804bにアクセスできるようにする必要がある。一実施形態では、クライアント1806は、異なるレベルのアクセス権を与えられる。たとえば、クライアント1806は、組み込み型デバイス1804aおよび1804bのステータスを表示することしかできず、デバイスを遠隔制御することはできない。一実施形態では、制御システム1800はサービスであり、分散コンピューティング環境でサービス通知がパブリッシュされ、そのため、クライアント1806は前述のようにクライアント−サービス手法を使用してアクセスできる。一実施形態では、クライアント1806は制御システム1800のステータスを表示し、遠隔制御することができる。
【0472】
図40bは、一実施形態により、インターネット1802を介して組み込み型デバイス1804cおよび1804dに接続されているクライアント制御システム1808を示している。一実施形態では、組み込み型デバイス1804cおよび1804dは、ネットワーク1802上でクライアント制御システム1808と通信するためXMLメッセージング・システムのシン実装を備える。クライアント制御システム1808は、組み込み型デバイス1804cおよび1804dに要求を送り、そこから応答受け取るためのXMLメッセージング・システムの実装を用意する。一実施形態では、クライアント制御システム1808は、ユーザが組み込み型デバイス1804cと1804dのステータスを表示し、遠隔制御するためのインターフェースを備えるように構成されたソフトウェアおよびハードウェアを搭載する。一実施形態では、クライアント制御システム1800は、組み込み型デバイス1804cおよび1804dの自動制御を行うためのソフトウェアおよび/またはハードウェアを備える。
【0473】
図40aと図40bとの違いは、図40bに示されている実施形態では、組み込み型デバイス1804cと1804dは、プロキシ(たとえば、制御システム)なしで分散コンピューティング環境内の1つまたは複数のクライアントによりアクセスされるという点である。組み込み型デバイス1804cおよび1804dは、デバイスの機能にアクセスするためのサービスを備え、分散コンピューティング環境内でサービス通知をパブリッシュし、前述のようにクライアント−サービス手法を介してアクセスされる。
【0474】
分散コンピューティング環境は、リソースが制限されているクライアントがUniversal Resource Identifier(URI)アドレス指定リソースを取り出すためのメカニズムを備える。たとえば、IrDA接続を介してでないとメッセージを送受できないクライアントは、URI接続を確立して、結果スペースから結果を取り出すことができない。一実施形態では、クライアントとURIリソースとの間のブリッジとしてサービスを提供する。ブリッジ・サービスは、XMLメッセージを介してクライアントと対話し、入力パラメータを集める。以下に、XML入力メッセージシンタックスの一例を示したが、何らかの形で制限することを意図していない。
【0475】
次に、分散コンピューティング環境の外部で、ブリッジ・サービスはURI接続を確立し、リソースを取り出す。リソースは、1つまたは複数のXMLメッセージでペイロードとしてカプセル化され、ブリッジ・サービスによってクライアントに送られる。
【0476】
XMLメッセージング・システムのシン実装を備える組み込み型デバイスの可能な使い方の一例を説明のため掲載しているが、制限することを意図していない。建物には、エネルギーを消費する複数のエレクトロニクス・デバイス(たとえば、照明、空調、事務機器)が置かれているため、最適なエネルギー消費レベルを維持するためのシステムを必要とする。このような複数のデバイスはそれぞれ、エレクトロニクス・デバイスを制御するための組み込み型デバイスを備える。これらの組み込み型デバイスは、XMLメッセージング・システムのシン実装を備える。1つまたは複数の制御システムを、ネットワーク、たとえば、建物内LANやさらにはインターネット内のデバイスに結合する。制御システムでは、建物管理ソフトウェア・パッケージおよびデバイスを監視し制御するためソフトウェア・パッケージによって使用されるように構成されているXMLメッセージング・システムの実装を格納し、実行する。制御システムは、ユーザからの入力を受け付け、複数のデバイスのそれぞれのステータス情報はじめとする、建物内エネルギー消費システムのステータス情報を表示し、他の何らかの方法で出力する。エネルギー消費は、複数のデバイスのそれぞれからXMLステータス・メッセージを受け取ることにより監視する。エネルギー消費レベルを調整する必要がある場合、XML制御メッセージを1つまたは複数のデバイスに送ってエネルギー消費を変更させる。
【0477】
サービスの実装
一実施形態では、分散コンピューティング環境はサービスをサーブレットとして実装するためのメカニズムを備える。このメカニズムは、分散コンピューティング環境向けにサービスを開発するための機能を備える。
【0478】
一実施形態では、スペース内でサービスを初期化し登録するための機能を備えるアプリケーション・プログラミング・インターフェース(API)が提供される。一実施形態では、このAPIを使用して、サービスの初期化機能を呼び出し、サービスのステータスを定義する初期化ステータス・ページ、たとえば、HTMLページを生成することができる。ユーザは、ブラウザからステータス・ページにアクセスすることによりサービスのステータスにアクセスできる。一実施形態では、APIを使用して、着信メッセージを処理し、そのメッセージに応答してドキュメントを生成する。
サーブレット・メカニズムの実施形態では、それに限定されないが、以下のような複数の機能を提供する。
サービスへのクライアント接続の管理(一意的なセッションID)
結果通知を格納するために使用されるアクティブ化スペースの管理
アクティブ化スペースの接続セッションおよび結果に対するリースの管理
セッションおよび結果のガベージ・コレクション
クライアントの認証
セッションごとのクライアント機能の生成
【0479】
一実施形態では、分散コンピューティング環境は、新しい複雑なサービスを他の既存のサービスから構築するためのサービス・カスケード接続メカニズムを備える。たとえば、JPEG−PostScript変換サービスおよび印刷サービスから、変換および印刷サービスを組み合わせることで、第3のカスケード接続されたサービスを作成する。一実施形態では、2つまたはそれ以上のサービスのアクセス・メソッドをカスケード接続されたサービスのアクセス・メソッドとして定義することにより2つまたはそれ以上のサービスを組み合わせて1つの複雑なサービスを作る。カスケード接続サービスに対する以下のサービス通知は、説明のため掲載したものであり、いかなる形でも制限することを意図していない。
【0480】
結論
さまざまな実施形態はさらに、キャリア媒体に関する前述の説明により実装された命令および/またはデータを受け取り、送り、または格納することを含む。一般に、キャリア媒体には、磁気または光媒体などの記憶媒体やメモリ媒体、たとえば、ディスクやCD−ROM、RAM(SDRAM、RDRAM、SRAMなど)、ROMなどの揮発性または不揮発性媒体、さらに、ネットワークおよび/または無線リンクなどの通信媒体を介して伝達される電気信号、電磁信号、またはデジタル信号などの伝送媒体または信号が含まれる。
【0481】
本開示を利用しようとする当業者には明白なように、さまざまな修正および変更が可能である。本発明はそのような全ての修正および変更を包括的に取り入れることを意図しており、したがって、明細書、付録、および図面は、制限のためではなく、説明のためであるとみなすべきである。
【図面の簡単な説明】
【図1】
従来の分散コンピューティング技術の積み重ねの図である。
【図2】
一実施形態による分散コンピューティング環境プログラミング・モデルの図である。
【図3】
一実施形態による分散コンピューティング環境のメッセージング・レイヤおよびネットワーキング・レイヤの図である。
【図4】
一実施形態により分散コンピューティング環境でオブジェクトまたはサービスを通知するスペースを見つけるための発見サービスの図である。
【図5】
一実施形態による分散コンピューティング環境の静的メッセージおよび書式付きメッセージをサポートするクライアント・プロファイルの図である。
【図6】
一実施形態によるXMLメッセージングを採用する分散コンピューティング・モデルの図である。
【図7】
一実施形態によるプラットフォーム独立の分散コンピューティング環境の図である。
【図8】
一実施形態によりスペース内でサービスが通知される分散コンピューティング・モデルの図である。
【図9】
一実施形態によりスペース内に結果が格納される分散コンピューティング・モデルの図である。
【図10】
a:一実施形態による分散コンピューティング・モデル内のメッセージング・エンドポイントとしてのクライアントおよびサービス・ゲートの図である。
b: 一実施形態によりサービスにアクセスするためスキーマに従ってメッセージ・エンドポイントを生成することを示す図である。
【図11】
a:一実施形態による分散コンピューティング環境におけるゲート作成の図である。
b:一実施形態による分散コンピューティング環境におけるゲート作成とゲート・ペアの図である。
【図12】
一実施形態による分散コンピューティング環境での可能なゲート構成要素の図である。
【図13】
一実施形態による分散コンピューティング環境に参加する従来のプラウザ用のプロキシ・クライアントの図である。
【図14】
一実施形態により分散コンピューティング環境でメソッド・ゲートを使用してリモート・メソッド呼び出しインターフェースをサービスに提供する方法を示す図である。
【図15】
一実施形態により分散コンピューティング環境でスペースを使用する方法を示す図である。
【図16】
一実施形態による通知構造を示す図である。
【図17】
一実施形態により通知がその存続期間中に置かれる通知状態遷移の一例を示す図である
【図18】
一実施形態による分散コンピューティング環境でのさまざまなスペース特定メカニズムの図である。
【図19】
一実施形態による分散コンピューティング環境でのスペース連合の図である。
【図20】
一実施形態により分散コンピューティング環境でクライアントがスペース・サービスによりセッションを形成する方法を示す流れ図である。
【図21】
一実施形態のスペース・イベント型階層の図である。
【図22】
一実施形態による分散コンピューティング環境でのサービス・インスタンス化を示す流れ図である。
【図23】
一実施形態による分散コンピューティング環境でのデフォルトのスペースの図である。
【図24】
一実施形態により、近傍ベースのデバイスから提供されるサービスをデバイスの近傍の範囲外にあるデバイスでアクセスできるようにする近傍ベースのデバイスを他のトランスポート・メカニズムにブリッジするデバイスの一例を示す図である。
【図25】
一実施形態により分散コンピューティング環境でリース更新メッセージを使用する方法を示す図である。
【図26】
a:一実施形態により、認証証明書をクライアントに提供する認証サービスを示す流れ図である。
b:一実施形態により、図26aのステップ1002上で展開し、認証証明書を生成する認証サービスを示す流れ図である。
【図27】
ブリッジ・メカニズムの一実施形態の図である。
【図28】
一実施形態により外部発見サービスにマップされるスペース発見プロトコルの一例の図である。
【図29】
一実施形態により、分散コンピューティング環境の外部にあるクライアントを分散コンピューティング環境内のスペースにブリッジする方法を示す図である。
【図30】
一実施形態によるプロキシ・メカニズムの図である。
【図31】
一実施形態による関連するディスプレイおよび表示サービスを備えるクライアントの一実施形態の図である。
【図32】
一実施形態により動的表示オブジェクトのスキーマを使用する例を示す図である。
【図33】
A:Cプログラミング言語による代表的ストリング表現の図である。
B:従来のストリング関数の例を示す図である。
C:一実施形態により、一般にはストリングを、具体的には組み込み型システムなどの省スペース・システムを表現し管理する効率的な方法を示す図である。
【図34】
一実施形態により、クライアントとサービスの間でオブジェクトを移動するプロセスを示す図である。
【図35】
仮想マシン(たとえば、JVM)がオブジェクト(たとえば、Javaオブジェクト)をオブジェクトのXML表現にコンパイルする拡張機能および(Java)オブジェクトのXML表現を(Java)オブジェクトに逆コンパイルする拡張機能を含む実施形態を示すデータ流れ図である。
【図36】
一実施形態により分散コンピューティング環境でストア・メカニズムにアクセスするクライアントおよびサービスの図である。
【図37】
一実施形態によりプロセスの状態のXML表現を使用するプロセス移行を示す図である。
【図38】
一実施形態によりローカルの分散コンピューティング・ネットワークでスペースにアクセスするモバイル・クライアント・デバイスの図である。
【図39】
a:一実施形態により、モバイルデバイスのユーザがドッキング・ステーションの場所を発見すること示す図である。
b:一実施形態によるドッキング・ステーションに接続するモバイル・クライアント・デバイスの図である。
【図40】
a:一実施形態により、制御システムにより制御され、分散コンピューティング環境内でアクセス可能な組み込み型デバイスの一実施形態を示す図である。
b:一実施形態により、ネットワーク(たとえば、インターネット)を介して分散コンピューティング環境内でアクセス可能な組み込み型デバイスに接続するデバイス制御システムの図である。
【図41】
一実施形態による、分散コンピューティング環境での、新しいスペースの作成を示す流れ図である。
【図42】
一実施形態による、分散コンピューティング環境での、新しいスペースの保護された作成を示す流れ図である。
【図43】
一実施形態による、分散コンピューティング環境での、サーチ・サービスを使用するスペースのサーチを示す流れ図である。
【図44a】
一実施形態による、分散コンピューティング環境での、サービスの結果をスペース内に格納する方法を示す流れ図である。
【図44b】
一実施形態による、分散コンピューティング環境での、サービスの結果をスペース内に格納し、イベントを使用してクライアントに通報する方法を示す流れ図である。
【図44c】
一実施形態による、分散コンピューティング環境での、サービスの結果をメッセージ内で送る方法を示す流れ図である。
【図44d】
一実施形態による、分散コンピューティング環境での、通知を使用してサービスの結果を返す方法を示す流れ図である。
【図44e】
一実施形態による、分散コンピューティング環境での、クライアントに発送される通知を使用してサービスの結果を返す方法を示す流れ図である。
【図44f】
一実施形態による、分散コンピューティング環境での、スペースに格納された通知を使用してサービスの結果を返す方法を示す流れ図である。
【図44g】
一実施形態による、分散コンピューティング環境での、スペースに格納された通知と、イベントを使用することによるクライアントへの通報とを使用してサービスの結果を返す方法を示す流れ図である。
【図45】
一実施形態による、分散コンピューティング環境での、あるサービスの結果を別のサービスに送る方法を示す流れ図である。
【図46a】
一実施形態による、分散コンピューティング環境での、サーチ・サービスと、サーチ・サービスとクライアントの対話を示す図である。
【図46b】
一実施形態による、分散コンピューティング環境での、サーチ・サービスと、サーチ・サービスとクライアントの対話を示す図である。
【図47】
一実施形態による、分散コンピューティング環境での、スペース内のドキュメントのサーチを示す流れ図である。
【図48】
一実施形態による、分散コンピューティング環境での、スペース内に格納された通知を使用する、サービスのアドレッシングを示す流れ図である。
Claims (45)
- 第1サービスのスキーマが第1サービスの関数を呼び出すのに使用可能な複数のメッセージを指定し、第1メッセージがスキーマによって指定されるようになっていて、第1クライアントが第1サービスの1つまたは複数の関数を呼び出すために第1メッセージを第1サービスに送ること、
第1サービスが第1メッセージに応答して、データ表現言語で表現される結果のセットを生成すること、および、
第1クライアントに直接結果のセットを返さずに、ネットワーク・アドレッシング可能なストレージ位置を含むスペース内に結果のセットを格納すること
を含む方法。 - スペースに結果のセットが格納されたことを第1クライアントに通報するために第1クライアントにイベントを送ること
をさらに含む請求項1に記載の方法。 - 第1クライアントが、イベントに応答してスペースから結果のセットを読み取ること
をさらに含む請求項2に記載の方法。 - 第1クライアントが第2サービスに結果のセットの位置を渡す要求を含む第2メッセージを第1サービスに送ること、および、
第2サービスが位置から結果のセットを読み取ること
をさらに含む請求項1に記載の方法。 - 第2クライアントが、スペースから結果のセットを読み取ることをさらに含む請求項1に記載の方法。
- データ表現言語が、拡張マークアップ言語(XML)を含む請求項1に記載の方法。
- 第1サービスのスキーマが第1サービスの関数を呼び出すのに使用可能な複数のメッセージを指定し、第1メッセージがスキーマによって指定されるようになっていて、第1サービスの1つまたは複数の関数を呼び出すために、第1クライアントが第1サービスに第1メッセージを送ること、
第1サービスが、第1メッセージに応答して、データ表現言語で表現される結果のセットを生成すること、および、
結果のセットにアクセスするのに使用可能な情報を含む、結果のセットの通知を生成すること
を含む方法。 - 第1クライアントに直接結果のセットを返さずに、ネットワーク・アドレッシング可能なストレージ位置を含むスペースに結果のセットを格納することをさらに含む請求項7に記載の方法。
- データ表現言語で表現される、結果のセットの通知を含む第2メッセージを第1クライアントに送ることをさらに含む請求項7に記載の方法。
- 第1クライアントが、結果のセットに関する通知で指定された位置から結果のセットを読み取ることをさらに含む請求項9に記載の方法。
- ネットワーク・アドレッシング可能なストレージ位置を含むスペースに結果のセットの通知を格納することをさらに含む請求項7に記載の方法。
- スペースへの結果のセットに関する通知の格納について第1クライアントに通報するために、第1クライアントにイベントを送ることをさらに含む請求項11に記載の方法。
- データ表現言語が、拡張マークアップ言語(XML)を含む請求項7に記載の方法。
- 通知が、結果のセットのUniform Resource Indicator(URI)を含む請求項7に記載の方法。
- サービスに関するスキーマがサービスの関数を呼び出すのに使用可能な複数のメッセージを指定し、第1メッセージがスキーマによって指定されるようになっていて、サービスの1つまたは複数の関数を呼び出すためにクライアントがサービスに第1メッセージを送ること、
サービスが、第1メッセージに応答して、データ表現言語で表現される結果のセットを生成すること、
結果のセットを含む、データ表現言語で表現された第2メッセージをクライアントに送ること
を含む方法。 - 第1クライアントと、
第1クライアントに通信可能に結合された第1サービスと、
第1クライアントおよび第1サービスに通信可能に結合されたスペースであって、ネットワーク・アドレッシング可能なストレージ位置を含むスペースと
を含むシステムであって、
第1クライアントが、第1サービスの1つまたは複数の関数を呼び出すために第1メッセージを第1サービスに送るように動作可能であり、その際、第1サービスのスキーマが第1サービスの関数を呼び出すのに使用可能な複数のメッセージを指定し、第1メッセージがスキーマによって指定され、
第1サービスが、
第1クライアントによって送られた第1メッセージを受け取り、
第1メッセージに応答して、データ表現言語で表現される結果のセットを生成し、
結果のセットを第1クライアントに直接返さずに、結果のセットをスペースに格納するように動作可能であるシステム。 - 第1サービスが、スペースに結果のセットが格納されたことを第1クライアントに通報するために第1クライアントにイベントを送るように動作可能である請求項16に記載の方法。
- 第1クライアントが、イベントに応答してスペースから結果のセットを読み取るように動作可能である請求項17に記載の方法。
- 第1クライアントおよびスペースに通信可能に結合された第2サービスをさらに含み、
第1クライアントが、第2サービスに結果のセットの位置を渡す要求を含む第2メッセージを第1サービスに送るように動作可能であり、
第2サービスが、位置から結果のセットを読み取るように動作可能である請求項16に記載の方法。 - スペースに通信可能に結合され、スペースから結果のセットを読み取るように動作可能である第2クライアントをさらに含む請求項16に記載の方法。
- データ表現言語が、拡張マークアップ言語(XML)を含む請求項16に記載の方法。
- 第1クライアントと、
第1クライアントに通信可能に結合された第1サービスと
を含むシステムであって、
第1クライアントが、第1サービスの1つまたは複数の関数を呼び出すために第1メッセージを第1サービスに送るように動作可能であり、その際、第1サービスのスキーマが第1サービスの関数を呼び出すのに使用可能な複数のメッセージを指定し、第1メッセージがスキーマによって指定され、
第1サービスが、
第1クライアントによって送られた第1メッセージを受け取り、
第1メッセージに応答して、データ表現言語で表現される結果のセットを生成し、
結果のセットにアクセスするのに使用可能な情報を含む、結果のセットの通知を生成するように動作可能であるシステム。 - 第1クライアントおよび第1サービスに通信可能に結合されたスペースであって、ネットワーク・アドレッシング可能なストレージ位置を含むスペース
をさらに含み、第1サービスが、結果のセットを第1クライアントに直接返さずに、結果のセットをスペースに格納するように動作可能である
請求項22に記載の方法。 - 第1サービスが結果のセットの通知を含む第2メッセージを第1クライアントに送るように動作可能であり、第2メッセージがデータ表現言語で表現される請求項22に記載の方法。
- 第1クライアントが、結果のセットに関する通知で指定された位置から結果のセットを読み取るように動作可能である請求項24に記載の方法。
- 第1クライアントおよび第1サービスに通信可能に結合された、ネットワーク・アドレッシング可能なストレージ位置を含むスペースをさらに含み、第1サービスが、結果のセットの通知をスペースに格納するように動作可能である請求項22に記載の方法。
- 第1サービスが、スペースに結果のセットに関する通知が格納されたことを第1クライアントに通報するために、第1クライアントにイベントを送るように動作可能である請求項26に記載の方法。
- データ表現言語が拡張マークアップ言語(XML)を含む請求項22に記載の方法。
- 通知が結果のセットのUniform Resource Indicator(URI)を含む請求項22に記載の方法。
- 第1クライアントと、
第1クライアントに通信可能に結合された第1サービスと
を含むシステムであって、
第1クライアントが、第1サービスの1つまたは複数の関数を呼び出すために、第1サービスに第1メッセージを送るように動作可能であり、その際、第1サービスに関するスキーマが第1サービスの関数を呼び出すのに使用可能な複数のメッセージを指定し、第1メッセージがスキーマによって指定され、
第1サービスが、
第1クライアントによって送られた第1メッセージを受け取り、
第1メッセージに応答して、データ表現言語で表現された結果のセットを生成し、
データ表現言語で表現された、結果のセットを含む第2メッセージをクライアントに送るように動作可能であるシステム。 - 第1サービスのスキーマが第1サービスの関数を呼び出すのに使用可能な複数のメッセージを指定し、第1メッセージがスキーマによって指定されるようになっていて、第1クライアントが、第1サービスの1つまたは複数の関数を呼び出すために第1メッセージを第1サービスに送ること、
第1サービスが、第1メッセージに応答して、データ表現言語で表現される結果のセットを生成すること、および、
第1クライアントに直接結果のセットを返さずに、ネットワーク・アドレッシング可能なストレージ位置を含むスペース内に結果のセットを格納すること
を実施するようにコンピュータ実行可能であるプログラム命令を含む担体媒体。 - プログラム命令が、さらに、
スペースに結果のセットが格納されたことを第1クライアントに通報するために第1クライアントにイベントを送ることを実施するようにコンピュータ実行可能である請求項31に記載の担体媒体。 - プログラム命令が、さらに、
第1クライアントが、イベントに応答してスペースから結果のセットを読み取ることを実施するようにコンピュータ実行可能である請求項32に記載の担体媒体。 - プログラム命令が、さらに、
第1クライアントが、第2サービスに結果のセットの位置を渡す要求を含む第2メッセージを第1サービスに送ること、および、
第2サービスが、位置から結果のセットを読み取ること
を実施するようにコンピュータ実行可能である請求項31に記載の担体媒体。 - プログラム命令が、さらに、
第2クライアントが、スペースから結果のセットを読み取ることを実施するようにコンピュータ実行可能である請求項31に記載の担体媒体。 - データ表現言語が拡張マークアップ言語(XML)を含む請求項31に記載の担体媒体。
- 第1サービスのスキーマが第1サービスの関数を呼び出すのに使用可能な複数のメッセージを指定し、第1メッセージがスキーマによって指定されるようになっていて、第1クライアントが、第1サービスの1つまたは複数の関数を呼び出すために、第1サービスに第1メッセージを送ること、
第1サービスが、第1メッセージに応答して、データ表現言語で表現される結果のセットを生成すること、
結果のセットにアクセスするのに使用可能な情報を含む、結果のセットの通知を生成すること
を実施するようにコンピュータ実行可能であるプログラム命令を含む担体媒体。 - プログラム命令が、さらに、
第1クライアントに直接結果のセットを返さずに、ネットワーク・アドレッシング可能なストレージ位置を含むスペースに結果のセットを格納することを実施するようにコンピュータ実行可能である請求項37に記載の担体媒体。 - プログラム命令が、さらに、
結果のセットの通知を含む第2メッセージを第1クライアントに送ることであって、第2メッセージがデータ表現言語で表現されること
を実施するようにコンピュータ実行可能である請求項37に記載の担体媒体。 - プログラム命令が、さらに、
第1クライアントが、結果のセットに関する通知で指定された位置から結果のセットを読み取ること
を実施するようにコンピュータ実行可能である請求項39に記載の担体媒体。 - プログラム命令が、さらに、
ネットワーク・アドレッシング可能なストレージ位置を含むスペースに結果のセットの通知を格納することを実施するようにコンピュータ実行可能である請求項37に記載の担体媒体。 - プログラム命令が、さらに、
スペースへの結果のセットに関する通知の格納について第1クライアントに通報するために、第1クライアントにイベントを送ることを実施するようにコンピュータ実行可能である請求項41に記載の担体媒体。 - データ表現言語が拡張マークアップ言語(XML)を含む請求項37に記載の担体媒体。
- 通知が結果のセットのUniform Resource Indicator(URI)を含む請求項37に記載の担体媒体。
- サービスに関するスキーマがサービスの関数を呼び出すのに使用可能な複数のメッセージを指定し、第1メッセージがスキーマによって指定されるようになっていて、クライアントが、サービスの1つまたは複数の関数を呼び出すためにサービスに第1メッセージを送ること、
サービスが、第1メッセージに応答して、データ表現言語で表現される結果のセットを生成すること、
結果のセットを含む、データ表現言語で表現された第2メッセージをクライアントに送ること
を実施するようにコンピュータ実行可能であるプログラム命令を含む担体媒体。
Applications Claiming Priority (7)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US20297500P | 2000-05-09 | 2000-05-09 | |
US20801100P | 2000-05-26 | 2000-05-26 | |
US20914000P | 2000-06-02 | 2000-06-02 | |
US20943000P | 2000-06-02 | 2000-06-02 | |
US20952500P | 2000-06-05 | 2000-06-05 | |
US09/660,553 US6868447B1 (en) | 2000-05-09 | 2000-09-12 | Mechanism and apparatus for returning results of services in a distributed computing environment |
PCT/US2001/015206 WO2001086425A2 (en) | 2000-05-09 | 2001-05-09 | Mechanism and apparatus for returning results of services in a distributed computing environment |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004501427A true JP2004501427A (ja) | 2004-01-15 |
Family
ID=27558948
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001583307A Pending JP2004501427A (ja) | 2000-05-09 | 2001-05-09 | 分散コンピューティング環境でサービスの結果を返す機構および装置 |
Country Status (7)
Country | Link |
---|---|
US (1) | US6868447B1 (ja) |
EP (1) | EP1281119B1 (ja) |
JP (1) | JP2004501427A (ja) |
AT (1) | ATE272861T1 (ja) |
AU (1) | AU2001259726A1 (ja) |
DE (1) | DE60104678T2 (ja) |
WO (1) | WO2001086425A2 (ja) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007517279A (ja) * | 2003-11-26 | 2007-06-28 | インリア・インスティテュート・ナショナル・ドゥ・ルシェルチェ・アン・インフォマティック・エ・アン・アートマティック | 通信オブジェクト間で結果を送信するための非同期自動デバイス及び方法 |
JP2018063724A (ja) * | 2013-05-06 | 2018-04-19 | コンヴィーダ ワイヤレス, エルエルシー | M2mシステムにおけるセマンティクスサポートおよび管理 |
US20210373546A1 (en) * | 2018-10-31 | 2021-12-02 | Toshiba Mitsubishi-Electric Industrial Systems Corporation | Scada web hmi system |
US11520606B2 (en) * | 2017-09-22 | 2022-12-06 | Vmware, Inc. | Dynamic generation of user interface components based on hierarchical component factories |
Families Citing this family (177)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7747782B2 (en) * | 2000-04-26 | 2010-06-29 | Novarra, Inc. | System and method for providing and displaying information content |
US20040049737A1 (en) * | 2000-04-26 | 2004-03-11 | Novarra, Inc. | System and method for displaying information content with selective horizontal scrolling |
US7072984B1 (en) * | 2000-04-26 | 2006-07-04 | Novarra, Inc. | System and method for accessing customized information over the internet using a browser for a plurality of electronic devices |
US7500188B1 (en) | 2000-04-26 | 2009-03-03 | Novarra, Inc. | System and method for adapting information content for an electronic device |
US7577834B1 (en) * | 2000-05-09 | 2009-08-18 | Sun Microsystems, Inc. | Message authentication using message gates in a distributed computing environment |
US6961900B1 (en) * | 2000-08-28 | 2005-11-01 | Microsoft Corporation | Rendering data according to a present schema from an origin response message |
US20070294409A1 (en) * | 2000-09-29 | 2007-12-20 | Arvind Kumar | Internet based network topology discovery |
US7272644B1 (en) * | 2000-09-29 | 2007-09-18 | Intel Corporation | Internet based network topology discovery |
EP1197859A1 (en) * | 2000-10-10 | 2002-04-17 | Canon Kabushiki Kaisha | Method and device for remotely using a data-processing object in a communications network |
US7171475B2 (en) * | 2000-12-01 | 2007-01-30 | Microsoft Corporation | Peer networking host framework and hosting API |
JP4514322B2 (ja) * | 2000-12-08 | 2010-07-28 | パナソニック株式会社 | 部品実装方法、及び部品実装装置 |
US20030158952A1 (en) * | 2000-12-29 | 2003-08-21 | Kris Fleming | Method and apparatus for associating virtual communications ports with applications and services on bluetooth enabled devices |
EP1225499A3 (en) * | 2001-01-19 | 2004-03-24 | Matsushita Electric Industrial Co., Ltd. | Data processor for processing data with a digital signature |
US20020133535A1 (en) * | 2001-03-14 | 2002-09-19 | Microsoft Corporation | Identity-centric data access |
US7539747B2 (en) * | 2001-03-14 | 2009-05-26 | Microsoft Corporation | Schema-based context service |
US20030041076A1 (en) * | 2001-03-14 | 2003-02-27 | Lucovsky Mark H. | Schema-based services for identity-based access to calendar data |
US20030023623A1 (en) * | 2001-03-14 | 2003-01-30 | Horvitz Eric J. | Schema-based service for identity-based access to presence data |
US7024662B2 (en) * | 2001-03-14 | 2006-04-04 | Microsoft Corporation | Executing dynamically assigned functions while providing services |
US7302634B2 (en) * | 2001-03-14 | 2007-11-27 | Microsoft Corporation | Schema-based services for identity-based data access |
US7047525B2 (en) * | 2001-04-02 | 2006-05-16 | American Express Travel Related Services Company, Inc. | System and method for an interoperability framework |
US20030120722A1 (en) * | 2001-12-20 | 2003-06-26 | Forkner Damien R. | Persistent process software architecture |
WO2003058483A1 (en) | 2002-01-08 | 2003-07-17 | Seven Networks, Inc. | Connection architecture for a mobile network |
CN100486129C (zh) * | 2002-02-05 | 2009-05-06 | 纬创资通股份有限公司 | 用于无线装置访问和管理的动态机器组合方法 |
US9886309B2 (en) | 2002-06-28 | 2018-02-06 | Microsoft Technology Licensing, Llc | Identity-based distributed computing for device resources |
US7386860B2 (en) * | 2002-06-28 | 2008-06-10 | Microsoft Corporation | Type extensions to web services description language |
US7614059B2 (en) * | 2002-07-11 | 2009-11-03 | Topia Technology | System and method for the discovery and usage of local resources by a mobile agent object |
US7340508B1 (en) * | 2002-09-18 | 2008-03-04 | Open Invention Network, Llc | Exposing process flows and choreography controllers as web services |
US7640267B2 (en) * | 2002-11-20 | 2009-12-29 | Radar Networks, Inc. | Methods and systems for managing entities in a computing device using semantic objects |
US7584208B2 (en) * | 2002-11-20 | 2009-09-01 | Radar Networks, Inc. | Methods and systems for managing offers and requests in a network |
US7398261B2 (en) * | 2002-11-20 | 2008-07-08 | Radar Networks, Inc. | Method and system for managing and tracking semantic objects |
US7069312B2 (en) * | 2002-12-06 | 2006-06-27 | Microsoft Corporation | Network location signature for disambiguating multicast messages in dual-IP stack and/or multi-homed network environments |
US7756928B1 (en) | 2002-12-30 | 2010-07-13 | Aol Inc. | Interoperability using a local proxy server |
US7315886B1 (en) * | 2002-12-30 | 2008-01-01 | Aol Llc, A Delaware Limited Liability Company | Capability spoofing using a local proxy server |
US8468126B2 (en) | 2005-08-01 | 2013-06-18 | Seven Networks, Inc. | Publishing data in an information community |
US7853563B2 (en) | 2005-08-01 | 2010-12-14 | Seven Networks, Inc. | Universal data aggregation |
US7917468B2 (en) | 2005-08-01 | 2011-03-29 | Seven Networks, Inc. | Linking of personal information management data |
US20040205048A1 (en) * | 2003-03-28 | 2004-10-14 | Pizzo Michael J. | Systems and methods for requesting and receiving database change notifications |
US7308475B1 (en) * | 2003-05-06 | 2007-12-11 | F5 Networks, Inc. | Method and system for accessing network services |
US8433780B2 (en) * | 2003-06-04 | 2013-04-30 | Hewlett-Packard Development Company, L.P. | Systems and methods for automatically configuring a client for remote use of a network-based service |
US7424525B2 (en) * | 2003-06-30 | 2008-09-09 | Microsoft Corporation | Managing headless computer systems |
US8453196B2 (en) | 2003-10-14 | 2013-05-28 | Salesforce.Com, Inc. | Policy management in an interoperability network |
US7409693B2 (en) * | 2003-10-30 | 2008-08-05 | International Business Machines Corporation | Method and system for providing version control of parameters in a command-based API using Java serialization |
KR100560424B1 (ko) * | 2003-11-05 | 2006-03-13 | 한국전자통신연구원 | 접근이 제한되는 고비도 검증키를 갖는 변형된 디지털서명을 이용한 안전한 프로그래머블 패킷 전송 방법 |
US8775654B2 (en) * | 2003-12-19 | 2014-07-08 | Salesforce.Com, Inc. | Apparatus and methods for mediating messages |
US7499913B2 (en) | 2004-01-26 | 2009-03-03 | International Business Machines Corporation | Method for handling anchor text |
US7424467B2 (en) * | 2004-01-26 | 2008-09-09 | International Business Machines Corporation | Architecture for an indexer with fixed width sort and variable width sort |
US7293005B2 (en) | 2004-01-26 | 2007-11-06 | International Business Machines Corporation | Pipelined architecture for global analysis and index building |
US8296304B2 (en) | 2004-01-26 | 2012-10-23 | International Business Machines Corporation | Method, system, and program for handling redirects in a search engine |
US7433876B2 (en) * | 2004-02-23 | 2008-10-07 | Radar Networks, Inc. | Semantic web portal and platform |
US7725605B2 (en) | 2004-08-06 | 2010-05-25 | Salesforce.Com, Inc. | Providing on-demand access to services in a wide area network |
JP4547210B2 (ja) * | 2004-08-27 | 2010-09-22 | 株式会社エヌ・ティ・ティ・ドコモ | クライアント端末、サービス提供装置及びサービス発見方法 |
US7461064B2 (en) | 2004-09-24 | 2008-12-02 | International Buiness Machines Corporation | Method for searching documents for ranges of numeric values |
US7441271B2 (en) | 2004-10-20 | 2008-10-21 | Seven Networks | Method and apparatus for intercepting events in a communication system |
US8010082B2 (en) | 2004-10-20 | 2011-08-30 | Seven Networks, Inc. | Flexible billing architecture |
US7706781B2 (en) | 2004-11-22 | 2010-04-27 | Seven Networks International Oy | Data security in a mobile e-mail service |
FI117152B (fi) | 2004-12-03 | 2006-06-30 | Seven Networks Internat Oy | Sähköpostiasetusten käyttöönotto matkaviestimelle |
EP1672499B1 (en) * | 2004-12-20 | 2010-03-03 | Sap Ag | Distributed system architecture using object migration to implement variable coupling |
US20060195845A1 (en) * | 2005-02-28 | 2006-08-31 | Rhine Scott A | System and method for scheduling executables |
US7752633B1 (en) | 2005-03-14 | 2010-07-06 | Seven Networks, Inc. | Cross-platform event engine |
US7796742B1 (en) | 2005-04-21 | 2010-09-14 | Seven Networks, Inc. | Systems and methods for simplified provisioning |
US8438633B1 (en) | 2005-04-21 | 2013-05-07 | Seven Networks, Inc. | Flexible real-time inbox access |
US20060265626A1 (en) * | 2005-05-21 | 2006-11-23 | Communicative Machines, Inc. | Method for dynamic reprogramming dataflow in a distributed system |
WO2006136660A1 (en) | 2005-06-21 | 2006-12-28 | Seven Networks International Oy | Maintaining an ip connection in a mobile network |
US8417693B2 (en) * | 2005-07-14 | 2013-04-09 | International Business Machines Corporation | Enforcing native access control to indexed documents |
US8069166B2 (en) | 2005-08-01 | 2011-11-29 | Seven Networks, Inc. | Managing user-to-user contact with inferred presence information |
US8484463B1 (en) | 2005-11-29 | 2013-07-09 | At & T Intellectual Property Ii, L.P. | System and method for utilizing a rendezvous mechanism for secure information exchange |
US7769395B2 (en) | 2006-06-20 | 2010-08-03 | Seven Networks, Inc. | Location-based operations and messaging |
US7809711B2 (en) * | 2006-06-02 | 2010-10-05 | International Business Machines Corporation | System and method for semantic analysis of intelligent device discovery |
WO2008021832A2 (en) * | 2006-08-09 | 2008-02-21 | Radar Networks, Inc. | Harvesting data from page |
US20080154936A1 (en) * | 2006-12-22 | 2008-06-26 | International Business Machines Corporation | Event generation for xml schema components during xml processing in a streaming event model |
US8805425B2 (en) | 2007-06-01 | 2014-08-12 | Seven Networks, Inc. | Integrated messaging |
US8693494B2 (en) | 2007-06-01 | 2014-04-08 | Seven Networks, Inc. | Polling |
US20090076887A1 (en) * | 2007-09-16 | 2009-03-19 | Nova Spivack | System And Method Of Collecting Market-Related Data Via A Web-Based Networking Environment |
US8121117B1 (en) | 2007-10-01 | 2012-02-21 | F5 Networks, Inc. | Application layer network traffic prioritization |
US20090106307A1 (en) * | 2007-10-18 | 2009-04-23 | Nova Spivack | System of a knowledge management and networking environment and method for providing advanced functions therefor |
US8364181B2 (en) | 2007-12-10 | 2013-01-29 | Seven Networks, Inc. | Electronic-mail filtering for mobile devices |
US9002828B2 (en) | 2007-12-13 | 2015-04-07 | Seven Networks, Inc. | Predictive content delivery |
US8793305B2 (en) | 2007-12-13 | 2014-07-29 | Seven Networks, Inc. | Content delivery to a mobile device from a content service |
US8060609B2 (en) | 2008-01-04 | 2011-11-15 | Sling Media Inc. | Systems and methods for determining attributes of media items accessed via a personal media broadcaster |
US8107921B2 (en) | 2008-01-11 | 2012-01-31 | Seven Networks, Inc. | Mobile virtual network operator |
US8862657B2 (en) | 2008-01-25 | 2014-10-14 | Seven Networks, Inc. | Policy based content service |
US20090193338A1 (en) | 2008-01-28 | 2009-07-30 | Trevor Fiatal | Reducing network and battery consumption during content delivery and playback |
US8787947B2 (en) | 2008-06-18 | 2014-07-22 | Seven Networks, Inc. | Application discovery on mobile devices |
US8078158B2 (en) | 2008-06-26 | 2011-12-13 | Seven Networks, Inc. | Provisioning applications for a mobile device |
US20100004975A1 (en) * | 2008-07-03 | 2010-01-07 | Scott White | System and method for leveraging proximity data in a web-based socially-enabled knowledge networking environment |
US8560713B2 (en) * | 2008-07-31 | 2013-10-15 | Sap Ag | Method and system for mediating enterprise service access for smart devices |
US8909759B2 (en) | 2008-10-10 | 2014-12-09 | Seven Networks, Inc. | Bandwidth measurement |
US10628847B2 (en) * | 2009-04-15 | 2020-04-21 | Fiver Llc | Search-enhanced semantic advertising |
US8200617B2 (en) | 2009-04-15 | 2012-06-12 | Evri, Inc. | Automatic mapping of a location identifier pattern of an object to a semantic type using object metadata |
WO2010120925A2 (en) | 2009-04-15 | 2010-10-21 | Evri Inc. | Search and search optimization using a pattern of a location identifier |
WO2010120929A2 (en) * | 2009-04-15 | 2010-10-21 | Evri Inc. | Generating user-customized search results and building a semantics-enhanced search engine |
US10671698B2 (en) * | 2009-05-26 | 2020-06-02 | Microsoft Technology Licensing, Llc | Language translation using embeddable component |
US8327407B2 (en) | 2009-10-27 | 2012-12-04 | Sling Media, Inc. | Determination of receiving live versus time-shifted media content at a communication device |
US10721269B1 (en) | 2009-11-06 | 2020-07-21 | F5 Networks, Inc. | Methods and system for returning requests with javascript for clients before passing a request to a server |
US8806056B1 (en) | 2009-11-20 | 2014-08-12 | F5 Networks, Inc. | Method for optimizing remote file saves in a failsafe way |
US9043731B2 (en) | 2010-03-30 | 2015-05-26 | Seven Networks, Inc. | 3D mobile user interface with configurable workspace management |
US9420049B1 (en) | 2010-06-30 | 2016-08-16 | F5 Networks, Inc. | Client side human user indicator |
US9503375B1 (en) | 2010-06-30 | 2016-11-22 | F5 Networks, Inc. | Methods for managing traffic in a multi-service environment and devices thereof |
US8347100B1 (en) | 2010-07-14 | 2013-01-01 | F5 Networks, Inc. | Methods for DNSSEC proxying and deployment amelioration and systems thereof |
US8782434B1 (en) | 2010-07-15 | 2014-07-15 | The Research Foundation For The State University Of New York | System and method for validating program execution at run-time |
CA2806527A1 (en) | 2010-07-26 | 2012-02-09 | Seven Networks, Inc. | Mobile network traffic coordination across multiple applications |
GB2495066B (en) | 2010-07-26 | 2013-12-18 | Seven Networks Inc | Mobile application traffic optimization |
US8838783B2 (en) | 2010-07-26 | 2014-09-16 | Seven Networks, Inc. | Distributed caching for resource and mobile network traffic management |
CA2806548C (en) | 2010-07-26 | 2015-03-31 | Seven Networks, Inc. | Distributed implementation of dynamic wireless traffic policy |
WO2012060997A2 (en) | 2010-11-01 | 2012-05-10 | Michael Luna | Application and network-based long poll request detection and cacheability assessment therefor |
WO2012061430A2 (en) | 2010-11-01 | 2012-05-10 | Michael Luna | Distributed management of keep-alive message signaling for mobile network resource conservation and optimization |
US9330196B2 (en) | 2010-11-01 | 2016-05-03 | Seven Networks, Llc | Wireless traffic management system cache optimization using http headers |
WO2012060995A2 (en) | 2010-11-01 | 2012-05-10 | Michael Luna | Distributed caching in a wireless network of content delivered for a mobile application over a long-held request |
US9060032B2 (en) | 2010-11-01 | 2015-06-16 | Seven Networks, Inc. | Selective data compression by a distributed traffic management system to reduce mobile data traffic and signaling traffic |
EP2635973A4 (en) | 2010-11-01 | 2014-01-15 | Seven Networks Inc | TO THE BEHAVIOR OF A MOBILE APPLICATION AND INTERMEDIATE STORAGE TAILORED TO NETWORK CONDITIONS |
US8204953B2 (en) | 2010-11-01 | 2012-06-19 | Seven Networks, Inc. | Distributed system for cache defeat detection and caching of content addressed by identifiers intended to defeat cache |
US8484314B2 (en) | 2010-11-01 | 2013-07-09 | Seven Networks, Inc. | Distributed caching in a wireless network of content delivered for a mobile application over a long-held request |
US8843153B2 (en) | 2010-11-01 | 2014-09-23 | Seven Networks, Inc. | Mobile traffic categorization and policy for network use optimization while preserving user experience |
WO2012071384A2 (en) | 2010-11-22 | 2012-05-31 | Michael Luna | Optimization of resource polling intervals to satisfy mobile device requests |
CA2798523C (en) | 2010-11-22 | 2015-02-24 | Seven Networks, Inc. | Aligning data transfer to optimize connections established for transmission over a wireless network |
US20120188981A1 (en) * | 2010-12-24 | 2012-07-26 | Electronics And Telecommunications Research Institute | Signalling method for direct communication between terminals |
WO2012094675A2 (en) | 2011-01-07 | 2012-07-12 | Seven Networks, Inc. | System and method for reduction of mobile network traffic used for domain name system (dns) queries |
GB2517815A (en) | 2011-04-19 | 2015-03-04 | Seven Networks Inc | Shared resource and virtual resource management in a networked environment |
WO2012149434A2 (en) | 2011-04-27 | 2012-11-01 | Seven Networks, Inc. | Detecting and preserving state for satisfying application requests in a distributed proxy and cache system |
WO2012149221A2 (en) | 2011-04-27 | 2012-11-01 | Seven Networks, Inc. | System and method for making requests on behalf of a mobile device based on atomic processes for mobile network traffic relief |
US8879431B2 (en) | 2011-05-16 | 2014-11-04 | F5 Networks, Inc. | Method for load balancing of requests' processing of diameter servers |
US8396836B1 (en) | 2011-06-30 | 2013-03-12 | F5 Networks, Inc. | System for mitigating file virtualization storage import latency |
WO2013015995A1 (en) | 2011-07-27 | 2013-01-31 | Seven Networks, Inc. | Automatic generation and distribution of policy information regarding malicious mobile traffic in a wireless network |
US8463850B1 (en) | 2011-10-26 | 2013-06-11 | F5 Networks, Inc. | System and method of algorithmically generating a server side transaction identifier |
US8954492B1 (en) | 2011-11-30 | 2015-02-10 | F5 Networks, Inc. | Methods for inlining content externally referenced in a web page prior to providing the web page to a requestor and devices thereof |
EP2789137A4 (en) | 2011-12-06 | 2015-12-02 | Seven Networks Inc | SYSTEM OF REDUNDANTLY CLUSTERED MACHINES FOR PROVIDING TILTING MECHANISMS IN MOBILE TRAFFIC MANAGEMENT AND NETWORK RESOURCE PRESERVATION |
US8934414B2 (en) | 2011-12-06 | 2015-01-13 | Seven Networks, Inc. | Cellular or WiFi mobile traffic optimization based on public or private network destination |
WO2013086455A1 (en) | 2011-12-07 | 2013-06-13 | Seven Networks, Inc. | Flexible and dynamic integration schemas of a traffic management system with various network operators for network traffic alleviation |
US9277443B2 (en) | 2011-12-07 | 2016-03-01 | Seven Networks, Llc | Radio-awareness of mobile device for sending server-side control signals using a wireless network optimized transport protocol |
EP2792188B1 (en) | 2011-12-14 | 2019-03-20 | Seven Networks, LLC | Mobile network reporting and usage analytics system and method using aggregation of data in a distributed traffic optimization system |
WO2013090834A1 (en) | 2011-12-14 | 2013-06-20 | Seven Networks, Inc. | Operation modes for mobile traffic optimization and concurrent management of optimized and non-optimized traffic |
US8861354B2 (en) | 2011-12-14 | 2014-10-14 | Seven Networks, Inc. | Hierarchies and categories for management and deployment of policies for distributed wireless traffic optimization |
WO2013103988A1 (en) | 2012-01-05 | 2013-07-11 | Seven Networks, Inc. | Detection and management of user interactions with foreground applications on a mobile device in distributed caching |
WO2013116856A1 (en) | 2012-02-02 | 2013-08-08 | Seven Networks, Inc. | Dynamic categorization of applications for network access in a mobile network |
WO2013116852A1 (en) | 2012-02-03 | 2013-08-08 | Seven Networks, Inc. | User as an end point for profiling and optimizing the delivery of content and data in a wireless network |
US10230566B1 (en) | 2012-02-17 | 2019-03-12 | F5 Networks, Inc. | Methods for dynamically constructing a service principal name and devices thereof |
US9244843B1 (en) | 2012-02-20 | 2016-01-26 | F5 Networks, Inc. | Methods for improving flow cache bandwidth utilization and devices thereof |
US9020912B1 (en) | 2012-02-20 | 2015-04-28 | F5 Networks, Inc. | Methods for accessing data in a compressed file system and devices thereof |
US8812695B2 (en) | 2012-04-09 | 2014-08-19 | Seven Networks, Inc. | Method and system for management of a virtual network connection without heartbeat messages |
US10263899B2 (en) | 2012-04-10 | 2019-04-16 | Seven Networks, Llc | Enhanced customer service for mobile carriers using real-time and historical mobile application and traffic or optimization data associated with mobile devices in a mobile network |
WO2013163648A2 (en) | 2012-04-27 | 2013-10-31 | F5 Networks, Inc. | Methods for optimizing service of content requests and devices thereof |
WO2014011216A1 (en) | 2012-07-13 | 2014-01-16 | Seven Networks, Inc. | Dynamic bandwidth adjustment for browsing or streaming activity in a wireless network based on prediction of user behavior when interacting with mobile applications |
US9063721B2 (en) | 2012-09-14 | 2015-06-23 | The Research Foundation For The State University Of New York | Continuous run-time validation of program execution: a practical approach |
US10033837B1 (en) | 2012-09-29 | 2018-07-24 | F5 Networks, Inc. | System and method for utilizing a data reducing module for dictionary compression of encoded data |
US9069782B2 (en) | 2012-10-01 | 2015-06-30 | The Research Foundation For The State University Of New York | System and method for security and privacy aware virtual machine checkpointing |
US9161258B2 (en) | 2012-10-24 | 2015-10-13 | Seven Networks, Llc | Optimized and selective management of policy deployment to mobile clients in a congested network to prevent further aggravation of network congestion |
US9578090B1 (en) | 2012-11-07 | 2017-02-21 | F5 Networks, Inc. | Methods for provisioning application delivery service and devices thereof |
US20140177497A1 (en) | 2012-12-20 | 2014-06-26 | Seven Networks, Inc. | Management of mobile device radio state promotion and demotion |
US9271238B2 (en) | 2013-01-23 | 2016-02-23 | Seven Networks, Llc | Application or context aware fast dormancy |
US8874761B2 (en) | 2013-01-25 | 2014-10-28 | Seven Networks, Inc. | Signaling optimization in a wireless network for traffic utilizing proprietary and non-proprietary protocols |
US10375155B1 (en) | 2013-02-19 | 2019-08-06 | F5 Networks, Inc. | System and method for achieving hardware acceleration for asymmetric flow connections |
US9497614B1 (en) | 2013-02-28 | 2016-11-15 | F5 Networks, Inc. | National traffic steering device for a better control of a specific wireless/LTE network |
US8750123B1 (en) | 2013-03-11 | 2014-06-10 | Seven Networks, Inc. | Mobile device equipped with mobile network congestion recognition to make intelligent decisions regarding connecting to an operator network |
US9215075B1 (en) | 2013-03-15 | 2015-12-15 | Poltorak Technologies Llc | System and method for secure relayed communications from an implantable medical device |
US9065765B2 (en) | 2013-07-22 | 2015-06-23 | Seven Networks, Inc. | Proxy server associated with a mobile carrier for enhancing mobile traffic management in a mobile network |
US10187317B1 (en) | 2013-11-15 | 2019-01-22 | F5 Networks, Inc. | Methods for traffic rate control and devices thereof |
US9483997B2 (en) | 2014-03-10 | 2016-11-01 | Sony Corporation | Proximity detection of candidate companion display device in same room as primary display using infrared signaling |
US9696414B2 (en) | 2014-05-15 | 2017-07-04 | Sony Corporation | Proximity detection of candidate companion display device in same room as primary display using sonic signaling |
US10070291B2 (en) | 2014-05-19 | 2018-09-04 | Sony Corporation | Proximity detection of candidate companion display device in same room as primary display using low energy bluetooth |
US11838851B1 (en) | 2014-07-15 | 2023-12-05 | F5, Inc. | Methods for managing L7 traffic classification and devices thereof |
US10182013B1 (en) | 2014-12-01 | 2019-01-15 | F5 Networks, Inc. | Methods for managing progressive image delivery and devices thereof |
US11615199B1 (en) * | 2014-12-31 | 2023-03-28 | Idemia Identity & Security USA LLC | User authentication for digital identifications |
US11895138B1 (en) | 2015-02-02 | 2024-02-06 | F5, Inc. | Methods for improving web scanner accuracy and devices thereof |
US10834065B1 (en) | 2015-03-31 | 2020-11-10 | F5 Networks, Inc. | Methods for SSL protected NTLM re-authentication and devices thereof |
US10505818B1 (en) | 2015-05-05 | 2019-12-10 | F5 Networks. Inc. | Methods for analyzing and load balancing based on server health and devices thereof |
US11350254B1 (en) | 2015-05-05 | 2022-05-31 | F5, Inc. | Methods for enforcing compliance policies and devices thereof |
US11757946B1 (en) | 2015-12-22 | 2023-09-12 | F5, Inc. | Methods for analyzing network traffic and enforcing network policies and devices thereof |
US10404698B1 (en) | 2016-01-15 | 2019-09-03 | F5 Networks, Inc. | Methods for adaptive organization of web application access points in webtops and devices thereof |
US11178150B1 (en) | 2016-01-20 | 2021-11-16 | F5 Networks, Inc. | Methods for enforcing access control list based on managed application and devices thereof |
US10797888B1 (en) | 2016-01-20 | 2020-10-06 | F5 Networks, Inc. | Methods for secured SCEP enrollment for client devices and devices thereof |
US10412198B1 (en) | 2016-10-27 | 2019-09-10 | F5 Networks, Inc. | Methods for improved transmission control protocol (TCP) performance visibility and devices thereof |
US11063758B1 (en) | 2016-11-01 | 2021-07-13 | F5 Networks, Inc. | Methods for facilitating cipher selection and devices thereof |
US10505792B1 (en) | 2016-11-02 | 2019-12-10 | F5 Networks, Inc. | Methods for facilitating network traffic analytics and devices thereof |
US10812266B1 (en) | 2017-03-17 | 2020-10-20 | F5 Networks, Inc. | Methods for managing security tokens based on security violations and devices thereof |
US11343237B1 (en) | 2017-05-12 | 2022-05-24 | F5, Inc. | Methods for managing a federated identity environment using security and access control data and devices thereof |
US11122042B1 (en) | 2017-05-12 | 2021-09-14 | F5 Networks, Inc. | Methods for dynamically managing user access control and devices thereof |
US11223689B1 (en) | 2018-01-05 | 2022-01-11 | F5 Networks, Inc. | Methods for multipath transmission control protocol (MPTCP) based session migration and devices thereof |
Family Cites Families (101)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4491946A (en) | 1981-03-09 | 1985-01-01 | Gould Inc. | Multi-station token pass communication system |
JPH0640302B2 (ja) | 1984-01-30 | 1994-05-25 | 株式会社日立製作所 | 図式・ソ−スプログラム自動生成方法 |
US4823122A (en) | 1984-06-01 | 1989-04-18 | Digital Equipment Corporation | Local area network for digital data processing system |
US4809160A (en) | 1985-10-28 | 1989-02-28 | Hewlett-Packard Company | Privilege level checking instruction for implementing a secure hierarchical computer system |
US4713806A (en) | 1986-03-14 | 1987-12-15 | American Telephone And Telegraph Company, At&T Bell Laboratories | Communication system control arrangement |
US4939638A (en) | 1988-02-23 | 1990-07-03 | Stellar Computer Inc. | Time sliced vector processing |
US5287511A (en) | 1988-07-11 | 1994-02-15 | Star Semiconductor Corporation | Architectures and methods for dividing processing tasks into tasks for a programmable real time signal processor and tasks for a decision making microprocessor interfacing therewith |
US5133075A (en) | 1988-12-19 | 1992-07-21 | Hewlett-Packard Company | Method of monitoring changes in attribute values of object in an object-oriented database |
US5109486A (en) | 1989-01-06 | 1992-04-28 | Motorola, Inc. | Distributed computer system with network and resource status monitoring |
US5088036A (en) | 1989-01-17 | 1992-02-11 | Digital Equipment Corporation | Real time, concurrent garbage collection system and method |
US5297283A (en) | 1989-06-29 | 1994-03-22 | Digital Equipment Corporation | Object transferring system and method in an object based computer operating system |
US5257369A (en) | 1990-10-22 | 1993-10-26 | Skeen Marion D | Apparatus and method for providing decoupling of data exchange details for providing high performance communication between software processes |
US5187787B1 (en) | 1989-07-27 | 1996-05-07 | Teknekron Software Systems Inc | Apparatus and method for providing decoupling of data exchange details for providing high performance communication between software processes |
US5557798A (en) | 1989-07-27 | 1996-09-17 | Tibco, Inc. | Apparatus and method for providing decoupling of data exchange details for providing high performance communication between software processes |
US5218699A (en) | 1989-08-24 | 1993-06-08 | International Business Machines Corporation | Remote procedure calls in heterogeneous systems |
JPH04505977A (ja) | 1989-12-26 | 1992-10-15 | 富士通株式会社 | オブジェクト指向分散処理システム |
GB2242293A (en) | 1990-01-05 | 1991-09-25 | Apple Computer | Apparatus and method for dynamic linking of computer software components |
AU628753B2 (en) | 1990-08-14 | 1992-09-17 | Digital Equipment Corporation | Method and apparatus for implementing server functions in a distributed heterogeneous environment |
EP0737921B1 (en) | 1990-09-17 | 2000-06-28 | Cabletron Systems, Inc. | System and method for modelling a computer network |
DE69228621T2 (de) | 1991-02-25 | 1999-07-22 | Hewlett-Packard Co., Palo Alto, Calif. | Objektorientiertes verteiltes Rechnersystem |
EP0501613A3 (en) | 1991-02-28 | 1993-09-01 | Hewlett-Packard Company | Heterogeneous software configuration management apparatus |
US5293614A (en) | 1991-04-08 | 1994-03-08 | Texas Instruments Incorporated | System and method for hard real-time garbage collection requiring a write barrier but no read barrier |
US5481721A (en) | 1991-07-17 | 1996-01-02 | Next Computer, Inc. | Method for providing automatic and dynamic translation of object oriented programming language-based message passing into operation system message passing using proxy objects |
DE4131380A1 (de) | 1991-09-20 | 1993-03-25 | Siemens Ag | Verfahren zur adaption einer objektorientierten applikation |
US5390328A (en) | 1992-03-30 | 1995-02-14 | International Business Machines Corporation | Data processing system and method for providing notification in a central processor of state changes for shared data structure on external storage |
US5412717A (en) | 1992-05-15 | 1995-05-02 | Fischer; Addison M. | Computer system security method and apparatus having program authorization information data structures |
EP0930566A3 (en) | 1992-07-06 | 2006-07-05 | Microsoft Corporation | Method and system for composing objects |
US5307490A (en) | 1992-08-28 | 1994-04-26 | Tandem Computers, Inc. | Method and system for implementing remote procedure calls in a distributed computer system |
JP2524472B2 (ja) | 1992-09-21 | 1996-08-14 | インターナショナル・ビジネス・マシーンズ・コーポレイション | 電話回線利用の音声認識システムを訓練する方法 |
US5423042A (en) | 1992-10-23 | 1995-06-06 | International Business Machines Corporation | Remote procedure execution |
US5561785A (en) | 1992-10-29 | 1996-10-01 | International Business Machines Corporation | System for allocating and returning storage and collecting garbage using subpool of available blocks |
WO1994011810A1 (en) | 1992-11-13 | 1994-05-26 | Microsoft Corporation | A method and system for marshalling interface pointers for remote procedure calls |
US5515536A (en) | 1992-11-13 | 1996-05-07 | Microsoft Corporation | Method and system for invoking methods of an object through a dispatching interface |
US5386568A (en) | 1992-12-01 | 1995-01-31 | Yamaha Corporation | Apparatus and method for linking software modules |
EP0602263A1 (en) | 1992-12-15 | 1994-06-22 | International Business Machines Corporation | User interface program generator |
US5560003A (en) | 1992-12-21 | 1996-09-24 | Iowa State University Research Foundation, Inc. | System and hardware module for incremental real time garbage collection and memory management |
US5452459A (en) | 1993-01-08 | 1995-09-19 | Digital Equipment Corporation | Method and apparatus for allocating server access in a distributed computing environment |
EP0613083B1 (en) | 1993-02-25 | 2002-01-23 | Sun Microsystems, Inc. | Transaction management in object oriented systems |
US5832593A (en) | 1993-04-14 | 1998-11-10 | Minnesota Mining And Manufacturing Company | Splice head for insulated telecommunication wires |
US5603031A (en) | 1993-07-08 | 1997-02-11 | General Magic, Inc. | System and method for distributed computation based upon the movement, execution, and interaction of processes in a network |
US5844553A (en) | 1993-08-30 | 1998-12-01 | Hewlett-Packard Company | Mechanism to control and use window events among applications in concurrent computing |
US5617537A (en) | 1993-10-05 | 1997-04-01 | Nippon Telegraph And Telephone Corporation | Message passing system for distributed shared memory multiprocessor system and message passing method using the same |
US5455952A (en) | 1993-11-03 | 1995-10-03 | Cardinal Vision, Inc. | Method of computing based on networks of dependent objects |
US5742848A (en) | 1993-11-16 | 1998-04-21 | Microsoft Corp. | System for passing messages between source object and target object utilizing generic code in source object to invoke any member function of target object by executing the same instructions |
US5581704A (en) | 1993-12-06 | 1996-12-03 | Panasonic Technologies, Inc. | System for maintaining data coherency in cache memory by periodically broadcasting invalidation reports from server to client |
US5594921A (en) | 1993-12-17 | 1997-01-14 | Object Technology Licensing Corp. | Authentication of users with dynamically configurable protocol stack |
AU1522095A (en) | 1994-01-05 | 1995-08-01 | Peter J. Covey | Dynamic-state, multi-dimensional, multi-media database |
US5832219A (en) | 1994-02-08 | 1998-11-03 | Object Technology Licensing Corp. | Distributed object networking service |
US5675796A (en) | 1994-04-08 | 1997-10-07 | Microsoft Corporation | Concurrency management component for use by a computer program during the transfer of a message |
US5680617A (en) | 1994-05-16 | 1997-10-21 | Apple Computer, Inc. | Computer-human interface which provides for user customization of object behavior |
DE69533148T2 (de) | 1994-05-26 | 2005-08-25 | Sun Microsystems, Inc., Santa Clara | Verfahren und Gerät zur Erzeugung und Verwendung kurzer Operationsidentifizierer in objektorientierten Systemen |
US5655148A (en) | 1994-05-27 | 1997-08-05 | Microsoft Corporation | Method for automatically configuring devices including a network adapter without manual intervention and without prior configuration information |
US5680573A (en) | 1994-07-12 | 1997-10-21 | Sybase, Inc. | Method of buffering data objects in a database |
US5778228A (en) | 1994-08-16 | 1998-07-07 | International Business Machines Corporation | Method and system for transferring remote procedure calls and responses over a network |
US5555367A (en) | 1994-09-30 | 1996-09-10 | General Electric Company | Method and system for generating computer programs for queries formed by manipulating object-oriented diagrams |
JP4058118B2 (ja) | 1994-11-15 | 2008-03-05 | 株式会社日立製作所 | プログラム生成システム及び方法 |
US5577231A (en) | 1994-12-06 | 1996-11-19 | International Business Machines Corporation | Storage access authorization controls in a computer system using dynamic translation of large addresses |
US5644768A (en) | 1994-12-09 | 1997-07-01 | Borland International, Inc. | Systems and methods for sharing resources in a multi-user environment |
US5553282A (en) | 1994-12-09 | 1996-09-03 | Taligent, Inc. | Software project history database and method of operation |
EP0717337B1 (en) | 1994-12-13 | 2001-08-01 | International Business Machines Corporation | Method and system for the secured distribution of programs |
US5872928A (en) | 1995-02-24 | 1999-02-16 | Cabletron Systems, Inc. | Method and apparatus for defining and enforcing policies for configuration management in communications networks |
US5628005A (en) | 1995-06-07 | 1997-05-06 | Microsoft Corporation | System and method for providing opportunistic file access in a network environment |
US5761656A (en) | 1995-06-26 | 1998-06-02 | Netdynamics, Inc. | Interaction between databases and graphical user interfaces |
US5802367A (en) | 1995-07-07 | 1998-09-01 | Microsoft Corporation | Method and system for transparently executing code using a surrogate process |
US5745703A (en) | 1995-07-18 | 1998-04-28 | Nec Research Institute, Inc. | Transmission of higher-order objects across a network of heterogeneous machines |
US5774551A (en) | 1995-08-07 | 1998-06-30 | Sun Microsystems, Inc. | Pluggable account management interface with unified login and logout and multiple user authentication services |
US5649186A (en) | 1995-08-07 | 1997-07-15 | Silicon Graphics Incorporated | System and method for a computer-based dynamic information clipping service |
JP2964926B2 (ja) | 1995-08-29 | 1999-10-18 | 富士ゼロックス株式会社 | データベース管理装置及び方法 |
US5671225A (en) | 1995-09-01 | 1997-09-23 | Digital Equipment Corporation | Distributed interactive multimedia service system |
US5737607A (en) | 1995-09-28 | 1998-04-07 | Sun Microsystems, Inc. | Method and apparatus for allowing generic stubs to marshal and unmarshal data in object reference specific data formats |
US5864862A (en) | 1996-09-30 | 1999-01-26 | Telefonaktiebolaget Lm Ericsson (Publ) | System and method for creating reusable components in an object-oriented programming environment |
US5872973A (en) | 1995-10-26 | 1999-02-16 | Viewsoft, Inc. | Method for managing dynamic relations between objects in dynamic object-oriented languages |
US5860153A (en) | 1995-11-22 | 1999-01-12 | Sun Microsystems, Inc. | Memory efficient directory coherency maintenance |
US5745695A (en) | 1996-01-16 | 1998-04-28 | Motorola Inc. | Radio system with suspension of packet data service during non-data service connection |
US5754849A (en) | 1996-01-30 | 1998-05-19 | Wayfarer Communications, Inc. | Self-describing object providing dynamic manipulation of heterogeneous data values and semantic identity between memory and transmission representations |
US5845129A (en) | 1996-03-22 | 1998-12-01 | Philips Electronics North America Corporation | Protection domains in a single address space |
US5706502A (en) | 1996-03-25 | 1998-01-06 | Sun Microsystems, Inc. | Internet-enabled portfolio manager system and method |
US5790548A (en) | 1996-04-18 | 1998-08-04 | Bell Atlantic Network Services, Inc. | Universal access multimedia data network |
US5815709A (en) | 1996-04-23 | 1998-09-29 | San Microsystems, Inc. | System and method for generating identifiers for uniquely identifying object types for objects used in processing of object-oriented programs and the like |
US5778368A (en) | 1996-05-03 | 1998-07-07 | Telogy Networks, Inc. | Real-time embedded software respository with attribute searching apparatus and method |
US5778187A (en) | 1996-05-09 | 1998-07-07 | Netcast Communications Corp. | Multicasting method and apparatus |
US5835737A (en) | 1996-05-10 | 1998-11-10 | Apple Computer, Inc. | Method and apparatus for arbitrating access to selected computer system devices |
US5813013A (en) | 1996-06-06 | 1998-09-22 | Microsoft Corporation | Representing recurring events |
US5768532A (en) | 1996-06-17 | 1998-06-16 | International Business Machines Corporation | Method and distributed database file system for implementing self-describing distributed file objects |
US5727145A (en) | 1996-06-26 | 1998-03-10 | Sun Microsystems, Inc. | Mechanism for locating objects in a secure fashion |
US5809507A (en) | 1996-07-01 | 1998-09-15 | Sun Microsystems, Inc. | Method and apparatus for storing persistent objects on a distributed object network using a marshaling framework |
US5818448A (en) | 1996-07-02 | 1998-10-06 | Sun Microsystems, Inc. | Apparatus and method for identifying server computer aggregation topologies |
US5748897A (en) | 1996-07-02 | 1998-05-05 | Sun Microsystems, Inc. | Apparatus and method for operating an aggregation of server computers using a dual-role proxy server computer |
US5860004A (en) | 1996-07-03 | 1999-01-12 | Sun Microsystems, Inc. | Code generator for applications in distributed object systems |
US5757925A (en) | 1996-07-23 | 1998-05-26 | Faybishenko; Yaroslav | Secure platform independent cross-platform remote execution computer system and method |
US5875335A (en) | 1996-09-30 | 1999-02-23 | Apple Computer, Inc. | Parameter marshaling techniques for dynamic object-oriented programming languages |
US5787425A (en) | 1996-10-01 | 1998-07-28 | International Business Machines Corporation | Object-oriented data mining framework mechanism |
US5832529A (en) | 1996-10-11 | 1998-11-03 | Sun Microsystems, Inc. | Methods, apparatus, and product for distributed garbage collection |
US5787431A (en) | 1996-12-16 | 1998-07-28 | Borland International, Inc. | Database development system with methods for java-string reference lookups of column names |
US5815149A (en) | 1997-02-19 | 1998-09-29 | Unisys Corp. | Method for generating code for modifying existing event routines for controls on a form |
US5864866A (en) | 1997-03-26 | 1999-01-26 | International Business Machines Corporation | Apparatus and method for providing externalization in an object-oriented environment |
US5808911A (en) | 1997-06-19 | 1998-09-15 | Sun Microsystems, Inc. | System and method for remote object resource management |
US5878411A (en) | 1997-06-27 | 1999-03-02 | International Business Machines Corporation | Dependent object class and subclass mapping to relational data store |
US5974420A (en) * | 1998-01-27 | 1999-10-26 | International Business Machines Corporation | Information exchange operator for a tuplespace |
US5963947A (en) * | 1998-01-27 | 1999-10-05 | International Business Machines Corporation | Technique of dynamically adding functionality from a client to manipulated data at a server |
US6560633B1 (en) * | 1999-06-10 | 2003-05-06 | Bow Street Software, Inc. | Method for creating network services by transforming an XML runtime model in response to an iterative input process |
-
2000
- 2000-09-12 US US09/660,553 patent/US6868447B1/en not_active Expired - Lifetime
-
2001
- 2001-05-09 JP JP2001583307A patent/JP2004501427A/ja active Pending
- 2001-05-09 EP EP01933290A patent/EP1281119B1/en not_active Expired - Lifetime
- 2001-05-09 DE DE60104678T patent/DE60104678T2/de not_active Expired - Fee Related
- 2001-05-09 AT AT01933290T patent/ATE272861T1/de not_active IP Right Cessation
- 2001-05-09 WO PCT/US2001/015206 patent/WO2001086425A2/en active IP Right Grant
- 2001-05-09 AU AU2001259726A patent/AU2001259726A1/en not_active Abandoned
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007517279A (ja) * | 2003-11-26 | 2007-06-28 | インリア・インスティテュート・ナショナル・ドゥ・ルシェルチェ・アン・インフォマティック・エ・アン・アートマティック | 通信オブジェクト間で結果を送信するための非同期自動デバイス及び方法 |
JP2018063724A (ja) * | 2013-05-06 | 2018-04-19 | コンヴィーダ ワイヤレス, エルエルシー | M2mシステムにおけるセマンティクスサポートおよび管理 |
US10341439B2 (en) | 2013-05-06 | 2019-07-02 | Convida Wireless, Llc | Semantics support and management in M2M systems |
US11520606B2 (en) * | 2017-09-22 | 2022-12-06 | Vmware, Inc. | Dynamic generation of user interface components based on hierarchical component factories |
US20210373546A1 (en) * | 2018-10-31 | 2021-12-02 | Toshiba Mitsubishi-Electric Industrial Systems Corporation | Scada web hmi system |
US11803179B2 (en) * | 2018-10-31 | 2023-10-31 | Toshiba Mitsubishi-Electric Industrial Systems Corporation | SCADA web HMI system |
Also Published As
Publication number | Publication date |
---|---|
WO2001086425A2 (en) | 2001-11-15 |
US6868447B1 (en) | 2005-03-15 |
AU2001259726A1 (en) | 2001-11-20 |
DE60104678T2 (de) | 2005-08-04 |
EP1281119A2 (en) | 2003-02-05 |
WO2001086425A3 (en) | 2002-11-28 |
ATE272861T1 (de) | 2004-08-15 |
EP1281119B1 (en) | 2004-08-04 |
DE60104678D1 (de) | 2004-09-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7016966B1 (en) | Generating results gates in a distributed computing environment | |
US7200848B1 (en) | Migrating processes using data representation language representations of the processes in a distributed computing environment | |
EP1285334B1 (en) | Mechanism and apparatus for accessing and addressing services in a distributed computing environment | |
US6789126B1 (en) | Addressing message gates in a distributed computing environment | |
US6850979B1 (en) | Message gates in a distributed computing environment | |
US7577834B1 (en) | Message authentication using message gates in a distributed computing environment | |
EP1281119B1 (en) | Mechanism and apparatus for returning results of services in a distributed computing environment | |
US6950875B1 (en) | Message conductors in a distributed computing environment | |
US7243356B1 (en) | Remote method invocation with secure messaging in a distributed computing environment | |
US8001232B1 (en) | Event message endpoints in a distributed computing environment | |
US8082491B1 (en) | Dynamic displays in a distributed computing environment | |
US7188251B1 (en) | System and method for secure message-based leasing of resources in a distributed computing environment | |
US7010573B1 (en) | Message gates using a shared transport in a distributed computing environment | |
JP2004501428A (ja) | サービスの近接発見の方法および装置 | |
US7065574B1 (en) | Messaging system using pairs of message gates in a distributed computing environment | |
WO2001086428A2 (en) | Mechanism and apparatus for uri-addressable repositories of service advertisements and other content in a distributed computing environment | |
EP1380941A2 (en) | Tranformation of objects between a computer programming language and data representation language | |
EP1290547B1 (en) | Transformation of objects between a computer programming language and a data representation language | |
EP1314085B1 (en) | Remote function invocation with messaging in a distributed computing environment | |
EP1384142B1 (en) | Bridging between a data representation language message-based distributed computing environment and other environments | |
JP2003533767A (ja) | コンピュータ・プログラミング言語とデータ表現言語との間のオブジェクトの変換 |