処理方法及び装置
【課題】 要求された処理を実行した結果を効率よく利用する処理方法及び装置を提供する。
【解決手段】 処理装置は、他の装置からの処理要求を受信し、要求された処理を実行する。処理装置は、要求された処理の実行まで処理の要求元との接続が維持されている場合、処理を実行した結果を処理の要求元に送信し、要求された処理の実行に処理の要求元との接続が切断された場合、処理の実行を中断するか否かを判定し、処理を中断しないと判定した場合、処理を実行した結果をメモリに格納する。処理装置は、処理要求が受信されたときに要求された処理を実行した結果が前記メモリに格納されている場合、前記メモリに格納されていた処理結果を、処理の要求元に送信する。
【解決手段】 処理装置は、他の装置からの処理要求を受信し、要求された処理を実行する。処理装置は、要求された処理の実行まで処理の要求元との接続が維持されている場合、処理を実行した結果を処理の要求元に送信し、要求された処理の実行に処理の要求元との接続が切断された場合、処理の実行を中断するか否かを判定し、処理を中断しないと判定した場合、処理を実行した結果をメモリに格納する。処理装置は、処理要求が受信されたときに要求された処理を実行した結果が前記メモリに格納されている場合、前記メモリに格納されていた処理結果を、処理の要求元に送信する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、要求された処理を実行する処理方法及び装置に関する。
【背景技術】
【0002】
近年、ネットワークを介して複数の装置同士がデータのやり取りを行うWebサービス技術を用いたPCや機器の連携が一般的に行われている。サービスは、クライアントからのサービスの実行を要求するリクエストメッセージを受信し、サービスロジックを実行して、実行結果を含んだレスポンスメッセージをクライアントに送信する。
【0003】
サービスがリクエストメッセージを受信した後に、ネットワーク障害やタイムアウト、及び、クライアントからのキャンセルにより、コネクションが切断された場合、サービス側では、サービスロジックの実行処理を途中で止められない。通常、サービスロジックの実行が終了し、レスポンスメッセージを書き出そうとして、コネクションの切断に気づき、処理を終了する。そのため、せっかく作成したレスポンスメッセージが無駄になってしまう。
【0004】
そこで、ウェブサービス要求を受信したことに応答して、ウェブサービスコントローラが制御し、サービスロジックを実行せずにキャッシュしたものを使用できるようにした先行技術がある(例えば、特許文献1参照)。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2007−200311号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
この先行技術の場合、どのような場合でもキャッシュを使用するが、全ての情報をキャッシュするには、そのために十分なメモリを確保する必要がある。
【0007】
本発明は、要求された処理を実行した結果を効率よく利用する処理方法及び装置を提供することを目的とする。
【課題を解決するための手段】
【0008】
本発明は、プロセッサを有する処理装置により実行される処理方法において、
他の装置からの処理要求を受信し、
要求された処理を前記プロセッサが実行し、
要求された処理の実行まで処理の要求元との接続が維持されている場合、処理を実行した結果を処理の要求元に送信し、
要求された処理の実行中に処理の要求元との接続が切断された場合、処理の実行を中断するか否かを判定し、
処理を中断しないと判定した場合、処理を実行した結果をメモリに格納し、
処理要求が受信されたときに要求された処理を実行した結果が前記メモリに格納されている場合、前記メモリに格納されていた処理結果を、処理の要求元に送信することを特徴とする。
【発明の効果】
【0009】
本発明によれば、要求された処理を実行した結果を効率よく利用する処理方法及び装置を提供することができる。
【図面の簡単な説明】
【0010】
【図1】本実施形態における通信装置のハードウェア構成の一例を示す図。
【図2】本実施形態における通信装置のソフトウェア構成の一例を示す図。
【図3】識別子が付与されていないリクエストメッセージの場合の処理を示す図。
【図4】識別子が付与されたリクエストメッセージの場合の処理を示す図。
【図5】識別子のみのリクエストメッセージの場合の処理を示す図。
【図6】データベースに保持される情報の一例を示す図。
【図7】本実施形態における通信装置の処理を示すフローチャート。
【図8】保存期間を過ぎたデータを削除する処理を示すフローチャート。
【図9】本実施形態における通信装置のソフトウェア構成の一例を示す図。
【図10】本実施形態における通信装置の処理を示すフローチャート。
【図11】識別子の例を示す図。
【発明を実施するための形態】
【0011】
以下、図面を参照しながら発明を実施するための形態について詳細に説明する。
【0012】
まず、本実施形態における通信装置のハードウェア構成の一例を、図1を用いて説明する。尚、本実施形態では、通信装置として、他の装置(要求元)からの、サービス要求(処理要求)に応じて、サービス(処理)を実行し、実行結果(応答)を他の装置へ返送するサービス装置を例に説明する。
【0013】
図1において、他の装置101は、ネットワーク113を介してサービス装置(通信装置)102とメッセージを授受する、サービスを利用する側の装置(コンピュータ)である。サービス装置102は、CPU(プロセッサ)103、メモリ104、HD(ハードディスク)装置105、表示ボード106、周辺コントローラ107、ネットワークI/F108を備える。CPU103は、プログラム(手順)に従ってサービス装置102の各処理部の処理を実行する。プログラムはHD装置105に、あるいはメモリ104内のROMに格納されており、CPU103がプログラムを実行時にメモリ104内のRAMに読み込まれる。メモリ104はプログラムや制御データを格納するROMとCPU103の作業領域としてのRAMを含み、更にXMLの要素やオブジェクトも格納される。また、プログラムはコンピュータを通信装置として機能させるためのものである。
【0014】
HD装置105はハードディスクへのアクセスを制御するインタフェースを含み、各種データを記憶する。表示ボード106はディスプレイ装置109を接続するためのインタフェースを含み、サービス装置102の状態や処理結果をディスプレイ装置109に表示させる。周辺コントローラ107はマウス110やキーボード111を接続するためのインタフェースを含み、サービス装置102への指示や各種入力を制御する。ネットワークI/F108はネットワーク113との間で通信するためのインタフェースを含み、他の装置101との通信を制御する。
【0015】
システムバス112は上述の各部を接続する。ネットワーク113は他の装置101とサービス装置102がメッセージを通信できればどのような形態でもよく、例えばインターネット、WAN、LANなどである。また、通信プロトコルも特定のプロトコルに限るものではない。
【0016】
次に、サービス装置102のソフトウェア構成の一例を、図2を用いて説明する。他の装置101からサービスの実行を要求するメッセージとしてリクエストメッセージ201が送信されると、メッセージ受信部202がそのリクエストメッセージ201を受信する。ここで、他の装置101とサービス装置102とのコネクションが切断されていないか否かはコネクション切断検知部203が検知する。メッセージ受信部202は、図1のネットワークI/F108を介してリクエストメッセージ201を受信する。
【0017】
コネクションが切断されていなければ、メッセージ解析部204がそのリクエストメッセージ201を解析し、何のサービスの呼び出しかを判断する。また、メッセージ解析部204はリクエストメッセージ201に、メッセージを識別するための情報として識別子(ID)が含まれているか否かも判断する。
【0018】
次に、メッセージ解析部204で呼び出すサービスが特定されると、サービスロジック制御部205がサービスロジック206の呼び出しを行う。また、コネクション切断検知部203が切断を検知した場合は、リクエストメッセージ201に識別子が付与されていない場合、サービスロジック206の処理を中断させる。サービスロジック206は、サービスロジック制御部205によってサービスの実行及び実行の中断が行われる。
【0019】
サービスロジック制御部205によるサービスの実行が終了すると、メッセージ作成部207がサービスロジック206の実行結果に基づいて他の装置101に返信するレスポンスメッセージ209を作成する。そして、メッセージ送信部208が他の装置101にサービスの実行結果を表すメッセージとして、レスポンスメッセージ209を送信する。また、レスポンスメッセージ209は、サービスの実行に失敗した場合、失敗した情報を表すメッセージとなる。メッセージ送信部208は、図1のネットワークI/F108を介してレスポンスメッセージ209を送信する。
【0020】
他の装置101とのコネクションの切断により、メッセージを送信できなかった場合、未送信メッセージ管理部210がデータベース211に未送信のレスポンスメッセージを保持する。これは、他の装置101からのリクエストメッセージ201に識別子が付与されていた場合に行われ、識別子とレスポンスメッセージ209を紐付けて保持する。また、未送信メッセージ管理部210は再び、同じ識別子を持つリクエストメッセージ201が他の装置101から送信された場合、既に紐付けされたレスポンスメッセージをメッセージ送信部208に渡す。データベース211は、未送信メッセージ管理部210が情報を格納する格納先であり、HD装置105に含まれる。
【0021】
次に、本実施形態におけるサービス装置の特徴的な処理を、図3乃至図8を用いて説明する。まず、識別子が付与されていないリクエストメッセージをやり取りする具体例を図3に示す。リクエストメッセージ301は、他の装置101がgetDataオペレーションを呼び出す際に送信される具体例である。リクエストメッセージ301には、識別子が付与されていない。サービス装置102では、このリクエストメッセージ301を受信し、具体的なサービスロジック302を実行する。そのサービスロジック302を実行した結果として、具体的なレスポンスメッセージ303が作成される。しかし、このサービスロジック302の処理を実行中にコネクションが切断された場合、リクエストメッセージ301に識別子が付与されていないため、サービスロジック302の実行を中断する。従って、この場合、レスポンスメッセージ303は作成されない。
【0022】
次に、識別子(ID)が付与されたリクエストメッセージをやり取りする具体例を図4に示す。リクエストメッセージ401は、他の装置101がgetDataオペレーションを呼び出す際に送信される具体例である。リクエストメッセージ401には、識別子「100020」が付与されている。この識別子は初めてのアクセスであるため、データベース211には、紐付けされたレスポンスメッセージ303は存在しない。そのため、サービス装置102は、サービスロジック302の実行を行い、レスポンスメッセージ303の作成を行う。このサービスロジック302の実行結果として、具体的なレスポンスメッセージ303が作成される。ここで、サービスロジック302の処理を実行中にコネクションが切断された場合、このリクエストメッセージ401には識別子が付与されているため、サービスロジック302の実行を最後まで行う。そして、レスポンスメッセージ303を作成し、識別子「100020」と紐付けしてデータベース211に保持しておく。
【0023】
なお、図5に示すように、再度、リクエストメッセージ401が他の装置101から送信されると、識別子「100020」に紐付けされたレスポンスメッセージ303がデータベース211に存在するため、サービスロジック302を実行せずに、そのメッセージを送信する。そして、識別子「100020」と紐付けされたレスポンスメッセージ303の情報をデータベース211から削除する。
【0024】
また、サービスロジック302の処理を実行中にコネクションが切断されなかった場合は、サービスロジック302を実行して作成したレスポンスメッセージ303を他の装置101にそのまま送信する。
【0025】
ここで、他の装置101から識別子のみが送信された場合に、装置間で送受信されるメッセージを図5に示す。識別子の情報だけをもつリクエストメッセージ501が送信される。サービス装置102では、送信された識別子「100020」に紐付けされたレスポンスメッセージがデータベース211に格納されているか否かを判断する。判断した結果、紐付けされたレスポンスメッセージ303が存在すれば、図4で説明したようにそのメッセージを送信し、格納されているメッセージの情報をデータベース211から削除する。しかし、紐付けされたレスポンスメッセージ303が存在しなかった場合、識別子のみで実行するサービスが不明なため、フォルトのメッセージを具体的なレスポンスメッセージ502として作成する。このサービス実行に失敗したことを表すレスポンスメッセージ502が他の装置101に送信される。
【0026】
上述したサービス装置102におけるデータベース211が保持する情報の一例を図6に示す。図4に示すリクエストメッセージ401のサービスを実行処理中にコネクションが切断された場合、識別子「100020」がレスポンスメッセージと共に格納される(601)。この例では、識別子「100120」もレスポンスメッセージと共に格納されている(602)。また、この例では、他に、保存期間が記述してある。601では残り60分となっており、602では残り120分となっている。これは、サービス装置102のデータベース211において、データを保存しておく期間を設けた例である。
【0027】
他の装置101がサービスの実行要求を行った場合に、コネクションが切断される可能性は、二つある。一つは、ネットワーク障害やタイムアウトなどによる、他の装置101が意図していない切断である。この場合、他の装置101がリトライを行う可能性が高い。しかし、他の装置101が何らかの理由により、意図的に切断を行う場合もある。この場合、後で実行する可能性もあるが、実行を行わない場合もある。そのため、二度とリトライが発生しないようなメッセージが存在してしまう。二度とアクセスされないメッセージをいつまでもデータベースに保管しておくのは、よくないので、ある一定の保存期間を設けるのが望ましい。
【0028】
この保存期間は、本実施形態では、サービス装置102の作成者が自由に設定する。また、他の実施形態では、この保存時間は、他の装置101からのリクエストメッセージに情報として付与する。この保存期間を過ぎた(所定時間後の)データは削除するが、削除された後にその識別子でリクエストメッセージを送信してきた場合、図4に示すように、サービスのメッセージを含んでいれば、サービスロジックの実行が行われるので問題ない。但し、図5に示すように、識別子のみのリクエストメッセージの場合は、フォルトレスポンスメッセージが返る。
【0029】
次に、本実施形態におけるサービス装置102の処理を、図7に示すフローチャートを用いて説明する。図7のフローチャートは、CPU103がプログラムを実行することにより実現される。このプログラムはHD装置105に、あるいはメモリ104内のROMに格納されており、CPU103がプログラムを実行時にメモリ104内のRAMに読み込まれる。
【0030】
メッセージ受信部202が他の装置101から送られてきたリクエストメッセージ201を受信する(S701)。このリクエストメッセージ201は、サービス装置102と他の装置101の間に形成されたコネクションを介して受信される。次に、コネクション切断検知部203が、コネクションが切断されていないかを常に監視する(S702)。切断を検知した場合には、すぐにメッセージ受信部202に知らせる。通知された情報は、その他の全ての処理部に伝えられる。
【0031】
次に、メッセージ解析部204がリクエストメッセージ201に識別子が付与されているか否かを判定する(S703)。判定した結果、リクエストメッセージ201に識別子が付与されていなければ(S703でNO)、呼び出すサービスを特定し(S704)、処理がサービスロジック制御部205へ移る。サービスロジック制御部205では、メッセージ解析部204が特定したサービスに基づいてサービスロジック206を実行する(S705)。リクエストメッセージ201が上述したgetDataオペレーションを呼び出すリクエストメッセージ301の場合は、図3のサービスロジック302が実行される。
【0032】
ここで、サービスロジック206の実行中に、コネクション切断検知部203がコネクションの切断を検知しなければ(S706でNO)、メッセージ作成部207がサービスロジックの結果を含むレスポンスメッセージ209を作成する(S707)。次に、メッセージ送信部208が、作成されたレスポンスメッセージ209を他の装置101に送信し(S708)、この処理を終了する。
【0033】
一方、コネクション切断検知部203がコネクションの切断を検知すると(S706でYES)、サービスロジック制御部205はサービスロジック206の実行を中断し(S709)、この処理を終了する。このサービスロジックの中断方法については、いくつか方法が考えられる。例えば、スレッドを別にしてサービスロジックの実行を行っておき、中断を検知すると、スレッドを止める。或いは、サービスロジックにキャンセルメソッドを用意しておき、そのメソッドを呼び出すなどである。尚、中断方法は、どのように実装されていても構わない。なお、S707のレスポンスメッセージ209の作成中、又は、S708のレスポンスメッセージ209の送信中に、コネクションが切断された場合も、処理を中断して、終了する。
【0034】
また、メッセージ解析部204が、上述のリクエストメッセージ401のように、識別子が付与されているリクエストメッセージであると判定すると(S703でYES)、処理が未送信メッセージ管理部210へ移る。未送信メッセージ管理部210では、識別子「100020」に対応するレスポンスメッセージがデータベース211に存在するか否かを判定する(S710)。判定した結果、識別子「100020」が付与されたリクエストメッセージを初めて受信したのであれば、データベース211には存在しない(S710でNO)。そこで、メッセージ解析部204がそのメッセージを解析し、何のサービスの呼び出しかを特定する(S711)。尚、リクエストメッセージ401の場合、サービス呼び出しの情報が含まれているので、何の呼び出しかを特定することが可能である(S711でYES)。リクエストメッセージ401は、getDataオペレーションを呼び出すリクエストメッセージである。
【0035】
次に、サービスロジック制御部205が、メッセージ解析部204が特定したサービスに基づいてサービスロジック206を実行する(S712)。この場合、上述したサービスロジック302が実行される。次に、メッセージ作成部207がサービスロジック206の結果を含むレスポンスメッセージ209を作成する(S713)。次に、コネクション切断検知部203がコネクションの切断を検知していなければ(S714でNO)、メッセージ送信部208は、作成されたレスポンスメッセージ209を他の装置101に送信し(S715)、この処理を終了する。
【0036】
一方、コネクション切断検知部203が、サービスロジックの実行中にコネクションの切断を検知していた場合(S714でYES)、未送信メッセージ管理部210に処理が移る。未送信メッセージ管理部210がデータベース211に識別子「100020」と作成したレスポンスメッセージ303を紐付けて601のように保存し(S716)、この処理を終了する。なお、S715のレスポンスメッセージ209の送信中にコネクションが切断された場合も、S716に移る。
【0037】
また、上述したS710で、未送信メッセージ管理部210が、データベース211に識別子「100020」に対応するレスポンスメッセージが存在すると判定した場合(S710でYES)、コネクション切断検知部203がコネクションの切断を検知していれば(S717でYES)、この処理を終了する。コネクション切断検知部203がコネクションの切断を検知していなければ(S717でNO)、処理がメッセージ送信部208へ移る。ここで、メッセージ送信部208は、その対応するレスポンスメッセージを他の装置101に送信する(S718)。そして、データベース211から送信が終了したレスポンスメッセージに対応する情報(601)を削除し(S719)、この処理を終了する。なお、S718でのレスポンスメッセージの送信中にコネクションが切断された場合、処理を終了する。レスポンスメッセージの送信が完了しない場合、情報(601)は削除しない。
【0038】
また、上述したS711で、メッセージ解析部204がリクエストメッセージ201を解析し、何の呼び出しかを特定できない場合(S711でNO)は、処理がメッセージ作成部207へ移る。具体的には、データベース211の保存期間が切れてデータが削除されていた場合、そもそも識別子がでたらめだった場合、識別子に対応するレスポンスメッセージが存在しない場合、リクエストメッセージ401に含まれるサービス呼び出しの情報が誤っている場合などが特定できない場合である。これらの場合、メッセージ作成部207では、フォルト情報を含むレスポンスメッセージを作成する(S720)。具体的には、図5に示すレスポンスメッセージ502が作成される。
【0039】
次に、コネクション切断検知部203がコネクションの切断を検知していなければ(S721でNO)、メッセージ送信部208が、作成されたレスポンスメッセージ502を他の装置101に送信し(S715)、この処理を終了する。しかし、コネクション切断検知部203がコネクションの切断を検知していれば(S721でYES)、そのまま、この処理を終了する。また、作成したフォルトのメッセージはデータベース211に保存しない。S715のレスポンスメッセージの送信中にコネクションが切断された場合も、レスポンスメッセージを保存せずに、処理を終了する。
【0040】
ここで、サービス装置102の未送信メッセージ管理部210がデータベース211の保存期間を過ぎたデータを削除する処理を、図8に示すフローチャートを用いて説明する。例えば、データベース211の保存期間が残り0分になっていた場合、そのデータは、データベース211から削除される。削除するタイミングとして、この例では、他の装置101からリクエストメッセージ201を受信した場合とする。また、この処理は、他の装置101からリクエストメッセージ201を受信した場合に、削除するデータがあるか否かを確認するので、S701とS702の処理の間で行われる。
【0041】
まず、メッセージ受信部202がリクエストメッセージ201を受信し(S701)、未送信メッセージ管理部210がデータベース211に保存期間が過ぎたデータが存在するか否かを調べる(S801)。ここで、保存期間を過ぎたデータが存在しない場合(S801でNO)は、そのまま、処理がコネクション切断検知部203へ移る。一方、保存期間が残り0分になっていた場合など、保存期間を過ぎたデータが存在すれば(S801でYES)、そのデータを削除する(S802)。そして、処理がコネクション切断検知部203へ移る。
【0042】
尚、データを削除するタイミングは、これだけに限らず、他の場合でも良い。例えば、メッセージ送信部208がレスポンスメッセージ209を送信(S708、S715、S718)した後、削除しても良い。また、受信又は送信などの処理のタイミングではなく、データベース211を常に監視し、保存期間が過ぎたデータを即座に検知して削除するようにしても良い。
【0043】
以上のように、サービス装置102におけるこの処理を利用して、サービスを利用する他の装置101が効率的にデータを取得することも可能となる。例えば、他の装置101は識別子を付与したリクエストメッセージ401をサービス装置102に送信する。サービス装置102で実行されるサービスロジック302が、非常に重い処理であることがわかっていれば、他の装置101は意図的にコネクションを切断する。そして、しばらく経ってから、再び、リクエストメッセージ401をサービス装置102に送信する。これにより、サービス装置102では、既にサービスロジック302の実行が終了しており、レスポンスメッセージ303がデータベース211に保存されている。従って、他の装置101に対して、すぐにレスポンスメッセージが送信される。
【0044】
このようにする処理ことにより、他の装置101は、サービス装置102からのレスポンスメッセージを取得するために、ずっとコネクションを維持しておく必要がない。サービス装置102が処理を行っている間に、他の処理をすることも可能である。また、コネクションを長くキープしてタイムアウトが発生しても、それまでに実行した処理が無駄になってしまうという問題も解消される。
【0045】
本実施形態によれば、サービスにおいて、サービスロジックの実行を必要最低限に抑えることができ、メモリが少ない組込み機器での負荷を軽減することが可能となる。
【0046】
<実施形態2>
次に、本発明の第2の実施形態について説明する。第1の実施形態においては、コネクションの切断を検知した場合、リクエストメッセージに識別子が付与されていなければ、サービスロジックの処理を中断させ、識別子が付与されていればそのまま処理を続行させる方法を説明した。本実施形態においては、第1の実施形態において、リクエストメッセージに識別子が付与されている場合にも、データベースの状態に応じて、サービスロジックの処理を中断する方法を説明する。図9及び図10を参照して、処理の概要を説明する。尚、図9は、図2で示した図を一部変更したものであり、図2と同一の符号を一部用いている。図2で示した処理と同一の部分は、本実施形態では説明を省略する。
【0047】
図9は、サービス装置102のソフトウェア構成の一例を示している。DB状態確認部901は、データベース211の保存領域の使用状況を確認することができる。具体的には、事前にデータベース211の保存領域を使用できるサイズの上限値を設定しておき、使用しているサイズが、設定されている上限値を超えていないかどうかを確認する。未送信メッセージ管理部210は、リクエストメッセージ201に識別子が付与されていて、且つ、コネクション切断検知部203で切断を感知した場合、DB状態確認部901に、データベース211の使用状況の確認指示を出す。既に、使用状況が、設定されている上限値を超えている場合は、未送信メッセージ管理部210は、サービスロジック制御部205に対して中断指示を出す。サービスロジック制御部205は、サービスロジック206の処理を中断させる。
【0048】
以上の処理を行うことで、リクエストメッセージ201に識別子が付与されている場合にも、データベース211の状態に応じて、サービスロジックの処理を中断させることができる。
【0049】
次に、第1の実施形態と同様に、図10に示すフローチャートを用いて、サービス装置102の処理について説明する。図10において、図7と共通の処理には、共通の番号を付し、説明は省略する。
【0050】
S703で判定した結果がYESだった場合から説明する。未送信メッセージ管理部210では、識別子に対応するレスポンスメッセージがデータベース211に存在するか否かを判定する(S710)。判定した結果、付与されている識別子に対応するレスポンスメッセージが存在しなければ(S710でNO)、メッセージ解析部204が、そのメッセージを解析し、何のサービスの呼び出しかを特定する(S711)。特定できた場合(S711でYES)は、サービスロジック制御部205が、メッセージ解析部204が特定したサービスに基づいてサービスロジック206を実行する(S712)。
【0051】
サービスロジック206を実行中に、未送信メッセージ管理部210は、コネクションの切断通知を受け取ると(S1007でYES)、DB状態確認部901にデータベース211の使用状況の確認指示を出す。DB状態確認部901は、データベース211の使用領域が、既に事前に設定されている上限値を超えているか否かを判定する(S1008)。上限値を既に超えていると判定すると(S1008でYES)、未送信メッセージ管理部210は、サービスロジック制御部205に対して、サービスロジックを中断するように要求する。サービスロジック制御部205は、実行中のサービスロジック206を中断し(S1009)、処理を終了する。
【0052】
DB状態確認部901で、上限値を超えていないと判定すると(S1008でNO)、メッセージ作成部207で、サービスロジックの結果を含むレスポンスメッセージ209を作成する(S1010)。そして、未送信メッセージ管理部210は、データベース211にリクエストメッセージ201に付与された識別子と作成したレスポンスメッセージを紐付けて保存し(S1011)、処理を終了する。
【0053】
一方、サービスロジック206が実行中に、コネクションの切断が発生しなければ(S1007でNO)、メッセージ作成部207で、サービスロジックの結果を含むレスポンスメッセージ209を作成する(S1012)。次に、メッセージ送信部208が、作成されたレスポンスメッセージ209を他の装置101に送信し(S1013)、処理を終了する。なお、S1012のレスポンスメッセージ209の作成中、又は、S1013のレスポンスメッセージ209の送信中にコネクションが切断された場合は、S1008に進む。
【0054】
一方、メッセージ解析部204で、リクエストメッセージに識別子が付与されていないと判定すると(S703でNO)、図7のS704へ進む。以降の処理は、図7のS704以降の処理(S708又はS709まで)と共通であるので、説明を省略する。
【0055】
一方、未送信メッセージ管理部210で、付与されている識別子に対応するレスポンスメッセージが存在していると判定すると(S710でYES)、図7のS717へ進む。以降の処理は、図7のS717以降の処理(S719まで)と共通であるので、説明を省略する。
【0056】
一方、メッセージ解析部204で、何のサービスの呼び出しかを特定できなければ(S711でNO)、図7のS720に進む。以降の処理は、図7のS720以降の処理(S715まで)と共通であるので、説明を省略する。
【0057】
以上の方法で、リクエストメッセージに識別子が付与されている場合にも、データベースの状態に応じて、サービスロジックの中断を制御することが可能となる。その為、サービス装置に対して、次々に識別子が付与されたリクエストメッセージが大量に送られても、データベースの状態に応じてサービスロジックを正常に中断させられるので、サービス装置側の負荷を軽減することが可能となる。また、データベースに大量のレスポンスサービスや、サイズの大きいレスポンスサービスが格納され、データベースの領域を使い切る前に、サービスロジックの処理を中断できるので、サービス装置で処理が不正に停止することを防ぐことも可能となる。
【0058】
次に、第1及び第2の実施形態で説明した識別子の形式について図11を用いて説明する。図11(A)において、サービス装置1101は、他の装置A1102だけでなく、他の装置B1103からもリクエストメッセージが送信されてくる。すなわち、複数の他の装置からリクエストメッセージが送信されてくる可能性がある。識別子は、他の装置がそれぞれ個々に生成し、リクエストメッセージに付与するものであり、単純な数値の羅列などでは、サービス装置側で識別子が重複する可能性がある。重複した場合は、サービス装置側で、識別子と紐付けて管理するレスポンスメッセージを正常にデータベースに保存できない。その為、本実施形態においては、識別子の重複の可能性を低減させる例について説明する。
【0059】
図11(A)では、リクエストメッセージの送信側となる他の装置のIPアドレスと、送信時の日付及び時間(時間情報)の組み合わせで識別子を付与する例を記載している。他の装置A1102のIPアドレスは、123.123.123.1であり、リクエストメッセージの送信時刻が2010年01月01日23時59分01秒だった場合、リクエストメッセージ1104に示すように、識別子は「1231231231-20100101-235901」となる。同様に他の装置B1103のIPアドレスは、123.123.123.2であり、リクエストメッセージの送信時刻が、2010年01月02日23時59分02秒だった場合、リクエストメッセージ1105に示すように、識別子は「1231231232-20100102-235902」となる。
【0060】
また、他の識別子の形式について、図11(B)を用いて説明する。図11(B)は、図11(A)と同様の構成であり、サービス装置1201に対して、他の装置A1202と、他の装置B1203からリクエストメッセージが送信される場合を示しており、識別子はUUID(Universally Unique Identifier)の形式で付与する例を記載している。他の装置A1202は、UUID形式の識別子を生成し、リクエストメッセージ1204に示すように、「12345678-9abc-def0-1234-56789abcd012」を付与する。同様に他の装置B1203は、UUID形式の識別子を生成し、リクエストメッセージ1205に示すように、「12345678-9abc-def0-1234-56789abcd123」を付与する。UUIDは、一意に特定可能な識別子を作成するための仕様であり、ネットワークシステムの環境において統制を取らなくても、重複や偶然の一致がほぼ起こりえないと言われている。その為、識別子として用いることで、サービス装置1201側で、識別子と紐付けて、レスポンスメッセージをデータベースに保存する処理の最中に、重複が起きる可能性を低減することが可能となる。
【0061】
以上のような形式の識別子を用いることで、複数の他の装置からアクセスがあっても処理可能となる。
【0062】
[他の実施形態]
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。
【技術分野】
【0001】
本発明は、要求された処理を実行する処理方法及び装置に関する。
【背景技術】
【0002】
近年、ネットワークを介して複数の装置同士がデータのやり取りを行うWebサービス技術を用いたPCや機器の連携が一般的に行われている。サービスは、クライアントからのサービスの実行を要求するリクエストメッセージを受信し、サービスロジックを実行して、実行結果を含んだレスポンスメッセージをクライアントに送信する。
【0003】
サービスがリクエストメッセージを受信した後に、ネットワーク障害やタイムアウト、及び、クライアントからのキャンセルにより、コネクションが切断された場合、サービス側では、サービスロジックの実行処理を途中で止められない。通常、サービスロジックの実行が終了し、レスポンスメッセージを書き出そうとして、コネクションの切断に気づき、処理を終了する。そのため、せっかく作成したレスポンスメッセージが無駄になってしまう。
【0004】
そこで、ウェブサービス要求を受信したことに応答して、ウェブサービスコントローラが制御し、サービスロジックを実行せずにキャッシュしたものを使用できるようにした先行技術がある(例えば、特許文献1参照)。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2007−200311号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
この先行技術の場合、どのような場合でもキャッシュを使用するが、全ての情報をキャッシュするには、そのために十分なメモリを確保する必要がある。
【0007】
本発明は、要求された処理を実行した結果を効率よく利用する処理方法及び装置を提供することを目的とする。
【課題を解決するための手段】
【0008】
本発明は、プロセッサを有する処理装置により実行される処理方法において、
他の装置からの処理要求を受信し、
要求された処理を前記プロセッサが実行し、
要求された処理の実行まで処理の要求元との接続が維持されている場合、処理を実行した結果を処理の要求元に送信し、
要求された処理の実行中に処理の要求元との接続が切断された場合、処理の実行を中断するか否かを判定し、
処理を中断しないと判定した場合、処理を実行した結果をメモリに格納し、
処理要求が受信されたときに要求された処理を実行した結果が前記メモリに格納されている場合、前記メモリに格納されていた処理結果を、処理の要求元に送信することを特徴とする。
【発明の効果】
【0009】
本発明によれば、要求された処理を実行した結果を効率よく利用する処理方法及び装置を提供することができる。
【図面の簡単な説明】
【0010】
【図1】本実施形態における通信装置のハードウェア構成の一例を示す図。
【図2】本実施形態における通信装置のソフトウェア構成の一例を示す図。
【図3】識別子が付与されていないリクエストメッセージの場合の処理を示す図。
【図4】識別子が付与されたリクエストメッセージの場合の処理を示す図。
【図5】識別子のみのリクエストメッセージの場合の処理を示す図。
【図6】データベースに保持される情報の一例を示す図。
【図7】本実施形態における通信装置の処理を示すフローチャート。
【図8】保存期間を過ぎたデータを削除する処理を示すフローチャート。
【図9】本実施形態における通信装置のソフトウェア構成の一例を示す図。
【図10】本実施形態における通信装置の処理を示すフローチャート。
【図11】識別子の例を示す図。
【発明を実施するための形態】
【0011】
以下、図面を参照しながら発明を実施するための形態について詳細に説明する。
【0012】
まず、本実施形態における通信装置のハードウェア構成の一例を、図1を用いて説明する。尚、本実施形態では、通信装置として、他の装置(要求元)からの、サービス要求(処理要求)に応じて、サービス(処理)を実行し、実行結果(応答)を他の装置へ返送するサービス装置を例に説明する。
【0013】
図1において、他の装置101は、ネットワーク113を介してサービス装置(通信装置)102とメッセージを授受する、サービスを利用する側の装置(コンピュータ)である。サービス装置102は、CPU(プロセッサ)103、メモリ104、HD(ハードディスク)装置105、表示ボード106、周辺コントローラ107、ネットワークI/F108を備える。CPU103は、プログラム(手順)に従ってサービス装置102の各処理部の処理を実行する。プログラムはHD装置105に、あるいはメモリ104内のROMに格納されており、CPU103がプログラムを実行時にメモリ104内のRAMに読み込まれる。メモリ104はプログラムや制御データを格納するROMとCPU103の作業領域としてのRAMを含み、更にXMLの要素やオブジェクトも格納される。また、プログラムはコンピュータを通信装置として機能させるためのものである。
【0014】
HD装置105はハードディスクへのアクセスを制御するインタフェースを含み、各種データを記憶する。表示ボード106はディスプレイ装置109を接続するためのインタフェースを含み、サービス装置102の状態や処理結果をディスプレイ装置109に表示させる。周辺コントローラ107はマウス110やキーボード111を接続するためのインタフェースを含み、サービス装置102への指示や各種入力を制御する。ネットワークI/F108はネットワーク113との間で通信するためのインタフェースを含み、他の装置101との通信を制御する。
【0015】
システムバス112は上述の各部を接続する。ネットワーク113は他の装置101とサービス装置102がメッセージを通信できればどのような形態でもよく、例えばインターネット、WAN、LANなどである。また、通信プロトコルも特定のプロトコルに限るものではない。
【0016】
次に、サービス装置102のソフトウェア構成の一例を、図2を用いて説明する。他の装置101からサービスの実行を要求するメッセージとしてリクエストメッセージ201が送信されると、メッセージ受信部202がそのリクエストメッセージ201を受信する。ここで、他の装置101とサービス装置102とのコネクションが切断されていないか否かはコネクション切断検知部203が検知する。メッセージ受信部202は、図1のネットワークI/F108を介してリクエストメッセージ201を受信する。
【0017】
コネクションが切断されていなければ、メッセージ解析部204がそのリクエストメッセージ201を解析し、何のサービスの呼び出しかを判断する。また、メッセージ解析部204はリクエストメッセージ201に、メッセージを識別するための情報として識別子(ID)が含まれているか否かも判断する。
【0018】
次に、メッセージ解析部204で呼び出すサービスが特定されると、サービスロジック制御部205がサービスロジック206の呼び出しを行う。また、コネクション切断検知部203が切断を検知した場合は、リクエストメッセージ201に識別子が付与されていない場合、サービスロジック206の処理を中断させる。サービスロジック206は、サービスロジック制御部205によってサービスの実行及び実行の中断が行われる。
【0019】
サービスロジック制御部205によるサービスの実行が終了すると、メッセージ作成部207がサービスロジック206の実行結果に基づいて他の装置101に返信するレスポンスメッセージ209を作成する。そして、メッセージ送信部208が他の装置101にサービスの実行結果を表すメッセージとして、レスポンスメッセージ209を送信する。また、レスポンスメッセージ209は、サービスの実行に失敗した場合、失敗した情報を表すメッセージとなる。メッセージ送信部208は、図1のネットワークI/F108を介してレスポンスメッセージ209を送信する。
【0020】
他の装置101とのコネクションの切断により、メッセージを送信できなかった場合、未送信メッセージ管理部210がデータベース211に未送信のレスポンスメッセージを保持する。これは、他の装置101からのリクエストメッセージ201に識別子が付与されていた場合に行われ、識別子とレスポンスメッセージ209を紐付けて保持する。また、未送信メッセージ管理部210は再び、同じ識別子を持つリクエストメッセージ201が他の装置101から送信された場合、既に紐付けされたレスポンスメッセージをメッセージ送信部208に渡す。データベース211は、未送信メッセージ管理部210が情報を格納する格納先であり、HD装置105に含まれる。
【0021】
次に、本実施形態におけるサービス装置の特徴的な処理を、図3乃至図8を用いて説明する。まず、識別子が付与されていないリクエストメッセージをやり取りする具体例を図3に示す。リクエストメッセージ301は、他の装置101がgetDataオペレーションを呼び出す際に送信される具体例である。リクエストメッセージ301には、識別子が付与されていない。サービス装置102では、このリクエストメッセージ301を受信し、具体的なサービスロジック302を実行する。そのサービスロジック302を実行した結果として、具体的なレスポンスメッセージ303が作成される。しかし、このサービスロジック302の処理を実行中にコネクションが切断された場合、リクエストメッセージ301に識別子が付与されていないため、サービスロジック302の実行を中断する。従って、この場合、レスポンスメッセージ303は作成されない。
【0022】
次に、識別子(ID)が付与されたリクエストメッセージをやり取りする具体例を図4に示す。リクエストメッセージ401は、他の装置101がgetDataオペレーションを呼び出す際に送信される具体例である。リクエストメッセージ401には、識別子「100020」が付与されている。この識別子は初めてのアクセスであるため、データベース211には、紐付けされたレスポンスメッセージ303は存在しない。そのため、サービス装置102は、サービスロジック302の実行を行い、レスポンスメッセージ303の作成を行う。このサービスロジック302の実行結果として、具体的なレスポンスメッセージ303が作成される。ここで、サービスロジック302の処理を実行中にコネクションが切断された場合、このリクエストメッセージ401には識別子が付与されているため、サービスロジック302の実行を最後まで行う。そして、レスポンスメッセージ303を作成し、識別子「100020」と紐付けしてデータベース211に保持しておく。
【0023】
なお、図5に示すように、再度、リクエストメッセージ401が他の装置101から送信されると、識別子「100020」に紐付けされたレスポンスメッセージ303がデータベース211に存在するため、サービスロジック302を実行せずに、そのメッセージを送信する。そして、識別子「100020」と紐付けされたレスポンスメッセージ303の情報をデータベース211から削除する。
【0024】
また、サービスロジック302の処理を実行中にコネクションが切断されなかった場合は、サービスロジック302を実行して作成したレスポンスメッセージ303を他の装置101にそのまま送信する。
【0025】
ここで、他の装置101から識別子のみが送信された場合に、装置間で送受信されるメッセージを図5に示す。識別子の情報だけをもつリクエストメッセージ501が送信される。サービス装置102では、送信された識別子「100020」に紐付けされたレスポンスメッセージがデータベース211に格納されているか否かを判断する。判断した結果、紐付けされたレスポンスメッセージ303が存在すれば、図4で説明したようにそのメッセージを送信し、格納されているメッセージの情報をデータベース211から削除する。しかし、紐付けされたレスポンスメッセージ303が存在しなかった場合、識別子のみで実行するサービスが不明なため、フォルトのメッセージを具体的なレスポンスメッセージ502として作成する。このサービス実行に失敗したことを表すレスポンスメッセージ502が他の装置101に送信される。
【0026】
上述したサービス装置102におけるデータベース211が保持する情報の一例を図6に示す。図4に示すリクエストメッセージ401のサービスを実行処理中にコネクションが切断された場合、識別子「100020」がレスポンスメッセージと共に格納される(601)。この例では、識別子「100120」もレスポンスメッセージと共に格納されている(602)。また、この例では、他に、保存期間が記述してある。601では残り60分となっており、602では残り120分となっている。これは、サービス装置102のデータベース211において、データを保存しておく期間を設けた例である。
【0027】
他の装置101がサービスの実行要求を行った場合に、コネクションが切断される可能性は、二つある。一つは、ネットワーク障害やタイムアウトなどによる、他の装置101が意図していない切断である。この場合、他の装置101がリトライを行う可能性が高い。しかし、他の装置101が何らかの理由により、意図的に切断を行う場合もある。この場合、後で実行する可能性もあるが、実行を行わない場合もある。そのため、二度とリトライが発生しないようなメッセージが存在してしまう。二度とアクセスされないメッセージをいつまでもデータベースに保管しておくのは、よくないので、ある一定の保存期間を設けるのが望ましい。
【0028】
この保存期間は、本実施形態では、サービス装置102の作成者が自由に設定する。また、他の実施形態では、この保存時間は、他の装置101からのリクエストメッセージに情報として付与する。この保存期間を過ぎた(所定時間後の)データは削除するが、削除された後にその識別子でリクエストメッセージを送信してきた場合、図4に示すように、サービスのメッセージを含んでいれば、サービスロジックの実行が行われるので問題ない。但し、図5に示すように、識別子のみのリクエストメッセージの場合は、フォルトレスポンスメッセージが返る。
【0029】
次に、本実施形態におけるサービス装置102の処理を、図7に示すフローチャートを用いて説明する。図7のフローチャートは、CPU103がプログラムを実行することにより実現される。このプログラムはHD装置105に、あるいはメモリ104内のROMに格納されており、CPU103がプログラムを実行時にメモリ104内のRAMに読み込まれる。
【0030】
メッセージ受信部202が他の装置101から送られてきたリクエストメッセージ201を受信する(S701)。このリクエストメッセージ201は、サービス装置102と他の装置101の間に形成されたコネクションを介して受信される。次に、コネクション切断検知部203が、コネクションが切断されていないかを常に監視する(S702)。切断を検知した場合には、すぐにメッセージ受信部202に知らせる。通知された情報は、その他の全ての処理部に伝えられる。
【0031】
次に、メッセージ解析部204がリクエストメッセージ201に識別子が付与されているか否かを判定する(S703)。判定した結果、リクエストメッセージ201に識別子が付与されていなければ(S703でNO)、呼び出すサービスを特定し(S704)、処理がサービスロジック制御部205へ移る。サービスロジック制御部205では、メッセージ解析部204が特定したサービスに基づいてサービスロジック206を実行する(S705)。リクエストメッセージ201が上述したgetDataオペレーションを呼び出すリクエストメッセージ301の場合は、図3のサービスロジック302が実行される。
【0032】
ここで、サービスロジック206の実行中に、コネクション切断検知部203がコネクションの切断を検知しなければ(S706でNO)、メッセージ作成部207がサービスロジックの結果を含むレスポンスメッセージ209を作成する(S707)。次に、メッセージ送信部208が、作成されたレスポンスメッセージ209を他の装置101に送信し(S708)、この処理を終了する。
【0033】
一方、コネクション切断検知部203がコネクションの切断を検知すると(S706でYES)、サービスロジック制御部205はサービスロジック206の実行を中断し(S709)、この処理を終了する。このサービスロジックの中断方法については、いくつか方法が考えられる。例えば、スレッドを別にしてサービスロジックの実行を行っておき、中断を検知すると、スレッドを止める。或いは、サービスロジックにキャンセルメソッドを用意しておき、そのメソッドを呼び出すなどである。尚、中断方法は、どのように実装されていても構わない。なお、S707のレスポンスメッセージ209の作成中、又は、S708のレスポンスメッセージ209の送信中に、コネクションが切断された場合も、処理を中断して、終了する。
【0034】
また、メッセージ解析部204が、上述のリクエストメッセージ401のように、識別子が付与されているリクエストメッセージであると判定すると(S703でYES)、処理が未送信メッセージ管理部210へ移る。未送信メッセージ管理部210では、識別子「100020」に対応するレスポンスメッセージがデータベース211に存在するか否かを判定する(S710)。判定した結果、識別子「100020」が付与されたリクエストメッセージを初めて受信したのであれば、データベース211には存在しない(S710でNO)。そこで、メッセージ解析部204がそのメッセージを解析し、何のサービスの呼び出しかを特定する(S711)。尚、リクエストメッセージ401の場合、サービス呼び出しの情報が含まれているので、何の呼び出しかを特定することが可能である(S711でYES)。リクエストメッセージ401は、getDataオペレーションを呼び出すリクエストメッセージである。
【0035】
次に、サービスロジック制御部205が、メッセージ解析部204が特定したサービスに基づいてサービスロジック206を実行する(S712)。この場合、上述したサービスロジック302が実行される。次に、メッセージ作成部207がサービスロジック206の結果を含むレスポンスメッセージ209を作成する(S713)。次に、コネクション切断検知部203がコネクションの切断を検知していなければ(S714でNO)、メッセージ送信部208は、作成されたレスポンスメッセージ209を他の装置101に送信し(S715)、この処理を終了する。
【0036】
一方、コネクション切断検知部203が、サービスロジックの実行中にコネクションの切断を検知していた場合(S714でYES)、未送信メッセージ管理部210に処理が移る。未送信メッセージ管理部210がデータベース211に識別子「100020」と作成したレスポンスメッセージ303を紐付けて601のように保存し(S716)、この処理を終了する。なお、S715のレスポンスメッセージ209の送信中にコネクションが切断された場合も、S716に移る。
【0037】
また、上述したS710で、未送信メッセージ管理部210が、データベース211に識別子「100020」に対応するレスポンスメッセージが存在すると判定した場合(S710でYES)、コネクション切断検知部203がコネクションの切断を検知していれば(S717でYES)、この処理を終了する。コネクション切断検知部203がコネクションの切断を検知していなければ(S717でNO)、処理がメッセージ送信部208へ移る。ここで、メッセージ送信部208は、その対応するレスポンスメッセージを他の装置101に送信する(S718)。そして、データベース211から送信が終了したレスポンスメッセージに対応する情報(601)を削除し(S719)、この処理を終了する。なお、S718でのレスポンスメッセージの送信中にコネクションが切断された場合、処理を終了する。レスポンスメッセージの送信が完了しない場合、情報(601)は削除しない。
【0038】
また、上述したS711で、メッセージ解析部204がリクエストメッセージ201を解析し、何の呼び出しかを特定できない場合(S711でNO)は、処理がメッセージ作成部207へ移る。具体的には、データベース211の保存期間が切れてデータが削除されていた場合、そもそも識別子がでたらめだった場合、識別子に対応するレスポンスメッセージが存在しない場合、リクエストメッセージ401に含まれるサービス呼び出しの情報が誤っている場合などが特定できない場合である。これらの場合、メッセージ作成部207では、フォルト情報を含むレスポンスメッセージを作成する(S720)。具体的には、図5に示すレスポンスメッセージ502が作成される。
【0039】
次に、コネクション切断検知部203がコネクションの切断を検知していなければ(S721でNO)、メッセージ送信部208が、作成されたレスポンスメッセージ502を他の装置101に送信し(S715)、この処理を終了する。しかし、コネクション切断検知部203がコネクションの切断を検知していれば(S721でYES)、そのまま、この処理を終了する。また、作成したフォルトのメッセージはデータベース211に保存しない。S715のレスポンスメッセージの送信中にコネクションが切断された場合も、レスポンスメッセージを保存せずに、処理を終了する。
【0040】
ここで、サービス装置102の未送信メッセージ管理部210がデータベース211の保存期間を過ぎたデータを削除する処理を、図8に示すフローチャートを用いて説明する。例えば、データベース211の保存期間が残り0分になっていた場合、そのデータは、データベース211から削除される。削除するタイミングとして、この例では、他の装置101からリクエストメッセージ201を受信した場合とする。また、この処理は、他の装置101からリクエストメッセージ201を受信した場合に、削除するデータがあるか否かを確認するので、S701とS702の処理の間で行われる。
【0041】
まず、メッセージ受信部202がリクエストメッセージ201を受信し(S701)、未送信メッセージ管理部210がデータベース211に保存期間が過ぎたデータが存在するか否かを調べる(S801)。ここで、保存期間を過ぎたデータが存在しない場合(S801でNO)は、そのまま、処理がコネクション切断検知部203へ移る。一方、保存期間が残り0分になっていた場合など、保存期間を過ぎたデータが存在すれば(S801でYES)、そのデータを削除する(S802)。そして、処理がコネクション切断検知部203へ移る。
【0042】
尚、データを削除するタイミングは、これだけに限らず、他の場合でも良い。例えば、メッセージ送信部208がレスポンスメッセージ209を送信(S708、S715、S718)した後、削除しても良い。また、受信又は送信などの処理のタイミングではなく、データベース211を常に監視し、保存期間が過ぎたデータを即座に検知して削除するようにしても良い。
【0043】
以上のように、サービス装置102におけるこの処理を利用して、サービスを利用する他の装置101が効率的にデータを取得することも可能となる。例えば、他の装置101は識別子を付与したリクエストメッセージ401をサービス装置102に送信する。サービス装置102で実行されるサービスロジック302が、非常に重い処理であることがわかっていれば、他の装置101は意図的にコネクションを切断する。そして、しばらく経ってから、再び、リクエストメッセージ401をサービス装置102に送信する。これにより、サービス装置102では、既にサービスロジック302の実行が終了しており、レスポンスメッセージ303がデータベース211に保存されている。従って、他の装置101に対して、すぐにレスポンスメッセージが送信される。
【0044】
このようにする処理ことにより、他の装置101は、サービス装置102からのレスポンスメッセージを取得するために、ずっとコネクションを維持しておく必要がない。サービス装置102が処理を行っている間に、他の処理をすることも可能である。また、コネクションを長くキープしてタイムアウトが発生しても、それまでに実行した処理が無駄になってしまうという問題も解消される。
【0045】
本実施形態によれば、サービスにおいて、サービスロジックの実行を必要最低限に抑えることができ、メモリが少ない組込み機器での負荷を軽減することが可能となる。
【0046】
<実施形態2>
次に、本発明の第2の実施形態について説明する。第1の実施形態においては、コネクションの切断を検知した場合、リクエストメッセージに識別子が付与されていなければ、サービスロジックの処理を中断させ、識別子が付与されていればそのまま処理を続行させる方法を説明した。本実施形態においては、第1の実施形態において、リクエストメッセージに識別子が付与されている場合にも、データベースの状態に応じて、サービスロジックの処理を中断する方法を説明する。図9及び図10を参照して、処理の概要を説明する。尚、図9は、図2で示した図を一部変更したものであり、図2と同一の符号を一部用いている。図2で示した処理と同一の部分は、本実施形態では説明を省略する。
【0047】
図9は、サービス装置102のソフトウェア構成の一例を示している。DB状態確認部901は、データベース211の保存領域の使用状況を確認することができる。具体的には、事前にデータベース211の保存領域を使用できるサイズの上限値を設定しておき、使用しているサイズが、設定されている上限値を超えていないかどうかを確認する。未送信メッセージ管理部210は、リクエストメッセージ201に識別子が付与されていて、且つ、コネクション切断検知部203で切断を感知した場合、DB状態確認部901に、データベース211の使用状況の確認指示を出す。既に、使用状況が、設定されている上限値を超えている場合は、未送信メッセージ管理部210は、サービスロジック制御部205に対して中断指示を出す。サービスロジック制御部205は、サービスロジック206の処理を中断させる。
【0048】
以上の処理を行うことで、リクエストメッセージ201に識別子が付与されている場合にも、データベース211の状態に応じて、サービスロジックの処理を中断させることができる。
【0049】
次に、第1の実施形態と同様に、図10に示すフローチャートを用いて、サービス装置102の処理について説明する。図10において、図7と共通の処理には、共通の番号を付し、説明は省略する。
【0050】
S703で判定した結果がYESだった場合から説明する。未送信メッセージ管理部210では、識別子に対応するレスポンスメッセージがデータベース211に存在するか否かを判定する(S710)。判定した結果、付与されている識別子に対応するレスポンスメッセージが存在しなければ(S710でNO)、メッセージ解析部204が、そのメッセージを解析し、何のサービスの呼び出しかを特定する(S711)。特定できた場合(S711でYES)は、サービスロジック制御部205が、メッセージ解析部204が特定したサービスに基づいてサービスロジック206を実行する(S712)。
【0051】
サービスロジック206を実行中に、未送信メッセージ管理部210は、コネクションの切断通知を受け取ると(S1007でYES)、DB状態確認部901にデータベース211の使用状況の確認指示を出す。DB状態確認部901は、データベース211の使用領域が、既に事前に設定されている上限値を超えているか否かを判定する(S1008)。上限値を既に超えていると判定すると(S1008でYES)、未送信メッセージ管理部210は、サービスロジック制御部205に対して、サービスロジックを中断するように要求する。サービスロジック制御部205は、実行中のサービスロジック206を中断し(S1009)、処理を終了する。
【0052】
DB状態確認部901で、上限値を超えていないと判定すると(S1008でNO)、メッセージ作成部207で、サービスロジックの結果を含むレスポンスメッセージ209を作成する(S1010)。そして、未送信メッセージ管理部210は、データベース211にリクエストメッセージ201に付与された識別子と作成したレスポンスメッセージを紐付けて保存し(S1011)、処理を終了する。
【0053】
一方、サービスロジック206が実行中に、コネクションの切断が発生しなければ(S1007でNO)、メッセージ作成部207で、サービスロジックの結果を含むレスポンスメッセージ209を作成する(S1012)。次に、メッセージ送信部208が、作成されたレスポンスメッセージ209を他の装置101に送信し(S1013)、処理を終了する。なお、S1012のレスポンスメッセージ209の作成中、又は、S1013のレスポンスメッセージ209の送信中にコネクションが切断された場合は、S1008に進む。
【0054】
一方、メッセージ解析部204で、リクエストメッセージに識別子が付与されていないと判定すると(S703でNO)、図7のS704へ進む。以降の処理は、図7のS704以降の処理(S708又はS709まで)と共通であるので、説明を省略する。
【0055】
一方、未送信メッセージ管理部210で、付与されている識別子に対応するレスポンスメッセージが存在していると判定すると(S710でYES)、図7のS717へ進む。以降の処理は、図7のS717以降の処理(S719まで)と共通であるので、説明を省略する。
【0056】
一方、メッセージ解析部204で、何のサービスの呼び出しかを特定できなければ(S711でNO)、図7のS720に進む。以降の処理は、図7のS720以降の処理(S715まで)と共通であるので、説明を省略する。
【0057】
以上の方法で、リクエストメッセージに識別子が付与されている場合にも、データベースの状態に応じて、サービスロジックの中断を制御することが可能となる。その為、サービス装置に対して、次々に識別子が付与されたリクエストメッセージが大量に送られても、データベースの状態に応じてサービスロジックを正常に中断させられるので、サービス装置側の負荷を軽減することが可能となる。また、データベースに大量のレスポンスサービスや、サイズの大きいレスポンスサービスが格納され、データベースの領域を使い切る前に、サービスロジックの処理を中断できるので、サービス装置で処理が不正に停止することを防ぐことも可能となる。
【0058】
次に、第1及び第2の実施形態で説明した識別子の形式について図11を用いて説明する。図11(A)において、サービス装置1101は、他の装置A1102だけでなく、他の装置B1103からもリクエストメッセージが送信されてくる。すなわち、複数の他の装置からリクエストメッセージが送信されてくる可能性がある。識別子は、他の装置がそれぞれ個々に生成し、リクエストメッセージに付与するものであり、単純な数値の羅列などでは、サービス装置側で識別子が重複する可能性がある。重複した場合は、サービス装置側で、識別子と紐付けて管理するレスポンスメッセージを正常にデータベースに保存できない。その為、本実施形態においては、識別子の重複の可能性を低減させる例について説明する。
【0059】
図11(A)では、リクエストメッセージの送信側となる他の装置のIPアドレスと、送信時の日付及び時間(時間情報)の組み合わせで識別子を付与する例を記載している。他の装置A1102のIPアドレスは、123.123.123.1であり、リクエストメッセージの送信時刻が2010年01月01日23時59分01秒だった場合、リクエストメッセージ1104に示すように、識別子は「1231231231-20100101-235901」となる。同様に他の装置B1103のIPアドレスは、123.123.123.2であり、リクエストメッセージの送信時刻が、2010年01月02日23時59分02秒だった場合、リクエストメッセージ1105に示すように、識別子は「1231231232-20100102-235902」となる。
【0060】
また、他の識別子の形式について、図11(B)を用いて説明する。図11(B)は、図11(A)と同様の構成であり、サービス装置1201に対して、他の装置A1202と、他の装置B1203からリクエストメッセージが送信される場合を示しており、識別子はUUID(Universally Unique Identifier)の形式で付与する例を記載している。他の装置A1202は、UUID形式の識別子を生成し、リクエストメッセージ1204に示すように、「12345678-9abc-def0-1234-56789abcd012」を付与する。同様に他の装置B1203は、UUID形式の識別子を生成し、リクエストメッセージ1205に示すように、「12345678-9abc-def0-1234-56789abcd123」を付与する。UUIDは、一意に特定可能な識別子を作成するための仕様であり、ネットワークシステムの環境において統制を取らなくても、重複や偶然の一致がほぼ起こりえないと言われている。その為、識別子として用いることで、サービス装置1201側で、識別子と紐付けて、レスポンスメッセージをデータベースに保存する処理の最中に、重複が起きる可能性を低減することが可能となる。
【0061】
以上のような形式の識別子を用いることで、複数の他の装置からアクセスがあっても処理可能となる。
【0062】
[他の実施形態]
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。
【特許請求の範囲】
【請求項1】
プロセッサを有する処理装置により実行される処理方法において、
他の装置からの処理要求を受信し、
要求された処理を前記プロセッサが実行し、
要求された処理の実行まで処理の要求元との接続が維持されている場合、処理を実行した結果を処理の要求元に送信し、
要求された処理の実行中に処理の要求元との接続が切断された場合、処理の実行を中断するか否かを判定し、
処理を中断しないと判定した場合、処理を実行した結果をメモリに格納し、
前記処理の要求が受信されたときに要求された処理を実行した結果が前記メモリに格納されている場合、前記メモリに格納されていた処理結果を、処理の要求元に送信することを特徴とする処理方法。
【請求項2】
前記格納するステップでは、処理を実行した結果を、処理要求の識別子に対応させて、前記メモリに格納し、前記メモリに格納されていた処理結果を送信するステップでは、受信された処理要求の識別子に対応する処理結果が前記メモリに格納されている場合、前記メモリに格納されていた処理結果を、処理の要求元に送信することを特徴とする請求項1に記載の処理方法。
【請求項3】
前記実行するステップでは、識別子が付与されていない処理要求で要求された処理を実行中に、処理の要求元との接続が切断された場合、実行していた処理を中断することを特徴とする請求項2に記載の処理方法。
【請求項4】
前記格納するステップでは、処理を実行した結果を、処理要求に識別子として付与されたIPアドレスと時間情報との組み合わせ又はUUIDに対応させて、前記メモリに格納することを特徴とする請求項2に記載の処理方法。
【請求項5】
前記メモリに格納されていた処理結果を送信するステップでは、前記メモリに格納されていた処理結果を、処理の要求元に送信し、前記メモリに格納されていた処理結果を削除することを特徴とする請求項1に記載の処理方法。
【請求項6】
前記格納するステップでは、前記メモリに格納した処理結果を、所定時間後に削除することを特徴とする請求項1に記載の処理方法。
【請求項7】
前記判定するステップでは、前記メモリに上限値を超えてデータが格納されている場合、処理の実行を中断すると判定することを特徴とする請求項1に記載の処理方法。
【請求項8】
プロセッサを有する処理装置により実行される処理方法において、
他の装置からの処理要求を受信し、
要求された処理を前記プロセッサが実行し、
要求された処理の実行まで処理の要求元との接続が維持されている場合、処理を実行した結果を処理の要求元に送信し、
要求された処理の終了の前に処理の要求元との接続が切断された場合、処理を実行した結果を、処理要求に識別子として付与されたIPアドレスと時間情報との組み合わせ又はUUIDに対応させてメモリに格納し、
処理要求が受信されたときに要求された処理を実行した結果が前記メモリに格納されている場合、前記メモリに格納されていた処理結果を、処理の要求元に送信することを特徴とする処理方法。
【請求項9】
処理装置において、
通信手段と、
前記通信手段により受信された処理要求により要求された処理を実行し、処理の終了まで処理の要求元との接続が維持されている場合、処理を実行した結果を前記通信手段により処理の要求元に送信し、要求された処理の実行中に処理の要求元との接続が切断された場合、処理の実行を中断するか否かを判定し、処理を中断しないと判定した場合、処理を実行した結果をメモリに格納する処理手段とを有し、
前記処理手段は、前記通信手段により受信された処理要求により要求された処理を実行した結果がメモリに格納されている場合、前記メモリに格納されていた処理結果を前記通信手段により処理の要求元に送信することを特徴とする処理装置。
【請求項10】
前記処理手段は、処理を実行した結果を、処理要求の識別子に対応させて、前記メモリに記憶し、前記通信手段により受信された処理要求の識別子に対応する処理結果が前記メモリに格納されている場合、前記メモリに記憶されていた処理結果を、処理の要求元に送信することを特徴とする請求項9に記載の処理装置。
【請求項11】
前記処理手段は、識別子が付与されていない処理要求で要求された処理を実行中に、処理の要求元との接続が切断された場合、実行していた処理を中断することを特徴とする請求項10に記載の処理装置。
【請求項12】
前記処理手段は、前記通信手段により受信された処理要求により要求された処理を実行した結果がメモリに格納されている場合、前記メモリに格納されていた処理結果を前記通信手段により処理の要求元に送信し、前記メモリに記憶されていた処理結果を削除することを特徴とする請求項9に記載の処理装置。
【請求項13】
前記処理手段は、前記メモリに上限値を超えてデータが記憶されている場合、処理の実行を中断することを特徴とする請求項9に記載の処理装置。
【請求項14】
処理装置において、
通信手段と、
前記通信手段により受信された処理要求により要求された処理を実行し、処理の終了の前に処理の要求元との接続が切断された場合、処理を実行した結果を、処理要求に識別子として付与されたIPアドレスと時間情報との組み合わせ又はUUIDに対応させてメモリに格納し、処理の終了まで処理の要求元との接続が維持されている場合、処理を実行した結果を前記通信手段により処理の要求元に送信する処理手段とを有し、
前記処理手段は、前記通信手段により受信された処理要求により要求された処理を実行した結果が前記メモリに格納されている場合、前記メモリに格納されていた処理結果を前記通信手段により処理の要求元に送信することを特徴とする処理装置。
【請求項15】
コンピュータに、
他の装置からの処理要求を受信し、
要求された処理を実行し、
要求された処理の実行まで処理の要求元との接続が維持されている場合、処理を実行した結果を処理の要求元に送信し、
要求された処理の実行中に処理の要求元との接続が切断された場合、処理の実行を中断するか否かを判定し、
処理の実行を中断しないと判定した場合、処理を実行した結果をメモリに格納し、
処理要求が受信されたときに要求された処理を実行した結果が前記メモリに格納されている場合、前記メモリに格納されていた処理結果を、処理の要求元に送信する、
各手順を実行させるためのプログラム。
【請求項16】
前記格納する手順では、処理を実行した結果を、処理要求の識別子に対応させて、前記メモリに格納し、前記メモリに格納されていた処理結果を送信する手順では、受信された処理要求の識別子に対応する処理結果が前記メモリに格納されている場合、前記メモリに格納されていた処理結果を、処理の要求元に送信することを特徴とする請求項15に記載のプログラム。
【請求項17】
前記実行する手順では、識別子が付与されていない処理要求で要求された処理を実行中に、処理の要求元との接続が切断された場合、実行していた処理を中断することを特徴とする請求項16に記載のプログラム。
【請求項18】
前記メモリに格納されていた処理結果を送信する手順では、前記メモリに格納されていた処理結果を、処理の要求元に送信し、前記メモリに格納されていた処理結果を削除することを特徴とする請求項15に記載のプログラム。
【請求項19】
コンピュータに、
他の装置からの処理要求を受信し、
要求された処理を実行し、
要求された処理の実行まで処理の要求元との接続が維持されている場合、処理を実行した結果を処理の要求元に送信し、
要求された処理の終了の前に処理の要求元との接続が切断された場合、処理を実行した結果を、処理要求に識別子として付与されたIPアドレスと時間情報との組み合わせ又はUUIDに対応させてメモリに格納し、
処理要求が受信されたときに要求された処理を実行した結果が前記メモリに格納されている場合、前記メモリに格納されていた処理結果を、処理の要求元に送信する、
各手順を実行させるためのプログラム。
【請求項1】
プロセッサを有する処理装置により実行される処理方法において、
他の装置からの処理要求を受信し、
要求された処理を前記プロセッサが実行し、
要求された処理の実行まで処理の要求元との接続が維持されている場合、処理を実行した結果を処理の要求元に送信し、
要求された処理の実行中に処理の要求元との接続が切断された場合、処理の実行を中断するか否かを判定し、
処理を中断しないと判定した場合、処理を実行した結果をメモリに格納し、
前記処理の要求が受信されたときに要求された処理を実行した結果が前記メモリに格納されている場合、前記メモリに格納されていた処理結果を、処理の要求元に送信することを特徴とする処理方法。
【請求項2】
前記格納するステップでは、処理を実行した結果を、処理要求の識別子に対応させて、前記メモリに格納し、前記メモリに格納されていた処理結果を送信するステップでは、受信された処理要求の識別子に対応する処理結果が前記メモリに格納されている場合、前記メモリに格納されていた処理結果を、処理の要求元に送信することを特徴とする請求項1に記載の処理方法。
【請求項3】
前記実行するステップでは、識別子が付与されていない処理要求で要求された処理を実行中に、処理の要求元との接続が切断された場合、実行していた処理を中断することを特徴とする請求項2に記載の処理方法。
【請求項4】
前記格納するステップでは、処理を実行した結果を、処理要求に識別子として付与されたIPアドレスと時間情報との組み合わせ又はUUIDに対応させて、前記メモリに格納することを特徴とする請求項2に記載の処理方法。
【請求項5】
前記メモリに格納されていた処理結果を送信するステップでは、前記メモリに格納されていた処理結果を、処理の要求元に送信し、前記メモリに格納されていた処理結果を削除することを特徴とする請求項1に記載の処理方法。
【請求項6】
前記格納するステップでは、前記メモリに格納した処理結果を、所定時間後に削除することを特徴とする請求項1に記載の処理方法。
【請求項7】
前記判定するステップでは、前記メモリに上限値を超えてデータが格納されている場合、処理の実行を中断すると判定することを特徴とする請求項1に記載の処理方法。
【請求項8】
プロセッサを有する処理装置により実行される処理方法において、
他の装置からの処理要求を受信し、
要求された処理を前記プロセッサが実行し、
要求された処理の実行まで処理の要求元との接続が維持されている場合、処理を実行した結果を処理の要求元に送信し、
要求された処理の終了の前に処理の要求元との接続が切断された場合、処理を実行した結果を、処理要求に識別子として付与されたIPアドレスと時間情報との組み合わせ又はUUIDに対応させてメモリに格納し、
処理要求が受信されたときに要求された処理を実行した結果が前記メモリに格納されている場合、前記メモリに格納されていた処理結果を、処理の要求元に送信することを特徴とする処理方法。
【請求項9】
処理装置において、
通信手段と、
前記通信手段により受信された処理要求により要求された処理を実行し、処理の終了まで処理の要求元との接続が維持されている場合、処理を実行した結果を前記通信手段により処理の要求元に送信し、要求された処理の実行中に処理の要求元との接続が切断された場合、処理の実行を中断するか否かを判定し、処理を中断しないと判定した場合、処理を実行した結果をメモリに格納する処理手段とを有し、
前記処理手段は、前記通信手段により受信された処理要求により要求された処理を実行した結果がメモリに格納されている場合、前記メモリに格納されていた処理結果を前記通信手段により処理の要求元に送信することを特徴とする処理装置。
【請求項10】
前記処理手段は、処理を実行した結果を、処理要求の識別子に対応させて、前記メモリに記憶し、前記通信手段により受信された処理要求の識別子に対応する処理結果が前記メモリに格納されている場合、前記メモリに記憶されていた処理結果を、処理の要求元に送信することを特徴とする請求項9に記載の処理装置。
【請求項11】
前記処理手段は、識別子が付与されていない処理要求で要求された処理を実行中に、処理の要求元との接続が切断された場合、実行していた処理を中断することを特徴とする請求項10に記載の処理装置。
【請求項12】
前記処理手段は、前記通信手段により受信された処理要求により要求された処理を実行した結果がメモリに格納されている場合、前記メモリに格納されていた処理結果を前記通信手段により処理の要求元に送信し、前記メモリに記憶されていた処理結果を削除することを特徴とする請求項9に記載の処理装置。
【請求項13】
前記処理手段は、前記メモリに上限値を超えてデータが記憶されている場合、処理の実行を中断することを特徴とする請求項9に記載の処理装置。
【請求項14】
処理装置において、
通信手段と、
前記通信手段により受信された処理要求により要求された処理を実行し、処理の終了の前に処理の要求元との接続が切断された場合、処理を実行した結果を、処理要求に識別子として付与されたIPアドレスと時間情報との組み合わせ又はUUIDに対応させてメモリに格納し、処理の終了まで処理の要求元との接続が維持されている場合、処理を実行した結果を前記通信手段により処理の要求元に送信する処理手段とを有し、
前記処理手段は、前記通信手段により受信された処理要求により要求された処理を実行した結果が前記メモリに格納されている場合、前記メモリに格納されていた処理結果を前記通信手段により処理の要求元に送信することを特徴とする処理装置。
【請求項15】
コンピュータに、
他の装置からの処理要求を受信し、
要求された処理を実行し、
要求された処理の実行まで処理の要求元との接続が維持されている場合、処理を実行した結果を処理の要求元に送信し、
要求された処理の実行中に処理の要求元との接続が切断された場合、処理の実行を中断するか否かを判定し、
処理の実行を中断しないと判定した場合、処理を実行した結果をメモリに格納し、
処理要求が受信されたときに要求された処理を実行した結果が前記メモリに格納されている場合、前記メモリに格納されていた処理結果を、処理の要求元に送信する、
各手順を実行させるためのプログラム。
【請求項16】
前記格納する手順では、処理を実行した結果を、処理要求の識別子に対応させて、前記メモリに格納し、前記メモリに格納されていた処理結果を送信する手順では、受信された処理要求の識別子に対応する処理結果が前記メモリに格納されている場合、前記メモリに格納されていた処理結果を、処理の要求元に送信することを特徴とする請求項15に記載のプログラム。
【請求項17】
前記実行する手順では、識別子が付与されていない処理要求で要求された処理を実行中に、処理の要求元との接続が切断された場合、実行していた処理を中断することを特徴とする請求項16に記載のプログラム。
【請求項18】
前記メモリに格納されていた処理結果を送信する手順では、前記メモリに格納されていた処理結果を、処理の要求元に送信し、前記メモリに格納されていた処理結果を削除することを特徴とする請求項15に記載のプログラム。
【請求項19】
コンピュータに、
他の装置からの処理要求を受信し、
要求された処理を実行し、
要求された処理の実行まで処理の要求元との接続が維持されている場合、処理を実行した結果を処理の要求元に送信し、
要求された処理の終了の前に処理の要求元との接続が切断された場合、処理を実行した結果を、処理要求に識別子として付与されたIPアドレスと時間情報との組み合わせ又はUUIDに対応させてメモリに格納し、
処理要求が受信されたときに要求された処理を実行した結果が前記メモリに格納されている場合、前記メモリに格納されていた処理結果を、処理の要求元に送信する、
各手順を実行させるためのプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【公開番号】特開2011−191942(P2011−191942A)
【公開日】平成23年9月29日(2011.9.29)
【国際特許分類】
【出願番号】特願2010−56542(P2010−56542)
【出願日】平成22年3月12日(2010.3.12)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
【公開日】平成23年9月29日(2011.9.29)
【国際特許分類】
【出願日】平成22年3月12日(2010.3.12)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
[ Back to top ]