(57)【要約】【課題】あるモジュールから別のモジュールに対して任意のタイミングでデータを送ることができる情報処理システム、情報処理装置、情報処理方法およびプログラムを提供する。【解決手段】本発明に係る情報処理システムは、第１モジュールが有するデータを送信する送信部と、送信部が送信したデータを受信する受信部と、受信部が受信したデータを第２モジュールに送るためのチャネルを形成する形成部と、チャネルに対して第２モジュールを登録する登録部と、登録部により登録されたチャネルを介して、受信部が受信したデータを第２モジュールに通知する通知部と、を備える。【選択図】図７
2017016586.tif 000002
【特許請求の範囲】
【請求項１】
第１モジュールが有するデータを送信する送信部と、
前記送信部が送信した前記データを受信する受信部と、
前記受信部が受信した前記データを第２モジュールに送るためのチャネルを形成する形成部と、
前記チャネルに対して前記第２モジュールを登録する登録部と、
前記登録部により登録された前記チャネルを介して、前記受信部が受信した前記データを前記第２モジュールに通知する通知部と、
を備えた情報処理システム。
【請求項２】
データを送信する送信部を有する第１モジュールと、
前記送信部が送信した前記データを受信する受信部と、前記受信部が受信した前記データを第２モジュールに送るためのチャネルを形成する形成部と、を有する中継部と、
前記チャネルに対して登録する登録部を有する第２モジュールと、
を備え、
前記中継部は、前記登録部により登録された前記チャネルを介して、前記受信部が受信した前記データを前記第２モジュールに通知する通知部を、さらに備えた情報処理システム。
【請求項３】
前記受信部、前記形成部および前記通知部は、ランゲージモニタに設けられた請求項１または２に記載の情報処理システム。
【請求項４】
前記第２モジュールは、複数であり、
前記形成部は、前記各第２モジュールに対応する前記チャネルをそれぞれ形成し、
前記通知部は、前記データを前記各第２モジュールに、該各第２モジュールに対応する前記チャネルを介して通知する請求項１〜３のいずれか一項に記載の情報処理システム。
【請求項５】
前記第２モジュールは、複数であり、
前記形成部は、前記各第２モジュールに対応する前記チャネルをそれぞれ形成し、
前記送信部は、前記データの共有を求める前記第２モジュールを示す宛先情報と共に、前記データを送信し、
前記受信部は、前記送信部が送信した前記データおよび前記宛先情報を受信し、
前記通知部は、前記チャネルを介して、前記受信部が受信した前記宛先情報を前記各第２モジュールに通知し、
前記宛先情報が特定の第２モジュールを示すか否かを判定する判定部と、前記判定部の判定結果が、前記宛先情報が前記特定の第２モジュールを示す情報であることを示す場合、該特定の第２モジュールに対応する応答を前記通知部に送る応答部と、をさらに備え、
前記通知部は、前記データを、前記応答に対応する前記特定の第２モジュールに、該特定の第２モジュールに対応する前記チャネルを介して通知する請求項１〜３のいずれか一項に記載の情報処理システム。
【請求項６】
前記送信部は、前記データの共有を求める複数の前記第２モジュールをそれぞれ示す複数の前記宛先情報と共に、前記データを送信し、
前記受信部は、前記送信部が送信した前記データおよび複数の前記宛先情報を受信し、
前記通知部は、前記チャネルを介して、前記受信部が受信した複数の前記宛先情報を１ずつ前記各第２モジュールに通知する請求項５に記載の情報処理システム。
【請求項７】
前記送信部は、前記データとして前記第１モジュールが有する印刷情報を送信する請求項１〜６のいずれか一項に記載の情報処理システム。
【請求項８】
データを送信する送信部を有する第１モジュールと、
前記送信部が送信した前記データを受信する受信部と、前記受信部が受信した前記データを第２モジュールに送るためのチャネルを形成する形成部と、を有する中継部と、
前記チャネルに対して登録する登録部を有する第２モジュールと、
を備え、
前記中継部は、前記登録部により登録された前記チャネルを介して、前記受信部が受信した前記データを前記第２モジュールに通知する通知部を、さらに有する情報処理装置。
【請求項９】
第１モジュールが有するデータを送信する送信ステップと、
送信した前記データを受信する受信ステップと、
受信した前記データを第２モジュールに送るためのチャネルを形成する形成ステップと、
前記チャネルに対して前記第２モジュールを登録する登録ステップと、
登録した前記チャネルを介して、前記受信ステップで受信した前記データを前記第２モジュールに通知する通知ステップと、
を有する情報処理方法。
【請求項１０】
コンピュータを、
第１モジュールが有するデータを送信する送信部と、
前記送信部が送信した前記データを受信する受信部と、
前記受信部が受信した前記データを第２モジュールに送るためのチャネルを形成する形成部と、
前記チャネルに対して前記第２モジュールを登録する登録部と、
前記登録部により登録された前記チャネルを介して、前記受信部が受信した前記データを前記第２モジュールに通知する通知部と、
して機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理システム、情報処理装置、情報処理方法およびプログラムに関する。
【背景技術】
【０００２】
プリンタドライバのランゲージモニタ（Ｌａｎｇｕａｇｅ  Ｍｏｎｉｔｏｒ）と呼ばれるモジュールを用いて、複数のモジュール間でデータを受け渡しする方法がある。例えば、あるユーザが管理・使用するプリンタドライバから、ランゲージモニタに対して印刷用データを送り、別のユーザが管理・使用するプリンタドライバがその印刷用データをランゲージモニタから取得して使用することができる。ここで、印刷用データとは、例えば、印刷用の設定データ、イメージスタンプのビットマップファイルもしくはカラーマッチングのデータ、または印刷するファイルそのもののデータ等を示す。この方法は、ポイントアンドプリントの環境にも適用することができ、ポイントアンドプリント環境のサーバにあるランゲージモニタに対して、あるクライアントＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）から印刷用データを送信し、別のクライアントＰＣがその印刷用データをサーバのランゲージモニタから取得して使用することができる。このようなランゲージモニタを使用した方法では、特別なサーバプログラムを用意しなくても異なるＰＣ間でデータの受け渡しができ、かつ、ファイアフォールの設定等も不要というメリットがある。
【０００３】
このような、データを受け渡しするシステムとして、ランゲージモニタを介して、ＵＩ（Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）モジュールから、ＧＲ（Ｇｒａｐｈｉｃ）モジュールにデータを受け渡すシステムが提案されている（特許文献１参照）。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、特許文献１に記載されたシステムは、あるモジュールが、ランゲージモニタを介して、別のモジュールにデータを受け渡すことができるものの、データを取得するモジュールが、ランゲージモニタにいつデータが置かれたのかについて判断することができないという問題点があった。また、このために、データを取得するモジュールは、ランゲージモニタにいつデータが置かれたのかを確認するために、定期的にランゲージモニタにアクセスする必要があり、サーバの処理およびネットワークの処理が重くなるという問題点もあった。
【０００５】
本発明は、上述の問題点に鑑みてなされたものであって、あるモジュールから別のモジュールに対して任意のタイミングでデータを送ることができる情報処理システム、情報処理装置、情報処理方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
上述した課題を解決し、目的を達成するために、本発明は、第１モジュールが有するデータを送信する送信部と、前記送信部が送信した前記データを受信する受信部と、前記受信部が受信した前記データを第２モジュールに送るためのチャネルを形成する形成部と、前記チャネルに対して前記第２モジュールを登録する登録部と、前記登録部により登録された前記チャネルを介して、前記受信部が受信した前記データを前記第２モジュールに通知する通知部と、を備えたことを特徴とする。
【発明の効果】
【０００７】
本発明によれば、あるモジュールから別のモジュールに対して任意のタイミングでデータを送ることができる。
【図面の簡単な説明】
【０００８】
【図１】図１は、第１の実施の形態に係る印刷システムの全体構成の一例を示す図である。
【図２】図２は、サーバおよびクライアントのハードウェア構成の一例を示す図である。
【図３】図３は、ランゲージモニタの基本動作を説明する図である。
【図４】図４は、従来のランゲージモニタを介したデータの受け渡しの方法を説明する図である。
【図５】図５は、複数のクライアントがランゲージモニタに対してデータの有無を確認する動作を説明する図である。
【図６】図６は、ランゲージモニタの通知機能を説明する図である。
【図７】図７は、第１の実施の形態に係る印刷システムの機能ブロックの構成の一例を示す図である。
【図８】図８は、第１の実施の形態に係る印刷システムにおけるデータの受け渡し動作の一例を示すシーケンス図である。
【図９】図９は、第２の実施の形態に係る印刷システムの機能ブロックの構成の一例を示す図である。
【図１０】図１０は、第２の実施の形態に係る印刷システムにおけるデータの受け渡し動作の一例を示すシーケンス図である。
【図１１】図１１は、第３の実施の形態に係る印刷システムの機能ブロックの構成の一例を示す図である。
【図１２】図１２は、第３の実施の形態に係る印刷システムにおけるデータの受け渡し動作の一例を示すシーケンス図である。
【図１３】図１３は、第４の実施の形態に係る印刷システムの全体構成の一例を示す図である。
【図１４】図１４は、第４の実施の形態に係る印刷システムにおけるＰＣの機能ブロックの構成の一例を示す図である。
【図１５】図１５は、第４の実施の形態に係る印刷システムにおけるＰＣのデータの受け渡し動作の一例を示すシーケンス図である。
【発明を実施するための形態】
【０００９】
以下に、図１〜１５を参照しながら、本発明に係る情報処理システム、情報処理装置、情報処理方法およびプログラムの実施の形態を詳細に説明する。また、以下の実施の形態によって本発明が限定されるものではなく、以下の実施の形態における構成要素には、当業者が容易に想到できるもの、実質的に同一のもの、およびいわゆる均等の範囲のものが含まれる。さらに、以下の実施の形態の要旨を逸脱しない範囲で構成要素の種々の省略、置換、変更および組み合わせを行うことができる。
【００１０】
［第１の実施の形態］
（印刷システムの全体構成）
図１は、第１の実施の形態に係る印刷システムの全体構成の一例を示す図である。図１を参照しながら、印刷システム１の全体構成の概略を説明する。
【００１１】
図１に示すように、情報処理システムの一例である印刷システム１は、サーバ１０と、クライアント２０ａ〜２０ｃと、プリンタ３０と、を有するいわゆるポイントアンドプリント環境のシステムである。また、サーバ１０、およびクライアント２０ａ〜２０ｃは、それぞれネットワーク２を介して、通信可能となるように接続されている。なお、図１においては、印刷システム１は、３台のクライアント（クライアント２０ａ〜２０ｃ）を有するものとしているが、これに限定されるものではなく、２台または４台以上のクライアントを有するものとしてもよい。また、クライアント２０ａ〜２０ｃのうち任意のクライアントを示す場合、または総称する場合、単に「クライアント２０」と称するものとする。
【００１２】
ネットワーク２は、例えば、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）またはインターネット等のネットワークである。ネットワーク２は、例えば、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）／ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）等の通信プロトコルでデータ通信が行われる。
【００１３】
サーバ１０は、クライアント２０から受信した印刷データを、プリンタ３０に印刷出力させるプリントサーバとして機能するサーバ装置である。また、サーバ１０は、後述するように、クライアント２０から受信した印刷データを中継するためのランゲージモニタを有する。
【００１４】
クライアント２０は、印刷を要求する印刷データを、ネットワーク２を介して、プリントサーバであるサーバ１０に送信するクライアント装置である。
【００１５】
プリンタ３０は、サーバ１０による制御に従って、受信した印刷データを印刷出力する画像形成装置である。なお、プリンタ３０は、印刷機能を有する画像形成装置であればよく、例えば、コピー機能、プリンタ機能、スキャナ機能、およびファクシミリ機能のうち少なくとも２つの機能を有する複合機（ＭＦＰ：Ｍｕｌｔｉｆｕｎｃｔｉｏｎ  Ｐｅｒｉｐｈｅｒａｌ）であってもよい。また、図１の例では、プリンタ３０は、サーバ１０に直接接続されているが、これに限定されるものではなく、ネットワーク２を介してサーバ１０と通信するものとしてもよい。
【００１６】
（サーバおよびクライアントのハードウェア構成）
図２は、サーバおよびクライアントのハードウェア構成の一例を示す図である。図２を参照しながら、サーバ１０およびクライアント２０のハードウェア構成について説明する。
【００１７】
まず、図２を参照しながらサーバ１０のハードウェア構成について説明する。図２に示すように、サーバ１０は、ＣＰＵ５０１と、ＲＯＭ５０２と、ＲＡＭ５０３と、補助記憶装置５０５と、メディアドライブ５０７と、ディスプレイ５０８と、ネットワークＩ／Ｆ５０９と、キーボード５１１と、マウス５１２と、ＣＤ−ＲＯＭドライブ５１４と、を備えている。
【００１８】
ＣＰＵ５０１は、サーバ１０全体の動作を制御する装置である。ＲＯＭ５０２は、サーバ１０用のプログラムを記憶している不揮発性記憶装置である。ＲＡＭ５０３は、ＣＰＵ５０１のワークエリアとして使用される揮発性記憶装置である。
【００１９】
補助記憶装置５０５は、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）、アプリケーションプログラム、および各種データを記憶するＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）またはＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記憶装置である。メディアドライブ５０７は、ＣＰＵ５０１の制御に従って、フラッシュメモリ等の記録メディア５０６に対するデータの読み出しおよび書き込みを制御する装置である。
【００２０】
ディスプレイ５０８は、カーソル、メニュー、ウィンドウ、文字または画像等の各種情報を表示する表示装置である。ネットワークＩ／Ｆ５０９は、ネットワーク２を利用してデータを通信するためのインターフェースである。
【００２１】
キーボード５１１は、文字、数字、各種指示の選択、およびカーソルの移動等を行う入力装置である。マウス５１２は、各種指示の選択および実行、処理対象の選択、ならびにカーソルの移動等を行うための入力装置である。ＣＤ−ＲＯＭドライブ５１４は、着脱自在な記憶媒体の一例としてのＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）５１３に対するデータの読み出しおよび書き込みを制御する装置である。
【００２２】
上述のＣＰＵ５０１、ＲＯＭ５０２、ＲＡＭ５０３、補助記憶装置５０５、メディアドライブ５０７、ディスプレイ５０８、ネットワークＩ／Ｆ５０９、キーボード５１１、マウス５１２およびＣＤ−ＲＯＭドライブ５１４は、アドレスバスおよびデータバス等のバスライン５１０によって互いに通信可能に接続されている。
【００２３】
なお、サーバ１０は、上述のハードウェア装置をすべて備えている必要はなく、例えば、必要に応じて、ディスプレイ５０８、キーボード５１１またはマウス５１２等を有さない構成であってもよい。
【００２４】
また、上述のサーバ１０用のプログラムは、インストール可能な形式または実行可能な形式のファイルによって、記録メディア５０６またはＣＤ−ＲＯＭ５１３等のコンピュータで読み取り可能な記録媒体に記録して流通させるようにしてもよい。
【００２５】
また、クライアント２０は、上述のサーバ１０と同様のハードウェア構成を有しているため、その説明を省略する。ただし、ＲＯＭ５０２には、クライアント２０を制御するためのクライアント２０用のプログラムが記憶されている。この場合も、クライアント２０用のプログラムは、インストール可能な形式または実行可能な形式のファイルで、記録メディア５０６またはＣＤ−ＲＯＭ５１３等のコンピュータで読み取り可能な記録媒体に記録して流通させるようにしてもよい。
【００２６】
また、上述の着脱可能な記録媒体の他の例として、ＣＤ−Ｒ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ  Ｒｅｃｏｒｄａｂｌｅ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）またはブルーレイディスク等のコンピュータで読み取り可能な記録媒体に記録して提供するように構成してもよい。
【００２７】
（ランゲージモニタの基本動作）
図３は、ランゲージモニタの基本動作を説明する図である。図３を参照しながら、ランゲージモニタの基本動作について説明する。
【００２８】
図３に示すように、サーバ１０は、アプリケーション１１と、プリンタドライバ１２と、スプーラ１３と、ランゲージモニタ１４と、ポートモニタ１５と、を有する。このうち、アプリケーション１１およびプリンタドライバ１２は、ユーザＡによって管理・使用されているものとする。
【００２９】
アプリケーション１１は、サーバ１０にインストールされ、文書の作成または数値計算等のある特定の目的を達成するためのソフトウェアである。
【００３０】
プリンタドライバ１２は、外部に接続されたプリンタ（例えば、プリンタ３０）を制御するための専用のソフトウェアである。
【００３１】
スプーラ１３は、同時に発生した複数の処理要求を一時的に蓄積し、順次処理を進めるように管理するためのＯＳの機能の１つである。具体的には、スプーラ１３は、サーバ１０のプリンタドライバ１２、またはクライアント２０のプリンタドライバ２２から送られてきた印刷データを、図２に示すサーバ１０の補助記憶装置５０５等にスプールする。このようなスプーラ１３の機能によって、１つの処理要求の処理中でも終了をまたずに別の処理要求を送ることができる。
【００３２】
ランゲージモニタ１４は、スプーラ１３とポートモニタ１５との間に位置し、スプーラ１３により入力される印刷データに関して所定の処理を実行し、処理後の印刷データをポートモニタ１５に出力するＷｉｎｄｏｗｓ（登録商標）ＯＳに対応したプログラムモジュールである。すなわち、ランゲージモニタ１４は、印刷データをスプーラ１３からポートモニタ１５へ中継する機能を有する。ランゲージモニタ１４は、プリンタのベンダ等が自由に実装することができる。すなわち、ランゲージモニタ１４は、スプーラ１３にスプールされた印刷データがポートモニタ１５によって送信されるまでの間において、印刷データの加工、ログの記録、プリンタとの双方向の通信等、独自の実装を行うことができる。
【００３３】
ポートモニタ１５は、ランゲージモニタ１４から受け取った印刷データのプリンタ３０への送信制御を行うプログラムモジュールである。
【００３４】
図３に示すように、クライアント２０は、アプリケーション２１と、プリンタドライバ２２と、を有する。アプリケーション２１およびプリンタドライバ２２は、ユーザＢによって管理・使用されているものとする。
【００３５】
アプリケーション２１は、クライアント２０にインストールされ、文書の作成または数値等のある特定の目的を達成するためのソフトウェアである。
【００３６】
プリンタドライバ２２は、プリンタ３０に印刷動作を実行させるために、サーバ１０に対して印刷動作の実行を要求するソフトウェアである。
【００３７】
次に、図３を参照しながら、ランゲージモニタ１４の基本動作の詳細を説明する。まず、ユーザＢが、クライアント２０において、アプリケーション２１に対し、入力手段（例えば、図２に示すキーボード５１１およびマウス５１２）を介して、印刷動作を実行するための操作を行ったものとする。すると、アプリケーション２１は、印刷動作の対象となる印刷データを、印刷実行指令と共に、プリンタドライバ２２に送る。プリンタドライバ２２は、アプリケーション２１から印刷実行指令を受けると、クライアント２０のネットワークＩ／Ｆ５０９を介して、印刷データをサーバ１０のスプーラ１３に送信する。
【００３８】
スプーラ１３は、印刷データを受信すると、印刷データをサーバ１０の補助記憶装置５０５にスプールする。そして、スプーラ１３は、スプールした印刷データの印刷動作が可能なタイミングで、印刷データをランゲージモニタ１４に送る。ランゲージモニタ１４は、スプーラ１３から印刷データを受け取ると、所定の処理を実行後、ポートモニタ１５に印刷データを送る。ポートモニタ１５は、ランゲージモニタ１４から受け取った印刷データをプリンタ３０に送信する。プリンタ３０は、受信した印刷データに基づいて、印刷用紙に対して印刷動作を実行する。
【００３９】
なお、上述では、ランゲージモニタ１４は、クライアント２０のプリンタドライバ２２から、印刷データを受け取るものとしているが、これに限定されるものではなく、サーバ１０のアプリケーション１１が生成した印刷データを、プリンタドライバ１２を介して受け取ることも可能である。
【００４０】
また、ランゲージモニタ１４は、上述のように、印刷データをスプーラ１３からポートモニタ１５に中継する動作の他、以下のように、プリンタ３０から機器情報を取得する動作も行うことができる。具体的には、まず、プリンタドライバ２２は、ＷｉｎｄｏｗｓのＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）関数である関数ＳｅｎｄＲｅｃｖＢｉｄｉＤａｔａＦｒｏｍＰｏｒｔ（）を呼び出すことにより、プリンタ３０の機器情報を必要とするタイミングで、クライアント２０のネットワークＩ／Ｆ５０９を介して、機器情報取得要求をサーバ１０のランゲージモニタ１４に送信する。そして、ランゲージモニタ１４は、機器情報取得要求を受信すると、ポートモニタ１５を介して、プリンタ３０から機器情報を取得する。機器情報を取得したランゲージモニタ１４は、ネットワークＩ／Ｆ５０９を介して、クライアント２０のアプリケーション２１に機器情報を送信する。
【００４１】
なお、上述のように、クライアント２０のプリンタドライバ２２は、関数ＳｅｎｄＲｅｃｖＢｉｄｉＤａｔａＦｒｏｍＰｏｒｔ（）を呼び出すことにより、機器情報取得要求をランゲージモニタ１４に送信しているが、その他のデータについても、同様に、ランゲージモニタ１４に送信することができる。また、ランゲージモニタ１４へデータを送信する主体は、プリンタドライバ２２に限られず、アプリケーション２１が関数ＳｅｎｄＲｅｃｖＢｉｄｉＤａｔａＦｒｏｍＰｏｒｔ（）を呼び出すことにより、データをランゲージモニタ１４に送信することもできる。
【００４２】
また、上述では、ランゲージモニタ１４は、クライアント２０のプリンタドライバ２２からデータ（図３では、機器情報取得要求）を受け取るものとしているが、これに限定されるものではなく、アプリケーション１１またはプリンタドライバ１２からデータを受け取ることも可能である。
【００４３】
（ランゲージモニタを介してデータの受け渡しをする動作の従来例）
図４は、従来のランゲージモニタを介したデータの受け渡しの方法を説明する図である。図５は、複数のクライアントがランゲージモニタに対してデータの有無を確認する動作を説明する図である。図４および５を参照しながら、ランゲージモニタ１４を介してデータの受け渡しをする動作の従来例について説明する。
【００４４】
図４に示すように、クライアント２０ａは、プリンタドライバ２２ａを有し、このプリンタドライバ２２ａは、ユーザＡによって管理・使用されているものとする。また、クライアント２０ｂは、プリンタドライバ２２ｂを有し、このプリンタドライバ２２ｂは、ユーザＢによって管理・使用されているものとする。
【００４５】
ユーザＡは、例えば、他のクライアントと共有を求める印刷に関するデータを、プリンタドライバ２２ａからサーバ１０のランゲージモニタ１４に送信させる。この場合、プリンタドライバ２２ａは、上述の関数ＳｅｎｄＲｅｃｖＢｉｄｉＤａｔａＦｒｏｍＰｏｒｔ（）を呼び出すことによって、印刷に関するデータをランゲージモニタ１４へ送信する。ここで、共有を求める印刷に関するデータとは、例えば、ユーザＡがクライアント２０ａにおいて設定した原稿サイズ、原稿方向、集約設定、両面印刷設定、余白設定またはウォーターマーク等の印刷設定データである。
【００４６】
しかし、プリンタドライバ２２ｂは、ランゲージモニタ１４がプリンタドライバ２２ａから印刷に関するデータをいつ取得したかどうかを認識することができないため、ランゲージモニタ１４からデータを取り出すために、定期的にランゲージモニタ１４にデータの有無を確認するためにアクセスする必要がある。特に、図５に示すように、データを取り出すクライアントが複数（クライアント２０ｂ、２０ｃ、・・・）存在する場合、それぞれのクライアントが定期的にサーバ１０のランゲージモニタ１４にアクセスすることになり、サーバ１０の処理負荷が増大し、ネットワーク（図１に示すネットワーク２）のトラフィックが増大するという問題が発生する。
【００４７】
また、ＷｉｎｄｏｗｓＯＳの制約上、複数のモジュール（ここでは、プリンタドライバ）は、同時にランゲージモニタ１４にアクセスすることができないため、データを取り出すモジュールが同じタイミングでランゲージモニタ１４にアクセスしようとするとエラーが発生する可能性がある。例えば、図５のクライアント２０ｂがランゲージモニタ１４にアクセスしている最中は、他のクライアントがランゲージモニタ１４にアクセスしてもエラーとなる。そのため、エラーとなったクライアントは、再度、ランゲージモニタ１４にアクセスを試みる必要があるが、クライアントの数が多いとランゲージモニタ１４に対するアクセス権の奪い合いになり、常に別のクライアントがアクセスしていてアクセスが成功しないという場合も発生し得る。
【００４８】
以下では、あるモジュール（例えば、プリンタドライバ、またはアプリケーション）から別のモジュールに対して任意のタイミングでデータを送ることを可能にする本実施の形態に係る印刷システム１の機能的構成および動作について詳述する。
【００４９】
（ランゲージモニタの通知機能）
図６は、ランゲージモニタの通知機能を説明する図である。図６を参照しながら、ランゲージモニタ１４が他のモジュールにデータを通知する機能について説明する。
【００５０】
ＷｉｎｄｏｗｓＯＳには、Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎという機能（以下、通知機能という）があり、この通知機能を使用することによって、特定のモジュールから他のモジュールにデータを通知（送信）することができる。例えば、図６に示すように、サーバ１０のランゲージモニタ１４から、クライアント２０のアプリケーション２１に対して、データを通知することができる。
【００５１】
この通知機能の本来の目的は、印刷モジュール（スプーラ１３またはランゲージモニタ１４）からユーザ側のプログラム（アプリケーション１１またはプリンタドライバ１２）に対して特定のイベントを通知するためにある。例えば、ユーザによる印刷動作の実行操作後、その印刷動作が完了した時点で、ランゲージモニタ１４がアプリケーション１１に対して「印刷完了」のイベントを通知し、それを受け取ったアプリケーション１１が、ポップアップダイアログを表示させることにより、ユーザに印刷完了を知らせるという使われ方がある。この通知機能を使用するためには、以下の（１）〜（３）の手順を実行する。
【００５２】
（１）通知するモジュールが、ＷｉｎｄｏｗｓのＡＰＩ関数である関数ＲｏｕｔｅｒＣｒｅａｔｅＰｒｉｎｔＡｓｙｎｃＮｏｔｉｆｉｃａｔｉｏｎＣｈａｎｎｅｌ（）を呼び出すことによって、通信路上にデータ通知用のチャネルを形成する。
（２）通知を受けるモジュールが、ＷｉｎｄｏｗｓのＡＰＩ関数である関数ＲｅｇｉｓｔｅｒＦｏｒＰｒｉｎｔＡｓｙｎｃＮｏｔｉｆｉｃａｔｉｏｎｓ（）を呼び出すことによって、（１）で形成されたチャネルに自身を登録する。
（３）通知をする側が、ＷｉｎｄｏｗｓのＡＰＩ関数である関数ＳｅｎｄＮｏｔｉｆｉｃａｔｉｏｎ（）を呼び出すことによって、（２）でチャネルに登録されたモジュールに通知を送る。
【００５３】
これによって、ランゲージモニタ１４は、他のモジュールによる上述の関数ＳｅｎｄＲｅｃｖＢｉｄｉＤａｔａＦｒｏｍＰｏｒｔ（）の呼び出しによってデータを受け取り、関数ＲｅｇｉｓｔｅｒＦｏｒＰｒｉｎｔＡｓｙｎｃＮｏｔｉｆｉｃａｔｉｏｎｓ（）の呼び出しによってチャネルに登録したモジュールに対して、関数ＳｅｎｄＮｏｔｉｆｉｃａｔｉｏｎ（）の呼び出しにより、データを通知（送信）することができる。
【００５４】
（印刷システムのブロック構成）
図７は、第１の実施の形態に係る印刷システムの機能ブロックの構成の一例を示す図である。図７を参照しながら、印刷システム１の機能ブロックの構成について説明する。なお、図７では、プリンタ３０の図示を省略し、クライアントとして、クライアント２０ａ、２０ｂを図示している。
【００５５】
図７に示すように、サーバ１０は、データ生成部１０１と、データ送信部１０２（送信部）と、中継部１１１と、を有する。このうち、データ生成部１０１およびデータ送信部１０２は、ユーザＡによって管理・使用されているものとする。
【００５６】
データ生成部１０１は、クライアント２０ａ、２０ｂとの共有を求めるデータを生成する機能部である。データ生成部１０１は、生成したデータを、データ送信部１０２に送る。データ生成部１０１は、図３に示すアプリケーション１１またはプリンタドライバ１２によって実現される。
【００５７】
データ送信部１０２は、データ生成部１０１から受け取ったデータを、中継部１１１の後述するデータ受信部１１２に送る機能部である。具体的には、データ送信部１０２は、上述の関数ＳｅｎｄＲｅｃｖＢｉｄｉＤａｔａＦｒｏｍＰｏｒｔ（）を呼び出すことによって、データをデータ受信部１１２に送る。データ送信部１０２は、図３に示すアプリケーション１１またはプリンタドライバ１２によって実現される。
【００５８】
中継部１１１は、データ送信部１０２から受け取ったデータを、クライアント２０ａ、２０ｂに中継する機能部である。中継部１１１は、図７に示すように、データ受信部１１２（受信部）と、通知部１１３と、チャネル形成部１１４（形成部）と、を有する。中継部１１１は、図３に示すランゲージモニタ１４によって実現される。
【００５９】
データ受信部１１２は、データ送信部１０２からデータを受け取り、通知部１１３に送る機能部である。
【００６０】
通知部１１３は、データ受信部１１２から受け取ったデータを、後述するチャネル形成部１１４により通信路に形成されたチャネルを介して、クライアント２０ａ、２０ｂに送信（通知）する機能部である。具体的には、通知部１１３は、上述の関数ＳｅｎｄＮｏｔｉｆｉｃａｔｉｏｎ（）を呼び出すことによって、データ受信部１１２から受け取ったデータを、チャネル形成部１１４により通信路に形成されたチャネルを介して、クライアント２０ａ、２０ｂに送信（通知）する。
【００６１】
チャネル形成部１１４は、サーバ１０と、クライアント２０ａ、２０ｂとの間の通信路（図１のネットワーク２等）にチャネルを形成する機能部である。具体的には、チャネル形成部１１４は、上述の関数ＲｏｕｔｅｒＣｒｅａｔｅＰｒｉｎｔＡｓｙｎｃＮｏｔｉｆｉｃａｔｉｏｎＣｈａｎｎｅｌ（）を呼び出すことによって、通信路上にチャネルを形成する。
【００６２】
図７に示すように、クライアント２０ａ、２０ｂは、それぞれ、待ち受け部２０１と、記憶部２０２と、チャネル登録部２０３（登録部）と、を有する。クライアント２０ａの待ち受け部２０１、記憶部２０２およびチャネル登録部２０３は、ユーザＢによって管理・使用されているものとする。また、クライアント２０ｂの待ち受け部２０１、記憶部２０２およびチャネル登録部２０３は、ユーザＣによって管理・使用されているものとする。
【００６３】
待ち受け部２０１は、通知部１１３から、チャネル形成部１１４により通信路に形成されたチャネルを介して、データを受信する機能部である。待ち受け部２０１は、受信したデータを記憶部２０２に記憶させる。待ち受け部２０１は、図３に示すアプリケーション２１またはプリンタドライバ２２によって実現される。
【００６４】
記憶部２０２は、待ち受け部２０１が通知部１１３から受信したデータを記憶する機能部である。記憶部２０２は、図２に示す補助記憶装置５０５によって実現される。
【００６５】
チャネル登録部２０３は、チャネル形成部１１４により形成されたチャネルに自身を登録する機能部である。具体的には、チャネル登録部２０３は、上述の関数ＲｅｇｉｓｔｅｒＦｏｒＰｒｉｎｔＡｓｙｎｃＮｏｔｉｆｉｃａｔｉｏｎｓ（）を呼び出すことによって、チャネル形成部１１４により形成されたチャネルに自身を登録する。チャネル登録部２０３は、図３に示すアプリケーション２１またはプリンタドライバ２２によって実現される。
【００６６】
なお、データ生成部１０１、データ送信部１０２、中継部１１１、データ受信部１１２、通知部１１３、チャネル形成部１１４、待ち受け部２０１、記憶部２０２、およびチャネル登録部２０３は、機能を概念的に示したものであって、このような構成に限定されるものではない。例えば、図７で独立した機能部として図示した複数の機能部を、１つの機能部として構成してもよい。一方、図７の１つの機能部が有する機能を複数に分割し、複数の機能部として構成するものとしてもよい。
【００６７】
（印刷システムのデータの受け渡し動作）
図８は、第１の実施の形態に係る印刷システムにおけるデータの受け渡し動作の一例を示すシーケンス図である。図８を参照しながら、本実施の形態に係る印刷システム１のデータの受け渡し動作について説明する。
【００６８】
＜ステップＳ１１＞
サーバ１０のチャネル形成部１１４は、サーバ１０と、クライアント２０ａ、２０ｂとの間の通信路（ネットワーク２）にチャネルを形成する。具体的には、チャネル形成部１１４は、ＡＰＩ関数である関数ＲｏｕｔｅｒＣｒｅａｔｅＰｒｉｎｔＡｓｙｎｃＮｏｔｉｆｉｃａｔｉｏｎＣｈａｎｎｅｌ（）を呼び出すことによって、通信路上にチャネルを形成する。
【００６９】
＜ステップＳ１２＞
クライアント２０ａ、２０ｂのチャネル登録部２０３は、チャネル形成部１１４によって形成されたチャネルに自身を登録する。具体的には、チャネル登録部２０３は、ＡＰＩ関数である関数ＲｅｇｉｓｔｅｒＦｏｒＰｒｉｎｔＡｓｙｎｃＮｏｔｉｆｉｃａｔｉｏｎｓ（）を呼び出すことによって、チャネル形成部１１４により形成されたチャネルに自身を登録する。
【００７０】
＜ステップＳ１３、１４＞
サーバ１０のデータ生成部１０１は、クライアント２０ａ、２０ｂとの共有を求める印刷設定データ等のデータを生成し、そのデータをデータ送信部１０２に送る。
【００７１】
＜ステップＳ１５＞
データ送信部１０２は、データ生成部１０１から受け取ったデータを、中継部１１１のデータ受信部１１２に送る。具体的には、データ送信部１０２は、ＡＰＩ関数である関数ＳｅｎｄＲｅｃｖＢｉｄｉＤａｔａＦｒｏｍＰｏｒｔ（）を呼び出すことによって、データをデータ受信部１１２に送る。
【００７２】
＜ステップＳ１６＞
データ受信部１１２は、データ送信部１０２から受け取ったデータを、中継部１１１の通知部１１３に送る。
【００７３】
＜ステップＳ１７＞
通知部１１３は、データ受信部１１２から受け取ったデータを、チャネル形成部１１４により通信路に形成されたチャネルを介して、クライアント２０ａ、２０ｂに送信（通知）する。具体的には、通知部１１３は、ＡＰＩ関数である関数ＳｅｎｄＮｏｔｉｆｉｃａｔｉｏｎ（）を呼び出すことによって、データ受信部１１２から受け取ったデータを、チャネル形成部１１４により通信路に形成されたチャネルを介して、クライアント２０ａ、２０ｂに送信（通知）する。
【００７４】
＜ステップＳ１８＞
クライアント２０ａ、２０ｂの待ち受け部２０１は、それぞれ、通知部１１３から、チャネル形成部１１４により通信路に形成されたチャネルを介して受信したデータを、記憶部２０２に送る。
【００７５】
＜ステップＳ１９＞
クライアント２０ａ、２０ｂの記憶部２０２は、それぞれ、待ち受け部２０１が通知部１１３から受信したデータを記憶する。
【００７６】
以上の動作によって、印刷システム１のデータの受け渡し動作が実行される。
【００７７】
以上の構成および動作のように、チャネル形成部１１４により各クライアントに対応するチャネルが通信路に形成され、通知部１１３が、そのチャネルを介して、そのチャネルに登録したモジュールにデータを送るものとしている。これによって、特定のモジュール（図７および８の例では、データ生成部１０１およびデータ送信部１０２を含むモジュール）（第１モジュール）から、別のモジュール（図７および８の例では、待ち受け部２０１およびチャネル登録部２０３を含むモジュール）（第２モジュール）に対して、任意のタイミングでデータを送ることができる。
【００７８】
また、データを受け取る（通知を受ける）モジュールが、データを送る（通知をする）モジュールに対して、定期的にデータの有無を確認するためにアクセスする必要がないので、サーバ１０の処理負荷の増大を抑制し、かつ、通信路（ネットワーク２）のトラフィックが増大することも抑制することができる。また、データを受け取る複数のモジュールが同じタイミングで、中継部１１１（ランゲージモニタ１４）からデータを取り出そうとしてアクセスエラーが発生することも抑制することができる。
【００７９】
また、上述のようにデータの受け渡しは中継部１１１（ランゲージモニタ１４）を介して行われるので、サーバ１０においてデータの受け渡しをするための特別なプログラムを使用する必要がない。
【００８０】
なお、図７および８の例では、サーバ１０に存在するモジュール（データ生成部１０１およびデータ送信部１０２）から発生したデータを、中継部１１１を介して、クライアント２０ａ、２０ｂに送る構成および動作としているが、これに限定されるものではない。すなわち、例えば、あるクライアント（例えば、クライアント２０ａ）が有するモジュールから発生したデータを、サーバ１０の中継部１１１が中継し、別のクライアント（例えば、クライアント２０ｂ）に送る構成および動作とすることも可能である。また、あるクライアント（例えば、クライアント２０ａまたはクライアント２０ｂ）が有するモジュールから発生したデータを、サーバ１０の中継部１１１が中継し、サーバ１０が有するモジュール（例えば、図６に示すアプリケーション１１またはプリンタドライバ１２）に送る構成および動作とすることも可能である。すなわち、あるクライアントのモジュールから、サーバ１０のモジュールまたは別のクライアントのモジュールに対して、任意のタイミングでデータを送ることができる。
【００８１】
また、データ生成部１０１で発生し、データ送信部１０２により送られ、中継部１１１を介して、クライアント２０ａ、２０ｂに送られるデータとして、印刷設定データを例として挙げたが、これに限定されるものではなく、異なるモジュール間で共有を求めるデータであればどのようなデータにも適用することができる。
【００８２】
また、本実施の形態に係る情報処理システムとして印刷システム１を例にして、その構成および動作を説明したが、印刷システム１に限定されるものではなく、サーバおよびクライアント間、または複数のクライアント間で、データを共有するシステムであれば、どのような情報処理システムについても適用可能である。
【００８３】
［第２の実施の形態］
第２の実施の形態に係る情報処理システムについて、第１の実施の形態に係る情報処理システム（印刷システム１）と相違する点を中心に説明する。第１の実施の形態では、チャネル形成部１１４により形成された複数のチャネルに対応するそれぞれのモジュール（クライアント２０ａ、２０ｂの待ち受け部２０１）にデータを送信する構成および動作について説明した。本実施の形態では、データの共有を求める特定のモジュールに対してデータを送信する構成および動作について説明する。なお、本実施の形態に係る情報処理システムの構成は、図１に示す印刷システム１の構成と同様であり、情報処理システムに含まれるサーバおよびクライアントのハードウェア構成は、図２に示すハードウェア構成と同様である。
【００８４】
（印刷システムのブロック構成）
図９は、第２の実施の形態に係る印刷システムの機能ブロックの構成の一例を示す図である。図９を参照しながら、本実施の形態に係る印刷システムの機能ブロックの構成について説明する。
【００８５】
図９に示すように、サーバ１０ａは、データ生成部１０１ａと、データ送信部１０２ａ（送信部）と、中継部１１１ａと、を有する。このうち、データ生成部１０１ａおよびデータ送信部１０２ａは、ユーザＡによって管理・使用されているものとする。
【００８６】
データ生成部１０１ａは、図９に示すクライアント２０ａ＿２、２０ｂ＿２のモジュールと共有を求めるデータを生成する機能部である。データ生成部１０１ａは、生成したデータを、そのデータの共有を求める他のモジュールの宛先を示す宛先情報と共に、データ送信部１０２ａに送る。データ生成部１０１ａは、図３に示すアプリケーション１１またはプリンタドライバ１２によって実現される。
【００８７】
データ送信部１０２ａは、データ生成部１０１ａから受け取ったデータおよび宛先情報を、中継部１１１ａの後述するデータ受信部１１２ａに送る機能部である。具体的には、データ送信部１０２ａは、上述の関数ＳｅｎｄＲｅｃｖＢｉｄｉＤａｔａＦｒｏｍＰｏｒｔ（）を呼び出すことによって、データおよび宛先情報をデータ受信部１１２ａに送る。データ送信部１０２ａは、図３に示すアプリケーション１１またはプリンタドライバ１２によって実現される。
【００８８】
中継部１１１ａは、データ送信部１０２ａから受け取ったデータを、宛先情報で特定されるモジュールに中継する機能部である。中継部１１１ａは、図９に示すように、データ受信部１１２ａ（受信部）と、通知部１１３ａと、チャネル形成部１１４と、を有する。中継部１１１ａは、図３に示すランゲージモニタ１４によって実現される。なお、チャネル形成部１１４は、第１の実施の形態の中継部１１１のチャネル形成部１１４と同様の機能を有する。
【００８９】
データ受信部１１２ａは、データ送信部１０２ａからデータおよび宛先情報を受け取り、通知部１１３ａに送る機能部である。
【００９０】
通知部１１３ａは、データ受信部１１２ａから受け取ったデータを、チャネル形成部１１４により通信路に形成されたチャネルを介して、宛先情報で特定されるクライアント２０の待ち受け部２０１ａに送信（通知）する機能部である。具体的には、通知部１１３ａは、上述の関数ＳｅｎｄＮｏｔｉｆｉｃａｔｉｏｎ（）を呼び出すことによって、データ受信部１１２ａから受け取ったデータを、チャネル形成部１１４により通信路に形成されたチャネルを介して、宛先情報で特定されるクライアント２０の待ち受け部２０１ａに送信（通知）する。
【００９１】
図９に示すように、クライアント２０ａ＿２、２０ｂ＿２は、それぞれ、待ち受け部２０１ａ（応答部）と、記憶部２０２と、チャネル登録部２０３と、を有する。クライアント２０ａ＿２の待ち受け部２０１ａ、記憶部２０２およびチャネル登録部２０３は、ユーザＢによって管理・使用されているものとする。また、クライアント２０ｂ＿２の待ち受け部２０１ａ、記憶部２０２およびチャネル登録部２０３は、ユーザＣによって管理・使用されているものとする。なお、チャネル登録部２０３は、第１の実施の形態のチャネル登録部２０３と同様の機能を有する。
【００９２】
待ち受け部２０１ａは、通知部１１３ａから、チャネル形成部１１４により通信路に形成されたチャネルを介して、宛先情報を受け取り、宛先情報が示す宛先が自身（例えば、待ち受け部２０１ａを含むモジュールを特定する情報、またはそのモジュールを管理するユーザ名等）を示す場合、チャネルを介して通知部１１３ａに応答を送信する機能部である。この場合、具体的には、待ち受け部２０１ａは、上述の関数ＳｅｎｄＮｏｔｉｆｉｃａｔｉｏｎ（）を呼び出すことによって、通知部１１３ａに応答を送信する。待ち受け部２０１ａは、通知部１１３ａに応答を送信した後、通知部１１３ａからチャネルを介して、データを受信する。待ち受け部２０１ａは、受信したデータを記憶部２０２に記憶させる。待ち受け部２０１ａは、宛先判定部２０４（判定部）を有する。待ち受け部２０１ａは、図３に示すアプリケーション２１またはプリンタドライバ２２によって実現される。
【００９３】
記憶部２０２は、待ち受け部２０１ａが通知部１１３ａから受信したデータを記憶する機能部である。記憶部２０２は、図２に示す補助記憶装置５０５によって実現される。
【００９４】
宛先判定部２０４は、待ち受け部２０１ａが受信した宛先情報が示す宛先が、待ち受け部２０１ａを示すか否かを判定する機能部である。ここで、宛先情報とは、例えば、特定のモジュールを特定する情報、またはそのモジュールを管理するユーザ名等の情報であり、宛先を一意に特定できる情報であればよい。
【００９５】
なお、データ生成部１０１ａ、データ送信部１０２ａ、中継部１１１ａ、データ受信部１１２ａ、通知部１１３ａ、チャネル形成部１１４、待ち受け部２０１ａ、記憶部２０２、チャネル登録部２０３、および宛先判定部２０４は、機能を概念的に示したものであって、このような構成に限定されるものではない。例えば、図９で独立した機能部として図示した複数の機能部を、１つの機能部として構成してもよい。一方、図９の１つの機能部が有する機能を複数に分割し、複数の機能部として構成するものとしてもよい。
【００９６】
（印刷システムのデータの受け渡し動作）
図１０は、第２の実施の形態に係る印刷システムにおけるデータの受け渡し動作の一例を示すシーケンス図である。図１０を参照しながら、本実施の形態に係る印刷システムのデータの受け渡し動作について説明する。
【００９７】
＜ステップＳ３１＞
サーバ１０ａのチャネル形成部１１４は、サーバ１０ａと、クライアント２０ａ＿２、２０ｂ＿２との間の通信路（ネットワーク２）にチャネルを形成する。具体的には、チャネル形成部１１４は、ＡＰＩ関数である関数ＲｏｕｔｅｒＣｒｅａｔｅＰｒｉｎｔＡｓｙｎｃＮｏｔｉｆｉｃａｔｉｏｎＣｈａｎｎｅｌ（）を呼び出すことによって、通信路上にチャネルを形成する。
【００９８】
＜ステップＳ３２＞
クライアント２０ａ＿２、２０ｂ＿２のチャネル登録部２０３は、それぞれ、チャネル形成部１１４によって形成されたチャネルに自身を登録する。具体的には、チャネル登録部２０３は、ＡＰＩ関数である関数ＲｅｇｉｓｔｅｒＦｏｒＰｒｉｎｔＡｓｙｎｃＮｏｔｉｆｉｃａｔｉｏｎｓ（）を呼び出すことによって、チャネル形成部１１４により形成されたチャネルに自身を登録する。
【００９９】
＜ステップＳ３３、３４＞
サーバ１０ａのデータ生成部１０１ａは、特定のクライアント２０のモジュールとの共有を求める印刷設定データ等のデータを生成し、生成したデータを、そのデータの共有を求める特定のクライアント２０のモジュールの宛先を示す宛先情報と共に、データ送信部１０２ａに送る。
【０１００】
＜ステップＳ３５＞
データ送信部１０２ａは、データ生成部１０１ａから受け取ったデータおよび宛先情報を、中継部１１１ａのデータ受信部１１２ａに送る。具体的には、データ送信部１０２ａは、ＡＰＩ関数である関数ＳｅｎｄＲｅｃｖＢｉｄｉＤａｔａＦｒｏｍＰｏｒｔ（）を呼び出すことによって、データをデータ受信部１１２ａに送る。
【０１０１】
＜ステップＳ３６＞
データ受信部１１２ａは、データ送信部１０２ａから受け取ったデータおよび宛先情報を、中継部１１１ａの通知部１１３ａに送る。
【０１０２】
＜ステップＳ３７＞
通知部１１３ａは、データ受信部１１２ａから受け取った宛先情報を、チャネル形成部１１４により通信路に形成されたチャネルを介して、クライアント２０ａ＿２、２０ｂ＿２の待ち受け部２０１ａに送信（通知）する。具体的には、通知部１１３ａは、ＡＰＩ関数である関数ＳｅｎｄＮｏｔｉｆｉｃａｔｉｏｎ（）を呼び出すことによって、データ受信部１１２ａから受け取った宛先情報を、チャネル形成部１１４により通信路に形成されたチャネルを介して、クライアント２０ａ＿２、２０ｂ＿２の待ち受け部２０１ａに送信（通知）する。
【０１０３】
＜ステップＳ３８＞
クライアント２０ａ＿２、２０ｂ＿２の待ち受け部２０１ａは、それぞれ、受信した宛先情報が示す宛先が自身を示すものか否かの判定を求める判定要求を、宛先判定部２０４に送る。
【０１０４】
＜ステップＳ３９＞
クライアント２０ａ＿２、２０ｂ＿２の宛先判定部２０４は、それぞれ、待ち受け部２０１ａから判定要求を受け取ると、宛先情報が示す宛先が待ち受け部２０１ａを示すものか否かを判定する。
【０１０５】
＜ステップＳ４０＞
クライアント２０ａ＿２、２０ｂ＿２の宛先判定部２０４は、それぞれ、宛先情報が示す宛先が待ち受け部２０１ａを示すものか否かの判定結果を、待ち受け部２０１ａに送る。
【０１０６】
＜ステップＳ４１＞
クライアント２０ａ＿２、２０ｂ＿２の待ち受け部２０１ａは、それぞれ、宛先判定部２０４から受け取った判定結果が、宛先情報の宛先が自身を示す旨を示す場合、チャネルを介して通知部１１３ａに応答を送信する。この場合、具体的には、待ち受け部２０１ａは、上述の関数ＳｅｎｄＮｏｔｉｆｉｃａｔｉｏｎ（）を呼び出すことによって、通知部１１３ａに応答を送信する。一方、クライアント２０ａ＿２、２０ｂ＿２の待ち受け部２０１ａは、それぞれ、判定結果が、宛先情報の宛先が自身ではない旨を示す場合、通知部１１３ａに応答を送信しない。図９および１０の例では、宛先情報がクライアント２０ａ＿２の待ち受け部２０１ａを示すものとして説明する。
【０１０７】
＜ステップＳ４２＞
通知部１１３ａは、データ受信部１１２ａから受け取ったデータを、チャネル形成部１１４により通信路に形成されたチャネルを介して、応答の送信元であるクライアント２０ａ＿２の待ち受け部２０１ａに送信（通知）する。具体的には、通知部１１３ａは、ＡＰＩ関数である関数ＳｅｎｄＮｏｔｉｆｉｃａｔｉｏｎ（）を呼び出すことによって、データ受信部１１２ａから受け取ったデータを、チャネル形成部１１４により通信路に形成されたチャネルを介して、応答の送信元であるクライアント２０ａ＿２の待ち受け部２０１ａに送信（通知）する。
【０１０８】
＜ステップＳ４３＞
クライアント２０ａ＿２の待ち受け部２０１ａは、通知部１１３ａから、チャネル形成部１１４により通信路に形成されたチャネルを介して受信したデータを、記憶部２０２に送る。
【０１０９】
＜ステップＳ４４＞
クライアント２０ａ＿２の記憶部２０２は、待ち受け部２０１ａが通知部１１３ａから受信したデータを記憶する。
【０１１０】
以上の動作によって、本実施の形態に係る印刷システムのデータの受け渡し動作が実行される。
【０１１１】
以上の構成および動作のように、チャネル形成部１１４により各クライアントに対応するチャネルが通信路に形成され、通知部１１３ａは、データの共有を求めるクライアントのモジュール（第２モジュール）を示す宛先情報を用いることにより、その宛先情報が示すモジュールに対してのみデータを送るものとしている。これによって、通信路（ネットワーク２）のトラフィックの増大を抑制することができる。また、本実施の形態に係る印刷システムは、第１の実施の形態と同様の効果を奏することは言うまでもない。
【０１１２】
［第３の実施の形態］
第３の実施の形態に係る情報処理システムについて、第２の実施の形態に係る情報処理システム（印刷システム）と相違する点を中心に説明する。第２の実施の形態では、データの共有を求める特定のモジュールに対してデータを送信する構成および動作について説明した。本実施の形態では、データの共有を求める複数のモジュールに対してデータを送信する構成および動作について説明する。なお、本実施の形態に係る情報処理システムの構成は、図１に示す印刷システム１の構成と同様であり、情報処理システムに含まれるサーバおよびクライアントのハードウェア構成は、図２に示すハードウェア構成と同様である。
【０１１３】
（印刷システムのブロック構成）
図１１は、第３の実施の形態に係る印刷システムの機能ブロックの構成の一例を示す図である。図１１を参照しながら、本実施の形態に係る印刷システムの機能ブロックの構成について説明する。
【０１１４】
図１１に示すように、サーバ１０ｂは、データ生成部１０１ｂと、データ送信部１０２ｂ（送信部）と、中継部１１１ｂと、を有する。このうち、データ生成部１０１ｂおよびデータ送信部１０２ｂは、ユーザＡによって管理・使用されているものとする。
【０１１５】
データ生成部１０１ｂは、図１１に示すクライアント２０ａ＿２〜２０ｃ＿２のうち、いずれかのクライアント２０のモジュールとの共有を求めるデータを生成する機能部である。データ生成部１０１ｂは、生成したデータを、そのデータの共有を求める複数のモジュールの宛先を示す宛先情報と共に、データ送信部１０２ｂに送る。データ生成部１０１ｂは、図３に示すアプリケーション１１またはプリンタドライバ１２によって実現される。
【０１１６】
データ送信部１０２ｂは、データ生成部１０１ｂから受け取ったデータおよび宛先情報を、中継部１１１ｂの後述するデータ受信部１１２ｂに送る機能部である。具体的には、データ送信部１０２ｂは、上述の関数ＳｅｎｄＲｅｃｖＢｉｄｉＤａｔａＦｒｏｍＰｏｒｔ（）を呼び出すことによって、データおよび宛先情報をデータ受信部１１２ｂに送る。データ送信部１０２ｂは、図３に示すアプリケーション１１またはプリンタドライバ１２によって実現される。
【０１１７】
中継部１１１ｂは、データ送信部１０２ｂから受け取ったデータを、宛先情報で特定されるモジュールに中継する機能部である。中継部１１１ｂは、図１１に示すように、データ受信部１１２ｂ（受信部）と、通知部１１３ｂと、チャネル形成部１１４と、を有する。中継部１１１ｂは、図３に示すランゲージモニタ１４によって実現される。なお、チャネル形成部１１４は、第１の実施の形態の中継部１１１のチャネル形成部１１４と同様の機能を有する。
【０１１８】
データ受信部１１２ｂは、データ送信部１０２ｂからデータおよび宛先情報を受け取り、通知部１１３ｂに送る機能部である。
【０１１９】
通知部１１３ｂは、データ受信部１１２ｂから受け取ったデータを、チャネル形成部１１４により通信路に形成されたチャネルを介して、宛先情報で特定されるクライアント２０の待ち受け部２０１ａに送信（通知）する機能部である。具体的には、通知部１１３ｂは、上述の関数ＳｅｎｄＮｏｔｉｆｉｃａｔｉｏｎ（）を呼び出すことによって、データ受信部１１２ｂから受け取ったデータを、チャネル形成部１１４により通信路に形成されたチャネルを介して、宛先情報で特定されるクライアント２０の待ち受け部２０１ａに送信（通知）する。
【０１２０】
図１１に示すように、クライアント２０ａ＿２〜２０ｃ＿２は、それぞれ、待ち受け部２０１ａと、記憶部２０２と、チャネル登録部２０３と、を有する。クライアント２０ａ＿２の待ち受け部２０１ａ、記憶部２０２およびチャネル登録部２０３は、ユーザＢによって管理・使用されているものとする。また、クライアント２０ｂ＿２の待ち受け部２０１ａ、記憶部２０２およびチャネル登録部２０３は、ユーザＣによって管理・使用されているものとする。また、クライアント２０ｃ＿２の待ち受け部２０１ａ、記憶部２０２およびチャネル登録部２０３は、ユーザＤによって管理・使用されているものとする。なお、待ち受け部２０１ａ、記憶部２０２およびチャネル登録部２０３は、それぞれ第２の実施の形態の待ち受け部２０１ａ、記憶部２０２およびチャネル登録部２０３と同様の機能を有する。
【０１２１】
なお、データ生成部１０１ｂ、データ送信部１０２ｂ、中継部１１１ｂ、データ受信部１１２ｂ、通知部１１３ｂ、チャネル形成部１１４、待ち受け部２０１ａ、記憶部２０２、チャネル登録部２０３、および宛先判定部２０４は、機能を概念的に示したものであって、このような構成に限定されるものではない。例えば、図１１で独立した機能部として図示した複数の機能部を、１つの機能部として構成してもよい。一方、図１１の１つの機能部が有する機能を複数に分割し、複数の機能部として構成するものとしてもよい。
【０１２２】
（印刷システムのデータの受け渡し動作）
図１２は、第３の実施の形態に係る印刷システムにおけるデータの受け渡し動作の一例を示すシーケンス図である。図１２を参照しながら、本実施の形態に係る印刷システムのデータの受け渡し動作について説明する。
【０１２３】
＜ステップＳ５１＞
サーバ１０ｂのチャネル形成部１１４は、サーバ１０ｂと、クライアント２０ａ＿２〜２０ｃ＿２との間の通信路（ネットワーク２）にチャネルを形成する。具体的には、チャネル形成部１１４は、ＡＰＩ関数である関数ＲｏｕｔｅｒＣｒｅａｔｅＰｒｉｎｔＡｓｙｎｃＮｏｔｉｆｉｃａｔｉｏｎＣｈａｎｎｅｌ（）を呼び出すことによって、通信路上にチャネルを形成する。
【０１２４】
＜ステップＳ５２＞
クライアント２０ａ＿２〜２０ｃ＿２のチャネル登録部２０３は、それぞれ、チャネル形成部１１４によって形成されたチャネルに自身を登録する。具体的には、チャネル登録部２０３は、ＡＰＩ関数である関数ＲｅｇｉｓｔｅｒＦｏｒＰｒｉｎｔＡｓｙｎｃＮｏｔｉｆｉｃａｔｉｏｎｓ（）を呼び出すことによって、チャネル形成部１１４により形成されたチャネルに自身を登録する。
【０１２５】
＜ステップＳ５３、５４＞
サーバ１０ｂのデータ生成部１０１ｂは、特定のクライアント２０のモジュールとの共有を求める印刷設定データ等のデータを生成し、生成したデータを、そのデータの共有を求める特定のクライアント２０のモジュールの宛先を示す宛先情報と共に、データ送信部１０２ｂに送る。図１１および１２の例では、宛先情報は、クライアント２０ａ＿２の待ち受け部２０１ａの宛先を示す宛先情報、およびクライアント２０ｂ＿２の待ち受け部２０１ａの宛先を示す宛先情報の２種類であるものとする。
【０１２６】
＜ステップＳ５５＞
データ送信部１０２ｂは、データ生成部１０１ｂから受け取ったデータおよび宛先情報を、中継部１１１ｂのデータ受信部１１２ｂに送る。具体的には、データ送信部１０２ｂは、ＡＰＩ関数である関数ＳｅｎｄＲｅｃｖＢｉｄｉＤａｔａＦｒｏｍＰｏｒｔ（）を呼び出すことによって、データをデータ受信部１１２ｂに送る。
【０１２７】
＜ステップＳ５６＞
データ受信部１１２ｂは、データ送信部１０２ｂから受け取ったデータおよび宛先情報を、中継部１１１ｂの通知部１１３ｂに送る。
【０１２８】
＜ステップＳ５７＞
通知部１１３ｂは、データ受信部１１２ｂから受け取った宛先情報から、１つの宛先情報を取り出す。
【０１２９】
＜ステップＳ５８＞
通知部１１３ｂは、取り出した１つの宛先情報を、チャネル形成部１１４により通信路に形成されたチャネルを介して、クライアント２０ａ＿２〜２０ｃ＿２の待ち受け部２０１ａに送信（通知）する。具体的には、通知部１１３ｂは、ＡＰＩ関数である関数ＳｅｎｄＮｏｔｉｆｉｃａｔｉｏｎ（）を呼び出すことによって、取り出した１つの宛先情報を、チャネル形成部１１４により通信路に形成されたチャネルを介して、クライアント２０ａ＿２〜２０ｃ＿２の待ち受け部２０１ａに送信（通知）する。
【０１３０】
＜ステップＳ５９＞
クライアント２０ａ＿２〜２０ｃ＿２の待ち受け部２０１ａは、それぞれ、受信した宛先情報が示す宛先が自身を示すものか否かの判定を求める判定要求を、宛先判定部２０４に送る。
【０１３１】
＜ステップＳ６０＞
クライアント２０ａ＿２〜２０ｃ＿２の宛先判定部２０４は、それぞれ、待ち受け部２０１ａから判定要求を受け取ると、宛先情報が示す宛先が待ち受け部２０１ａを示すものか否かを判定する。
【０１３２】
＜ステップＳ６１＞
クライアント２０ａ＿２〜２０ｃ＿２の宛先判定部２０４は、それぞれ、宛先情報が示す宛先が待ち受け部２０１ａを示すものか否かの判定結果を、待ち受け部２０１ａに送る。
【０１３３】
＜ステップＳ６２＞
クライアント２０ａ＿２〜２０ｃ＿２の待ち受け部２０１ａは、それぞれ、宛先判定部２０４から受け取った判定結果が、宛先情報の宛先が自身を示す旨を示す場合、チャネルを介して通知部１１３ｂに応答を送信する。この場合、具体的には、待ち受け部２０１ａは、上述の関数ＳｅｎｄＮｏｔｉｆｉｃａｔｉｏｎ（）を呼び出すことによって、通知部１１３ｂに応答を送信する。一方、クライアント２０ａ＿２〜２０ｃ＿２の待ち受け部２０１ａは、それぞれ、判定結果が、宛先情報の宛先が自身ではない旨を示す場合、通知部１１３ｂに応答を送信しない。図１１および１２の例では、クライアント２０ａ＿２の待ち受け部２０１ａ、およびクライアント２０ｂ＿２の待ち受け部２０１ａが、宛先判定部２０４から受け取った判定結果が、宛先情報の宛先が自身を示す旨を示すことを認識し、チャネルを介して通知部１１３ｂに応答を送信する。
【０１３４】
＜ステップＳ６３＞
通知部１１３ｂは、データ受信部１１２ｂから受け取ったデータを、チャネル形成部１１４により通信路に形成されたチャネルを介して、応答の送信元であるクライアント２０の待ち受け部２０１ａに送信（通知）する。具体的には、通知部１１３ｂは、ＡＰＩ関数である関数ＳｅｎｄＮｏｔｉｆｉｃａｔｉｏｎ（）を呼び出すことによって、データ受信部１１２ｂから受け取ったデータを、チャネル形成部１１４により通信路に形成されたチャネルを介して、応答の送信元であるクライアント２０の待ち受け部２０１ａに送信（通知）する。
【０１３５】
ステップＳ５７〜Ｓ６３の動作を、通知部１１３ｂによって、データ受信部１１２ｂから受け取った宛先情報からすべての宛先情報が取り出されるまで繰り返す。
【０１３６】
＜ステップＳ６４＞
通知部１１３ｂからデータを受信したクライアント２０（図１１および１２の例では、クライアント２０ａ＿２、２０ｂ＿２）の待ち受け部２０１ａは、受信したデータを、記憶部２０２に送る。
【０１３７】
＜ステップＳ６５＞
通知部１１３ｂからデータを受信したクライアント２０の記憶部２０２は、待ち受け部２０１ａが通知部１１３ｂから受信したデータを記憶する。
【０１３８】
以上の動作によって、本実施の形態に係る印刷システムのデータの受け渡し動作が実行される。
【０１３９】
以上の構成および動作のように、チャネル形成部１１４により各クライアントに対応するチャネルが通信路に形成され、通知部１１３ｂは、データの共有を求める複数のクライアントのモジュール（第２モジュール）をそれぞれ示す複数の宛先情報を用いることにより、それぞれの宛先情報が示すモジュールに対してデータを送るものとしている。これによって、特定のモジュールから（図１１および１２の例では、データ生成部１０１ｂおよびデータ送信部１０２ｂを含むモジュール）（第１モジュール）から、別の複数のモジュール（図１１および１２の例では、クライアント２０ａ＿２、２０ｂ＿２の待ち受け部２０１ａを含むモジュール）（第２モジュール）に対して、任意のタイミングでデータを送ることができる。
【０１４０】
また、データについては宛先情報の宛先で示されるモジュールに対してのみ、データを送信するものとしているので、通信路（ネットワーク２）のトラフィックの増大を抑制することができる。
【０１４１】
また、本実施の形態に係る印刷システムは、第１の実施の形態と同様の効果を奏することは言うまでもない。
【０１４２】
なお、図１１の例では、データの送信先となるモジュールは、異なるクライアント（クライアント２０ａ＿２、２０ｂ＿２）のモジュールとしているが、これに限定されるものではなく、例えば、同一のクライアント内の異なるモジュールであってもよい。
【０１４３】
［第４の実施の形態］
第４の実施の形態に係る情報処理システムについて、第１の実施の形態に係る情報処理システム（印刷システム）と相違する点を中心に説明する。第１の実施の形態では、異なる情報処理装置（サーバ１０、クライアント２０）のモジュールの間でデータの受け渡しをする構成および動作について説明した。本実施の形態では、同一の情報処理装置内の異なるモジュール間でデータの受け渡しをする構成および動作について説明する。なお、本実施の形態に係る情報処理装置のハードウェア構成は、図２に示すハードウェア構成と同様である。
【０１４４】
（印刷システムの全体構成）
図１３は、第４の実施の形態に係る印刷システムの全体構成の一例を示す図である。図１３を参照しながら、印刷システム１ａの全体構成の概略を説明する。
【０１４５】
図１３に示すように、情報処理システムの一例である印刷システム１ａは、ＰＣ４０ａ、４０ｂと、プリンタ３０と、を有する。また、ＰＣ４０ａ、４０ｂ、およびプリンタ３０は、それぞれネットワーク２ａを介して、通信可能となるように接続されている。なお、図１３においては、印刷システム１ａは、２台のＰＣ（ＰＣ４０ａ、４０ｂ）を有するものとしているが、これに限定されるものではなく、１台または３台以上のＰＣを有するものとしてもよい。また、ＰＣ４０ａ、４０ｂのうち任意のＰＣを示す場合、または総称する場合、単に「ＰＣ４０」と称するものとする。
【０１４６】
ネットワーク２ａは、例えば、ＬＡＮ、ＷＡＮまたはインターネット等のネットワークである。ネットワーク２ａは、例えば、ＴＣＰ／ＩＰ等の通信プロトコルでデータ通信が行われる。
【０１４７】
ＰＣ４０は、印刷を要求する印刷データを、ネットワーク２ａを介して、プリンタ３０に送信する情報処理装置である。なお、プリンタ３０に印刷データを送信する情報処理装置として、ＰＣに限定されるものではなく、ワークステーションまたはサーバ装置等のその他の情報処理装置であってもよい。
【０１４８】
プリンタ３０は、受信した印刷データを印刷出力する画像形成装置である。なお、プリンタ３０は、第１の実施の形態でも説明したように、印刷機能を有する画像形成装置であればよく、例えば、複合機であってもよい。
【０１４９】
（ＰＣのブロック構成）
図１４は、第４の実施の形態に係る印刷システムにおけるＰＣの機能ブロックの構成の一例を示す図である。図１４を参照しながら、印刷システム１ａのＰＣ４０の機能ブロックの構成について説明する。
【０１５０】
図１４に示すように、ＰＣ４０は、データ生成部１０１ｃと、データ送信部１０２ｃ（送信部）と、中継部１１１ｃと、待ち受け部２０１ｃ＿１、２０１ｃ＿２と、記憶部２０２ｃ＿１、２０２ｃ＿２と、チャネル登録部２０３ｃ＿１、２０３ｃ＿２（登録部）と、を有する。このうち、データ生成部１０１ｃおよびデータ送信部１０２ｃは、ユーザＡによって管理・使用されているものとする。また、待ち受け部２０１ｃ＿１、記憶部２０２ｃ＿１およびチャネル登録部２０３ｃ＿１は、ユーザＢによって管理・使用されているものとする。また、待ち受け部２０１ｃ＿２、記憶部２０２ｃ＿２およびチャネル登録部２０３ｃ＿２は、ユーザＣによって管理・使用されているものとする。
【０１５１】
なお、待ち受け部２０１ｃ＿１、２０１ｃ＿２のうち任意のものを示す場合、または総称する場合、単に「待ち受け部２０１ｃ」と称するものとする。また、記憶部２０２ｃ＿１、２０２ｃ＿２のうち任意のものを示す場合、または総称する場合、単に「記憶部２０２ｃ」と称するものとする。また、チャネル登録部２０３ｃ＿１、２０３ｃ＿２のうち任意のものを示す場合、または総称する場合、単に「チャネル登録部２０３ｃ」と称するものとする。
【０１５２】
データ生成部１０１ｃは、ユーザＢおよびユーザＣが管理・使用する待ち受け部２０１ｃ＿１、２０１ｃ＿２をそれぞれ含むモジュールとの共有を求めるデータを生成する機能部である。データ生成部１０１ｃは、生成したデータを、データ送信部１０２ｃに送る。データ生成部１０１ｃは、ＰＣ４０が、例えば図３に示すサーバ１０に対応する場合、アプリケーション１１もしくはプリンタドライバ１２によって実現される。
【０１５３】
データ送信部１０２ｃは、データ生成部１０１ｃから受け取ったデータを、中継部１１１ｃの後述するデータ受信部１１２ｃに送る機能部である。具体的には、データ送信部１０２ｃは、上述の関数ＳｅｎｄＲｅｃｖＢｉｄｉＤａｔａＦｒｏｍＰｏｒｔ（）を呼び出すことによって、データをデータ受信部１１２ｃに送る。データ送信部１０２ｃは、ＰＣ４０が、例えば図３に示すサーバ１０に対応する場合、アプリケーション１１またはプリンタドライバ１２によって実現される。
【０１５４】
中継部１１１ｃは、データ送信部１０２ｃから受け取ったデータを、別のモジュールに中継する機能部である。中継部１１１ｃは、図１４に示すように、データ受信部１１２ｃ（受信部）と、通知部１１３ｃと、チャネル形成部１１４ｃ（形成部）と、を有する。中継部１１１ｃは、図３に示すランゲージモニタ１４によって実現される。
【０１５５】
データ受信部１１２ｃは、データ送信部１０２ｃからデータを受け取り、通知部１１３ｃに送る機能部である。
【０１５６】
通知部１１３ｃは、データ受信部１１２ｃから受け取ったデータを、後述するチャネル形成部１１４ｃにより形成されたチャネルを介して、待ち受け部２０１ｃ＿１、２０１ｃ＿２に送信（通知）する機能部である。具体的には、通知部１１３ｃは、上述の関数ＳｅｎｄＮｏｔｉｆｉｃａｔｉｏｎ（）を呼び出すことによって、データ受信部１１２ｃから受け取ったデータを、チャネル形成部１１４ｃにより通信路に形成されたチャネルを介して、待ち受け部２０１ｃ＿１、２０１ｃ＿２に送信（通知）する。
【０１５７】
チャネル形成部１１４ｃは、通知部１１３ｃと、待ち受け部２０１ｃ＿１、２０１ｃ＿２との間にチャネルを形成する機能部である。具体的には、チャネル形成部１１４ｃは、上述の関数ＲｏｕｔｅｒＣｒｅａｔｅＰｒｉｎｔＡｓｙｎｃＮｏｔｉｆｉｃａｔｉｏｎＣｈａｎｎｅｌ（）を呼び出すことによって、チャネルを形成する。
【０１５８】
待ち受け部２０１ｃは、通知部１１３ｃから、チャネル形成部１１４ｃにより形成されたチャネルを介して、データを受信する機能部である。待ち受け部２０１ｃは、受信したデータを記憶部２０２ｃに記憶させる。待ち受け部２０１ｃは、ＰＣ４０が、例えば図３に示すクライアント２０に対応する場合、アプリケーション２１もしくはプリンタドライバ２２によって実現される。
【０１５９】
記憶部２０２ｃは、待ち受け部２０１ｃが通知部１１３ｃから受信したデータを記憶する機能部である。記憶部２０２ｃは、図２に示す補助記憶装置５０５によって実現される。
【０１６０】
チャネル登録部２０３ｃは、チャネル形成部１１４ｃにより形成されたチャネルに自身を登録する機能部である。具体的には、チャネル登録部２０３ｃは、上述の関数ＲｅｇｉｓｔｅｒＦｏｒＰｒｉｎｔＡｓｙｎｃＮｏｔｉｆｉｃａｔｉｏｎｓ（）を呼び出すことによって、チャネル形成部１１４ｃにより形成されたチャネルに自身を登録する。チャネル登録部２０３ｃは、ＰＣ４０が、例えば図３に示すクライアント２０に対応する場合、アプリケーション２１もしくはプリンタドライバ２２によって実現される。
【０１６１】
なお、データ生成部１０１ｃ、データ送信部１０２ｃ、中継部１１１ｃ、データ受信部１１２ｃ、通知部１１３ｃ、チャネル形成部１１４ｃ、待ち受け部２０１ｃ、記憶部２０２ｃ、およびチャネル登録部２０３ｃは、機能を概念的に示したものであって、このような構成に限定されるものではない。例えば、図１４で独立した機能部として図示した複数の機能部を、１つの機能部として構成してもよい。一方、図１４の１つの機能部が有する機能を複数に分割し、複数の機能部として構成するものとしてもよい。
【０１６２】
（ＰＣのデータの受け渡し動作）
図１５は、第４の実施の形態に係る印刷システムにおけるＰＣのデータの受け渡し動作の一例を示すシーケンス図である。図１５を参照しながら、印刷システム１ａのＰＣ４０のデータの受け渡し動作について説明する。
【０１６３】
＜ステップＳ７１＞
ＰＣ４０のチャネル形成部１１４ｃは、通知部１１３ｃと、待ち受け部２０１ｃ＿１、２０１ｃ＿２との間にチャネルを形成する。具体的には、チャネル形成部１１４ｃは、ＡＰＩ関数である関数ＲｏｕｔｅｒＣｒｅａｔｅＰｒｉｎｔＡｓｙｎｃＮｏｔｉｆｉｃａｔｉｏｎＣｈａｎｎｅｌ（）を呼び出すことによって、チャネルを形成する。
【０１６４】
＜ステップＳ７２＞
ＰＣ４０のチャネル登録部２０３ｃ＿１、２０３ｃ＿２は、それぞれ、チャネル形成部１１４ｃによって形成されたチャネルに自身を登録する。具体的には、チャネル登録部２０３ｃ＿１、２０３ｃ＿２は、それぞれ、ＡＰＩ関数である関数ＲｅｇｉｓｔｅｒＦｏｒＰｒｉｎｔＡｓｙｎｃＮｏｔｉｆｉｃａｔｉｏｎｓ（）を呼び出すことによって、チャネル形成部１１４ｃにより形成されたチャネルに自身を登録する。
【０１６５】
＜ステップＳ７３、７４＞
ＰＣ４０のデータ生成部１０１ｃは、ユーザＢおよびユーザＣが管理・使用する待ち受け部２０１ｃ＿１、２０１ｃ＿２をそれぞれ含むモジュールとの共有を求める印刷設定データ等のデータを生成し、そのデータをデータ送信部１０２ｃに送る。
【０１６６】
＜ステップＳ７５＞
データ送信部１０２ｃは、データ生成部１０１ｃから受け取ったデータを、中継部１１１ｃのデータ受信部１１２ｃに送る。具体的には、データ送信部１０２ｃは、ＡＰＩ関数である関数ＳｅｎｄＲｅｃｖＢｉｄｉＤａｔａＦｒｏｍＰｏｒｔ（）を呼び出すことによって、データをデータ受信部１１２ｃに送る。
【０１６７】
＜ステップＳ７６＞
データ受信部１１２ｃは、データ送信部１０２ｃから受け取ったデータを、中継部１１１ｃの通知部１１３ｃに送る。
【０１６８】
＜ステップＳ７７＞
通知部１１３ｃは、データ受信部１１２ｃから受け取ったデータを、チャネル形成部１１４ｃにより形成されたチャネルを介して、待ち受け部２０１ｃ＿１、２０１ｃ＿２に送信（通知）する。具体的には、通知部１１３ｃは、ＡＰＩ関数である関数ＳｅｎｄＮｏｔｉｆｉｃａｔｉｏｎ（）を呼び出すことによって、データ受信部１１２ｃから受け取ったデータを、チャネル形成部１１４ｃにより形成されたチャネルを介して、待ち受け部２０１ｃ＿１、２０１ｃ＿２に送信（通知）する。
【０１６９】
＜ステップＳ７８＞
待ち受け部２０１ｃ＿１、２０１ｃ＿２は、通知部１１３ｃから、チャネル形成部１１４ｃにより形成されたチャネルを介して受信したデータを、それぞれ記憶部２０２ｃ＿１、２０２ｃ＿２に送る。
【０１７０】
＜ステップＳ７９＞
記憶部２０２ｃ＿１、２０２ｃ＿２は、それぞれ、待ち受け部２０１ｃ＿１、２０１ｃ＿２が通知部１１３ｃから受信したデータを記憶する。
【０１７１】
以上の動作によって、印刷システム１ａのＰＣ４０におけるデータの受け渡し動作が実行される。
【０１７２】
以上の構成および動作のように、１つの情報処理装置であるＰＣ４０内において、チャネル形成部１１４ｃにより各モジュールに対応するチャネルが形成され、通知部１１３ｃが、そのチャネルを介して、そのチャネルに登録したモジュールにデータを送るものとしている。これによって、１つの情報処理装置内の特定のモジュール（第１モジュール）から、別のモジュール（第２モジュール）に対して、任意のタイミングでデータを送ることができる。
【０１７３】
また、データを受け取る（通知を受ける）モジュールが、データを送る（通知をする）モジュールに対して、定期的にデータの有無を確認するためにアクセスする必要がないので、ＰＣ４０の処理負荷の増大を抑制することができる。また、データを受け取る複数のモジュールが同じタイミングで、中継部１１１ｃ（ランゲージモニタ１４）からデータを取り出そうとしてアクセスエラーが発生することも抑制することができる。
【０１７４】
また、上述のようにデータの受け渡しは中継部１１１ｃ（ランゲージモニタ１４）を介して行われるので、ＰＣ４０においてデータの受け渡しをするための特別なプログラムを使用する必要がない。
【０１７５】
なお、第４の実施の形態のＰＣ４０に、第２および第３の実施の形態に係る情報処理システムのデータの受け渡し動作を適用することも可能である。
【０１７６】
また、上述の各実施の形態において、サーバ１０、１０ａ、１０ｂの、データ生成部１０１、１０１ａ、１０１ｂ、データ送信部１０２、１０２ａ、１０２ｂおよび中継部１１１、１１１ａ、１１１ｂ、クライアント２０の待ち受け部２０１、２０１ａ、チャネル登録部２０３および宛先判定部２０４、ならびに、ＰＣ４０のデータ生成部１０１ｃ、データ送信部１０２ｃ、中継部１１１ｃ、待ち受け部２０１ｃおよびチャネル登録部２０３ｃの少なくともいずれかがプログラムの実行によって実現される場合、そのプログラムは、ＲＯＭ等に予め組み込まれて提供されるものとしてもよい。また、上述の各実施の形態の情報処理システムで実行されるプログラムは、インストール可能な形式または実行可能な形式のファイルでＣＤ−ＲＯＭ、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録して提供するように構成してもよい。また、上述の各実施の形態の情報処理システムで実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、上述の各実施の形態の情報処理システムで実行されるプログラムを、インターネット等のネットワーク経由で提供または配布するように構成してもよい。上述の各実施の形態の情報処理システムで実行されるプログラムは、サーバ１０、１０ａ、１０ｂの、データ生成部１０１、１０１ａ、１０１ｂ、データ送信部１０２、１０２ａ、１０２ｂおよび中継部１１１、１１１ａ、１１１ｂ、クライアント２０の待ち受け部２０１、２０１ａ、チャネル登録部２０３および宛先判定部２０４、ならびに、ＰＣ４０のデータ生成部１０１ｃ、データ送信部１０２ｃ、中継部１１１ｃ、待ち受け部２０１ｃおよびチャネル登録部２０３ｃの少なくともいずれかを含むモジュール構成となっており、実際のハードウェアとしてはＣＰＵ５０１が上述のＲＯＭ５０２からプログラムを読み出して実行することにより、上述の各部が主記憶装置上にロードされて生成されるようになっている。
【符号の説明】
【０１７７】
１、１ａ  印刷システム
２、２ａ  ネットワーク
１０、１０ａ、１０ｂ  サーバ
１１  アプリケーション
１２  プリンタドライバ
１３  スプーラ
１４  ランゲージモニタ
１５  ポートモニタ
２０、２０ａ〜２０ｃ  クライアント
２０ａ＿２、２０ｂ＿２、２０ｃ＿２  クライアント
２１  アプリケーション
２２、２２ａ、２２ｂ  プリンタドライバ
３０  プリンタ
４０、４０ａ、４０ｂ  ＰＣ
１０１、１０１ａ〜１０１ｃ  データ生成部
１０２、１０２ａ〜１０２ｃ  データ送信部
１１１、１１１ａ〜１１１ｃ  中継部
１１２、１１２ａ〜１１２ｃ  データ受信部
１１３、１１３ａ〜１１３ｃ  通知部
１１４、１１４ｃ  チャネル形成部
２０１、２０１ａ、２０１ｃ、２０１ｃ＿１、２０１ｃ＿２  待ち受け部
２０２、２０２ｃ、２０２ｃ＿１、２０２ｃ＿２  記憶部
２０３、２０３ｃ、２０３ｃ＿１、２０３ｃ＿２  チャネル登録部
２０４  宛先判定部
５０１  ＣＰＵ
５０２  ＲＯＭ
５０３  ＲＡＭ
５０５  補助記憶装置
５０６  記録メディア
５０７  メディアドライブ
５０８  ディスプレイ
５０９  ネットワークＩ／Ｆ
５１０  バスライン
５１１  キーボード
５１２  マウス
５１３  ＣＤ−ＲＯＭ
５１４  ＣＤ−ＲＯＭドライブ
【先行技術文献】
【特許文献】
【０１７８】
【特許文献１】特開２０１３−０１６１０３号公報
【図１】
2017016586.tif 000003
【図２】
2017016586.tif 000004
【図３】
2017016586.tif 000005
【図４】
2017016586.tif 000006
【図５】
2017016586.tif 000007
【図６】
2017016586.tif 000008
【図７】
2017016586.tif 000009
【図８】
2017016586.tif 000010
【図９】
2017016586.tif 000011
【図１０】
2017016586.tif 000012
【図１１】
2017016586.tif 000013
【図１２】
2017016586.tif 000014
【図１３】
2017016586.tif 000015
【図１４】
2017016586.tif 000016
【図１５】
2017016586.tif 000017