"画像形成装置からの処理依頼を受信し、第1のキューに前記処理依頼に対応する第1のキューメッセージを格納するフロントエンド処理手段と、画像形成装置からの処理依頼に基づき処理を実行し、かつ前記フロントエンド処理手段により第1のキューに格納された第1のキューメッセージを削除することなく取得し、取得したことに応じて第2のキューに未完ログの生成の指示に対応する第2のキューメッセージを格納するバックエンド処理手段と、前記バックエンド処理手段により格納された第2のキューメッセージであって、前記第2のキューに格納された第2のキューメッセージを取得したことに応じて前記未完ログを生成し、生成した未完ログを保存手段に保存させ、前記バックエンド処理手段により処理されたことに応じて、未完ログをログとして確定された完了ログとして書き換えるログ管理手段と、を有し、前記バックエンド処理手段は、前記未完ログが完了ログとして書き換えられたことに応じて前記第1のキューに格納されている前記第1のキューメッセージを削除することを特徴とするサーバシステム。前記バックエンド処理手段がシャットダウンされ、前記バックエンド処理手段とは別のバックエンド処理手段が起動され、前記別のバックエンド処理手段は、前記第1のキューメッセージを取得したことで前記第2のキューに第2のキューメッセージを格納する前に、前記保存手段により前記処理依頼に対応するログが保存されているか否かを確認し、該ログが保存されていない場合は、前記第2のキューに前記第2のキューメッセージを格納し、該ログが未完ログとして保存されている場合は、前記処理依頼に基づく処理を実行し、該ログが完了ログとして保存されている場合は、前記第1のキューに格納されている前記第1のキューメッセージを削除することを特徴とする請求項1に記載のサーバシステム。前記バックエンド処理手段は仮想マシンがバックエンド処理プログラムを実行することで実現され、前記ログ管理手段は仮想マシンがログ管理プログラムを実行することで実現され、前記フロントエンド処理手段は仮想マシンがフロントエンド処理プログラムを実行することで実現され、かつ前記バックエンド処理手段、前記ログ管理手段、および前記フロントエンド処理手段は、前記キューを介して処理依頼を行うことで夫々が独立して処理を実行することを特徴とする請求項1または2に記載のサーバシステム。前記処理依頼とは、データを印刷データへと変換するための依頼であって、前記フロントエンド処理手段は、前記画像形成装置から前記処理の結果の取得を要求されたことに応じて前記保存手段により保存されているログを確認し、確認の結果、前記ログが未完ログであった場合は前記印刷データが印刷可能なリストに含まれないように、前記ログが完了ログであった場合は前記印刷データを印刷可能なリストに含まれるようリストを生成し、生成したリストを前記画像形成装置へ送信することを特徴とする請求項1乃至3のいずれか1項に記載のサーバシステム。フロントエンド処理手段は、画像形成装置からの処理依頼を受信し、第1のキューに前記処理依頼に対応する第1のキューメッセージを格納し、バックエンド処理手段は、画像形成装置からの処理依頼に基づき処理を実行し、かつ前記フロントエンド処理手段により第1のキューに格納された第1のキューメッセージを削除することなく取得し、取得したことに応じて第2のキューに未完ログの生成の指示に対応する第2のキューメッセージを格納し、ログ管理手段は、前記バックエンド処理手段により格納された第2のキューメッセージであって、前記第2のキューに格納された第2のキューメッセージを取得したことに応じて前記未完ログを生成し、生成した未完ログを保存手段に保存させ、前記バックエンド処理手段により処理されたことに応じて、未完ログをログとして確定された完了ログとして書き換え、更に、前記バックエンド処理手段は、前記未完ログが完了ログとして書き換えられたことに応じて前記第1のキューに格納されている前記第1のキューメッセージを削除することを特徴とするサーバシステムを制御する制御方法。請求項5に記載の制御方法をサーバシステムで実行させるためのプログラム。ここで、クラウドコンピューティングシステムにおける、ログの管理方法について考える。前述したように、クラウドコンピューティンググシステムでは、VM上で種々のサービスが提供されている。各VM上で行われたサービスのログを利用するとした場合、各VM上に分散したログを、一元的に管理することが、ログの利用を容易にするためには必要である。しかしながら、特許文献1のように、ログを管理端末に送信しその管理端末がログを記録装置に記録するような場合、管理端末、またはログを提供したモジュールが不慮の要因により停止した場合、ログの記載漏れ、またはログの2重記録が発生する。特にクラウドコンピューティングシステムでは、任意のタイミングで、各VMが処理の継続が不可能になることを前提として設計を行う必要がある。これは、一般的にクラウドコンピューティングシステムが多数のVMから構成されていることが多いため、いずれかのVMが処理継続不可能な状態になる可能性が高くなるからである。そこで、本発明では、任意のタイミングでVMが処理継続不可能な状態になった場合においても、ログを記録する方法を提案する。本発明の一実施系に係るサーバシステムは、画像形成装置からの処理依頼を受信し、第1のキューに前記処理依頼に対応する第1のキューメッセージを格納するフロントエンド処理手段と、画像形成装置からの処理依頼に基づき処理を実行し、かつ前記フロントエンド処理手段により第1のキューに格納された第1のキューメッセージを削除することなく取得し、取得したことに応じて第2のキューに前記未完ログの生成の指示に対応する第2のキューメッセージを格納するバックエンド処理手段と、前記バックエンド処理手段により格納された第2のキューメッセージであって、前記第2のキューに格納された第2のキューメッセージを取得したことに応じて前記未完ログを生成し、生成した未完ログを保存手段に保存させ、前記バックエンド処理手段により処理されたことに応じて、未完ログをログとして確定された完了ログとして書き換えるログ管理手段と、を有し、前記バックエンド処理手段は、前記未完ログが完了ログとして書き換えられたことに応じて前記第1のキューに格納されている前記第1のキューメッセージを削除することを特徴とする。本願発明の未完ログの生成処理、完了ログへの書き換え処理、およびキューメッセージの削除処理により、ログの記録漏れ、または2重記録を防ぐことが出来る。クラウドコンピューティングシステムでは、任意のタイミングで、VMの処理の継続が不可能になることを前提として設計を行う必要がある。これは、一般的にクラウドコンピューティングシステムが多数のVMから構成されていることが多いため、いずれかのVMが処理継続不可能な状態になる可能性が高くなるからである。また、特定のクラウドコンピューティングシステムにおいてシステム全体のパフォーマンスを調整するために、VMを削減するようなスケールイン場合がある。この場合、削減するVMを指定することが出来ないため、何らかの処理をしているVMを削減する可能性がある。そのため、スケールインを行う場合にも、任意のタイミングでVMが処理継続不可能な場合に陥る。ログは、第3者による監査や、ユーザに対して使用量を請求するために使用されることが多い。そのため、ログの記録漏れや、2重記録が発生することはユーザに適正なサービスを提供することができなくなるため好ましくない。そこで、本発明では、任意のタイミングでVMが処理継続不可能な状態になった場合においても、ログを記録する方法を提案する。またログを記録できていない場合には、ログを記録するまで処理を継続させない方法も提案する。以下に、本発明の好ましい実施の形態を、添付の図面に基づいて詳細に説明する。始めに、本発明の各実施例で使用される用語の定義について説明する。ポーリングとは、クライアントがホストに要求をした処理の経過や完了を確認するために、クライアントが一定間隔でホストに処理の経過状況を問い合わせる処理のことである。[システム構成]図1は、本発明の第1の実施形態に係るシステムの全体構成を示している。ネットワーク100上にあるアプリケーションサーバ群101上に実装されたサービスと、種々のデータを保存しておくためのストレージサーバ102、および、イントラネット内にある、PC103や画像形成装置104から構成される。ネットワーク100は、上述の各装置間での情報をやりとりのための通信回線として働き、有線、無線と回線の形態は問わない。[サーバシステムのハードウェア構成]アプリケーションサーバ群101に含まれるアプリケーションサーバはCPU211、直接記憶部212、ネットワークインターフェース213をもつ。CPU211は所定のプログラムを実行し、アプリケーションサーバの各種制御を指示するユニットである。CPU211は、CPUCentralProcessingUnitにより実現される。直接記憶部212は、CPU201がプログラムを実行する際に使用するワークメモリであり、CPU211が実行するプログラムは直接記憶部212にロードされる。直接記憶部212は、RAMRandamAccessMemoryにより実現される。間接記憶部213は、アプリケーションプログラム、およびOSOperatingSystemを含む各種プログラムが記憶されている。間接記憶部213に記憶されている各種プログラムは、CPU211がプログラムを実行する際に直接記憶部212へ移動する。間接記憶部213は、ROMReadOnlyMemory、HDDHardDiscDrive、または、SSDSolidStateDriveにより実現される。なお、CPU211はマルチプロセッサでも良い。ネットワークインターフェース213は、ネットワーク100に接続されており、ネットワーク100に接続されている他の装置と通信が可能となる。ストレージサーバ102、PC103も同様のハードウェア構成をしているため、説明は割愛する。[画像形成装置のハードウェア構成]CPU212は、所定のプログラムを実行し、画像処理ユニット211の各種制御を指示するユニットである。CPU212は、CPUCentralProcessingUnitにより実現される。直接記憶部213は、CPU302がプログラムを実行する際に使用するワークメモリであり、CPU212が実行するプログラムは直接記憶部213にロードされる。直接記憶部213は、RAMRandamAccessMemoryにより実現される。間接記憶部214は、アプリケーションプログラムを含む各種プログラムが記憶されている。間接記憶部214に記憶されている各種プログラムは、CPU302がプログラムを実行する際に直接記憶部213へ移動する。間接記憶部214は、SSDSolidStateDrive、または、HDDHardDiscDriveにより実現される。なお、CPU212はマルチプロセッサでも良い。[ソフトウェア構成]図3は、本発明の第1の実施形態に関わるシステムを構成するバックエンド処理部312、フロントエンド処理部311、ログ管理部313、PC103、ストレージ321、キューサービス322、テーブル323、および、画像形成装置104の機能ブロック図を示している。ここで、バックエンド処理部312、フロントエンド処理部311、ログ管理部313は、前述したアプリケーションサーバ101に実装されたプログラムによって動作するものである。また、ストレージ321、キューサービス322、テーブル323は、前述したストレージサーバ102上に実装されたプログラムによって動作するものである。まず、PC103についての説明を行う。PC103は、ネットワーク通信部331、ユーザインターフェース332、ウェブブラウザ333から構成される。ユーザインターフェース332は、ユーザが、PC103によって提供される各種アプリケーションを使用するためのインタフェースである。これを介して入力されるユーザ操作に従って、各種アプリケーションを実行する。アプリの1つであるウェブブラウザ333は、ネットワーク100を介して、ネットワーク通信部331から送信および受信される情報に応じて、各種情報の表示を行う。ウェブブラウザ333は、図2aの間接記憶部203に保存されているプログラムが、直接記憶部202にロードされ、CPU201により実行されることで実現される。第1の実施形態では、PC103を操作するユーザが、ユーザインターフェース332、ネットワーク通信部331を通してフロントエンド処理部311と通信を行い、データの送受信を行なう。次に、アプリケーションサーバ101上に実装されるフロントエンド処理部311、バックエンド処理部312、ログ管理部313の説明を行う。フロントエンド処理部311は、VMVirtualMachine、即ち仮想マシンがフロントエンド処理プログラムを実行することで実現される。バックエンド処理部312は、VMVirtualMachine、即ち仮想マシンがバックエンド処理プログラムを実行することで実現される。ログ管理部313は、仮想マシンがログ管理プログラムを実行することで実現される。仮想マシンは、仮想化技術によって物理的なサーバーコンピュータ群を論理的なコンピュータに分割し、分割された中で独立したオペレーティングシステムをもって動作する論理的なコンピュータのことである。この論理的なコンピュータの単位は、インスタンスとして数えられる。本発明の実施例1では、インスタンス数1つに対し、サーバーコンピュータ群内の1台のサーバーコンピュータ上で動作する。フロントエンド処理部311は、画像形成装置、または、PCからのリクエストを受信し、各要求に応じた処理を行う。フロントエンド処理部311は、一般的なWebサーバと同等の機能を持ち、同期処理を行うことが可能である。フロントエンド処理部311は、後述のキューサービス322を介してバックエンド処理部312に対して処理内容を伝える役割を持つ。また、フロントエンド処理部311は、キューサービスへのメッセージの格納の他、ストレージ321やテーブル323にデータを格納することも可能である。バックエンド処理部312は、フロントエンド処理部311からキューサービス322を介して伝えられた処理依頼に対する処理を行う機能を持つ。このキューサービスは第1のキューであり、第1のキューに格納されるキューメッセージは第1のキューメッセージである。バックエンド処理部は、キューサービス322に格納されたメッセージを取得し、メッセージに記載されている処理を行う。キューサービス322を用いることで、バックエンド処理部は非同期で処理を行うことが出来る。バックエンド処理部312は、バックエンド処理部312を実行しているサーバのメモリに処理プログラムをロードし処理を行う。バックエンド処理部は、キューサービス322からメッセージを取得するのみではなく、キューサービスにメッセージを格納することも可能である。また、ストレージ321、テーブル323からのデータの取得や、ストレージ321、テーブル323へのデータの格納も可能である。ログ管理部313は、バックエンド処理部312からキューサービスを介して伝えられたメッセージに応じて処理を行う。このキューサービスは第2のキューであり、第2のキューに格納されるキューメッセージは第2のキューメッセージである。ログ管理部313は、バックエンド処理部312と同様に、非同期で処理を行うことが出来る。ログ管理部313は、ログ管理部313を実行しているサーバのメモリに処理プログラムをロードし処理を行う。ログ管理部313は、ストレージ321からのデータの取得、テーブル323からのデータの取得、および、テーブル323へのデータの格納が可能である。ストレージサーバ102上に実装される、ストレージ321、キューサービス322、テーブル323の説明を行う。ストレージ321はバックエンド処理部312により処理された実行結果のデータを始めとする各種データを保存しておく機能を持つ。ストレージ321は図2aの間接記憶部203によって実現される。ストレージ321には、データを保存しておくだけではなく、そのデータにタグのように付加情報を付与することが可能である。キューサービス322は、フロントエンド処理部311とバックエンド処理部312、または、バックエンド処理部312とログ管理部313とが非同期でデータ通信するための機能を持つ。なお、キューサービス322は、図2aの間接記憶部203に保存されているキュープログラムが、直接記憶部202にロードされて、CPU201により実行されることで実現される。テーブル323は、処理の状態等の情報を保持するためのストレージを提供するサービスであり、一般的に公知のデータベースサービスが持つ機能と同じ機能を持つ。最後に、画像形成装置104についての説明を行う。画像形成装置104は、印刷処理部341、印刷要求送信部342、ユーザインターフェース343、ウェブブラウザ344から構成される。印刷処理部341は、印刷データの印刷処理を行う。印刷要求送信部342は、ユーザインターフェース343によって指定された印刷設定等を、フロントエンド処理部311に送信し、その応答を受信するプログラムである。ユーザインターフェース343は、ユーザが印刷装置104によって提供される各種アプリケーションを使用するためのインタフェースである。これを介して入力されるユーザ操作に従って、各種アプリケーションを実行する。ウェブブラウザ344は、ネットワーク100を介して接続されているデバイス内に保存されているデータや情報をユーザが閲覧することができる機能を持つ。ウェブブラウザ344は、図2bの間接記憶部214に保存されているプログラムが、直接記憶部213にロードされ、CPU212により実行されることで実現される。また、ユーザは、ウェブブラウザ344を用いてネットワーク上に存在する、ドキュメントや画像といった種々のコンテンツを閲覧し、ユーザインターフェース343を用いて選択、印刷指示を行うことが出来る。[キューサービス]まず、本発明が想定しているキューサービスが持つ機能について説明する。キューサービスは、フロントエンド処理部311、バックエンド処理部312と、ログ管理部313とが非同期でデータ通信するためのサービスを提供する。キューサービスに対し各種指示を出すことで、非同期でデータ通信する。これについて、具体的に説明する。キューサービスに対して行う指示とは、メッセージの追加指示、およびメッセージの取得指示、メッセージの削除処理である。メッセージとは、キューメッセージを指す。まず、非同期でデータ通信する一連の動作について説明する。処理を移譲したい処理部フロントエンド処理部311、または、バックエンド処理部312は、処理依頼に応じたメッセージを作成し、メッセージをキューサービスに追加するようにキューサービスに追加指示を送信する。追加指示を受信したキューサービスは、キューにメッセージを追加する。処理を行う処理部バックエンド処理部または、ログ管理部は、メッセージを取得するために、キューサービスに取得指示を出す。取得指示を受けたキューサービスは、メッセージと、メッセージ毎に固有に割り振られたメッセージIDと、受取IDとを取得指示に対するレスポンスとして処理部バックエンド処理部または、ログ管理部に返す。メッセージIDとは、メッセージを一意に定めるためにメッセージごとに割り振られた固有の情報である。受取IDは、処理が終了した処理部がメッセージを削除指示する際に使用する。メッセージと、メッセージIDと、受取IDは、関連付けされて保存されることになる。処理部は、処理依頼を完了すると、受取IDに対応するメッセージの削除指示をキューサービスに対して行う。削除指示を受けたキューサービスは、処理部バックエンド処理部または、ログ管理部が指示した受取IDに対応するメッセージをキューから削除する。これにより、削除指示を出した処理部バックエンド処理部または、ログ管理部以外のバックエンド処理部が同じメッセージを処理するという冗長な処理を防ぐことができる。次に、ジョブキュー601と、ログキュー602の機能について説明する。ジョブキュー601と、ログキュー602は、キューサービス322である。ジョブキュー601は、PC103や、画像形成装置104からフロントエンドアプリケーション501に依頼された処理の内容を、バックエンド処理部312に移譲するために用いられる。この際、ジョブキューには、バックエンド処理部312が処理を行うに必要な情報が格納される必要がある。図4aに本実施例におけるジョブキュー601のメッセージ例を示す。図4aでは、バックエンド処理部312が行う処理としてForm合成を挙げた。しかしながら、バックエンド処理部312が行う処理に制限はなく、例えば、画像解析や、印刷データ変換等の処理をバックエンド処理部312に行わせることも可能である。また、図4aでは、メッセージに含まれる情報として、JobIdとJob、UserId、DocumentPathの4つを挙げた。JobIdは、バックエンド処理部が行う処理を一意に識別するためのIDである。Jobは、バックエンド処理部が行う処理内容を一意に識別する情報である。また、UserIdは操作を実施したユーザを一意に識別するためのIDである。また、DocumentPathは、印刷を行う対象のドキュメントが保存されているパスを表す。メッセージに格納可能な項目は上記の4つの制限されるものではない。上述したように、バックエンド処理部312が処理を行うのに必要な項目をメッセージに追加することが出来る。例えば、ドキュメントが外部ストレージにある場合においては、外部ストレージにアクセスするための、アカウントやパスワードをメッセージとして含めることが出来る。ログキュー602は、バックエンド処理部312が、ログ管理部313に処理を移譲する際に用いられるキューサービスである。ログキュー602には、バックエンド処理部が行う処理の結果、ログとして記録する内容をメッセージとして格納する。図4bでは、メッセージとして、JobId,Job、UserId,DataStorePathの4つを挙げた。メッセージの内容は上記の4つの制限されるものではない。上記4つの項目以外に、ログとして残す項目が存在する場合には、追加することが出来る。例えば、ログとして、ユーザの会社名を記録する場合には、メッセージに会社名を含める必要がある。[ログテーブル]本発明において、テーブル323として、ログテーブル701、702が存在する。図5abを用いて、ログテーブルの詳細について説明する。ログテーブルは、ログを記録するためのテーブルである。図5では、ログとして残す項目としてJobId、TimeStamp、Job、UserId、Document、DataStorePathの6つを挙げた。ログテーブルに記録するログの項目は上記6つに制限されるものではない。アプリケーションが、上記6つ以外の項目を新たに追加することが出来る。例えば、前述したように、会社名をログとして残す場合には、会社名を表すカラムをログテーブルに追加することで、対応可能となる。ログテーブルに対するログ項目の格納の詳細なフローは後述するが、ログ管理部313は、ログキュー602に格納されているメッセージに従って、TimeStamp以外の項目を格納する。この時、TimeStampの値は未定とする図5a。その後、バックエンド処理部312が処理をストレージに格納したデータに紐づけられたTimeStampを取得し、未定となっているTimeStampの項目を取得したTimeStampの値で更新する図5b。図5aに示すログは、ログの情報として未だ確定していないことから未完ログと称する。一方、図5bに示すログは、ログとしての情報であることが確定しており、ログ情報を所望するユーザに対して十分なものであるため完了ログと称する。TimeStampはログ情報として確定しているか否かを示す情報であることから本実施例ではフラグと称する。[フローチャート]図7、図8、図9、図10を用いて、本発明におけるPC103、フロントエンド処理部311、画像形成装置102、バックエンド処理部312、ログ管理部313の処理の流れを詳細に説明する。[PC103とフロントエンド処理部311の処理の流れ]まず、図7を用いて、PC103とフロントエンド処理部311の処理の流れについて説明する。S1101では、PC103は、フロントエンド処理部に対して印刷要求を行う。フロントエンド処理部311は、PC103に対して印刷可能なドキュメントの一覧を送信し、PC103はその中から印刷対象のデータを選択することで印刷要求を行う。S1102では、フロントエンド処理部311は、PC103から送信された印刷要求を受信する。S1103では、フロントエンド処理部311は、ジョブキューに図5aで示したようなメッセージを格納する。[画像形成装置102とフロントエンド処理部311の処理の流れ]次に、図8を用いて、画像形成装置102とフロントエンド処理部311の処理の流れについて説明する。S1201では、画像形成装置102は、フロントエンド処理部311に対して印刷可能なデータ一覧の取得要求を送信する。この時、データ一覧として取得するデータのユーザIDも同時に送信する。ユーザIDの入力方法に関しては特に制限はない。例えば、画像形成装置にカード認証や、タッチパネル等の認証機能を加え、そのユーザIDを送信する方法がある。S1202では、フロントエンド処理部311は、画像形成装置102から送信された取得要求を受信する。S1203では、フロントエンド処理部311は、受信したユーザIDを持つエンティティの一覧をログテーブルから取得する。S1204では、フロントエンド処理部311は、取得した一覧からエンティティを一つ選択し、そのエンティティのTimeStampが未定かどうかをチェックする。未定であった場合には、S1205、未定ではなかった場合はS1206へ遷移する。S1205では、フロントエンド処理部311は、エンティティ、Document、および、JobIdを印刷可能なリストに加える。S1206では、フロントエンド処理部311は、S1203で取得したエンティティのリストの全てに対して処理を行ったかどうかをチェックする。全てに対して処理を行った場合には、S1207、全てに対して処理を行っていない場合には、S1204へ遷移する。S1207では、フロントエンド処理部311は、印刷可能なリストを画像形成装置に102に送信する。S1208では、画像形成装置102は、フロントエンド処理部311から受信したで印刷可能なリストに含まれるデータを表示する。S1209では、画像形成装置102は、表示した一覧の中から印刷したいデータを選択し印刷要求を行う。この際、フロントエンド処理部に対して印刷するデータのJobIdを送信する。S1210では、フロントエンド処理部311は、画像形成装置102からの印刷要求を受信する。S1211では、フロントエンド処理部311は、受信したJobIdを基に、ログテーブルからエンティティを取得し、そのエンティティのDataStorePathを基にデータを取得する。S1212では、フロントエンド処理部311は、取得したデータを画像形成装置102に送信する。S1213では、画像形成装置102は、受信したデータを印刷する。[バックエンド処理部312の処理の流れ]図9を用いて、バックエンド処理部312の処理の流れについて説明する。S1301では、バックエンド処理部312は、ジョブキューをポーリングする。S1302では、バックエンド処理部312は、ジョブキューにメッセージが存在しているかどうかをチェックし、メッセージが存在した場合には、S1303、存在しない場合には、S1301に遷移する。S1303では、バックエンド処理部312は、ログテーブルにS1302で取得したメッセージに含まれるJobIdを持つエンティティが存在するかどうかをチェックする。エンティティが存在する場合にはS1306に、存在しない場合にはS1304に遷移する。S1304では、バックエンド処理部312は、送信済みJobIdリストから、すでにそのJobIdを含むメッセージをログキューに格納したかどうかをチェックする。送信済みJobIdリストにJobIdが存在している場合、S1303に、存在していない場合はS1305に遷移する。S1305では、バックエンド処理部312は、ログキューに、ログに書き込まれるはずの内容、未完ログを生成しメッセージとして格納する。この際、TimeStampは未定とし、メッセージには必ずJobIdを含む。また、送信済みJobIdリストに、ログキューに追加したメッセージに含まれるJobIdを追加する。S1306では、バックエンド処理部312は、ログテーブルから取得したエンティティのTimeStampをチェックし、TimeStampが未定の場合には、S1307、未定ではない場合にはS1309に遷移する。S1307では、バックエンド処理部312は、ジョブキューに入っていたメッセージの内容に従い、処理を行う。S1308では、バックエンド処理部312は、S1307の結果得られた処理結果をストレージ321に格納する。この際、処理結果には、ログに書くべきTimeStampと、JobIdを紐づけて、ストレージに格納する。S1309では、バックエンド処理部312は、ジョブキューからメッセージを削除し、S1301に遷移する。バックエンド処理部312をこのように構成することにより、バックエンド処理部312がシャットダウンし、別のバックエンド処理部312が起動した後でも2重書き込み、または記録漏れを防止することが可能になる。[ログ管理部313の処理の流れ]図10を用いて、ログ管理部313の処理の流れについて説明する。S1401では、ログ管理部313は、ログキューをポーリングする。S1402では、ログ管理部313は、ログキューにメッセージが存在している場合には、S1403、存在していない場合にはS1401に遷移する。S1403では、ログ管理部313は、取得したメッセージに含まれるJobIdを持つエンティティがログテーブルに存在するかどうかをチェックする。存在しない場合にはS1404に、存在する場合には1405に遷移する。S1404では、ログ管理部313は、ログテーブルにログキューから取得したメッセージの内容を記録する。この際、TimeStampは未定とする。S1405では、ログ管理部313は、ストレージ321をポーリングして、メッセージに含まれるJobIdを紐づけられたデータが存在するかどうかをチェックする。存在する場合には、S1406、存在しない場合はS1405に遷移する。S1406では、ログ管理部313は、ストレージ321からデータに付属するTimeStampを取得する。S1407では、ログ管理部313は、JobIdにより一意に識別されるエンティティのTimeStampを、取得したTimeStampで更新する。S1408では、ログ管理部313は、ログキューからメッセージを削除する。なお、本実施例におけるフラグをTimeStampとしたが、それ以外の情報であっても良い。例えば、単に、未完、完了の様な情報でフラグを実現しても良い。以上説明したように、図7、図8、図9、図10に従って処理すると、ログを記録する前に、VMが処理継続不能となった場合においても、再度ログが記録される。ログを記録した後に、VMが処理継続不能となった場合においても、ログの2重記録が発生しない。また、ログを書き込むまでは、処理結果のデータが印刷されることを防ぐことができる。本発明に係る第2の実施形態について説明する。以下構成に関しては実施例1と異なる点についてのみ説明する。本実施例は、実施例1に加え、ユーザが印刷指示をしたのちに、キャンセルを行った場合の処理に関する実施例である。[ログテーブル]本実施例における、ログテーブルの例を図6に示す。本実施例におけるログテーブルでは、図5で示したログテーブルのカラムに加え、Statusカラムを追加した。Statusカラムに設定される値は、Cancelのみである。詳細なフローについては後述するが、ユーザがキャンセル指示を行った場合にStatusカラムにCancelの値が設定される。ログテーブルに対するログ項目の格納の詳細なフローは後述するが、フロントエンド処理部311は、PC103からキャンセル要求を受信した場合は、StatusにCancelを記録する図6a。バックエンド処理部312は、処理を開始する前に、ログテーブルを確認し、JobIdによって一意に識別されるエンティティのStatusがCancelであった場合には、TimeStampを更新する図6b。ログ管理部313は、ログキューから受け取ったメッセージに基づいて、ログ管理部313は、ログキュー602に格納されているメッセージに従って、TimeStamp以外の項目を格納する。この時、項目を格納するエンティティのStatusがCancelの場合は、TimeStampには何も格納せず、Cancelではない場合には、未定と格納する。[フローチャート]図11、図12、図13を用いて、本発明におけるPC103、フロントエンド処理部311、バックエンド処理部312、ログ管理部313の処理の流れを詳細に説明する。画像形成装置102の処理の流れに関しては、実施例1で示した処理の流れと同じであるため、説明は割愛する。[PC103とフロントエンド処理部311の処理の流れ]図11を用いて、PC103とフロントエンド処理部311の処理の流れを説明する。ここで、事前条件として、S1101と同様にPC103から印刷要求がなされているものとする。S1501で、PC103はキャンセル指示をフロントエンド処理部311に送信する。この際、キャンセル対象のJobIdを送信する。S1502で、フロントエンド処理部311は、PC103から送信されたキャンセル指示を受信する。S1503で、フロントエンド処理部311は、受信したJobIdを持つエンティティがログテーブルに存在するかどうかをチェックする。存在している場合には、S1504、存在していない場合はS1505に遷移する。S1504で、フロントエンド処理部は、PC103にキャンセル処理失敗の旨を通知する。S1505で、フロントエンド処理部は、ログテーブルに受信したJobIdを持つエンティティを作成し、StatusカラムをCancelとする。S1506で、フロントエンド処理部は、PC103にキャンセル処理成功の旨を通知する。S1507で、PC103は、フロントエンド処理部311から送信されるキャンセル処理成否の情報を受信する。[バックエンド処理部312の処理の流れ]図12を用いて、バックエンド処理部312の処理の流れを詳細に説明する。S1601で、バックエンド処理部312は、ジョブキューをポーリングする。S1602で、バックエンド処理部312は、ポーリングした結果、ジョブキューにメッセージが存在した場合には、S1603、存在しない場合にはS1601に遷移する。S1603で、バックエンド処理部312は、メッセージに含まれるJobIdと同一のJobIdを持つエンティティがログテーブルに存在するかどうかをチェックする。存在する場合にはS1606、存在しない場合にはS1604に遷移する。S1604で、バックエンド処理部は、バックエンド処理部312は、送信済みJobIdリストから、すでにそのJobIdを含むメッセージをログキューに格納したかどうかをチェックする。送信済みJobIdリストにJobIdが存在している場合、S1603に、存在していない場合はS1605に遷移する。S1605では、バックエンド処理部312は、ログキューに、ログに書き込まれるはずの内容をメッセージとして格納する。この際、TimeStampは未定とし、メッセージには必ずJobIdを含む。また、送信済みJobIdリストに、ログキューに追加したメッセージに含まれるJobIdを追加する。S1606では、バックエンド処理部312は、エンティティのStatusを確認して、StatusがCancelだった場合には、S1607に、Cancelではなかった場合にはS1610に遷移する。S1607では、バックエンド処理部312は、ログテーブルのTimeStampを現在時刻に更新する。S1608では、バックエンド処理部312は、TimeStampの更新が成功したかどうかをチェックし、更新が成功した場合には、S1609、更新が失敗した場合には、S1601に遷移する。S1609では、バックエンド処理部312は、ジョブキューからメッセージを削除する。S1610では、バックエンド処理部312は、エンティティのタイムスタンプが未定であるかどうかをチェックし、未定であった場合には、S1611に、未定ではなかった場合には、S1609に遷移する。S1611では、バックエンド処理部312は、ジョブキューのメッセージの内容に従い、処理を行う。S1612では、バックエンド処理部312は、ストレージに処理の結果を格納する。この時、処理結果にログに記録されるべきTimeStampと、JobIdを紐づける。[ログ管理部313の処理の流れ]S1701では、ログ管理部313は、ログキューをポーリングする。S1702では、ログ管理部313は、ポーリングした結果、ログキューにメッセージが存在した場合には、S1703、存在しない場合にはS1701に遷移する。S1703では、ログ管理部313は、ログテーブルにメッセージに格納されたJobIdを持つエンティティが存在するかどうかをチェックする。エンティティが存在する場合には、S1704、存在しない場合にはS1706に遷移する。S1704では、ログ管理部313は、JobIdによって一意に識別されるエンティティのStatusカラムがCancelであるかどうかを確認する。StatusカラムがCancelであった場合には、S1705、Cancelでなかった場合にはS1706に遷移する。S1705では、ログ管理部313は、ログテーブルにログキューから取得したメッセージの内容を書き込む。この時、TimeStampカラムには値を設定しない。S1706では、ログ管理部313は、ログテーブルにログキューから取得したメッセージの内容を書き込む。この時、TimeStampカラムには未定の値を設定する。S1707では、ログ管理部313は、ストレージ321をポーリングして、指定のJobIdを持つデータが存在しているかどうかをチェックする。存在している場合には、S1708、存在していない場合にはS1701に遷移する。S1708では、ログ管理部313は、ストレージ321に存在するデータに紐づけられているTimeStampを取得する。S1709では、ログ管理部313は、ログテーブルにおいて、ログキューから取得したメッセージに含まれるJobIdを持つエンティティを更新する。S1710では、ログ管理部313は、ログキューからメッセージを削除する。以上説明したように、図11、図12、図13に従って処理すると、一度印刷要求をフロントエンド処理部に送信した後に、キャンセル指示をした場合でも、処理をキャンセルすることが出来る。また、ログ管理部313が任意のタイミングで、処理停止になった場合でも、その処理がキャンセルされたことを示すログを残すことが出来る。"