(57)【特許請求の範囲】
【請求項１】
プロセッサを有する処理装置により実行される処理方法において、
他の装置からの処理要求を受信する受信工程と、
要求された処理を前記プロセッサが実行する実行工程と、
要求された処理の実行まで処理の要求元との接続が維持されている場合、処理を実行した結果を処理の要求元に送信する第１の送信工程と、
要求された処理の実行中に処理の要求元との接続が切断された場合、処理の実行を中断するか否かを判定する判定工程であって、処理の要求元との接続が切断されたことを検知した時に、メモリに上限値を超えてデータが格納されているか否かを判定し、前記メモリに上限値を超えてデータが格納されている場合には処理の実行を中断すると判定する、判定工程と、
前記判定工程で処理を中断しないと判定した場合、処理を実行した結果を前記メモリに格納する格納工程と、
処理の要求元と再び接続された場合、前記メモリに格納されていた処理結果を、処理の要求元に送信する第２の送信工程と、
を有することを特徴とする処理方法。
【請求項２】
前記格納工程では、処理を実行した結果を、処理要求の識別子に対応させて、前記メモリに格納し、前記第２の送信工程では、受信された処理要求の識別子に対応する処理結果が前記メモリに格納されている場合、前記メモリに格納されていた処理結果を、処理の要求元に送信することを特徴とする請求項１に記載の処理方法。
【請求項３】
前記実行工程では、識別子が付与されていない処理要求で要求された処理を実行中に、処理の要求元との接続が切断された場合、実行していた処理を中断することを特徴とする請求項２に記載の処理方法。
【請求項４】
前記格納工程では、処理を実行した結果を、処理要求に識別子として付与されたＩＰアドレスと時間情報との組み合わせ又はＵＵＩＤに対応させて、前記メモリに格納することを特徴とする請求項２又は３に記載の処理方法。
【請求項５】
前記第２の送信工程では、前記メモリに格納されていた処理結果を、処理の要求元に送信し、前記メモリに格納されていた処理結果を削除することを特徴とする請求項１乃至４の何れか１項に記載の処理方法。
【請求項６】
前記格納工程では、前記メモリに格納した処理結果を、所定時間後に削除することを特徴とする請求項１乃至５の何れか１項に記載の処理方法。
【請求項７】
他の装置からの処理要求を受信する受信手段と、
要求された処理を実行する実行手段と、
要求された処理の実行まで処理の要求元との接続が維持されている場合、処理を実行した結果を処理の要求元に送信する送信手段と、
要求された処理の実行中に処理の要求元との接続が切断された場合、処理の実行を中断するか否かを判定する判定手段であって、処理の要求元との接続が切断されたことを検知した時に、メモリに上限値を超えてデータが格納されているか否かを判定し、前記メモリに上限値を超えてデータが格納されている場合には処理の実行を中断すると判定する、判定手段と、
前記判定手段が処理を中断しないと判定した場合に、処理を実行した結果をメモリに格納する格納手段と、
を備える処理装置であって、
前記送信手段は、処理の要求元と再び接続された場合、前記メモリに格納されていた処理結果を、処理の要求元に送信することを特徴とする処理装置。
【請求項８】
コンピュータに、
他の装置からの処理要求を受信する受信手順、
要求された処理を実行する実行手順、
要求された処理の実行まで処理の要求元との接続が維持されている場合、処理を実行した結果を処理の要求元に送信する第１の送信手順、
要求された処理の実行中に処理の要求元との接続が切断された場合、処理の実行を中断するか否かを判定する判定手順であって、処理の要求元との接続が切断されたことを検知した時に、メモリに上限値を超えてデータが格納されているか否かを判定し、前記メモリに上限値を超えてデータが格納されている場合には処理の実行を中断すると判定する、判定手順と、
前記判定手順で処理を中断しないと判定した場合、処理を実行した結果をメモリに格納する格納手順、及び、
処理の要求元と再び接続された場合、前記メモリに格納されていた処理結果を、処理の要求元に送信する第２の送信手順
を実行させるためのプログラム。
【請求項９】
他の装置とネットワークを介してメッセージを送受信する通信装置であって、
前記他の装置からサービスの実行を要求するメッセージを受信する受信手段と、
前記他の装置とのコネクションが切断されたか否かを監視する監視手段と、
前記メッセージに該メッセージを識別するための情報が付与されているか否かを判定する第１の判定手段と、
前記他の装置とのコネクションが切断されたことを検知した時に、保存手段に上限値を超えてデータが格納されているか否かを判定する第２の判定手段と、
前記受信されたメッセージのサービスを実行中に前記他の装置とのコネクションが切断された場合であって、前記第１の判定手段が前記情報は付与されていると判定しかつ前記第２の判定手段が前記保存手段に上限値を超えてデータが格納されていないと判定した場合に、当該サービスを実行した結果を前記情報と共に保存する保存手段と、
前記受信されたメッセージのサービスを実行中に前記他の装置とのコネクションが切断された場合であって、前記第１の判定手段が前記情報は付与されていないと判定した場合又は前記第２の判定手段が前記保存手段に上限値を超えてデータが格納されていると判定した場合に、前記受信されたメッセージのサービスの実行を中断させる制御手段と、
前記受信手段により受信されたメッセージに前記保存手段に保存された前記情報が付与されていた場合、前記情報と共に保存された実行結果を前記他の装置へ送信する送信手段と、
を有することを特徴とする通信装置。
【請求項１０】
プロセッサを有し、他の装置とネットワークを介してメッセージを送受信する通信装置により実行される処理方法において、
前記他の装置からサービスの実行を要求するメッセージを受信する受信工程と、
前記他の装置とのコネクションが切断されたか否かを監視する監視工程と、
前記メッセージに該メッセージを識別するための情報が付与されているか否かを判定する第１の判定工程と、
前記他の装置とのコネクションが切断されたことを検知した時に、保存手段に上限値を超えてデータが格納されているか否かを判定する第２の判定工程と、
前記受信されたメッセージのサービスを実行中に前記他の装置とのコネクションが切断された場合であって、前記第１の判定工程で前記情報は付与されていると判定しかつ前記第２の判定工程で前記保存手段に上限値を超えてデータが格納されていないと判定した場合に、当該サービスを実行した結果を前記情報と共に前記保存手段に保存する保存工程と、
前記受信されたメッセージのサービスを実行中に前記他の装置とのコネクションが切断された場合であって、前記第１の判定工程で前記情報は付与されていないと判定した場合又は前記第２の判定工程で前記保存手段に上限値を超えてデータが格納されていると判定した場合に、前記受信されたメッセージのサービスの実行を中断させる制御工程と、
前記受信工程で受信されたメッセージに前記保存手段に保存された前記情報が付与されていた場合、前記情報と共に保存された実行結果を前記他の装置へ送信する送信工程と、
を有することを特徴とする処理方法。
【請求項１１】
他の装置とネットワークを介してメッセージを送受信するコンピュータに、
前記他の装置からサービスの実行を要求するメッセージを受信する受信手順、
前記他の装置とのコネクションが切断されたか否かを監視する監視手順、
前記メッセージに該メッセージを識別するための情報が付与されているか否かを判定する第１の判定手順、
前記他の装置とのコネクションが切断されたことを検知した時に、保存手段に上限値を超えてデータが格納されているか否かを判定する第２の判定手順、
前記受信されたメッセージのサービスを実行中に前記他の装置とのコネクションが切断された場合であって、前記第１の判定手順で前記情報は付与されていると判定しかつ前記第２の判定手順で前記保存手段に上限値を超えてデータが格納されていないと判定した場合に、当該サービスを実行した結果を前記情報と共に前記保存手段に保存する保存手順、
前記受信されたメッセージのサービスを実行中に前記他の装置とのコネクションが切断された場合であって、前記第１の判定手順で前記情報は付与されていないと判定した場合又は前記第２の判定手順で前記保存手段に上限値を超えてデータが格納されていると判定した場合に、前記受信されたメッセージのサービスの実行を中断させる制御手順、及び、
前記受信手順で受信されたメッセージに前記保存手段に保存された前記情報が付与されていた場合、前記情報と共に保存された実行結果を前記他の装置へ送信する送信手順
を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、要求された処理を実行する処理方法及び装置に関する。
【背景技術】
【０００２】
近年、ネットワークを介して複数の装置同士がデータのやり取りを行うWebサービス技術を用いたＰＣや機器の連携が一般的に行われている。サービスは、クライアントからのサービスの実行を要求するリクエストメッセージを受信し、サービスロジックを実行して、実行結果を含んだレスポンスメッセージをクライアントに送信する。
【０００３】
サービスがリクエストメッセージを受信した後に、ネットワーク障害やタイムアウト、及び、クライアントからのキャンセルにより、コネクションが切断された場合、サービス側では、サービスロジックの実行処理を途中で止められない。通常、サービスロジックの実行が終了し、レスポンスメッセージを書き出そうとして、コネクションの切断に気づき、処理を終了する。そのため、せっかく作成したレスポンスメッセージが無駄になってしまう。
【０００４】
そこで、ウェブサービス要求を受信したことに応答して、ウェブサービスコントローラが制御し、サービスロジックを実行せずにキャッシュしたものを使用できるようにした先行技術がある（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００７−２００３１１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
この先行技術の場合、どのような場合でもキャッシュを使用するが、全ての情報をキャッシュするには、そのために十分なメモリを確保する必要がある。
【０００７】
本発明は、要求された処理を実行した結果を効率よく利用する処理方法及び装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の一実施形態によれば、プロセッサを有する処理装置により実行される処理方法において、
他の装置からの処理要求を受信する受信工程と、
要求された処理を前記プロセッサが実行する実行工程と、
要求された処理の実行まで処理の要求元との接続が維持されている場合、処理を実行した結果を処理の要求元に送信する第１の送信工程と、
要求された処理の実行中に処理の要求元との接続が切断された場合、処理の実行を中断するか否かを判定する判定工程であって、処理の要求元との接続が切断されたことを検知した時に、メモリに上限値を超えてデータが格納されているか否かを判定し、前記メモリに上限値を超えてデータが格納されている場合には処理の実行を中断すると判定する、判定工程と、
前記判定工程で処理を中断しないと判定した場合、処理を実行した結果を前記メモリに格納する格納工程と、
処理の要求元と再び接続された場合、前記メモリに格納されていた処理結果を、処理の要求元に送信する第２の送信工程と、
を有することを特徴とする処理方法が提供される。
【発明の効果】
【０００９】
本発明によれば、要求された処理を実行した結果を効率よく利用する処理方法及び装置を提供することができる。
【図面の簡単な説明】
【００１０】
【図１】本実施形態における通信装置のハードウェア構成の一例を示す図。
【図２】本実施形態における通信装置のソフトウェア構成の一例を示す図。
【図３】識別子が付与されていないリクエストメッセージの場合の処理を示す図。
【図４】識別子が付与されたリクエストメッセージの場合の処理を示す図。
【図５】識別子のみのリクエストメッセージの場合の処理を示す図。
【図６】データベースに保持される情報の一例を示す図。
【図７】本実施形態における通信装置の処理を示すフローチャート。
【図８】保存期間を過ぎたデータを削除する処理を示すフローチャート。
【図９】本実施形態における通信装置のソフトウェア構成の一例を示す図。
【図１０】本実施形態における通信装置の処理を示すフローチャート。
【図１１】識別子の例を示す図。
【発明を実施するための形態】
【００１１】
以下、図面を参照しながら発明を実施するための形態について詳細に説明する。
【００１２】
まず、本実施形態における通信装置のハードウェア構成の一例を、図１を用いて説明する。尚、本実施形態では、通信装置として、他の装置（要求元）からの、サービス要求（処理要求）に応じて、サービス（処理）を実行し、実行結果（応答）を他の装置へ返送するサービス装置を例に説明する。
【００１３】
図１において、他の装置１０１は、ネットワーク１１３を介してサービス装置（通信装置）１０２とメッセージを授受する、サービスを利用する側の装置（コンピュータ）である。サービス装置１０２は、ＣＰＵ（プロセッサ）１０３、メモリ１０４、ＨＤ（ハードディスク）装置１０５、表示ボード１０６、周辺コントローラ１０７、ネットワークＩ／Ｆ１０８を備える。ＣＰＵ１０３は、プログラム（手順）に従ってサービス装置１０２の各処理部の処理を実行する。プログラムはＨＤ装置１０５に、あるいはメモリ１０４内のＲＯＭに格納されており、ＣＰＵ１０３がプログラムを実行時にメモリ１０４内のＲＡＭに読み込まれる。メモリ１０４はプログラムや制御データを格納するＲＯＭとＣＰＵ１０３の作業領域としてのＲＡＭを含み、更にＸＭＬの要素やオブジェクトも格納される。また、プログラムはコンピュータを通信装置として機能させるためのものである。
【００１４】
ＨＤ装置１０５はハードディスクへのアクセスを制御するインタフェースを含み、各種データを記憶する。表示ボード１０６はディスプレイ装置１０９を接続するためのインタフェースを含み、サービス装置１０２の状態や処理結果をディスプレイ装置１０９に表示させる。周辺コントローラ１０７はマウス１１０やキーボード１１１を接続するためのインタフェースを含み、サービス装置１０２への指示や各種入力を制御する。ネットワークＩ／Ｆ１０８はネットワーク１１３との間で通信するためのインタフェースを含み、他の装置１０１との通信を制御する。
【００１５】
システムバス１１２は上述の各部を接続する。ネットワーク１１３は他の装置１０１とサービス装置１０２がメッセージを通信できればどのような形態でもよく、例えばインターネット、ＷＡＮ、ＬＡＮなどである。また、通信プロトコルも特定のプロトコルに限るものではない。
【００１６】
次に、サービス装置１０２のソフトウェア構成の一例を、図２を用いて説明する。他の装置１０１からサービスの実行を要求するメッセージとしてリクエストメッセージ２０１が送信されると、メッセージ受信部２０２がそのリクエストメッセージ２０１を受信する。ここで、他の装置１０１とサービス装置１０２とのコネクションが切断されていないか否かはコネクション切断検知部２０３が検知する。メッセージ受信部２０２は、図１のネットワークＩ／Ｆ１０８を介してリクエストメッセージ２０１を受信する。
【００１７】
コネクションが切断されていなければ、メッセージ解析部２０４がそのリクエストメッセージ２０１を解析し、何のサービスの呼び出しかを判断する。また、メッセージ解析部２０４はリクエストメッセージ２０１に、メッセージを識別するための情報として識別子（ＩＤ）が含まれているか否かも判断する。
【００１８】
次に、メッセージ解析部２０４で呼び出すサービスが特定されると、サービスロジック制御部２０５がサービスロジック２０６の呼び出しを行う。また、コネクション切断検知部２０３が切断を検知した場合は、リクエストメッセージ２０１に識別子が付与されていない場合、サービスロジック２０６の処理を中断させる。サービスロジック２０６は、サービスロジック制御部２０５によってサービスの実行及び実行の中断が行われる。
【００１９】
サービスロジック制御部２０５によるサービスの実行が終了すると、メッセージ作成部２０７がサービスロジック２０６の実行結果に基づいて他の装置１０１に返信するレスポンスメッセージ２０９を作成する。そして、メッセージ送信部２０８が他の装置１０１にサービスの実行結果を表すメッセージとして、レスポンスメッセージ２０９を送信する。また、レスポンスメッセージ２０９は、サービスの実行に失敗した場合、失敗した情報を表すメッセージとなる。メッセージ送信部２０８は、図１のネットワークＩ／Ｆ１０８を介してレスポンスメッセージ２０９を送信する。
【００２０】
他の装置１０１とのコネクションの切断により、メッセージを送信できなかった場合、未送信メッセージ管理部２１０がデータベース２１１に未送信のレスポンスメッセージを保持する。これは、他の装置１０１からのリクエストメッセージ２０１に識別子が付与されていた場合に行われ、識別子とレスポンスメッセージ２０９を紐付けて保持する。また、未送信メッセージ管理部２１０は再び、同じ識別子を持つリクエストメッセージ２０１が他の装置１０１から送信された場合、既に紐付けされたレスポンスメッセージをメッセージ送信部２０８に渡す。データベース２１１は、未送信メッセージ管理部２１０が情報を格納する格納先であり、ＨＤ装置１０５に含まれる。
【００２１】
次に、本実施形態におけるサービス装置の特徴的な処理を、図３乃至図８を用いて説明する。まず、識別子が付与されていないリクエストメッセージをやり取りする具体例を図３に示す。リクエストメッセージ３０１は、他の装置１０１がgetDataオペレーションを呼び出す際に送信される具体例である。リクエストメッセージ３０１には、識別子が付与されていない。サービス装置１０２では、このリクエストメッセージ３０１を受信し、具体的なサービスロジック３０２を実行する。そのサービスロジック３０２を実行した結果として、具体的なレスポンスメッセージ３０３が作成される。しかし、このサービスロジック３０２の処理を実行中にコネクションが切断された場合、リクエストメッセージ３０１に識別子が付与されていないため、サービスロジック３０２の実行を中断する。従って、この場合、レスポンスメッセージ３０３は作成されない。
【００２２】
次に、識別子（ＩＤ）が付与されたリクエストメッセージをやり取りする具体例を図４に示す。リクエストメッセージ４０１は、他の装置１０１がgetDataオペレーションを呼び出す際に送信される具体例である。リクエストメッセージ４０１には、識別子「１０００２０」が付与されている。この識別子は初めてのアクセスであるため、データベース２１１には、紐付けされたレスポンスメッセージ３０３は存在しない。そのため、サービス装置１０２は、サービスロジック３０２の実行を行い、レスポンスメッセージ３０３の作成を行う。このサービスロジック３０２の実行結果として、具体的なレスポンスメッセージ３０３が作成される。ここで、サービスロジック３０２の処理を実行中にコネクションが切断された場合、このリクエストメッセージ４０１には識別子が付与されているため、サービスロジック３０２の実行を最後まで行う。そして、レスポンスメッセージ３０３を作成し、識別子「１０００２０」と紐付けしてデータベース２１１に保持しておく。
【００２３】
なお、図５に示すように、再度、リクエストメッセージ４０１が他の装置１０１から送信されると、識別子「１０００２０」に紐付けされたレスポンスメッセージ３０３がデータベース２１１に存在するため、サービスロジック３０２を実行せずに、そのメッセージを送信する。そして、識別子「１０００２０」と紐付けされたレスポンスメッセージ３０３の情報をデータベース２１１から削除する。
【００２４】
また、サービスロジック３０２の処理を実行中にコネクションが切断されなかった場合は、サービスロジック３０２を実行して作成したレスポンスメッセージ３０３を他の装置１０１にそのまま送信する。
【００２５】
ここで、他の装置１０１から識別子のみが送信された場合に、装置間で送受信されるメッセージを図５に示す。識別子の情報だけをもつリクエストメッセージ５０１が送信される。サービス装置１０２では、送信された識別子「１０００２０」に紐付けされたレスポンスメッセージがデータベース２１１に格納されているか否かを判断する。判断した結果、紐付けされたレスポンスメッセージ３０３が存在すれば、図４で説明したようにそのメッセージを送信し、格納されているメッセージの情報をデータベース２１１から削除する。しかし、紐付けされたレスポンスメッセージ３０３が存在しなかった場合、識別子のみで実行するサービスが不明なため、フォルトのメッセージを具体的なレスポンスメッセージ５０２として作成する。このサービス実行に失敗したことを表すレスポンスメッセージ５０２が他の装置１０１に送信される。
【００２６】
上述したサービス装置１０２におけるデータベース２１１が保持する情報の一例を図６に示す。図４に示すリクエストメッセージ４０１のサービスを実行処理中にコネクションが切断された場合、識別子「１０００２０」がレスポンスメッセージと共に格納される（６０１）。この例では、識別子「１００１２０」もレスポンスメッセージと共に格納されている（６０２）。また、この例では、他に、保存期間が記述してある。６０１では残り６０分となっており、６０２では残り１２０分となっている。これは、サービス装置１０２のデータベース２１１において、データを保存しておく期間を設けた例である。
【００２７】
他の装置１０１がサービスの実行要求を行った場合に、コネクションが切断される可能性は、二つある。一つは、ネットワーク障害やタイムアウトなどによる、他の装置１０１が意図していない切断である。この場合、他の装置１０１がリトライを行う可能性が高い。しかし、他の装置１０１が何らかの理由により、意図的に切断を行う場合もある。この場合、後で実行する可能性もあるが、実行を行わない場合もある。そのため、二度とリトライが発生しないようなメッセージが存在してしまう。二度とアクセスされないメッセージをいつまでもデータベースに保管しておくのは、よくないので、ある一定の保存期間を設けるのが望ましい。
【００２８】
この保存期間は、本実施形態では、サービス装置１０２の作成者が自由に設定する。また、他の実施形態では、この保存時間は、他の装置１０１からのリクエストメッセージに情報として付与する。この保存期間を過ぎた（所定時間後の）データは削除するが、削除された後にその識別子でリクエストメッセージを送信してきた場合、図４に示すように、サービスのメッセージを含んでいれば、サービスロジックの実行が行われるので問題ない。但し、図５に示すように、識別子のみのリクエストメッセージの場合は、フォルトレスポンスメッセージが返る。
【００２９】
次に、本実施形態におけるサービス装置１０２の処理を、図７に示すフローチャートを用いて説明する。図７のフローチャートは、ＣＰＵ１０３がプログラムを実行することにより実現される。このプログラムはＨＤ装置１０５に、あるいはメモリ１０４内のＲＯＭに格納されており、ＣＰＵ１０３がプログラムを実行時にメモリ１０４内のＲＡＭに読み込まれる。
【００３０】
メッセージ受信部２０２が他の装置１０１から送られてきたリクエストメッセージ２０１を受信する（Ｓ７０１）。このリクエストメッセージ２０１は、サービス装置１０２と他の装置１０１の間に形成されたコネクションを介して受信される。次に、コネクション切断検知部２０３が、コネクションが切断されていないかを常に監視する（Ｓ７０２）。切断を検知した場合には、すぐにメッセージ受信部２０２に知らせる。通知された情報は、その他の全ての処理部に伝えられる。
【００３１】
次に、メッセージ解析部２０４がリクエストメッセージ２０１に識別子が付与されているか否かを判定する（Ｓ７０３）。判定した結果、リクエストメッセージ２０１に識別子が付与されていなければ（Ｓ７０３でＮＯ）、呼び出すサービスを特定し（Ｓ７０４）、処理がサービスロジック制御部２０５へ移る。サービスロジック制御部２０５では、メッセージ解析部２０４が特定したサービスに基づいてサービスロジック２０６を実行する（Ｓ７０５）。リクエストメッセージ２０１が上述したgetDataオペレーションを呼び出すリクエストメッセージ３０１の場合は、図３のサービスロジック３０２が実行される。
【００３２】
ここで、サービスロジック２０６の実行中に、コネクション切断検知部２０３がコネクションの切断を検知しなければ（Ｓ７０６でＮＯ）、メッセージ作成部２０７がサービスロジックの結果を含むレスポンスメッセージ２０９を作成する（Ｓ７０７）。次に、メッセージ送信部２０８が、作成されたレスポンスメッセージ２０９を他の装置１０１に送信し（Ｓ７０８）、この処理を終了する。
【００３３】
一方、コネクション切断検知部２０３がコネクションの切断を検知すると（Ｓ７０６でＹＥＳ）、サービスロジック制御部２０５はサービスロジック２０６の実行を中断し（Ｓ７０９）、この処理を終了する。このサービスロジックの中断方法については、いくつか方法が考えられる。例えば、スレッドを別にしてサービスロジックの実行を行っておき、中断を検知すると、スレッドを止める。或いは、サービスロジックにキャンセルメソッドを用意しておき、そのメソッドを呼び出すなどである。尚、中断方法は、どのように実装されていても構わない。なお、Ｓ７０７のレスポンスメッセージ２０９の作成中、又は、Ｓ７０８のレスポンスメッセージ２０９の送信中に、コネクションが切断された場合も、処理を中断して、終了する。
【００３４】
また、メッセージ解析部２０４が、上述のリクエストメッセージ４０１のように、識別子が付与されているリクエストメッセージであると判定すると（Ｓ７０３でＹＥＳ）、処理が未送信メッセージ管理部２１０へ移る。未送信メッセージ管理部２１０では、識別子「１０００２０」に対応するレスポンスメッセージがデータベース２１１に存在するか否かを判定する（Ｓ７１０）。判定した結果、識別子「１０００２０」が付与されたリクエストメッセージを初めて受信したのであれば、データベース２１１には存在しない（Ｓ７１０でＮＯ）。そこで、メッセージ解析部２０４がそのメッセージを解析し、何のサービスの呼び出しかを特定する（Ｓ７１１）。尚、リクエストメッセージ４０１の場合、サービス呼び出しの情報が含まれているので、何の呼び出しかを特定することが可能である（Ｓ７１１でＹＥＳ）。リクエストメッセージ４０１は、getDataオペレーションを呼び出すリクエストメッセージである。
【００３５】
次に、サービスロジック制御部２０５が、メッセージ解析部２０４が特定したサービスに基づいてサービスロジック２０６を実行する（Ｓ７１２）。この場合、上述したサービスロジック３０２が実行される。次に、メッセージ作成部２０７がサービスロジック２０６の結果を含むレスポンスメッセージ２０９を作成する（Ｓ７１３）。次に、コネクション切断検知部２０３がコネクションの切断を検知していなければ（Ｓ７１４でＮＯ）、メッセージ送信部２０８は、作成されたレスポンスメッセージ２０９を他の装置１０１に送信し（Ｓ７１５）、この処理を終了する。
【００３６】
一方、コネクション切断検知部２０３が、サービスロジックの実行中にコネクションの切断を検知していた場合（Ｓ７１４でＹＥＳ）、未送信メッセージ管理部２１０に処理が移る。未送信メッセージ管理部２１０がデータベース２１１に識別子「１０００２０」と作成したレスポンスメッセージ３０３を紐付けて６０１のように保存し（Ｓ７１６）、この処理を終了する。なお、Ｓ７１５のレスポンスメッセージ２０９の送信中にコネクションが切断された場合も、Ｓ７１６に移る。
【００３７】
また、上述したＳ７１０で、未送信メッセージ管理部２１０が、データベース２１１に識別子「１０００２０」に対応するレスポンスメッセージが存在すると判定した場合（Ｓ７１０でＹＥＳ）、コネクション切断検知部２０３がコネクションの切断を検知していれば（Ｓ７１７でＹＥＳ）、この処理を終了する。コネクション切断検知部２０３がコネクションの切断を検知していなければ（Ｓ７１７でＮＯ）、処理がメッセージ送信部２０８へ移る。ここで、メッセージ送信部２０８は、その対応するレスポンスメッセージを他の装置１０１に送信する（Ｓ７１８）。そして、データベース２１１から送信が終了したレスポンスメッセージに対応する情報（６０１）を削除し（Ｓ７１９）、この処理を終了する。なお、Ｓ７１８でのレスポンスメッセージの送信中にコネクションが切断された場合、処理を終了する。レスポンスメッセージの送信が完了しない場合、情報（６０１）は削除しない。
【００３８】
また、上述したＳ７１１で、メッセージ解析部２０４がリクエストメッセージ２０１を解析し、何の呼び出しかを特定できない場合（Ｓ７１１でＮＯ）は、処理がメッセージ作成部２０７へ移る。具体的には、データベース２１１の保存期間が切れてデータが削除されていた場合、そもそも識別子がでたらめだった場合、識別子に対応するレスポンスメッセージが存在しない場合、リクエストメッセージ４０１に含まれるサービス呼び出しの情報が誤っている場合などが特定できない場合である。これらの場合、メッセージ作成部２０７では、フォルト情報を含むレスポンスメッセージを作成する（Ｓ７２０）。具体的には、図５に示すレスポンスメッセージ５０２が作成される。
【００３９】
次に、コネクション切断検知部２０３がコネクションの切断を検知していなければ（Ｓ７２１でＮＯ）、メッセージ送信部２０８が、作成されたレスポンスメッセージ５０２を他の装置１０１に送信し（Ｓ７１５）、この処理を終了する。しかし、コネクション切断検知部２０３がコネクションの切断を検知していれば（Ｓ７２１でＹＥＳ）、そのまま、この処理を終了する。また、作成したフォルトのメッセージはデータベース２１１に保存しない。Ｓ７１５のレスポンスメッセージの送信中にコネクションが切断された場合も、レスポンスメッセージを保存せずに、処理を終了する。
【００４０】
ここで、サービス装置１０２の未送信メッセージ管理部２１０がデータベース２１１の保存期間を過ぎたデータを削除する処理を、図８に示すフローチャートを用いて説明する。例えば、データベース２１１の保存期間が残り０分になっていた場合、そのデータは、データベース２１１から削除される。削除するタイミングとして、この例では、他の装置１０１からリクエストメッセージ２０１を受信した場合とする。また、この処理は、他の装置１０１からリクエストメッセージ２０１を受信した場合に、削除するデータがあるか否かを確認するので、Ｓ７０１とＳ７０２の処理の間で行われる。
【００４１】
まず、メッセージ受信部２０２がリクエストメッセージ２０１を受信し（Ｓ７０１）、未送信メッセージ管理部２１０がデータベース２１１に保存期間が過ぎたデータが存在するか否かを調べる（Ｓ８０１）。ここで、保存期間を過ぎたデータが存在しない場合（Ｓ８０１でＮＯ）は、そのまま、処理がコネクション切断検知部２０３へ移る。一方、保存期間が残り０分になっていた場合など、保存期間を過ぎたデータが存在すれば（Ｓ８０１でＹＥＳ）、そのデータを削除する（Ｓ８０２）。そして、処理がコネクション切断検知部２０３へ移る。
【００４２】
尚、データを削除するタイミングは、これだけに限らず、他の場合でも良い。例えば、メッセージ送信部２０８がレスポンスメッセージ２０９を送信（Ｓ７０８、Ｓ７１５、Ｓ７１８）した後、削除しても良い。また、受信又は送信などの処理のタイミングではなく、データベース２１１を常に監視し、保存期間が過ぎたデータを即座に検知して削除するようにしても良い。
【００４３】
以上のように、サービス装置１０２におけるこの処理を利用して、サービスを利用する他の装置１０１が効率的にデータを取得することも可能となる。例えば、他の装置１０１は識別子を付与したリクエストメッセージ４０１をサービス装置１０２に送信する。サービス装置１０２で実行されるサービスロジック３０２が、非常に重い処理であることがわかっていれば、他の装置１０１は意図的にコネクションを切断する。そして、しばらく経ってから、再び、リクエストメッセージ４０１をサービス装置１０２に送信する。これにより、サービス装置１０２では、既にサービスロジック３０２の実行が終了しており、レスポンスメッセージ３０３がデータベース２１１に保存されている。従って、他の装置１０１に対して、すぐにレスポンスメッセージが送信される。
【００４４】
このようにする処理ことにより、他の装置１０１は、サービス装置１０２からのレスポンスメッセージを取得するために、ずっとコネクションを維持しておく必要がない。サービス装置１０２が処理を行っている間に、他の処理をすることも可能である。また、コネクションを長くキープしてタイムアウトが発生しても、それまでに実行した処理が無駄になってしまうという問題も解消される。
【００４５】
本実施形態によれば、サービスにおいて、サービスロジックの実行を必要最低限に抑えることができ、メモリが少ない組込み機器での負荷を軽減することが可能となる。
【００４６】
＜実施形態２＞
次に、本発明の第２の実施形態について説明する。第１の実施形態においては、コネクションの切断を検知した場合、リクエストメッセージに識別子が付与されていなければ、サービスロジックの処理を中断させ、識別子が付与されていればそのまま処理を続行させる方法を説明した。本実施形態においては、第１の実施形態において、リクエストメッセージに識別子が付与されている場合にも、データベースの状態に応じて、サービスロジックの処理を中断する方法を説明する。図９及び図１０を参照して、処理の概要を説明する。尚、図９は、図２で示した図を一部変更したものであり、図２と同一の符号を一部用いている。図２で示した処理と同一の部分は、本実施形態では説明を省略する。
【００４７】
図９は、サービス装置１０２のソフトウェア構成の一例を示している。ＤＢ状態確認部９０１は、データベース２１１の保存領域の使用状況を確認することができる。具体的には、事前にデータベース２１１の保存領域を使用できるサイズの上限値を設定しておき、使用しているサイズが、設定されている上限値を超えていないかどうかを確認する。未送信メッセージ管理部２１０は、リクエストメッセージ２０１に識別子が付与されていて、且つ、コネクション切断検知部２０３で切断を感知した場合、ＤＢ状態確認部９０１に、データベース２１１の使用状況の確認指示を出す。既に、使用状況が、設定されている上限値を超えている場合は、未送信メッセージ管理部２１０は、サービスロジック制御部２０５に対して中断指示を出す。サービスロジック制御部２０５は、サービスロジック２０６の処理を中断させる。
【００４８】
以上の処理を行うことで、リクエストメッセージ２０１に識別子が付与されている場合にも、データベース２１１の状態に応じて、サービスロジックの処理を中断させることができる。
【００４９】
次に、第１の実施形態と同様に、図１０に示すフローチャートを用いて、サービス装置１０２の処理について説明する。図１０において、図７と共通の処理には、共通の番号を付し、説明は省略する。
【００５０】
Ｓ７０３で判定した結果がＹＥＳだった場合から説明する。未送信メッセージ管理部２１０では、識別子に対応するレスポンスメッセージがデータベース２１１に存在するか否かを判定する（Ｓ７１０）。判定した結果、付与されている識別子に対応するレスポンスメッセージが存在しなければ（Ｓ７１０でＮＯ）、メッセージ解析部２０４が、そのメッセージを解析し、何のサービスの呼び出しかを特定する（Ｓ７１１）。特定できた場合（Ｓ７１１でＹＥＳ）は、サービスロジック制御部２０５が、メッセージ解析部２０４が特定したサービスに基づいてサービスロジック２０６を実行する（Ｓ７１２）。
【００５１】
サービスロジック２０６を実行中に、未送信メッセージ管理部２１０は、コネクションの切断通知を受け取ると（Ｓ１００７でＹＥＳ）、ＤＢ状態確認部９０１にデータベース２１１の使用状況の確認指示を出す。ＤＢ状態確認部９０１は、データベース２１１の使用領域が、既に事前に設定されている上限値を超えているか否かを判定する（Ｓ１００８）。上限値を既に超えていると判定すると（Ｓ１００８でＹＥＳ）、未送信メッセージ管理部２１０は、サービスロジック制御部２０５に対して、サービスロジックを中断するように要求する。サービスロジック制御部２０５は、実行中のサービスロジック２０６を中断し（Ｓ１００９）、処理を終了する。
【００５２】
ＤＢ状態確認部９０１で、上限値を超えていないと判定すると（Ｓ１００８でＮＯ）、メッセージ作成部２０７で、サービスロジックの結果を含むレスポンスメッセージ２０９を作成する（Ｓ１０１０）。そして、未送信メッセージ管理部２１０は、データベース２１１にリクエストメッセージ２０１に付与された識別子と作成したレスポンスメッセージを紐付けて保存し（Ｓ１０１１）、処理を終了する。
【００５３】
一方、サービスロジック２０６が実行中に、コネクションの切断が発生しなければ（Ｓ１００７でＮＯ）、メッセージ作成部２０７で、サービスロジックの結果を含むレスポンスメッセージ２０９を作成する（Ｓ１０１２）。次に、メッセージ送信部２０８が、作成されたレスポンスメッセージ２０９を他の装置１０１に送信し（Ｓ１０１３）、処理を終了する。なお、Ｓ１０１２のレスポンスメッセージ２０９の作成中、又は、Ｓ１０１３のレスポンスメッセージ２０９の送信中にコネクションが切断された場合は、Ｓ１００８に進む。
【００５４】
一方、メッセージ解析部２０４で、リクエストメッセージに識別子が付与されていないと判定すると（Ｓ７０３でＮＯ）、図７のＳ７０４へ進む。以降の処理は、図７のＳ７０４以降の処理（Ｓ７０８又はＳ７０９まで）と共通であるので、説明を省略する。
【００５５】
一方、未送信メッセージ管理部２１０で、付与されている識別子に対応するレスポンスメッセージが存在していると判定すると（Ｓ７１０でＹＥＳ）、図７のＳ７１７へ進む。以降の処理は、図７のＳ７１７以降の処理（Ｓ７１９まで）と共通であるので、説明を省略する。
【００５６】
一方、メッセージ解析部２０４で、何のサービスの呼び出しかを特定できなければ（Ｓ７１１でＮＯ）、図７のＳ７２０に進む。以降の処理は、図７のＳ７２０以降の処理（Ｓ７１５まで）と共通であるので、説明を省略する。
【００５７】
以上の方法で、リクエストメッセージに識別子が付与されている場合にも、データベースの状態に応じて、サービスロジックの中断を制御することが可能となる。その為、サービス装置に対して、次々に識別子が付与されたリクエストメッセージが大量に送られても、データベースの状態に応じてサービスロジックを正常に中断させられるので、サービス装置側の負荷を軽減することが可能となる。また、データベースに大量のレスポンスサービスや、サイズの大きいレスポンスサービスが格納され、データベースの領域を使い切る前に、サービスロジックの処理を中断できるので、サービス装置で処理が不正に停止することを防ぐことも可能となる。
【００５８】
次に、第１及び第２の実施形態で説明した識別子の形式について図１１を用いて説明する。図１１（Ａ）において、サービス装置１１０１は、他の装置Ａ１１０２だけでなく、他の装置Ｂ１１０３からもリクエストメッセージが送信されてくる。すなわち、複数の他の装置からリクエストメッセージが送信されてくる可能性がある。識別子は、他の装置がそれぞれ個々に生成し、リクエストメッセージに付与するものであり、単純な数値の羅列などでは、サービス装置側で識別子が重複する可能性がある。重複した場合は、サービス装置側で、識別子と紐付けて管理するレスポンスメッセージを正常にデータベースに保存できない。その為、本実施形態においては、識別子の重複の可能性を低減させる例について説明する。
【００５９】
図１１（Ａ）では、リクエストメッセージの送信側となる他の装置のＩＰアドレスと、送信時の日付及び時間（時間情報）の組み合わせで識別子を付与する例を記載している。他の装置Ａ１１０２のＩＰアドレスは、123.123.123.1であり、リクエストメッセージの送信時刻が2010年01月01日23時59分01秒だった場合、リクエストメッセージ１１０４に示すように、識別子は「1231231231-20100101-235901」となる。同様に他の装置Ｂ１１０３のＩＰアドレスは、123.123.123.2であり、リクエストメッセージの送信時刻が、2010年01月02日23時59分02秒だった場合、リクエストメッセージ１１０５に示すように、識別子は「1231231232-20100102-235902」となる。
【００６０】
また、他の識別子の形式について、図１１（Ｂ）を用いて説明する。図１１（Ｂ）は、図１１（Ａ）と同様の構成であり、サービス装置１２０１に対して、他の装置Ａ１２０２と、他の装置Ｂ１２０３からリクエストメッセージが送信される場合を示しており、識別子はＵＵＩＤ（Universally Unique Identifier）の形式で付与する例を記載している。他の装置Ａ１２０２は、ＵＵＩＤ形式の識別子を生成し、リクエストメッセージ１２０４に示すように、「12345678-9abc-def0-1234-56789abcd012」を付与する。同様に他の装置Ｂ１２０３は、ＵＵＩＤ形式の識別子を生成し、リクエストメッセージ１２０５に示すように、「12345678-9abc-def0-1234-56789abcd123」を付与する。ＵＵＩＤは、一意に特定可能な識別子を作成するための仕様であり、ネットワークシステムの環境において統制を取らなくても、重複や偶然の一致がほぼ起こりえないと言われている。その為、識別子として用いることで、サービス装置１２０１側で、識別子と紐付けて、レスポンスメッセージをデータベースに保存する処理の最中に、重複が起きる可能性を低減することが可能となる。
【００６１】
以上のような形式の識別子を用いることで、複数の他の装置からアクセスがあっても処理可能となる。
【００６２】
［他の実施形態］
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【図１】
0005529596.tif 000002
【図２】
0005529596.tif 000003
【図３】
0005529596.tif 000004
【図４】
0005529596.tif 000005
【図５】
0005529596.tif 000006
【図６】
0005529596.tif 000007
【図７】
0005529596.tif 000008
【図８】
0005529596.tif 000009
【図９】
0005529596.tif 000010
【図１０】
0005529596.tif 000011
【図１１】
0005529596.tif 000012