説明

ソフトウェア間通信の中継方法、装置、及びプログラム

【課題】Webブラウザ内で実行される複数のソフトウェア間の通信を、セキュリティを確保しつつ行えるようにする。
【解決手段】
中継サーバが中継するWebドキュメントに、中継サーバを介して他Webドキュメントと通信を行うためのコードが注入される。連携定義に基づきWebドキュメント同士が注入コードと中継サーバを介して通信を行う。

【発明の詳細な説明】
【技術分野】
【0001】
開示する技術は、Webブラウザ内で実行される複数のソフトウェア間の通信の中継技術に関する。
【背景技術】
【0002】
最近のWebブラウザには same origin policy というセキュリティ機構が備わっており、異なったオリジン(送信元)から読み込まれたWebアプリケーション(ソフトウェア)が自由に通信を行うことがないように制御され、セキュリティが確保される。
【0003】
一方、最近では、同一ブラウザ内に複数のドキュメントを表示させ、異なったオリジンから読み込まれたWebアプリケーション同士が通信を行うような、マッシュアップと呼ばれる手法が使われるようになってきた。
【0004】
しかし、このマッシュアップを実現するにあたっては、上述のsame origin policy機構によりアプリケーション間の連携が阻害されるため、same origin policy によるセキュリティ機構を回避する手法が求められている。
【0005】
Webアプリケーション間の連携を実現する第1の従来技術として、「中継サーバによるドメイン越え」という技術が知られている。更に、この技術として、「パラメータによる中継」技術と「ドメインのエンコーディングによる中継」技術が知られている。
【0006】
まず、「パラメータによる中継」技術は、読み込みたいURIを例えば「http://www.exapmle.net/dir/」とした場合に、「http://proxy.example.org/?uri=http://www.exapmle.net/dir/」などのように上記URIが中継ドメイン「proxy.example.org」に対するリクエストのクエリパラメータとして埋め込まれる方法である。この手法は、CGIプロキシでよく使われている。この方法により中継サーバが経由されるときのオリジンは、中継サーバのオリジンとなる。このため、中継サーバ経由で異なるオリジンから読み込まれたドキュメントのオリジンは、互いに等しくなる。図15は、「パラメータによる中継」技術の例を示す図である。ドメインPのプロキシ経由で異なるサーバA及びBから読み込まれた各ドキュメントが、クライアントコンピュータの同一ブラウザに含まれる各フレーム等に表示される。この場合、各ドキュメントのドメインは、同一のドメインPとなる。従って、各ドキュメントは、same origin policyに阻まれずに、ブラウザ上で相互に通信が可能となる。
【0007】
次に、上記第1の従来技術における「ドメインのエンコーディングによる中継」技術について説明する。
この技術は、読み込みたいURIを「http://www.example.net/dir/」とした場合に、「http://http-www-example-net.proxy.example.org/dir/」などのように、もともとのURIのスキーマ・ホスト・ポートをドメインの一部にエンコーディングし、パスとクエリを付加する手法である。図16は、「ドメインのエンコーディングによる中継」技術の例を示す図である。この手法のプロキシ経由で異なるサーバA及びBから読み込まれた各ドキュメントは、クライアントコンピュータの同一ブラウザに含まれる各フレーム等に表示される。この場合、各ドキュメントのドメインは、ドメインPの一部に、例えばA.P又はB.Pというようにエンコーディングされる。この場合、各ドキュメントのドメインは、異なるドメインとなる。この手法は、same origin policyによるセキュリティを保ち、SSLの証明書と相性がよく、変換・逆変換の処理効率もよく、またそのURIを見たときに容易に解読することが可能(ヒューマンリーダブル)なエンコーディング方法である。
【0008】
Webアプリケーション間の連携を実現する第2の従来技術として、「ブラウザ内のドキュメント間通信」技術が知られている。更に、この技術として、「iframe proxy communication」技術と「window.postMessage」技術が知られている。
【0009】
「iframe proxy communication」技術は、HTML(HyperText Markup Language)におけるiframe要素のsrc属性のフラグメントIDを用いてドキュメント間で通信を行う手法である。
【0010】
一方、「window.postMessage」技術は、HTML5で採用される新アプリケーションプログラミングインタフェース(API)である。HTML5は、W3C(World Wide Web Consortium)やWHATWG(Web Hypertext Application Technology Working Group)で策定中の次期HTML仕様である。このHTML5には、「window.postMessage」というAPIが定義されており、このAPIを用いることで、異なったオリジンのドキュメント間で通信を行うことができるようになっている。
【0011】
本出願が開示する技術に関連する従来技術として、下記先行技術文献が開示されている。
【先行技術文献】
【特許文献】
【0012】
【特許文献1】特開2000−076074号公報
【特許文献2】特開2005−267605号公報
【発明の概要】
【発明が解決しようとする課題】
【0013】
しかし、前述した各従来技術は、以下に示される問題点を有している。
まず、前述した第1の従来技術における「パラメータによる中継」技術では、もともとは異なるオリジンであったドキュメント同士が中継サーバを経由することで同一のオリジンとなるため、same origin policy によるセキュリティ機構が動作しない。このため、ドキュメント間では自由な通信ができるが、いかなる通信も許容してしまうため、情報の漏洩や改竄が起きる可能性があるという問題点を有している。
【0014】
前述した第1の従来技術における「ドメインのエンコーディングによる中継」技術では、もともとのURIのオリジンが異なっていればエンコーディング後のURIでもオリジンが異なるので、異なるオリジンを中継サーバ経由で読み込んでもsame origin policyが働く。この結果、ドキュメント間では通信ができないため安全ではあるが、アプリケーションを連携させることができず、マッシュアップ等の実現が困難である。
【0015】
前述した第2の従来技術における「iframe proxy communication」技術では、URIのフラグメントIDという、長さの制限の厳しい文字列による通信であるため、通信効率が良いとはいえない。また、「iframe proxy communication」技術では、通信するドキュメント同士が通信相手としてお互いに認識し合っていないと安全な通信を実現することができないという問題点を有している。
【0016】
前述した第2の従来技術における「window.postMessage」技術に関しては、HTML5仕様が策定途中であり、この仕様に則ったWebブラウザの広い普及はまだ先のことであるため、未完成の技術である。また、「window.postMessage」技術では、ドキュメント間が安全に通信をするためにはドキュメント同士が通信相手としてお互いに認識し合っている必要がある。
【0017】
開示する技術が解決しようとする課題は、Webブラウザ内で実行される複数のソフトウェア間の通信を、セキュリティを確保しつつ行えるようにすることにある。
【課題を解決するための手段】
【0018】
上記課題を解決するために、態様の一例は、第1の対象サーバから中継サーバを経由して取得した第1のWebドキュメントに基づいて、クライアントのブラウザ内で実行される連携元ソフトウェアと、第2の対象サーバからその中継サーバを経由して取得した第2のWebドキュメントに基づいて、そのブラウザ内で実行される連携先ソフトウェアとの間の通信を、その中継サーバにおいて中継する中継方法として実現され、中継サーバが、以下のステップを実行する。
【0019】
第1の注入ステップは、第1のWebドキュメントに、連携元ソフトウェアの識別子とその連携元ソフトウェア内で実行される第1の関数の識別子とその第1の関数に与えられる引数を含む第1のイベント通知を、連携元ソフトウェアが中継サーバに送信するための第1の命令を注入する。
【0020】
第2の注入ステップは、第2のWebドキュメントに、第2の関数の識別子と引数を含む中継サーバからの第2のイベント通知に基づいて、連携先ソフトウェアがその第2の関数をその引数により実行するための第2の命令を注入する。
【0021】
第1の送信ステップは、第1の命令が注入された第1のWebドキュメントおよび第2の命令が注入された第2のWebドキュメントをクライアントに送信する。
決定ステップは、連携元ソフトウェアから、第1のイベント通知を受信したときに、連携元ソフトウェアの識別子とその連携元ソフトウェアで実行された第1の関数の識別子の組み合わせに対応付けて、その連携元ソフトウェアとの通信が行われる連携先ソフトウェアの識別子とその連携先ソフトウェアで実行される第2の関数の識別子の組み合わせを保持した連携定義テーブルを参照し、その第1のイベント通知に含まれるその連携元ソフトウェアの識別子とその連携元ソフトウェアで実行された第1の関数の識別子の組み合わせに対応する、連携先ソフトウェアの識別子とその連携先ソフトウェアで実行される第2の関数の識別子の組み合わせを決定する。
【0022】
第2の送信ステップは、決定された組み合わせに含まれる連携先ソフトウェアの識別子に基づいて特定される連携先ソフトウェアに対して、第2のイベント通知として、その決定された組み合わせに含まれる第2の関数の識別子と引数とを送信する。
【発明の効果】
【0023】
開示する技術によれば、ソフトウェア間で、中継サーバを介してユーザまたはシステムの許諾に基づいた通信を行うことにより、該ソフトウェア間での安全な通信が可能となる。
【0024】
開示する技術によれば、ソフトウェア間の通信の可否をユーザやシステムが定義するため、各ソフトウェアに通信相手のソフトウェアを意識させる必要をなくすことが可能となる。
【0025】
開示する技術によれば、クライアント側はプラグイン等が不要で通常のブラウザのみで動作させることが可能となる。
【図面の簡単な説明】
【0026】
【図1】Webドキュメント間通信システムの第1の実施形態の基本構成図である。
【図2】第1の実施形態の動作フローチャートである。
【図3】ウィジェットのメタデータのデータ構成図である。
【図4】発行関数に対するスクリプト注入の説明図である。
【図5】受信関数に対するHTMLコード注入の説明図である。
【図6】連携定義の動作説明図である。
【図7】Webドキュメント間通信システムの第2の実施形態の基本構成図である。
【図8】第2の実施形態における読込みシーケンスを示す動作シーケンス図である。
【図9】第2の実施形態における連携定義シーケンスを示す動作シーケンス図である。
【図10】第2の実施形態における連携シーケンスを示す動作シーケンス図である。
【図11】第2の実施形態における連携定義テーブルのデータベーススキーマを示す図である。
【図12】第2の実施形態におけるリクエスト受付処理を示す動作フローチャートである。
【図13】マッシュアップの例を示す図である。
【図14】中継サーバ101を実現できるコンピュータのハードウェア構成の一例を示す図である。
【図15】第1の従来技術の説明図である。
【図16】第2の従来技術の説明図である。
【発明を実施するための形態】
【0027】
以下、実施形態について詳細に説明する。
図1は、Webドキュメント間通信システムの第1の実施形態の基本構成図である。
前述したように、same origin policyによるセキュリティ機構の存在により、Webアプリケーション(ソフトウェア)間の通信は、通信はできるが全ての通信を許可してしまうため安全でない、若しくは、そもそも通信ができない、のいずれかであった。
【0028】
これに対して、本実施形態では、異なるサーバ102(#m)及び102(#n)からの各ドキュメントは、オリジンが異なるようにして中継サーバ101経由でブラウザ103内の各フレームに読み込まれる。その際に、各ドキュメントと中継サーバ101が通信可能になるように、中継サーバ101が各ドキュメントにコードを注入する。ドキュメントから中継サーバ101にドキュメント間通信の要求が来たら、中継サーバ101がその通信を許可するか否かを判断し、許可ならば通信先のドメインの中継サーバ101がブラウザ103上のドキュメントに対して、通信内容を配信する。
【0029】
各ドキュメントは、中継サーバ101を経由することによりオリジンが異なるため、same origin policyによってブラウザ103内では相互に通信はできない。本実施形態では、ブラウザ103内のドキュメント間で通信を行いたい場合には、中継サーバ101によって各ドキュメントに注入されたコードによって、中継サーバ101を経由して通信を実行する。この際、中継サーバ101はドキュメント相互間の通信を許可するか否かを判断できるため、Webアプリケーション間の安全な連携が可能となる。
【0030】
図2は、上述の第1の実施形態の動作を示す動作フローチャートである。以下に、この動作フローチャートの各ステップの動作を説明する。

ステップS201
まず、ブラウザ103を利用するユーザが、中継サーバ101に対してメタデータのURI(Uniform Resource Identifier)を渡し、中継サーバ101がそのメタデータに基づいて、ウィジェット(ブラウザ内で、該ブラウザとは独立して実行されるソフトウェアをいう。)をブラウザ103に追加表示させる。この例では、ブラウザ103において、アドレス帳と地図のウィジェットが読み込まれる。
【0031】
ステップS202
各ウィジェットがサーバ102より中継サーバ101経由で読み込まれる際に、中継サーバ101が、各ウィジェットに対して、URIの置換、発行関数へのコード(スクリプト)注入、受信関数へのコード注入を行う。
【0032】
ステップS203
ユーザは、中継サーバ101に対して、発行ウィジェット及び発行関数と受信ウィジェット及び受信関数の組を指定することにより、連携定義を指定する。この例では、「アドレス帳ウィジェットにおいて住所が選択されたら地図ウィジェットにて検索が実行される」という連携関係が、下記記述によって定義される。この記述は、ウィジェットw1において住所を選択する関数「AddressSelected」が実行されたら、ウィジェットw2において地図を検索する関数「SearchMapA」が実行されるという連携関係を表している。

w1:AddressSelected -> w2:SearchMapA
【0033】
上述の連携定義は、例えばブラウザ103を利用するユーザが、中継サーバ101から提供される連携定義用のホームページを呼び出して実行する。例えば、ユーザが発行ウィジェット名と受信ウィジェット名を指定すると、中継サーバ101は、サーバ102にアクセスして、これらのウィジェットに対応するメタデータ(図3)を参照し、発行関数と受信関数のリストをユーザに提示する。ユーザは、提示された関数の中から、所望の発行関数と受信関数の組を指定する。
【0034】
ステップS204
中継サーバ101が、ステップS203にてユーザによって指定された連携定義を、内部の連携定義テーブルに登録する。或いは、この連携定義は、例えば中継サーバ101において、予めプリセットされてもよい。
【0035】
ステップS205
アドレス帳ウィジェットにおいて、住所が選択されると、ステップS202にて発行関数へ注入されたスクリプトにより、中継サーバ101にイベントが発行される。
【0036】
ステップS206
中継サーバ101は、ステップS204にて定義した連携定義テーブルを参照して、配信先を決定する。この例では、地図ウィジェットの地図検索が配信先となる。
【0037】
ステップS207
中継サーバ101は、ステップS202にて受信関数に注入されたiframeを用いて、イベントをクライアントに送信する。この結果、地図ウィジェットにおいて地図検索が実行されることになる。

【0038】
以上のステップS201からS207までの一連の動作により、ブラウザ103上で表示されているウィジェット間で、中継サーバ101経由による連携が実現される。
【0039】
前述のステップS201に基づいて図1のサーバ102から発行されるウィジェットには一般的に、図3の301又は302として例示されるようなメタデータが付けられている。メタデータ301又は302には、303又は304として示されるcontent要素のsrc属性としてWebアプリケーションのURIが書かれている。また、305として示されるpublisher要素と306として示されるsubscriber要素には発行関数と受信関数の関数名が書かれている。このメタデータに基づいて、後述するウィジェット読込み処理が実行される。
【0040】
前述のステップS202の実行において、中継サーバ101(図1)を経由してリソースが読み込まれるとき、リソースがHTMLやJavaScriptなどのテキスト形式のリソースであった場合に、URIの置換が行われる。この置換処理により、もともとのURIが中継サーバ101経由のURIに置き換えられることになる。
【0041】
URIの置換においては、ウィジェットごとに一意のインスタンスIDがドメイン名に埋め込まれる。例えば、元のURIが「http://address.example.net/Address.html 」でウィジェットインスタンスIDが「cn0306」なら、置換後のURIは「http://cn0306-http-address-exapmle-net.hub.example.org/Address.html」のようになる。
【0042】
一意なウィジェットインスタンスIDをドメイン名に埋め込むことには、主に2つの理由がある。一つは、ウィジェットインスタンスIDに基づいて中継サーバ101がウィジェットを特定できるようにするためである。もう一つは、もともとのWebアプリケーションのオリジンが同じであったとしても、中継サーバ101を経由することで異なるオリジンになり、ウィジェット間の直接の通信を不可能にさせてセキュリティが高められることである。
【0043】
メタデータに発行関数があることが記述されていた場合(例えば図3の301の場合)には、中継サーバ101は、前述のステップS202の実行において、サーバ102からの読み込んだウィジェット内の発行関数へスクリプト(コード)を注入する。今例えば、元のHTMLドキュメントが、図4の401のようになっており、発行関数が403で示されるようにグローバル関数として定義されているとする。このようなHTMLドキュメントのbody要素の末尾に、402として例示されるスクリプトが注入される。
【0044】
このスクリプトでは、404として示されるように、もともとの発行関数がローカル変数に保存され、405として示されるように、新たな関数がグローバル変数に代入される。新たな関数では、406として示されるように、もともとの発行関数が呼び出される。また、407として示されるように、XMLHttpRequestを用いて中継サーバに対してイベントが起きたことを通知するためのコードが記述される。更に、408として示されるように、通知の際に中継サーバ101の連携用パスを指定するためのコードが記述さる。更に、409として示されるように、通知の際にイベント名や引数をPOSTリクエストのリクエストボディとして送信するためのコードが記述される。なお、408として示される連携用パスは、中継サーバ101が予め定めた特殊なパスとする。
【0045】
中継サーバ101でこのようにスクリプトを注入してからブラウザに送信することで、もとのアプリケーションのロジックを壊すことなく、中継サーバ101に対してイベントの通知をする機能を追加できる。
【0046】
メタデータに受信関数があることが記述されていた場合(例えば図3の302の場合)には、中継サーバ101は、前述のステップS202の実行において、サーバ102から読み込んだウィジェット内の受信関数へHTMLコードを注入してからブラウザに送信する。元のHTMLドキュメントが、例えば図5の501のようになっており、受信関数が504で示されるようにグローバル関数として定義されているとする。このようなHTMLドキュメントのbody要素の末尾に、502として例示されるiframeが注入される。そのiframeによって読み込まれるHTMLの中身であるスクリプト要素は、例えば503のようなコードである。
【0047】
中継サーバ101は、アドレス帳ウィジェット内の発行関数に注入されたスクリプトからのイベント通知に基づいて、前述したステップS207にて、スクリプト要素503を、ブラウザ103に表示される地図ウィジェット内のiframeにイベントとして通知する。このイベントの配信時には、サーバプッシュ型通信手法Cometの一種であるiframe streamingを用いてスクリプト要素503が書き込まれ、ネットワークストリームがフラッシュされることで、書き込まれたスクリプト要素がブラウザ側で即時実行される。ブラウザ103にて実行されるスクリプト要素503では、505で示されるwindow.parent参照の記述により、元のドキュメント501内で504として定義されているグローバル関数が呼び出される。この結果、アドレス帳ウィジェット内での住所選択に応答して、地図ウィジェット内で発行元のサーバ102(図1)に対して地図検索が実行され、その検索結果が地図ウィジェット内に表示される。
【0048】
上述の例では、発行ウィジェットからのイベント通知に基づく中継サーバ101から受信ウィジェットへのイベント通知は、iframeコードの注入とiframe streamingによって実現されている。そのほか、XHR(XMLHttpRequest)を用いたポーリング又は一般的なComet、或いは、タイマ等によるscript要素追加に基づくJSONP(JSON with Padding)を実行する手法等を採用することができる。
【0049】
前述のステップS203においてユーザによる指定又はシステムプリセットにより連携定義が指定されると、中継サーバ101は、ステップS204にてその連携定義を連携定義テーブルに登録する。ステップS205において発行元のウィジェットから中継サーバ101にイベントが通知されると、中継サーバ101は、ステップS206において、連携定義テーブルを参照して、どの受信ウィジェットのどの受信関数にイベントを通知するかを判別し、その結果決定したイベント通知を実行する。即ち、中継サーバ101は、連携定義テーブルに連携定義が登録されている場合のみ、受信ウィジェットへのイベント通知を実行する。このように連携定義を用いることで、安全なウィジェット間連携を実現できる。
【0050】
図6は、連携定義テーブルの例を示す図である。この例の1行目のエントリでは、発行ウィジェット名としてアドレス帳ウィジェットに対応するw1が指定され、発行関数名として住所項目が選択(クリック又はポイント)されると発行される関数AddressSelectedが指定されている。これに対応して、受信ウィジェット名として地図ウィジェットに対応するw2が指定され、受信関数名として地図Aを検索する関数SearchMapAが指定されている。また、2行目のエントリでは、発行ウィジェット名としてアドレス帳ウィジェットに対応するw1が指定され、発行関数名としてメールアドレス項目が選択されると発行される関数MailSelectedが指定されている。これに対応して、受信ウィジェット名としてメーラウィジェットに対応するw3が指定され、受信関数名としてToアドレスへのアドレス設定を行う関数SetToが指定されている。
【0051】
中継サーバ101は、上述の連携定義以外のウィジェット間連携は実行しないため、アドレス帳のメールアドレスが地図ウィジェットに漏れたり、アドレス帳の内容が他ウィジェットによって書き換えられたりといった、予測されない連携を阻止することができる。
【0052】
図7は、Webドキュメント間通信システムの第2の実施形態の基本構成図である。第2の実施形態は、図1の第1の実施形態における中継サーバ101、サーバ(対象サーバ)102、及びブラウザ103からなるWebドキュメント間通信システムにおいて、中継サーバ101の構成を具体化したものである。
【0053】
図7の構成を有する中継サーバ101を中心とした動作について、以下に説明する。
図8は、第2の実施形態における読込みシーケンスを示す動作フローチャートである。この動作フローチャートは、図2に示される前述した第1の実施形態の動作フローチャートのステップS201とS202の処理を詳細化したものである。
【0054】
ユーザは、ブラウザ103の親フレームから、中継サーバ101内の追加削除部701に、追加したいウィジェットのメタデータのURIを渡す(図8のステップS801)。
追加削除部701は、ユーザテーブル702を参照し、要求ユーザが正規のユーザであるか否かをチェックする(図8のステップS802)。
【0055】
追加削除部701は、ユーザ確認ができたら、対象サーバ102からユーザにより要求されたメタデータを取得する(図8のステップS803)。
そして、追加削除部701は、そのメタデータを解析し(図8のステップS804)、そのメタデータに一意なウィジェットインスタンスIDを割り当てて、そのメタデータの登録情報をインスタンスデータベース703に登録する(図8のステップS805)。
【0056】
追加削除部701は、中継サーバ101経由でコンテンツを読み込むためのウィジェットインスタンスID(図中ではインスタンスID)と置換済みURIを、ブラウザ103の親フレームに返す(図8のステップS806)。ブラウザ103の親フレームは、この情報を中継サーバ101から受け取ると、子フレームを作成し、そのアドレスを上記置換済みURIに設定する。
【0057】
ブラウザ103の親フレームが作成した子フレームは、中継サーバ101のプロキシ部704に対して、上記置換済みURIでリクエストを送る(図8のステップS807)。
プロキシ部704内のURI置換部705は、置換済みURIから逆変換により、ウィジェットインスタンスIDと元のURIを取り出す(図8のステップS808)。
【0058】
プロキシ部704は、元のURIが指している対象サーバ102のコンテンツにリクエストを送り、そのコンテンツを取得する(図8のステップS809)。
もしコンテンツがテキストベースのコンテンツであった場合、プロキシ部704内のURI置換部705は、対象サーバ102から渡されたコンテンツの内容のうちURIの部分に対して置換を行う(図8のステップS810)。
【0059】
更に、プロキシ部704内のコード注入部706は、インスタンスデータベース703に登録されているメタデータに基づいて、発行関数と受信関数に対してスクリプト(コード)を注入する(図8のステップS811)。この動作は、第1の実施形態で前述した動作と同様である。
【0060】
プロキシ部704は、置換と注入の済んだテキストコンテンツ又はバイナリコンテンツを、ブラウザ103の子フレームに対してレスポンスとして返し(図8のステップS812)、ブラウザ103は、その内容をウィジェットとして表示する(図8のステップS813)。
【0061】
図9は、第2の実施形態における連携定義シーケンスを示す動作フローチャートである。この動作フローチャートは、図2に示される前述した第1の実施形態の動作フローチャートのステップS203とS204の処理を詳細化したものである。
【0062】
ユーザは、ブラウザ103の親フレームから中継サーバ101の連携定義部707に対して、発行ウィジェットのウィジェットインスタンスID、発行関数名、受信ウィジェットのウィジェットインスタンスID、受信関数名の組を送る(図9のステップS901)。
【0063】
連携定義部707は、ユーザテーブル702を参照し、要求ユーザが正規のユーザであるか否かをチェックする(図9のステップS902)。また、連携定義部707は、ユーザ確認ができたら、インスタンスデータベース703を参照し、ユーザから指定された各ウィジェットインスタンスIDと各関数の存在と、各ウィジェットの所有者が当該ユーザであることを確認する(図9のステップS902)。
【0064】
連携定義部707は、確認が済んだら、連携定義テーブル708に、発行ウィジェットインスタンスID(発行ウィジェット名)、発行関数名、受信ウィジェットインスタンスID(受信ウィジェット名)、受信関数名を登録する(図9のステップS903)。連携定義テーブル708の構成は、第1の実施形態の説明において前述した図6の構成と同様である。
【0065】
図10は、第2の実施形態における連携シーケンスを示す動作フローチャートである。この動作フローチャートは、図2に示される前述した第1の実施形態の動作フローチャートのステップS205とS206とS207の処理を詳細化したものである。
【0066】
ブラウザ103の子フレームで、ユーザが住所選択などのマウス操作又はカーソル操作を行うと、住所選択のイベントが発生する(図10のステップS1001)。
この結果、住所選択に対応する発行関数が呼び出され(図10のステップS1002)、その発行関数に注入されたスクリプトによって、子フレームから中継サーバ101の発行受付部709にリクエストが送られる。発行受付部709は、配信割振部710に、発行ウィジェットインスタンスID、発行関数名、関数引数を渡す(図10のステップS1003)。
【0067】
配信割振部710は、連携定義テーブル708を参照し、発行ウィジェットインスタンスIDと発行関数名の組に対応する受信ウィジェットインスタンスIDと受信関数の組を検索する(図10のステップS1004)。配信割振部710は、組が1つ以上見つかった場合は、配信部711に対し、見つかった組と関数引数を渡す(図10のステップS1005)。
【0068】
ブラウザ103の子フレームから中継サーバ101には、iframe streamingのCometリクエストが事前に来ている(図10のステップS1000)。このため、配信部711は、受信ウィジェットインスタンスIDに対応する子フレームに対して、Cometnoレスポンスとして受信関数名と関数引数を含むスクリプト要素を送信する(図10のステップS1006)。
【0069】
ブラウザ103の子フレームは、受信したスクリプト要素内の受信関数名に対応する受信関数を、関数引数をつけて呼び出し実行する(図10のステップS1007)。
図11は、中継サーバ101内のデータベースのスキーマを示す図である。
【0070】
図11において、ユーザテーブル702及び連携定義テーブル708は、それぞれ図7に示されるものと同じである。また、ウィジェットインスタンステーブル703−1、発行関数テーブル703−2、受信関数703−3は、図7のインスタンスデータベース(図中「インスタンス・関数」と表記)703に対応する。
【0071】
ユーザテーブル702は、ユーザ名とパスワードのハッシュを持ち、ユーザが正しいパスワードでログインしたときに一意のセッションIDがランダムで作成され、このテーブルに格納される。ユーザがログイン中は、そのセッションIDが用いられてユーザの識別が行われる。ユーザがログアウトしたら、セッションIDがテーブルから削除されることで、ログアウト処理が行われる。
【0072】
ウィジェットインスタンステーブル703−1では、ユーザがウィジェットの追加又は削除を行うたびに、データの追加と削除が発生する。ウィジェットが追加されたときには、追加されたウィジェットのメタデータに付与されている発行関数と受信関数が、発行関数テーブル703−2及び受信関数テーブル703−3に追加される。また、ウィジェットが削除されたときには、ウィジェットインスタンステーブル703−1から該当する行が削除される共に、発行関数テーブル703−2と受信関数テーブル703−3からも対応する関数の行が削除される。
【0073】
連携定義テーブル708では、発行関数と受信関数の関連が定義される。これは図5で前述した通りである。このテーブルで定義されている発行関数と受信関数の組に対して、発行関数が呼び出されたら、対応する受信関数が呼び出される。
【0074】
図12は、中継サーバ101が実行するリクエスト受付処理を示す動作フローチャートである。
中継サーバ101は、リクエストを、以下の4種類処理に振り分けて処理する。
【0075】
中継サーバ101自身へのリクエスト
中継サーバ101のコンテンツをレスポンスとして返したり、中継サーバ101上のサーバサイドプログラムを実行しその結果を返したりする。
【0076】
中継サーバ101として動作させるためのリクエスト
中継サーバ101は、リクエストされたURIを逆変換して元のURIにし、その元のURIに対してリクエストを送り、そのレスポンスを中継サーバ101で変換し、レスポンスとして返す。
【0077】
発行関数が呼び出されたことを中継サーバ101に伝えるためのリクエスト
中継サーバ101がスクリプトを注入した発行関数が呼び出されたときに、中継サーバ101に対してリクエストが発生するようになっている。
【0078】
受信関数に対してイベントの配信をしてもらうための非同期リクエスト
受信関数を持つウィジェットに対して中継サーバ101がiframe streamingのためのiframeを埋め込んであるため、そのiframeからのリクエスト101が中継サーバに対して発生する。イベントの配信が起きたときに中継サーバ101がこのストリームを利用してイベントを配信する。
【0079】
上記4つのリクエストの振分け処理を実行する動作フローチャートが、図12に示される
中継サーバ101は、HTTP(Hypertext Transfer Protocol)リクエストのHostヘッダに書かれているドメイン名をみて、それが中継用の変換済みドメインであるか否かを判断する(図12のステップS1202)。
【0080】
変換済みドメインでなければ、中継サーバ101は、自分自身へのリクエストであると判断し、中継サーバ101のコンテンツを返したりサーバサイドプログラムを実行したりする(図12のステップS1201→S1208)。
【0081】
ドメイン名が変換済みドメイン名であった場合、中継サーバ101は、次にHTTPリクエストのパスを調べる(図12のステップS1201→S1202)。
パスがComet用の特殊な予約済みパスでなかった場合には、中継サーバ101に対する中継のリクエストであると判断する。中継サーバ101は、リクエストされたURIを逆変換して元のURIにする(図12のステップS1206)。そして、中継サーバ101は、その元のURIに対してリクエストを中継し、対象サーバ102からのレスポンスを変換して中継サーバ101のレスポンスとして返す(図12のステップS1207)。この動作は、前述したように、プロキシ部704によって実行される。
【0082】
パスがComet用の特殊な予約済みパスであった場合には、中継サーバ101は、HTTPリクエストのメソッドを判定する(図12のステップS1203)。
メソッドがPOSTであった場合には、中継サーバ101は、発行関数からのイベント通知であると判断し、前述した図10のステップS1004からS1006のイベント発行処理を実行する(図12のステップS1203→S1204)。
【0083】
メソッドがGETであった場合には、中継サーバ101は、受信関数を含むウィジェットに注入したiframeによるiframe streamingであると判断し、イベントを配信するための非同期通信のストリームを開いたままにする(図12のステップS1203→S1205)。配信割振部710からイベント配信の要求が起きた場合には、配信部711がそのストリームに受信関数名と引数を書き込むことで、クライアント側で受信関数の呼び出しを行わせる。
【0084】
図13は、第1又は第2の実施形態を用いたマッシュアップの例を示す図である。
図13では、社内のアドレス帳とメーラ、及び社外の地図のアプリケーションが連携する例が示されている。アドレス帳には氏名、メールアドレス、住所が載っている。この住所録とメーラと地図を連携させたいのであるが、社内のメーラにはメールアドレスがわたるようにし、社外の地図には住所のみがわたるようにして、それ以外のデータがわたらないようにしたい。
【0085】
図5の連携定義テーブルにあるように連携が定義されることで、地図には住所のみが渡されそれ以外のデータがわたらないよう設定されることで、セキュリティを保ったままアプリケーションの連携をさせることが可能となる。
【0086】
このほか、メーラ、人事異動帳、従業員アドレス帳、スケジュールの社内のアプリケーションおよび地図の社外のアプリケーションを連携することなども可能である。
図14は、第1又は第2の実施形態の中継サーバ101を実現できるコンピュータのハードウェア構成の一例を示す図である。
【0087】
図14に示されるコンピュータは、CPU1401、メモリ1402、入力装置1403、出力装置1404、外部記憶装置1405、可搬記録媒体1409が挿入される可搬記録媒体駆動装置1406、及びネットワーク接続装置1407を有し、これらがバス1408によって相互に接続された構成を有する。同図に示される構成は上記システムを実現できるコンピュータの一例であり、そのようなコンピュータはこの構成に限定されるものではない。
【0088】
CPU1401は、当該コンピュータ全体の制御を行う。メモリ1402は、プログラムの実行、データ更新等の際に、外部記憶装置1405(或いは可搬記録媒体1409)に記憶されているプログラム又はデータを一時的に格納するRAM等のメモリである。CUP1401は、プログラムをメモリ1402に読み出して実行することにより、全体の制御を行う。
【0089】
入力装置1403は、例えば、キーボード、マウス等及びそれらのインタフェース制御装置とからなる。入力装置1403は、ユーザによるキーボードやマウス等による入力操作を検出し、その検出結果をCPU1401に通知する。
【0090】
出力装置1404は、表示装置、印刷装置等及びそれらのインタフェース制御装置とからなる。出力装置1404は、CPU1401の制御によって送られてくるデータを表示装置や印刷装置に出力する。
【0091】
外部記憶装置1405は、例えばハードディスク記憶装置である。主に各種データやプログラムの保存に用いられる。
可搬記録媒体駆動装置1406は、光ディスクやSDRAM、コンパクトフラッシュ(登録商標)、DVD(Digital Versatile Disc)、CD−ROM(Compact Disc Read Only Memory)等の可搬記録媒体1409を収容するもので、外部記憶装置1405の補助の役割を有する。
【0092】
ネットワーク接続装置1407は、例えばLAN(ローカルエリアネットワーク)又はWAN(ワイドエリアネットワーク)の通信回線を接続するための装置である。
第1又は第2の実施形態による中継サーバ101の機能は、それに必要な処理内容を記述したプログラムをCPU1401が実行することで実現される。そのプログラムは、例えば外部記憶装置1405や可搬記録媒体1409に記録して配布してもよく、或いはネットワーク接続装置1407によりネットワークを介して他のコンピュータから取得できるようにしてもよい。
【産業上の利用可能性】
【0093】
開示する技術は、複数のWebアプリケーションを提供するポータルサイトなどに利用することができる。
【符号の説明】
【0094】
101 中継サーバ
102 サーバ、対象サーバ
103 ブラウザ
701 追加削除部
702 ユーザテーブル
703 インスタンスデータベース
703−1 ウィジェットインスタンステーブル
703−2 発行関数テーブル
703−3 受信関数テーブル
704 プロキシ部
705 URI置換部
706 コード注入部
707 連携定義部
708 連携定義テーブル
709 発行受付部
710 配信割振部
711 配信部
1401 CPU
1402 メモリ
1403 入力装置
1404 出力装置
1405 外部記憶装置
1406 可搬記録媒体駆動装置
1407 ネットワーク接続装置
1408 バス
1409 可搬記録媒体

【特許請求の範囲】
【請求項1】
第1の対象サーバから中継サーバを経由して取得した第1のWebドキュメントに基づいて、クライアントのブラウザ内で実行される連携元ソフトウェアと、第2の対象サーバから該中継サーバを経由して取得した第2のWebドキュメントに基づいて、該ブラウザ内で実行される連携先ソフトウェアとの間の通信を、該中継サーバにおいて中継する中継方法において、
前記中継サーバが、
前記第1のWebドキュメントに、前記連携元ソフトウェアの識別子と該連携元ソフトウェア内で実行される第1の関数の識別子と該第1の関数に与えられる引数を含む第1のイベント通知を、前記連携元ソフトウェアが前記中継サーバに送信するための第1の命令を注入する第1の注入ステップと、
前記第2のWebドキュメントに、第2の関数の識別子と前記引数を含む前記中継サーバからの第2のイベント通知に基づいて、前記連携先ソフトウェアが該第2の関数を該引数により実行するための第2の命令を注入する第2の注入ステップと、
前記第1の命令が注入された第1のWebドキュメントおよび前記第2の命令が注入された第2のWebドキュメントを前記クライアントに送信する第1の送信ステップと、
前記連携元ソフトウェアから、前記第1のイベント通知を受信したときに、連携元ソフトウェアの識別子と該連携元ソフトウェアで実行された第1の関数の識別子の組み合わせに対応付けて、該連携元ソフトウェアとの通信が行われる連携先ソフトウェアの識別子と該連携先ソフトウェアで実行される第2の関数の識別子の組み合わせを保持した連携定義テーブルを参照し、該第1のイベント通知に含まれる該連携元ソフトウェアの識別子と該連携元ソフトウェアで実行された第1の関数の識別子の組み合わせに対応する、連携先ソフトウェアの識別子と該連携先ソフトウェアで実行される第2の関数の識別子の組み合わせを決定するステップと、
前記決定された組み合わせに含まれる前記連携先ソフトウェアの識別子に基づいて特定される連携先ソフトウェアに対して、前記第2のイベント通知として、該決定された組み合わせに含まれる前記第2の関数の識別子と前記引数とを送信する第2の送信ステップと、
を実行することを特徴とするソフトウェア間通信の中継方法。
【請求項2】
前記第1の命令は、前記連携元ソフトウェアで前記第1の関数が実行されたときに、該連携元ソフトウェアの識別子と該第1の関数の識別子と該第1の関数に与えられた引数を含む前記第1のイベント通知を、前記中継サーバに送信するための命令である、
ことを特徴とする請求項1記載のソフトウェア間通信の中継方法。
【請求項3】
前記第2の命令は、前記中継サーバから前記第2のイベント通知を受信したときに、該第2のイベント通知に含まれる前記第2の関数の識別子と前記引数に基づいて、該第2の関数を呼び出しかつ該第2の関数に該引数を与える命令である、
ことを特徴とする請求項1又は2記載のソフトウェア間通信の中継方法。
【請求項4】
前記第1の送信ステップは、前記第1のWebドキュメントの送信元アドレスと前記第2のWebドキュメントの送信元アドレスとが、前記クライアントにおいて互いに異なると判定されるように、各Webドキュメントに一意のアドレスを割り当てて該クライアントに送信することを特徴とする請求項1、2または3記載のソフトウェア間通信の中継方法。
【請求項5】
クライアントからのリクエストに基づいて第1の対象サーバから第1のWebドキュメントを取得して該クライアントに中継したときに該クライアント内のブラウザ内で実行される連携元ソフトウェアと、前記クライアントからのリクエストに基づいて第2の対象サーバから第2のWebドキュメントを取得して前記クライアントに中継したときに前記ブラウザ内で実行される連携先ソフトウェアとの間の通信を中継する中継装置において、
前記第1のWebドキュメントに、前記連携元ソフトウェアの識別子と該連携元ソフトウェア内で実行される第1の関数の識別子と該第1の関数に与えられる引数を含む第1のイベント通知を、前記連携元ソフトウェアから自中継装置に送信させるための第1の命令を注入する第1の注入部と、
前記第2のWebドキュメントに、第2の関数の識別子と前記引数を含む自中継装置からのからの第2のイベント通知に基づいて、前記連携先ソフトウェアが該第2の関数を該引数により実行するための第2の命令を注入する第2の注入部と、
前記第1の命令が注入された第1のWebドキュメントおよび前記第2の命令が注入された第2のWebドキュメントを前記クライアントに送信する第1の送信部と、
前記連携元ソフトウェアから、前記第1のイベント通知を受信したときに、連携元ソフトウェアの識別子と該連携元ソフトウェアで実行された第1の関数の識別子の組み合わせに対応付けて、該連携元ソフトウェアとの通信が行われる連携先ソフトウェアの識別子と該連携先ソフトウェアで実行される第2の関数の識別子の組み合わせを保持した連携定義テーブルを参照し、該第1のイベント通知に含まれる該連携元ソフトウェアの識別子と該連携元ソフトウェアで実行された第1の関数の識別子の組み合わせに対応する、連携先ソフトウェアの識別子と該連携先ソフトウェアで実行される第2の関数の識別子の組み合わせを決定する決定部と、
前記決定された組み合わせに含まれる前記連携先ソフトウェアの識別子に基づいて特定される連携先ソフトウェアに対して、前記第2のイベント通知として、該決定された組み合わせに含まれる前記第2の関数の識別子と前記引数とを送信する第2の送信部と、
を含むことを特徴とするソフトウェア間通信の中継装置。
【請求項6】
第1の対象サーバから中継サーバを経由して取得した第1のWebドキュメントに基づいて、クライアントのブラウザ内で実行される連携元ソフトウェアと、第2の対象サーバから該中継サーバを経由して取得した第2のWebドキュメントに基づいて、該ブラウザ内で実行される連携先ソフトウェアとの間の通信を該中継サーバにおいて中継するプログラムであって、
前記中継サーバに、
前記第1のWebドキュメントに、前記連携元ソフトウェアの識別子と該連携元ソフトウェア内で実行される第1の関数の識別子と該第1の関数に与えられる引数を含む第1のイベント通知を、前記連携元ソフトウェアが前記中継サーバに送信するための第1の命令を注入する第1の注入ステップと、
前記第2のWebドキュメントに、第2の関数の識別子と前記引数を含む前記中継サーバからの第2のイベント通知に基づいて、前記連携先ソフトウェアが該第2の関数を該引数により実行するための第2の命令を注入する第2の注入ステップと、
前記第1の命令が注入された第1のWebドキュメントおよび前記第2の命令が注入された第2のWebドキュメントを前記クライアントに送信する第1の送信ステップと、
前記連携元ソフトウェアから、前記第1のイベント通知を受信したときに、連携元ソフトウェアの識別子と該連携元ソフトウェアで実行された第1の関数の識別子の組み合わせに対応付けて、該連携元ソフトウェアとの通信が行われる連携先ソフトウェアの識別子と該連携先ソフトウェアで実行される第2の関数の識別子の組み合わせを保持した連携定義テーブルを参照し、該第1のイベント通知に含まれる該連携元ソフトウェアの識別子と該連携元ソフトウェアで実行された第1の関数の識別子の組み合わせに対応する、連携先ソフトウェアの識別子と該連携先ソフトウェアで実行される第2の関数の識別子の組み合わせを決定するステップと、
前記決定された組み合わせに含まれる前記連携先ソフトウェアの識別子に基づいて特定される連携先ソフトウェアに対して、前記第2のイベント通知として、該決定された組み合わせに含まれる前記第2の関数の識別子と前記引数とを送信する第2の送信ステップと、
を実行させるためのプログラム。

【図3】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図14】
image rotate

【図1】
image rotate

【図2】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図13】
image rotate

【図15】
image rotate

【図16】
image rotate


【公開番号】特開2010−262453(P2010−262453A)
【公開日】平成22年11月18日(2010.11.18)
【国際特許分類】
【出願番号】特願2009−112321(P2009−112321)
【出願日】平成21年5月1日(2009.5.1)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】