(57)【要約】【課題】ワークフローの実行が中断した後に他のワークフローを正常に実行できるようにする。【解決手段】第１の実行部２は、ワークフロー１１に含まれる処理のうち、リソース５を用いた１つ以上の処理を含む処理群１１−１を実行する。ロールバック処理部４は、処理群１１−１に含まれる処理１１ｂが中断したとき、リソース５の状態を処理群１１−１の実行開始前の状態に戻す。第２の実行部３は、リソース５の状態が処理群１１−１の実行開始前の状態に戻ると、ワークフロー１２に含まれる処理のうち、リソース５を用いた１つ以上の処理を含む処理群１２−１の実行を開始する。【選択図】図１
2014191604.tif 000002
【特許請求の範囲】
【請求項１】
同一のリソースを用いた処理をそれぞれ含む第１のワークフローおよび第２のワークフローの実行を制御するためのワークフロー制御プログラムにおいて、
コンピュータに、
前記第１のワークフローに含まれる処理のうち、前記リソースを用いた１つ以上の処理を含む第１の処理群を実行し、
前記第１の処理群に含まれるいずれかの処理が中断したとき、前記リソースの状態を前記第１の処理群の実行開始前の状態に戻し、
前記リソースの状態が前記第１の処理群の実行開始前の状態に戻ると、前記第２のワークフローに含まれる処理のうち、前記リソースを用いた１つ以上の処理を含む第２の処理群の実行を開始する、
処理を実行させることを特徴とするワークフロー制御プログラム。
【請求項２】
前記コンピュータに、
前記第１の処理群に含まれる処理のうち、入力操作の受け付け処理を含む処理の実行が、所定時間以内に完了しない場合に、当該処理の実行を中断する、
処理をさらに実行させることを特徴とする請求項１記載のワークフロー制御プログラム。
【請求項３】
前記コンピュータに、
前記第１のワークフローに含まれる処理それぞれについて、それぞれの処理の実行前における前記リソースの状態を示す情報を記憶部に記憶する、
処理をさらに実行させ、
前記リソースの状態を戻す処理では、前記第１の処理群に含まれる実行された処理それぞれの内容と、前記記憶部に記憶された、当該実行された処理それぞれの実行前における前記リソースの状態を示す情報とに基づいて、前記リソースの状態を前記第１の処理群の実行開始前の状態に戻す、
ことを特徴とする請求項１または２記載のワークフロー制御プログラム。
【請求項４】
前記リソースの状態を戻す処理では、前記第１の処理群に含まれる処理のうち、実行が中断した位置から前記第１の処理群の先頭位置までの処理それぞれについて、前記リソースの状態をそれぞれの処理の実行前の状態に戻すための状態復元処理を実行することを特徴とする請求項３記載のワークフロー制御プログラム。
【請求項５】
前記状態復元処理は、対応する処理に対して相反する処理であることを特徴とする請求項４記載のワークフロー制御プログラム。
【請求項６】
前記記憶部への記憶では、前記第１のワークフローに含まれる処理のうち、前記リソースに格納されたデータを更新する更新処理については、当該処理の実行前における前記リソースの状態を示す情報として、更新前のデータを前記記憶部に記憶し、
前記リソースの状態を戻す処理では、実行が中断した位置から前記第１の処理群の先頭位置までに前記更新処理が含まれる場合、前記記憶部から当該更新処理に対応する前記更新前のデータを読み出し、読み出した前記更新前のデータによって前記リソースに格納された更新後のデータを更新する処理を、当該更新処理に対応する前記状態復元処理として実行する、
ことを特徴とする請求項４記載のワークフロー制御プログラム。
【請求項７】
前記記憶部への記憶では、前記第１のワークフローに含まれる処理の中に、実行が省略された処理がある場合、当該処理について実行が省略されたことを前記記憶部に記憶し、
前記リソースの状態を戻す処理では、前記記憶部に記憶された情報に基づき、実行が中断した位置から前記第１の処理群の先頭位置までに実行が省略された処理がある場合には、当該処理に対応する前記状態復元処理をスキップする、
ことを特徴とする請求項４記載のワークフロー制御プログラム。
【請求項８】
前記記憶部への記憶では、前記第１のワークフローが第１のリソースを用いた処理と第２のリソースを用いた処理とを含む場合、前記第１のワークフローに含まれる前記第１のリソースを用いた処理それぞれについて、それぞれの処理の実行前における前記第１のリソースの状態を示す情報を前記記憶部に記憶するとともに、前記第１のワークフローに含まれる前記第２のリソースを用いた処理それぞれについて、それぞれの処理の実行前における前記第２のリソースの状態を示す情報を前記記憶部に記憶し、
前記リソースの状態を戻す処理では、前記第１のワークフローが並列分岐を含み、前記並列分岐による第１の分岐先に、前記第１のリソースを用いた１つ以上の処理を含む前記第１の処理群が含まれ、前記並列分岐による第２の分岐先に、前記第２のリソースを用いた１つ以上の処理を含む第３の処理群が含まれる場合に、前記第３の処理群に含まれるいずれかの処理が中断したとき、前記記憶部に記憶された情報に基づいて、前記第１のリソースの状態と前記第２のリソースの状態とを前記並列分岐の実行開始前の状態に戻す、
ことを特徴とする請求項３記載のワークフロー制御プログラム。
【請求項９】
同一のリソースを用いた処理をそれぞれ含む第１のワークフローおよび第２のワークフローの実行を制御するワークフロー制御装置において、
前記第１のワークフローに含まれる処理のうち、前記リソースを用いた１つ以上の処理を含む第１の処理群を実行する第１の実行部と、
前記第１の処理群に含まれるいずれかの処理が中断したとき、前記リソースの状態を前記第１の処理群の実行開始前の状態に戻すロールバック処理部と、
前記リソースの状態が前記第１の処理群の実行開始前の状態に戻ると、前記第２のワークフローに含まれる処理のうち、前記リソースを用いた１つ以上の処理を含む第２の処理群の実行を開始する第２の実行部と、
を有することを特徴とするワークフロー制御装置。
【請求項１０】
同一のリソースを用いた処理をそれぞれ含む第１のワークフローおよび第２のワークフローの実行を制御するワークフロー制御方法において、
コンピュータが、
前記第１のワークフローに含まれる処理のうち、前記リソースを用いた１つ以上の処理を含む第１の処理群を実行し、
前記第１の処理群に含まれるいずれかの処理が中断したとき、前記リソースの状態を前記第１の処理群の実行開始前の状態に戻し、
前記リソースの状態が前記第１の処理群の実行開始前の状態に戻ると、前記第２のワークフローに含まれる処理のうち、前記リソースを用いた１つ以上の処理を含む第２の処理群の実行を開始する、
ことを特徴とするワークフロー制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ワークフロー制御プログラム、装置および方法に関する。
【背景技術】
【０００２】
業務システムは、サーバ、ストレージ、ネットワーク機器などの多数の装置や、それらの装置に搭載されたＯＳ（Operating System）、ミドルウェア、アプリケーションなどのプログラムといった、多くの資源によって構成されている。このような業務システムが複数稼働している状況において、データセンタは、それらの業務システムの監視や保守作業などの運用作業を行う。
【０００３】
近年、業務システムの運用作業をワークフロー化して自動化を進める技術として、ＲＢＡ（Runbook Automation）技術が注目されている。ＲＢＡ技術により、単純作業による運用負荷の軽減、ヒューマンエラーの削減、運用コストの低減といった様々な効果が期待できる。
【０００４】
また、ワークフローに関する技術としては、例えば、ドキュメントに対して作業を行うユーザに付与されたアクセス権を管理テーブルにて管理し、フロー管理者がドキュメントフローを定義画面から設定する際、管理テーブルに基づいて当該ドキュメントに対してアクセス権が付与されたユーザのみが設定されるように制御するデータフロー管理システムがある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００３−２５６６３０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、同一のリソースを用いた処理をそれぞれ含む第１，第２のワークフローが実行されている状況では、各ワークフローに含まれる上記リソースを用いた処理は排他的に実行される。ここで、例えば第１のワークフローに含まれる上記リソースを用いた処理に異常が発生した場合、第１のワークフローの実行を中断し、排他権を第２のワークフローに移すことで、第２のワークフローの処理を続行させることができる。しかしながら、第１のワークフローの実行を中断するだけでは、その後に第２のワークフローに含まれる上記リソースを用いた処理が実行される際に異常が発生する可能性がある。
【０００７】
１つの側面では、ワークフローの実行が中断した後に他のワークフローを正常に実行できるようにしたワークフロー制御プログラム、装置および方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
１つの案では、同一のリソースを用いた処理をそれぞれ含む第１のワークフローおよび第２のワークフローの実行を制御するためのワークフロー制御プログラムが提供される。コンピュータは、このワークフロー制御プログラムに従って次のような処理を実行する。コンピュータは、第１のワークフローに含まれる処理のうち、上記のリソースを用いた１つ以上の処理を含む第１の処理群を実行する。また、コンピュータは、第１の処理群に含まれるいずれかの処理が中断したとき、上記のリソースの状態を第１の処理群の実行開始前の状態に戻す。そして、コンピュータは、上記のリソースの状態が第１の処理群の実行開始前の状態に戻ると、第２のワークフローに含まれる処理のうち、上記のリソースを用いた１つ以上の処理を含む第２の処理群の実行を開始する。
【０００９】
また、１つの案では、上記のワークフロー制御プログラムを実行するコンピュータと同様の処理を実行するワークフロー制御装置およびワークフロー制御方法が提供される。
【発明の効果】
【００１０】
１態様によれば、第１のワークフローの実行が中断した後に第２のワークフローを正常に実行できる。
【図面の簡単な説明】
【００１１】
【図１】第１の実施の形態に係る運用システムの構成例および動作例を示す図である。
【図２】第２の実施の形態に係る運用システムの構成例を示す図である。
【図３】運用自動化サーバのハードウェア構成例を示す図である。
【図４】運用自動化サーバの処理機能の構成例を示すブロック図である。
【図５】運用自動化サーバの処理全体の例を示すフローチャートである。
【図６】ワークフローに定義されている運用操作部品のモデル化について説明するための図である。
【図７】同一の操作対象／同一の変数利用に基づいて排他区間を決定する処理について説明するための図である。
【図８】排他区間のロックの競合関係を説明するための図である。
【図９】排他区間の結合の例を示す図である。
【図１０】排他区間の分割の例を示す図である。
【図１１】最も大きい実行優先度を持つ排他区間の抽出処理、および次の運用操作部品の実行判断処理の例を示す図である。
【図１２】最も大きい実行優先度を持つ排他区間の抽出処理、および次の運用操作部品の実行判断処理の例を示す図である。
【図１３】ワークフロー実行中に実行優先度が変更された場合のワークフローの排他権（実行権）獲得例を示す図である。
【図１４】ワークフロー実行中に実行優先度が変更された場合のワークフローの排他権（実行権）獲得例を示す図である。
【図１５】排他区間の処理を中断させた場合の他の排他区間への影響について説明するための図である。
【図１６】ロールバック処理の手順を示す図である。
【図１７】ロールバック処理により他のワークフローの実行が再開される例を示す図である。
【図１８】人の承認処理待ちにより排他区間の処理が進行しなくなるケースについて説明するための図である。
【図１９】並列分岐の分岐先の処理で異常が発生した場合について説明するための図である。
【図２０】運用操作部品の実行が省略された場合のロールバック処理について説明するための図である。
【図２１】ワークフロー管理テーブルの例を示す図である。
【図２２】運用操作部品定義テーブルの例を示す図である。
【図２３】変数管理テーブルの例を示す図である。
【図２４】インスタンス管理テーブルの例を示す図である。
【図２５】排他情報管理テーブルの例を示す図である。
【図２６】排他獲得履歴テーブルの例を示す図である。
【図２７】ユーザ係数テーブルの例を示す図である。
【図２８】起動方式係数テーブルの例を示す図である。
【図２９】時間係数テーブルの例を示す図である。
【図３０】部品対定義テーブルの例を示す図である。
【図３１】ワークフロー実行部の処理例を示すフローチャートである。
【図３２】排他制御部の処理例を示すフローチャートである。
【図３３】ワークフロー開始時の排他制御処理の例を示すフローチャートである。
【図３４】排他情報の仮決定の処理例を示すフローチャートである。
【図３５】排他情報の実行優先度の計算処理例を示すフローチャートである。
【図３６】ワークフロー動作中の排他制御処理の例を示すフローチャートである。
【図３７】排他アクション決定処理の例を示すフローチャートである。
【図３８】計時処理の例を示すフローチャートである。
【図３９】応答情報受信時の処理例を示すフローチャートである。
【図４０】ロールバック処理の例を示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下、本発明の実施の形態について図面を参照して説明する。
〔第１の実施の形態〕
図１は、第１の実施の形態に係る運用システムの構成例および動作例を示す図である。図１に示す運用システムは、ワークフロー制御装置１と、１つ以上のリソース（資源）とを有する。図１では例として、１つのリソース５を示す。
【００１３】
ワークフロー制御装置１は、複数のワークフローの実行を制御する。各ワークフローには、１つ以上の処理が含まれている。ワークフローに含まれる個々の処理とは、例えば、リソースの監視や保守などのためにそのリソースに何らかの操作を行う処理である。リソースとは、例えば、ワークフロー制御装置１の外部の装置、外部の装置で実行されるプログラムなどである。
【００１４】
なお、各ワークフローに含まれる処理の内容や処理順は、例えば、図示しないワークフロー定義情報に定義されている。この場合、「ワークフローを実行する」とは、ワークフロー定義情報に定義された情報に従って処理を実行することである。
【００１５】
ワークフロー制御装置１は、第１の実行部２、第２の実行部３およびロールバック処理部４を有する。第１の実行部２、第２の実行部３およびロールバック処理部４の処理は、例えば、ワークフロー制御装置１が備えるプロセッサが所定のプログラムを実行することによって実現される。
【００１６】
第１の実行部２は、ワークフロー１１を実行する。第２の実行部２は、ワークフロー１２を実行する。ワークフロー１１，１２のそれぞれには、同一のリソース５を用いた処理が含まれている。図１の例では、ワークフロー１１には、それぞれリソース５を用いた処理１１ａ〜１１ｃを含む処理群１１−１が含まれている。また、ワークフロー１２には、それぞれリソース５を用いた処理１２ａ〜１２ｃを含む処理群１２−１が含まれている。
【００１７】
なお、例えば、それぞれ同一のリソース５を用いて実行される処理群１１−１と処理群１２−１は排他的に実行される。これにより、各処理群における処理の整合性が保たれる。
【００１８】
ロールバック処理部４は、あるワークフローの処理群に含まれるいずれかの処理が中断したとき、その処理群の処理対象のリソースの状態を、中断した処理が含まれる処理群の実行開始前の状態に戻す。リソースの状態が、この処理群の実行開始前の状態に戻されると、同じリソースを用いて処理を行う他のワークフローの処理群の実行が開始される。
【００１９】
次に、ワークフロー１１の処理群１１−１が実行されている場合の処理例について説明する。第１の実行部２は、処理群１１−１の各処理を順に実行する（ステップＳ１）。ここで、処理群１１−１に含まれる処理１１ｂの実行が中断したものとする（ステップＳ２）。なお、処理１１ｂの実行が中断されるケースとしては、例えば、処理１１ｂの実行時に異常が発生した場合などが考えられる。
【００２０】
ロールバック処理部４は、処理１１ｂの実行が中断したとき、リソース５の状態を、処理群１１−１の実行開始前の状態に戻す（ステップＳ３）。リソース５の状態が処理群１１−１の実行前の状態に戻ると、第２の実行部３は、第２のワークフロー１２の処理群１２−１の実行を開始する（ステップＳ４）。
【００２１】
上記処理では、処理１１ｂの実行が中断したとき、リソース５の状態が処理群１１−１の実行前の状態に戻るまで、他のワークフロー１２の処理群１２−１の実行が開始されない。これにより、処理群１２−１の実行時に異常が発生する確率を低減することができる。
【００２２】
例えば、処理群の実行が中断されて、処理群の処理のうちその中断位置より後に存在する処理が実行されないことが、その後に同じリソースを用いて処理する他のワークフローの処理群の実行に悪影響を与えるケースがある。その例として、処理が中断した処理群の中に対になって実行される２つの処理が含まれているケースがある。ここでは、このように対になって実行される処理のうち、先に実行される処理を「前処理」と呼び、後に実行される処理を「後処理」と呼ぶ。以下、処理１１ａが前処理であり、処理１１ｃが後処理であるものとする。また、ワークフロー１２の処理１２ａの処理内容は、処理１１ａと同様であるものとする。
【００２３】
前処理（処理１１ａ）の実行後に後処理（処理１１ｃ）が実行されることにより、例えば、その後に他のワークフローに含まれる同じリソースを用いた同じ前処理（処理１２ａ）が行われる際に、リソースの状態がその前処理（処理１２ａ）を正常に実行可能な状態になることが保証される。また、後処理（処理１１ｃ）は、対応する前処理（処理１１ａ）とこの後処理（処理１１ｃ）との間の処理（処理１１ｂ）によってリソースに施された設定変更やプログラムの変更を、リソースに正しく適用して、リソースを安定的に動作させるような処理であることもある。
【００２４】
上記の例のように、ワークフロー１１の処理群１１−１の処理が正常に完了せずに途中で中断すると、処理群１１−１に含まれる後処理が実行されない場合があり得る。この場合、処理が中断したときに処理群１１−１について何の処置も施さずに、ワークフロー１２の処理群１２−１の実行を開始させてしまうと、処理群１２−１の実行時に異常が発生する可能性が高まる。例えば、処理群１２−１に、処理群１１−１に含まれていた前処理（処理１１ａ）と同じ処理（処理１２ａ）が含まれる場合、この処理（処理１２ａ）が正常に実行されない可能性が生じる。また、処理群１１−１の後処理（処理１１ｃ）が実行されないことでリソース５が不安定な状態のままになり、その結果、処理群１２−１の実行時に異常が発生することもあり得る。
【００２５】
これに対し、本実施の形態のワークフロー制御装置１は、処理１１ｂの実行が中断したとき、リソース５の状態を処理群１１−１の実行前の状態に戻す。これにより、リソース５の状態は、少なくとも、対応する後処理（処理１１ｃ）の実行が必要となる前処理（処理１１ａ）が実行される前の状態に確実に戻る。この状態は、例えば、処理群１１−１内の前処理（処理１１ａ）を正常に実行可能な状態であるとともに、処理群１２−１内の同じ前処理（処理１２ａ）を正常に実行可能な状態でもある。このため、この後に処理群１２−１内の同じ前処理（処理１２ａ）が実行された場合でも、この前処理（処理１２ａ）は正常に実行可能となる。また、例えば、リソース５の状態が処理群１１−１の実行前の状態に戻ることで、リソース５の状態が不安定な状態から安定した状態に戻ることもある。
【００２６】
従って、リソース５の状態が処理群１１−１の実行前の状態に戻った後、他のワークフロー１２の処理群１２−１の実行が開始されることで、処理群１２−１の実行時に異常が発生する確率が低くなる。
【００２７】
〔第２の実施の形態〕
図２は、第２の実施の形態に係る運用システムの構成例を示す図である。図２に示す運用システムは、運用自動化サーバ１００と、１つ以上の業務サーバ２１０とを含む。運用自動化サーバ１００と業務サーバ２１０とは、ネットワーク２００を介して接続されている。業務サーバ２１０は、各種の業務処理を実行する。運用自動化サーバ１００は、業務サーバ２１０の監視や保守作業などの運用作業を自動化して管理する。運用自動化サーバ１００は、ＲＢＡ技術を用いて、業務サーバ２１０の運用作業手順が記述されたワークフローに従って業務サーバ２１０の運用を管理する。
【００２８】
図３は、運用自動化サーバのハードウェア構成例を示す図である。運用自動化サーバ１００は、例えば、図３に示すようなコンピュータとして実現される。
運用自動化サーバ１００は、プロセッサ１０１によって装置全体が制御されている。プロセッサ１０１には、バス１０８を介して、ＲＡＭ（Random Access Memory）１０２と複数の周辺機器が接続されている。プロセッサ１０１は、マルチプロセッサであってもよい。プロセッサ１０１は、例えばＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、またはＰＬＤ（Programmable Logic Device）である。またプロセッサ１０１は、ＣＰＵ、ＭＰＵ、ＤＳＰ、ＡＳＩＣ、ＰＬＤのうちの２以上の要素の組み合わせであってもよい。
【００２９】
ＲＡＭ１０２は、運用自動化サーバ１００の主記憶装置として使用される。ＲＡＭ１０２には、プロセッサ１０１に実行させるＯＳのプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ１０２には、プロセッサ１０１による処理に必要な各種データが格納される。
【００３０】
バス１０８に接続されている周辺機器としては、ＨＤＤ（Hard Disk Drive）１０３、グラフィック処理装置１０４、入力インタフェース１０５、読み取り装置１０６および通信インタフェース１０７がある。
【００３１】
ＨＤＤ１０３は、運用自動化サーバ１００の補助記憶装置として使用される。ＨＤＤ１０３には、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。なお、補助記憶装置としては、ＳＳＤ（Solid State Drive）などの他の種類の不揮発性記憶装置を使用することもできる。
【００３２】
グラフィック処理装置１０４には、表示装置１０４ａが接続されている。グラフィック処理装置１０４は、プロセッサ１０１からの命令に従って、画像を表示装置１０４ａの画面に表示させる。表示装置としては、ＣＲＴ（Cathode Ray Tube）を用いた表示装置や液晶表示装置などがある。
【００３３】
入力インタフェース１０５には、入力装置１０５ａが接続されている。入力インタフェース１０５は、入力装置１０５ａから出力される信号をプロセッサ１０１に送信する。入力装置１０５ａとしては、キーボードやポインティングデバイスなどがある。ポインティングデバイスとしては、マウス、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【００３４】
読み取り装置１０６には、可搬型記録媒体１０６ａが脱着される。読み取り装置１０６は、可搬型記録媒体１０６ａに記録されたデータを読み取ってプロセッサ１０１に送信する。可搬型記録媒体１０６ａとしては、光ディスク、光磁気ディスク、半導体メモリなどがある。
【００３５】
通信インタフェース１０７は、ネットワーク２００を介して、業務サーバ２１０などの他の装置との間でデータの送受信を行う。
以上のようなハードウェア構成によって、運用自動化サーバ１００の処理機能を実現することができる。なお、図２に示した業務サーバ２１０、および図１に示したワークフロー制御装置１も、図３に示したハードウェアを有するコンピュータとして実現することができる。
【００３６】
図４は、運用自動化サーバの処理機能の構成例を示すブロック図である。運用自動化サーバ１００は、排他制御部１１０およびワークフロー実行部１２０を備える。排他制御部１１０およびワークフロー実行部１２０の処理は、例えば、運用自動化サーバ１００が備えるプロセッサ１０１が所定のプログラムを実行することによって実現される。
【００３７】
排他制御部１１０は、ワークフローの実行を管理する。ここで、排他区間とは、ワークフローにおいて排他制御を行う所定の区間をいう。排他制御とは、複数のワークフローが同時に動作して、共通の資源を同時に使用すると競合状態になる場合に、いずれかのワークフローを優先して動作させ、その他のワークフローを処理待ち状態にして、競合を回避させることをいう。
【００３８】
排他制御部１１０は、ワークフローの実行時に排他区間を動的に決定する。排他制御部１１０は、排他区間の決定に際して、未来を予測した操作の実行優先度に従ってワークフローの実行順を制御する。
【００３９】
また、排他制御部１１０は、排他区間に含まれる処理が異常発生などによって中断した場合、その排他区間の先頭位置までロールバックを行った上で、排他状態を解除する。これにより、この排他区間における操作対象の資源を、中断した処理が含まれるワークフローとは別のワークフローが利用して処理を行うことができるようにし、処理の停滞を防止する。
【００４０】
ワークフロー実行部１２０は、排他制御部１１０の制御の下でワークフローを実行する。ワークフロー実行部１２０は、ワークフローごとに個別に設けられる。従って、複数のワークフローが実行される場合、ワークフロー実行部１２０も複数存在する。
【００４１】
また、運用自動化サーバ１００は、排他制御部１１０およびワークフロー実行部１２０の処理時に利用される各種の情報を記憶する記憶部１３０を備える。記憶部１３０には、ワークフロー管理テーブル１３１、運用操作部品定義テーブル１３２、変数管理テーブル１３３、インスタンス管理テーブル１３４、排他情報管理テーブル１３５、排他獲得履歴テーブル１３６、ユーザ係数テーブル１３７、起動方式係数テーブル１３８、時間係数テーブル１３９および部品対定義テーブル１４０が記憶される。
【００４２】
ワークフロー管理テーブル１３１には、各ワークフローに含まれる運用操作部品の情報が格納される。運用操作部品定義テーブル１３２には、運用操作部品の定義情報が格納される。
【００４３】
変数管理テーブル１３３には、インスタンスで利用される変数名や変数値が格納される。インスタンス管理テーブル１３４には、インスタンス単位で管理される情報が格納される。
【００４４】
排他情報管理テーブル１３５には、排他区間に関する情報が格納される。排他獲得履歴テーブル１３６には、排他区間の排他権（実行権）の獲得の履歴情報が格納される。
ユーザ係数テーブル１３７には、ユーザごとのユーザ係数が格納される。起動方式係数テーブル１３８には、ワークフローの起動方法ごとの起動方式係数が格納される。時間係数テーブル１３９には、処理が完了するまでの残り時間ごとの時間係数が格納される。
【００４５】
部品対定義テーブル１４０には、対となる運用操作部品に関する情報が格納される。この部品対定義テーブル１４０は、ロールバック時に排他制御部１１０によって参照される。
【００４６】
次に、運用自動化サーバ１００の処理について詳しく説明する。以下の説明では、まず、運用自動化サーバ１００の基本的な処理である「ワークフロー実行時における動的な排他制御」について説明し、その後に「処理中断時のロールバック処理」について説明する。
【００４７】
＜ワークフロー実行時における動的な排他制御＞
運用自動化サーバ１００は、複数のワークフローの実行時において、各ワークフローの進捗状況に応じて適切な排他区間を動的に決定する。
【００４８】
排他制御部１１０は、ワークフローの動作開始時に、運用操作部品の種類と利用している資源（操作対象や変数）とから排他区間を仮決定する。排他制御部１１０は、仮決定した排他区間を基準として、ワークフローの動作中に他のワークフローの実行状況と排他状況を考慮して排他区間を動的に決定する。ここで、運用操作部品とは、ワークフローに含まれる各処理を業務サーバ２１０に自動的に実行させるように、業務サーバ２１０に対する運用操作を自動的に実行するよう記述したスクリプトである。
【００４９】
また、排他制御部１１０は、排他を獲得する際に、獲得済みの排他と、排他を獲得していない他のワークフローの排他取得予定情報、実行優先度を考慮することで、予測に基づいた排他制御を行う。そのために、排他制御部１１０は、ワークフローの作業の順序を適宜変更する。
【００５０】
図５は、運用自動化サーバの処理全体の例を示すフローチャートである。運用自動化サーバ１００へのワークフローの登録時に、排他制御部１１０は、モデル化処理（ステップＳ１１）、排他区間の初期設定処理（ステップＳ１２）を行う。また、ワークフローの動作時に、排他制御部１１０は、排他区間の再設定処理（ステップＳ１３）を行う。
【００５１】
まず、ワークフロー登録時の処理について説明する。モデル化処理（ステップＳ１１）では、次のような処理が行われる。
排他制御部１１０は、登録されたワークフローの運用操作部品の内容に基づいて、運用操作部品をグループ分けし、操作重要度を定義する。例えば、排他制御部１１０は、業務サーバ２１０への情報の登録、ネットワークの設定などの設定系の運用操作部品の操作重要度を、「高（または「３」）」に設定する。また、排他制御部１１０は、ＯＳの再起動、サービスの起動などの操作系の運用操作部品の操作重要度を、例えば、「中（または「２」）」に設定する。また、排他制御部１１０は、サーバ／サービスの状態確認などの参照・確認・通知系の運用操作部品の操作重要度を、例えば、「低（または「１」）」に設定する。これにより、次の図６で説明するように、ワークフローに定義されている運用操作部品をモデル化することができる。モデル化したワークフローによって、各運用操作部品の操作重要度が決定される。
【００５２】
図６は、ワークフローに定義されている運用操作部品のモデル化について説明するための図である。図６の例では、ワークフローＡには、「操作対象、資源の取得」２１、「サービスの停止」２２、「サービスの停止確認」２３、「サーバ停止」２４、「サーバ起動」２５、「サーバの起動確認」２６、「エラー通知メール」２７，２８の各運用操作部品が定義されている。また、ワークフローＢには、「操作対象、資源の取得」３１、「ソフトウェアのインストール」３２、「情報登録」３３、「サーバ再起動」３４、「サーバの起動確認」３５、「メール送信」３６、「エラー通知メール」３７の各運用操作部品が定義されている。
【００５３】
ワークフローＡがモデル化されると、「操作対象、資源の取得」２１は「参照系」２１−１にモデル化され、重要度：１が設定される。「サービスの停止」２２は「操作系」２２−１にモデル化され、重要度：２が設定される。「サービスの停止確認」２３は「参照系」２３−１にモデル化され、重要度：１が設定される。「サーバ停止」２４は「操作系」２４−１にモデル化され、重要度：２が設定される。「サーバ起動」２５は「操作系」２５−１にモデル化され、重要度：２が設定される。「サーバの起動確認」２６は「参照系」２６−１にモデル化され、重要度：１が設定される。「エラー通知メール」２７，２８は通知系２７−１，２８−１にそれぞれモデル化される。
【００５４】
また、ワークフローＢがモデル化されると、「操作対象、資源の取得」３１は「参照系」３１−１にモデル化され、重要度：１が設定される。「ソフトウェアのインストール」３２は「設定系」３２−１にモデル化され、重要度：３が設定される。「情報登録」３３は「設定系」３３−１にモデル化され、重要度：３が設定される。「サーバ再起動」３４は「操作系」３４−１にモデル化され、重要度：２が設定される。「サーバの起動確認」３５は「参照系」３５−１にモデル化され、重要度：１が設定される。「メール送信」３６および「エラー通知メール」３７は、「通知系」３６−１，３７−１にそれぞれモデル化される。
【００５５】
次に、排他区間の初期設定処理（図５のステップＳ１２）では、次のような処理が行われる。
排他制御部１１０は、次の図７および図８で説明するように、（ｉ）同一の操作対象／同一の変数利用、および（ｉｉ）各運用操作部品で利用する資源の流れ（変数の受け渡し）に基づいて、排他区間を自動的に決定する。具体的には、排他制御部１１０は、連続する運用操作部品について、操作対象サーバが同じか否か、または操作対象サーバと操作内容（サービス、インストールするソフトウェア）が同じか否かに基づいて、排他区間を決定する。なお、［排他区間：Ａ］の“Ａ”を「排他区間名」と定義する。
【００５６】
例えば、操作対象がサーバＡの区間は、［排他区間：Ａ］で定義される。操作対象がサーバＢの区間は、［排他区間：Ｂ］で定義される。また、［排他区間：Ａ］において、ServiceXに対する操作の区間は［排他区間：Ａ＋Ｘ］で定義される。また、［排他区間：Ａ］において、InstallSoftYに対する操作の区間は［排他区間：Ａ＋Ｙ］で定義される。また、運用操作部品の出力情報が後続の運用操作部品の入力となっている区間は、［排他区間：Ｃ］で定義される。
【００５７】
図７は、同一の操作対象／同一の変数利用に基づいて排他区間を決定する処理について説明するための図である。
図７（Ａ）において、運用操作部品２２−１，２３−１について、操作対象サーバは「サーバＡ」で同じであり、サービスも「サービスＸ」で同じである。この場合、排他制御部１１０は、運用操作部品２２−１，２３−１について［排他区間：Ａ＋Ｘ］と決定する。運用操作部品２４−１について、操作対象サーバはサーバＡである。この場合、排他制御部１１０は、運用操作部品２４−１について［排他区間：Ａ］と決定する。運用操作部品２５−１，２５−６について、操作対象サーバはサーバＢである。この場合、排他制御部１１０は、運用操作部品２５−１，２５−６について［排他区間：Ｂ］と決定する。
【００５８】
図７（Ｂ）において、排他制御部１１０は、運用操作部品３２−１，３３−１について［排他区間：Ａ＋Ｙ］と決定し、運用操作部品３４−１，３５−１について［排他区間：Ａ］と決定する。
【００５９】
なお、排他制御部１１０は、各運用操作部品で利用する資源の流れ（変数の受け渡し）に基づいて、排他区間を決定することもできる。この処理では、排他制御部１１０は、運用操作部品の出力値が後続の運用操作部品の入力値になっているか否かに基づいて、排他制御の範囲を選定する。例えば、あるサーバ（サーバＣとする）から取得したイベントログ（ログ情報）がデータベースサーバに格納される場合、排他制御部１１０は、その区間について［排他区間：Ｃ］と定義する。
【００６０】
各排他区間におけるロックの競合関係は、排他区間名が以下のいずれかの場合である。
・排他を獲得する排他区間名が、排他獲得済みの排他区間名と部分一致する。
・排他獲得済みの排他区間名が、排他を獲得する排他区間名と部分一致する。
【００６１】
従って、排他制御部１１０は、排他を獲得する排他区間名が、排他獲得済みの排他区間名と部分一致するか、または、排他獲得済みの排他区間名が、排他を獲得する排他区間名と部分一致するかを判定する。排他を獲得する排他区間名が、排他獲得済みの排他区間名と部分一致すると判定した場合、排他制御部１１０は、排他ロックが競合関係にあると判定する。また、排他獲得済みの排他区間名が、排他を獲得する排他区間名と部分一致すると判定した場合、排他制御部１１０は、排他ロックが競合関係にあると判定する。
【００６２】
図８は、排他区間のロックの競合関係を説明するための図である。例えば、排他獲得済みの排他区間が［排他区間：Ａ］の場合であって、排他を獲得する排他区間が［排他区間：Ａ］、［排他区間： Ａ＋Ｘ］または［排他区間： Ａ＋Ｙ］の場合、排他ロックは競合関係になる。一方、排他獲得済みの排他区間が［排他区間：Ａ］の場合であって、排他を獲得する排他区間が［排他区間：Ｂ］、または［排他区間：Ｃ］の場合、排他ロックは競合関係にならない。
【００６３】
次に、ワークフロー動作時の処理について説明する。排他区間の再設定処理（図５のステップＳ１３）では、次のような処理が行われる。
ワークフローが起動すると、排他制御部１１０は、ワークフローの内容を取得して分析する。そして、ワークフローに含まれるすべての運用操作部品について次の処理が実行される。排他制御部１１０は、起動したワークフローにおいて、排他区間の調整および決定を行い、また、動作中のワークフローにおいて、排他区間の調整および決定を行う。ワークフロー実行部１２０は、その調整および決定結果に基づいて、運用操作部品を実行するように、業務サーバ２１０に命令する。
【００６４】
以下、ワークフロー動作時の上記処理について詳細を示す。
（１−１）ワークフローの内容を取得・分析の詳細
ワークフロー起動時に、排他制御部１１０は、実行優先度を以下の処理により決定する。まず、排他制御部１１０は、あらかじめ運用自動化サーバ１００の記憶装置に登録された、ワークフローに定義されている運用操作部品および利用する資源の情報を取得する。次に、排他制御部１１０は、各運用操作部品で利用する資源の情報（操作対象の情報／変数の内容）に基づいて、図５のステップＳ１２と同様の処理を再度実行し、次の場合に排他区間を再設定する。すなわち、排他制御部１１０は、異なる変数が入力される排他区間において、その変数が同じ値に変更された場合にはその排他区間を結合する。また、排他制御部１１０は、同じ変数で設定した排他区間において、その変数の内容が変更された場合にその排他区間を分割する。
【００６５】
図９は、排他区間の結合の例を示す図である。この図９の例は、異なる変数で設定した排他区間において、その変数が同じ値に変更された場合に、その排他区間が結合されることを示す。排他区間の結合前では、運用操作部品２２−１〜２４−１については［排他区間：Ａ］が設定され、運用操作部品２５−１〜２６−１については［排他区間：Ｂ］が設定されている。
【００６６】
その後、ワークフローが実行されて、変数の値に変化が生じたとする。このとき、運用操作部品２２−１〜２４−１に設定された変数Ａの値は「ServerA」であり、運用操作部品２５−１〜２６−１に設定された変数Ｂの値も「ServerA」である。この場合、隣接する［排他区間：Ａ］と［排他区間：Ｂ］において変数Ａの値と変数Ｂの値が同じなので、排他制御部１１０は、［排他区間：Ａ］と［排他区間：Ｂ］とを結合し、［排他区間：Ａ］とする。
【００６７】
図１０は、排他区間の分割の例を示す図である。この図１０の例は、同じ変数で設定した排他区間において、変数の内容が変更された場合に、排他区間が分割されることを示す。排他区間の分割前では、運用操作部品２２−１〜２６−１については［排他区間：Ａ］が設定されている。
【００６８】
その後、ワークフローが実行されて、変数の値に変化が生じたとする。このとき、運用操作部品２２−１〜２３−１に設定された変数Ａの値は「ServerA」である。一方、運用操作部品２４−１〜２６−１に設定された変数Ａの値は「ServerB」である。この場合、運用操作部品２２−１〜２３−１と運用操作部品２４−１〜２６−１の間で変数Ａの値が異なるので、排他制御部１１０は、［排他区間：Ａ］を分割し、［排他区間：Ａ］と［排他区間：Ｂ］を形成する。
【００６９】
次に、排他制御部１１０は、以下の式（１）に従い、ワークフローを起動したユーザと、ワークフローの起動の仕方と、完了予定時刻までの残り時間とに応じて、操作緊急度を決定する。
【００７０】
操作緊急度＝ユーザ係数×起動方式係数×時間係数      ・・・（１）
ユーザ係数は、ワークフローを起動したユーザのユーザ係数である。ユーザ係数としては、例えば、管理者ユーザの場合にはユーザ係数＝３．０が設定され、一般ユーザの場合にはユーザ係数＝２．０が設定される。
【００７１】
起動方式係数としては、例えば、ワークフローの起動が手動起動の場合には、起動方式係数＝２．０が設定される。ワークフローの起動が時間指定によるスケジュール起動の場合には、起動方式係数＝３．０が設定される。ワークフローの起動が監視製品からの通知による起動の場合には、起動方式係数＝３．０が設定される。
【００７２】
時間係数としては、例えば、完了予定時刻までの残り時間が１０分以内の場合には時間係数＝１．５が設定され、それ以外、または、完了予定時刻指定なしの場合には時間係数＝１．０が設定される。
【００７３】
次に、排他制御部１１０は、以下の式（２）に従い、ワークフローの実行優先度を仮決定する。
実行優先度＝（Σ操作重要度）×操作緊急度      ・・・（２）
ここで、例として、操作系の運用操作部品［１］および参照系の運用操作部品［２］に排他区間が設定されたワークフローＡについて、仮決定される実行優先度の計算例を示す。ワークフローＡについては、ユーザ係数＝２．０、起動方式係数＝１．０、時間係数＝１．５が設定されているものとする。
【００７４】
運用操作部品［１］の操作重要度は「２」であり、運用操作部品［２］の操作重要度は「１」であるから、Σ操作重要度＝２＋１＝３となる。また、式（１）から、操作緊急度＝２．０×１．０×１．５＝３．０と算出される。よって、式（２）から、実行優先度＝３．０×３．０＝９．０と算出される。
【００７５】
（１−２）ワークフローの動作中に仮決定されたワークフローの排他区間の調整・決定
次に、排他制御部１１０は、ワークフローの動作中に仮決定されたワークフローの排他区間の調整・決定を行う。ワークフローが動作した場合、排他制御部１１０は、ワークフローの分岐や運用操作部品の処理結果によって、実行優先度を変更する。また、排他制御部１１０は、実行優先度に応じて、実行している運用操作部品の次の運用操作部品を、即時実行させるか待たせるかを決定する。これらの処理は、以下の手順（Ｉ）〜（Ｖ）により実行される。
【００７６】
（Ｉ）排他制御部１１０は、ワークフロー実行部１２０から所定の通知を受信する。
（ＩＩ）排他制御部１１０は、前述した「（１―１）ワークフローの内容を取得・分析の詳細」の処理を実行し、排他区間と実行優先度を決定し直す。
【００７７】
（ＩＩＩ）排他制御部１１０は、上記（ＩＩ）で再決定した排他区間と実行優先度を記憶装置に格納する。
（ＩＶ）排他制御部１１０は、実行中のワークフローから、最も大きい実行優先度を持つ排他区間を抽出する。
【００７８】
（Ｖ）排他制御部１１０は、次の運用操作部品を即時実行するか待たせるかを判断する。ここでは、排他制御部１１０は、対象となるワークフローの排他取得が決定した場合、運用操作部品を実行する。また、他のワークフローの排他取得が優先となった場合、排他制御部１１０は、その実行作業を遅延させる。
【００７９】
上記（ＩＶ），（Ｖ）の処理について、以下の図１１〜図１６を用いて説明する。
図１１，図１２は、最も大きい実行優先度を持つ排他区間の抽出処理、および次の運用操作部品の実行判断処理の例を示す図である。図１１，図１２では、ワークフローＡ，Ｂ，Ｃを並列に実行させる場合について説明する。図１１，図１２の各ワークフローにおいて、下向きの三角マークは、現在の処理位置を示す。また、後述する排他権（実行権）を獲得している間、そのワークフローは、処理を実行することができる。
【００８０】
図１１において、ワークフローＡの［排他区間：Ａ＋Ｘ］について処理しようとした場合、ワークフローＣの［排他区間：Ａ＋Ｘ］の実行優先度が高いため、ワークフローＡはワークフローＣの排他が解放されるまで待ち状態になる（ステップＳ２１）。
【００８１】
ワークフローＢの［排他区間：Ａ＋Ｙ］は［排他区間：Ａ＋Ｘ］と競合関係にないため、ワークフローＢは排他権（実行権）を獲得する（ステップＳ２２）。
ワークフローＣの［排他区間：Ａ＋Ｘ］については、現時点でのワークフローＡ，Ｂ，Ｃの排他区間で最も実行優先度が高いため、ワークフローＣは、排他権（実行権）を獲得する（ステップＳ２３）。
【００８２】
次に、図１２に示すように、ワークフローＣの［排他区間：Ａ＋Ｘ］の処理が完了した場合、［排他区間：Ａ＋Ｘ］の排他状態が解放される。その結果、ワークフローＡの［排他区間：Ａ＋Ｘ］が最も実行優先度が高いため、ワークフローＡは、排他権（実行権）を獲得する（ステップＳ２４）。
【００８３】
ワークフローＣの［排他区間：Ａ］について、ワークフローＣは、ワークフローＡの［排他区間：Ａ＋Ｘ］の排他状態が解放されるまで、待ち状態になる（ステップＳ２５）。
この後、図示しないが、ワークフローＡの［排他区間：Ａ＋Ｘ］の処理が完了した場合、［排他区間：Ａ＋Ｘ］の排他状態が解放される。ここで、ワークフローＢ，Ｃの［排他区間：Ａ］において実行優先度が同じである場合、管理者権限のため（すなわち、ユーザ係数が最も大きいため）、ワークフローＣが優先して排他権（実行権）を獲得する。
【００８４】
図１３，図１４は、ワークフロー実行中に実行優先度が変更された場合のワークフローの排他権（実行権）獲得例を示す図である。
図１３に示すように、ワークフローＡの［排他区間：Ａ］について、ワークフローＡが排他権（実行権）を獲得した場合、ワークフローＢは［排他区間：Ａ］の排他権（実行権）の獲得前であるが、ワークフローＢの実行優先度が最も高い。このため、ワークフローＡの［排他区間：Ａ］については、ワークフローＢが［排他区間：Ａ］の排他権（実行権）を獲得して実行し、その排他状態が解放されるまで、ワークフローＡは待ち状態となる（ステップＳ３１）。
【００８５】
その後、図１４に示すように、時間経過により時間係数が変化する。その結果、ワークフローＡの［排他区間：Ａ］の実行優先度が変更される。このとき、ワークフローＡの［排他区間：Ａ］の実行優先度が最も高くなるため、ワークフローＡは、排他権（実行権）を獲得して処理を行う（ステップＳ３２）。
【００８６】
以上の図１１〜図１４に示したように、各ワークフローにおける同一資源についての排他区間の処理は、実行優先度が高い順に実行される。また、実行優先度が変更されると、ワークフロー間で実行優先度が再度比較され、その時点で最も大きい実行優先度を有する排他区間の処理が先に実行される。
【００８７】
＜処理中断時のロールバック処理＞
上記処理により、同一資源を操作する排他区間を含むワークフローが複数存在する場合には、実行優先度の高い排他区間が排他権を獲得して、この排他区間の処理が優先的に実行される。そして、実行された排他区間の処理が完了するまで、他のワークフローの排他区間の処理は待ち状態となる。
【００８８】
しかしながら、排他権を獲得した排他区間の処理の途中で異常が発生し、排他区間の処理が最後まで正常に完了しない場合があり得る。あるいは、排他権を獲得した排他区間の処理の実行が大幅に遅延する場合もあり得る。後者の例としては、排他区間に人の承認を必要とする処理が含まれ、この処理において長時間人の承認待ち状態が続いているというケースがある。
【００８９】
これらの場合、排他権を獲得している排他区間の処理を中断させて、排他権を他の排他区間に付与しないと、他の排他区間を含むワークフローの処理を継続することができない。しかし、単に排他区間の処理を中断させて、その他の排他区間の処理を実行させるだけでは、中断させた排他区間以外の排他区間においても処理の異常が発生する可能性がある。
【００９０】
図１５は、排他区間の処理を中断させた場合の他の排他区間への影響について説明するための図である。
図１５において、ワークフローＡの［排他区間：Ａ］に含まれる運用操作部品４１と、ワークフローＢの［排他区間：Ａ］に含まれる運用操作部品４４は、ともに同じ操作を行うものである。また、ワークフローＡの［排他区間：Ａ］に含まれる運用操作部品のうち、末尾に位置する運用操作部品４３の処理内容は、それより前（この例では先頭）に位置する運用操作部品４１に対応する後処理であるものとする。
【００９１】
後処理は、例えば、操作対象資源の状態を前処理とは逆の状態に変化させるものである。例えば、運用操作部品４１がサービスを停止させるものである場合、後処理である運用操作部品４３はサービスを起動させるものである。このような運用操作部品４３が実行されることで、サービスの状態を「サービスを停止させる」という処理の実行時に想定される正しい状態、すなわち起動状態に変化させることができる。従って、運用操作部品４３が実行された後、運用操作部品４１と同じ内容の運用操作部品（例えば運用操作部品４４）が実行されたときに、サービスの状態が、その運用操作部品の実行時に想定される正しい状態であることが保証される。
【００９２】
また、後処理は、操作対象資源の動作が安定していることを保証するための処理である場合もある。例えば、運用操作部品４１がサービスを停止させるものであり、運用操作部品４３はサービスを起動させるものであるとする。また、これらの間に実行される運用操作部品４２が、サービスの設定変更、あるいはプログラムの更新を行うものであるとする。
【００９３】
この場合、運用操作部品４１の実行によりサービスは停止し、その状態で運用操作部品４２の実行により設定変更やプログラムの更新が行われる。そして、運用操作部品４３の実行によりサービスが起動することで、変更された設定情報や更新されたプログラムがサービスに適用され、サービスが安定的に動作するようになる。
【００９４】
ここで、ワークフローＡが排他資源Ａの排他権を獲得して、ワークフローＡの［排他区間：Ａ］が実行された場合を考える。この場合、ワークフローＢの［排他区間：Ａ］の処理は、ワークフローＡの［排他区間：Ａ］の処理が完了するまで実行されない。
【００９５】
そして、ワークフローＡの［排他区間：Ａ］の処理全体が正常に完了すると、次にワークフローＢが排他資源Ａの排他権を獲得して、ワークフローＢの［排他区間：Ａ］の処理が実行される。この場合、運用操作部品４３に基づく後処理が操作対象のサービスについて行われているので、ワークフローＢの［排他区間：Ａ］の実行開始時点では操作対象のサービスは正常に動作している。従って、ワークフローＢの［排他区間：Ａ］の処理も正常に実行される。
【００９６】
一方、例えば、ワークフローＡの［排他区間：Ａ］に含まれる運用操作部品４２の実行により異常が発生したと判定されて、運用操作部品４３が実行されないまま、ワークフローＡの［排他区間：Ａ］の処理が終了してしまったものとする。この場合、ワークフローＢの処理を継続させるために、排他資源Ａの排他権をワークフローＢに移す必要がある。しかしながら、単に排他権をワークフローＢに移してワークフローＢの［排他区間：Ａ］の処理を実行させてしまうと、操作対象のサービスは運用操作部品４３による後処理が実行されていない状態となる。このため、ワークフローＢの［排他区間：Ａ］の処理でも異常が発生する可能性が高くなる。
【００９７】
例えば、ワークフローＡの［排他区間：Ａ］の処理全体が正常に完了した場合、ワークフローＢの［排他区間：Ａ］の開始時点において操作対象のサービスは起動状態となる。一方、ワークフローＡの運用操作部品４２において実行が停止した場合、ワークフローＢの［排他区間：Ａ］の開始時点において操作対象のサービスは停止状態となる。運用操作部品４２の異常発生時に排他権をワークフローＢに移してワークフローＢの［排他区間：Ａ］の処理を実行させてしまうと、サービスを停止させる運用操作部品４４の実行時においてサービスはすでに停止状態となってしまう。このことが原因となって、運用操作部品４４の実行の際に異常が発生する可能性が生じる。
【００９８】
また、後処理である運用操作部品４３が実行されないことにより、操作対象のサービスが不安定な状態のままワークフローＢの［排他区間：Ａ］が実行されることも考えられる。この場合も、ワークフローＢの［排他区間：Ａ］の実行の際に異常が発生する可能性が生じる。
【００９９】
このような事態を回避するために、運用自動化サーバ１００は、排他区間の途中において処理が停止した場合、操作対象資源の状態が少なくとも排他区間の開始直前の状態に戻るように、その排他区間の先頭までロールバックを行う。
【０１００】
排他区間の先頭までロールバックが行われることで、操作対象のサービスの状態は、前述した後処理が必要となる前処理（ここでは運用操作部品４１）が実行される前の状態に戻る。これにより、操作対象のサービスの状態は、運用操作部品４１の実行時に想定される正しい状態になるとともに、運用操作部品４４の実行時に想定される正しい状態にもなる。また、操作対象のサービスの状態は、後処理（ここでは運用操作部品４３）によって動作を安定化させる必要のない、安定的な状態に戻る。従って、次に実行される排他区間の処理において異常が発生する確率が低減される。
【０１０１】
また、異なるワークフローそれぞれに含まれる、同じ資源を操作する排他区間の処理は、基本的に、互いに他のワークフローの排他区間の処理に影響を及ぼさないように設計される。例えば、前述したように実行優先度の変化に応じて排他区間の実行順序を入れ替えても異常が生じないのは、このような設計方針によるものである。このため、ある排他区間の処理が中断したとしても、操作対象資源の状態を、その排他区間の実行直前の状態に戻すことができれば、その資源を他のワークフローが操作したときに異常が発生する確率は低くなる。
【０１０２】
図１６は、ロールバック処理の手順を示す図である。以下、図１６を用いてロールバックの基本的な処理手順について説明する。
ロールバック処理とは、実行済みの処理を逆順に辿っていって、操作対象資源の状態を処理の実行前の状態に戻すための処理を行うことである。このようなロールバック処理を実現するためには、各処理の実行前における操作対象資源の状態を示す情報を保存しておく仕組みが必要となる。
【０１０３】
ここで、本実施の形態では、各ワークフローに含まれる処理の内容とその処理順の情報が、ワークフロー管理テーブル１３１に定義されている。図１６に示すように、ワークフロー管理テーブル１３１には、「部品Ｎｏ．」、「運用操作部品名」、「操作対象」および「バックアップ資源」の各データ項目が含まれる。
【０１０４】
「部品Ｎｏ．」には、そのワークフローに含まれる運用操作部品の番号が格納される。「運用操作部品名」には、運用操作部品の名称（操作内容）が格納される。「操作対象」には、操作対象となるサーバ、デバイスなどの資源の名称に対応する変数が入力値として格納される。そして、ワークフロー実行部１２０は、ワークフロー管理テーブル１３１に定義された情報を基に、ワークフローに含まれる処理を実行していく。
【０１０５】
そこで、上記のようなロールバック処理を実現するために、ワークフロー実行部１２０は、ワークフローに含まれる各処理を実行する際に、その実行前の操作対象資源の状態を示す情報を、ワークフロー管理テーブル１３１において各処理に対応付けて保存しておく。具体的には、ワークフロー管理テーブル１３１に、「バックアップ資源」というデータ項目を設ける。そして、ワークフロー実行部１２０は、該当する運用操作部品を実行する際に、その実行前における操作対象資源の情報を「バックアップ資源」の項目に格納する。
【０１０６】
「バックアップ資源」の項目に格納される情報は、処理の内容によって異なる。例えば、「ホスト名変更」など、データを変更する処理については、その変更前のデータが「バックアップ資源」の項目に格納される。「ファイルの削除」など、ある程度大きな容量のデータを変更する処理については、変更前のデータが一時データ用に別途確保された記憶領域（例えば、tmpディレクトリ）に格納されるとともに、その格納場所を示す情報が「バックアップ資源」の項目に格納される。「サービスの起動」など、操作対象の状態を変化させる処理については、その処理の実行前に操作対象資源から取得した、資源の状態を示す情報が「バックアップ資源」の項目に格納される。
【０１０７】
また、操作対象資源の状態を処理の実行前の状態に戻すためには、元の処理とは異なる処理の実行が必要な場合がある。例えば、元の処理が「サービスの停止」の場合、サービスの状態を元の処理の実行前の状態に戻すためには、元の処理とは相反する「サービスの起動」という処理を行う必要がある。
【０１０８】
本実施の形態では、相反する処理を行う運用操作部品を対応付けて記憶した部品対定義テーブル１４０を用意しておく。そして、排他制御部１１０は、ロールバックの対象の運用操作部品が部品対定義テーブル１４０に登録されている場合、部品対定義テーブル１４０においてその運用操作部品に対応付けられた運用操作部品の処理を実行する。これにより、操作対象資源の状態を処理の実行前の状態に戻すことが可能になる。
【０１０９】
また、例えば、設定されたデータを読み出す、あるいは資源の状態を確認するといった参照系の処理については、処理前と処理後で操作対象資源の状態に変化がない。このため、操作対象資源の状態を処理の実行前の状態に戻すためには、特に何も処理を行う必要がない。従って、ワークフロー実行部１２０は、ロールバックの対象とする元の処理が参照系の処理である場合には、その処理について何の処理も行わずに、ロールバックの対象を次の処理に移行する。
【０１１０】
ここで、例として、図１６に示したワークフローＡをロールバックする処理について説明する。図１６に示すワークフローＡの［排他区間：Ａ］には、先頭から順に、サービスを停止させる運用操作部品５１、サービスの停止を確認する運用操作部品５２、サービスについての設定変更を行う運用操作部品５３、および、サービスを起動する運用操作部品５４が含まれる。
【０１１１】
ワークフロー実行部１２０によって運用操作部品５１，５２が正常に実行された後、運用操作部品５３の実行時に異常が発生して、その実行が停止したものとする。運用操作部品５３の実行が停止したことを認識した排他制御部１１０は、運用操作部品５３，５２，５１の順にロールバックを行う。
【０１１２】
ワークフロー管理テーブル１３１において、運用操作部品５３に対応する「バックアップ資源」の項目には、設定変更前のデータが格納されている。排他制御部１１０は、ワークフロー管理テーブル１３１から設定変更前のデータを読み出し、読み出したデータを操作対象に設定し直すという設計変更操作５３ａを実行する。これにより、操作対象の状態は運用操作部品５３の実行前の状態に戻る。
【０１１３】
次に、運用操作部品５２は参照系の部品であることから、排他制御部１１０は、運用操作部品５２に対応する処理としては何も行わない。この時点で、操作対象の状態は運用操作部品５２の実行前の状態と同じになっている。
【０１１４】
次に、運用操作部品５１については、「サービスを起動」という、「サービスを停止」とは相反する操作を行う操作５１ａが存在する。そこで、排他制御部１１０は、「サービスを起動」という操作５１ａを実行する。これにより、操作対象の状態は、運用操作部品５１の実行前の状態、すなわち、サービスが起動した状態に戻る。
【０１１５】
以上の処理により、ワークフローＡの［排他区間：Ａ］についてのロールバックが完了し、操作対象の状態は、ワークフローＡの［排他区間：Ａ］の実行直前の状態に戻る。
図１７は、ロールバック処理により他のワークフローの実行が再開される例を示す図である。この図１７では、図１５に示したワークフローＡ，Ｂを例示する。
【０１１６】
まず、ワークフローＡの［排他区間：Ａ］の処理が実行されているものとする。このとき、ワークフローＢの［排他区間：Ａ］の先頭に位置する運用操作部品４４は、排他解除待ちの状態となっている。ここで、ワークフローＡに含まれる運用操作部品４２の処理において異常が発生したものとする（ステップＳ４１）。
【０１１７】
排他制御部１１０は、ワークフローＡの処理について、ワークフローＡの［排他区間：Ａ］の先頭位置までロールバックを行う（ステップＳ４２）。これにより、操作対象資源の状態は、運用操作部品４１の実行前の状態に戻る。排他制御部１１０は、ロールバックが完了すると、ワークフローＡに付与されていた、排他資源Ａに対する排他権を解除する（ステップＳ４３）。これにより、ワークフローＢの［排他区間：Ａ］が排他権を獲得し、運用操作部品４４の処理が開始される（ステップＳ４４）。
【０１１８】
このように、処理が中断された運用操作部品４２を含む排他区間の先頭位置までロールバックが行われた後、同じ排他資源を操作する他のワークフローＢの処理が開始されることで、ワークフローＢの処理の実行時に異常が発生する確率を低減することができる。
【０１１９】
次に、ロールバックの必要が生じるケースの他の例について説明する。図１５の例のように、処理の異常発生によって排他区間の処理が停止した場合の他、次の図１８の例のように、処理の異常が発生したとは必ずしも言えない場合でも、排他区間の処理を停止させてロールバックを行った方がよいケースがある。
【０１２０】
図１８は、人の承認処理待ちにより排他区間の処理が進行しなくなるケースについて説明するための図である。
図１８において、ワークフローＡの［排他区間：Ａ］が、ワークフローＢの［排他区間：Ａ］より先に排他権を獲得したものとする。また、ワークフローＡの［排他区間：Ａ］には、人の入力操作に応じた処理（例えば承認処理）を伴うアクティビティ４５が含まれる。すなわち、アクティビティ４５には、承認などを行うための入力操作を受け付けないと次の処理に進めない処理が含まれている。なお、このようなアクティビティ４５の処理は「フォーム」とも呼ばれる。
【０１２１】
このような承認処理においては、人の入力操作が行われないことによって長時間承認待ち状態にある場合がある。この場合、ワークフローＢの［排他区間：Ａ］も長時間排他解放待ちの状態となる。例えば、運用自動化サーバ１００によってデータセンタの運用が行われている場合、このようにアクティビティ４５において長時間承認待ち状態が続くと、決められたスケジュールに沿ってデータセンタを運用できなくなる。
【０１２２】
そこで、排他制御部１１０は、人の入力操作に応じた処理を伴うアクティビティがワークフロー実行部１２０により実行されることを検知すると、タイマのカウントを開始する。そして、そのアクティビティの実行が所定時間以内に完了しない場合には、処理を中断してロールバックすべきと判断する。このとき、排他制御部１１０は、そのアクティビティが含まれる排他区間の先頭まで、上記手順に従ってロールバック処理を行い、そのワークフローの排他状態を解放する。そして、別のワークフローに排他権を付与して、そのワークフローの処理を進めさせる。
【０１２３】
図１８の例では、排他制御部１１０は、アクティビティ４５の処理が開始されるとともに計時を開始し、アクティビティ４５の実行が所定時間以内に完了しない場合に、アクティビティ４５の処理を中断させる。排他制御部１１０は、ワークフローＡの［排他区間：Ａ］の先頭位置までロールバック処理を行った後、排他資源Ａに対する排他権を、ワークフローＡの［排他区間：Ａ］からワークフローＢの［排他区間：Ａ］に移す。これにより、ワークフローＢの［排他区間：Ａ］の処理が開始される。
【０１２４】
また、人の入力操作に応じた処理を伴うアクティビティの実行を検知可能にするために、そのようなアクティビティが運用操作部品と同等にワークフロー管理テーブル１３１に定義される。そして、ワークフロー実行部１２０は、このようなアクティビティを実行する際に、その旨を排他制御部１１０に通知する。通知を受けた排他制御部１１０は、タイマのカウントを監視して、通知元のワークフロー実行部１２０からのアクティビティの完了通知を監視する。
【０１２５】
次に、ワークフローに並列分岐が含まれる場合のロールバック処理について説明する。図１９は、並列分岐の分岐先の処理で異常が発生した場合について説明するための図である。
【０１２６】
図１９の上側に示すワークフローＡには並列分岐が含まれ、一方の分岐先には運用操作部品６１〜６３が含まれ、他方の分岐先には運用操作部品６４〜６６が含まれる。また、一方の分岐先の運用操作部品６１〜６３は、排他資源Ａに対応する［排他区間：Ａ］に含まれている。また、他方の分岐先の運用操作部品６４〜６６のうち運用操作部品６５，６６は、排他資源Ｂに対応する［排他区間：Ｂ］に含まれている。
【０１２７】
また、図１９の下側に示すワークフローＢには、ワークフローＡに含まれる運用操作部品６１と同様の操作を行う運用操作部品６１ａが含まれている。さらに、ワークフローＢにも排他資源Ａに対応する［排他区間：Ａ］が含まれ、運用操作部品６１ａは、ワークフローＢの［排他区間：Ａ］に含まれる。
【０１２８】
そして、ワークフローＡの［排他区間：Ａ］が、ワークフローＢの［排他区間：Ａ］より先に排他権を獲得したものとする。なお、ワークフローＢの［排他区間：Ｂ］も排他権を獲得しているものとする。このとき、運用操作部品６１〜６３と、運用操作部品６４〜６６とがそれぞれ並列に実行される。一方、ワークフローＢについては、運用操作部品６１ａの開始前において排他待ち状態となる。
【０１２９】
ワークフローに並列分岐が含まれる場合、その分岐先の一方の処理において異常が発生すると、並列分岐の終了位置まで処理が正常に完了できなくなるため、他方の分岐先の処理も中断される。例えば、図１９における運用操作部品６５の処理において異常が発生した場合、運用操作部品６１〜６３の処理も中断される。この場合、ワークフローＢの運用操作部品６１ａの実行時に異常が発生しないように、ワークフローＡの［排他区間：Ａ］の開始前の位置、すなわち並列分岐の開始位置までロールバックする必要が生じる。
【０１３０】
また、ワークフローＡにおいては、並列分岐の一方の分岐先の処理について分岐開始位置までロールバックする場合には、他方の分岐先の処理についても分岐開始位置、すなわち運用操作部品６４の実行前の位置までロールバックする必要が生じる。この例では、異常が発生した運用操作部品６５が属する［排他区間：Ｂ］の先頭位置ではなく、それより前の位置までロールバックする必要が生じることになる。
【０１３１】
上記のような処理を実現するために、排他制御部１１０は、並列分岐の分岐先の処理が中断した場合には、その処理が排他区間に含まれているか否かに関係なく、並列分岐の開始位置までロールバックを行う。これにより、他方の分岐先に排他区間が存在した場合でもその排他区間の開始前の位置まで確実にロールバックされるようになり、その排他区間に対応する排他資源を他のワークフローが操作した場合に処理の異常が発生することが防止される。
【０１３２】
ところで、前述のように、ロールバック処理とは、実行された処理を逆順に辿っていき、操作対象資源の状態を処理の実行前の状態に戻すことである。しかしながら、単に実行された処理を逆順に辿っていくだけでは、操作対象資源の状態を処理の実行前の状態に戻せないケースがある。その例として、運用操作部品の実行が省略されたケースがある。
【０１３３】
図２０は、運用操作部品の実行が省略された場合のロールバック処理について説明するための図である。図２０に示すワークフローＡの［排他区間：Ａ］には、図１６の例と同様に、サービスを停止させる運用操作部品５１、サービスの停止を確認する運用操作部品５２、サービスについての設定変更を行う運用操作部品５３、および、サービスを起動する運用操作部品５４が含まれる。
【０１３４】
ここで、運用操作部品５１の実行前において、操作対象のサービスの状態が停止状態であったとする。この場合、運用操作部品５１の操作を実行しても意味がないことから、ワークフロー実行部１２０は、運用操作部品５１の実行を省略することができる。
【０１３５】
その後、運用操作部品５３の処理で異常が発生した場合、運用操作部品５１の処理までロールバックする必要が生じる。このとき、図１６に示したように、運用操作部品５１に対応する処理として「サービスを起動」が実行されると、実行後のサービスの状態は起動状態となり、運用操作部品５１の実行前とは異なる状態となってしまう。
【０１３６】
そこで、ワークフロー実行部１２０は、運用操作部品の実行を省略する場合、実行を省略したことを示す情報を記憶装置に記憶しておく。そして、排他制御部１１０は、ロールバックの際に記憶されたその情報を参照して運用操作部品の実行が省略されたことを判別し、その運用操作部品について何の処理も行わずに、ロールバックの対象を次の処理に移行する。
【０１３７】
本実施の形態では例として、ワークフロー実行部１２０は、運用操作部品の実行を省略した場合、ワークフロー管理テーブル１３１においてその運用操作部品に対応する「バックアップ資源」の項目に、何も情報を格納しないようにする。図２０の例では、排他制御部１１０は、運用操作部品５１に対応する「バックアップ資源」の項目には情報が設定されない。そして、排他制御部１１０は、ロールバックの処理対象が運用操作部品５１となったとき、対応する「バックアップ資源」の項目に何も情報が設定されていないことから、運用操作部品５１の実行が省略されたことを判別する。この場合、排他制御部１１０は、運用操作部品５１について何の処理も行わない。これにより、ロールバック処理の結果、操作対象のサービスの状態を、ワークフローＡの［排他区間：Ａ］の前と同じ「サービス停止状態」に戻すことができる。
【０１３８】
次に、運用自動化サーバ１００の処理において利用される情報テーブルの例について説明する。
図２１は、ワークフロー管理テーブルの例を示す図である。ワークフロー管理テーブル１３１は、各ワークフローに含まれる運用操作部品を管理するためのテーブルであり、ワークフローの登録時に生成される。
【０１３９】
ワークフロー管理テーブル１３１は、「ワークフローＮｏ．」のデータ項目を含む。「ワークフローＮｏ．」には、ワークフローを識別する番号が格納される。ワークフロー管理テーブル１３１においては、「ワークフローＮｏ．」に対応付けて、「部品Ｎｏ．」、「運用操作部品名」、「操作対象」、「操作サービス、資源」、「バックアップ資源」、「出力」および「次の部品Ｎｏ．」の各データ項目を含むレコードが設定される。なお、以下の説明では、１つの「部品Ｎｏ．」に対応するレコードを、単に「ワークフロー管理テーブル１３１のレコード」と呼ぶ。
【０１４０】
「部品Ｎｏ．」には、そのワークフローにおける運用操作部品の番号が格納される。「運用操作部品名」には、運用操作部品の名称（操作内容）が格納される。「操作対象」には、操作対象となるサーバ、デバイスなどの名称に対応する変数が入力値として格納される。「操作サービス、資源」には、操作するサービス名、資源名に対応する変数が入力値として格納される。
【０１４１】
「バックアップ資源」には、対応する運用操作部品の実行前における操作対象資源の状態を示す情報が格納される。格納される情報の内容については図１６で説明した通りである。なお、「バックアップ資源」には、対応する運用操作部品の実行前に情報が格納される。
【０１４２】
「出力」には、出力値が設定される変数が格納される。「次の部品Ｎｏ．」には、そのワークフローにおいて、次に実行する運用操作部品を示す番号が格納される。
以上のワークフロー管理テーブル１３１においては、人の入力操作に応じた処理を伴うアクティビティや、並列分岐の開始および終了についても、１つのレコードが設定される。そして、設定されたレコードの「運用操作部品名」の項目には、アクティビティの名称（処理内容）や、並列分岐の開始または終了を示すことが登録される。これにより、排他制御部１１０は、ワークフローに含まれる処理が実行される際に、その処理が人の入力操作に応じた処理を伴うアクティビティであることを判別できる。また、排他制御部１１０は、ロールバック処理の際に、並列分岐の開始位置を判別することが可能となる。
【０１４３】
図２２は、運用操作部品定義テーブルの例を示す図である。運用操作部品定義テーブル１３２には、運用操作部品の定義情報が予め格納されている。運用操作部品定義テーブル１３２は、「運用操作部品名」、「部品種別」、「操作／確認対象」および「操作重要度」の各データ項目を含む。
【０１４４】
「運用操作部品名」には、運用操作部品の名称（操作内容）が格納される。「部品種別」には、運用操作部品の種別が格納される。種別には、操作系部品、確認系部品、通知系部品、設定系部品などがある。「操作／確認対象」には、その運用操作部品の操作の対象または確認の対象が格納される。「操作重要度」には、その運用操作部品の操作重要度が格納される。
【０１４５】
図２３は、変数管理テーブルの例を示す図である。変数管理テーブル１３３は、定義されたワークフロー情報の実体を識別する情報であるインスタンスで利用される変数名および変数値を管理するためのテーブルである。変数管理テーブル１３３は、「インスタンスＮｏ．」、「ワークフローＮｏ．」、「変数名」および「変数値」の各データ項目を含む。
【０１４６】
「インスタンスＮｏ．」には、インスタンスを識別するＮｏ．が格納される。「ワークフローＮｏ．」には、ワークフローを識別する番号が格納される。「変数名」には、変数名が格納される。「変数値」には、その変数に設定されている値が格納される。
【０１４７】
図２４は、インスタンス管理テーブルの例を示す図である。インスタンス管理テーブル１３４は、インスタンス単位で管理される情報が格納される。インスタンス管理テーブル１３４は、「インスタンスＮｏ．」、「ワークフローＮｏ．」、「部品Ｎｏ．（現在）」、「ホスト名」、「サービス名」、「ユーザＩＤ」、「起動方式係数」、「排他Ｎｏ．」および「完了予定時刻」の各データ項目を含む。
【０１４８】
「インスタンスＮｏ．」には、インスタンスを識別する番号が格納される。「ワークフローＮｏ．」には、ワークフローを識別する番号が格納される。「部品Ｎｏ．（現在）」には、そのワークフローの現在の処理位置に対応する運用操作部品を識別する番号が格納される。
【０１４９】
「ホスト名」には、ホストの名称が格納される。「サービス名」には、サービスの名称が格納される。「ユーザＩＤ」には、ユーザを識別する情報（ユーザＩＤ）が格納される。「起動方式係数」には、起動方式係数が格納される。「排他Ｎｏ．」には、排他区間を識別する番号が格納される。「完了予定時刻」には、ワークフローの完了予定時刻が格納される。
【０１５０】
図２５は、排他情報管理テーブルの例を示す図である。排他情報管理テーブル１３５は、排他区間に関する情報を管理するためのテーブルである。排他情報管理テーブル１３５は、「排他Ｎｏ．」、「部品Ｎｏ．（ロック開始）」、「部品Ｎｏ．（ロック解除）」、「実行優先度」および「操作緊急度」の各データ項目を含む。
【０１５１】
「排他Ｎｏ．」には、排他区間を識別する番号が格納される。「部品Ｎｏ．（ロック開始）」には、その排他区間の最初の運用操作部品を識別する番号が格納される。「部品Ｎｏ．（ロック解除）」には、その排他区間の最後の運用操作部品を識別する番号が格納される。「実行優先度」には、その排他区間の実行優先度が格納される。「操作緊急度」には、その排他区間の操作緊急度が格納される。
【０１５２】
図２６は、排他獲得履歴テーブルの例を示す図である。排他獲得履歴テーブル１３６は、排他区間の排他権（実行権）の獲得履歴情報を管理する。排他獲得履歴テーブル１３６は、「インスタンスＮｏ．」、「ワークフローＮｏ．」、「排他区間Ｎｏ．」、「開始待ち時間」、「開始時刻」および「完了時刻」の各データ項目を含む。
【０１５３】
「インスタンスＮｏ．」には、インスタンスを識別する番号が格納される。「ワークフローＮｏ．」には、ワークフローを識別する番号が格納される。「排他区間Ｎｏ．」には、排他区間を識別する番号が格納される。
【０１５４】
「開始待ち時間」には、その排他区間が排他権（実行権）を獲得するまでの待ち時間が格納される。「開始時刻」には、その排他区間が排他権（実行権）を獲得する時刻が格納される。「完了時刻」には、その排他区間が排他権（実行権）を獲得して、処理を実行した場合の完了時刻が格納される。
【０１５５】
図２７は、ユーザ係数テーブルの例を示す図である。ユーザ係数テーブル１３７には、ユーザごとのユーザ係数があらかじめ格納されている。ユーザ係数テーブル１３７は、「ユーザＩＤ」および「ユーザ係数」の各データ項目を含む。「ユーザＩＤ」には、ユーザを識別する情報（ユーザＩＤ）が格納される。「ユーザ係数」には、そのユーザＩＤのユーザ係数が格納される。
【０１５６】
図２８は、起動方式係数テーブルの例を示す図である。起動方式係数テーブル１３８には、起動方法ごとの起動方式係数があらかじめ格納されている。起動方式係数テーブル１３８は、「起動方法」および「起動方式係数」の各データ項目を含む。「起動方法」には、ワークフローの起動方法が格納される。「起動方式係数」には、その起動方法に対応する起動方式係数が格納される。
【０１５７】
図２９は、時間係数テーブルの例を示す図である。時間係数テーブル１３９には、時間ごとの時間係数があらかじめ格納されている。時間係数テーブル１３９は、「残り時間」および「時間係数」の各データ項目を有する。「残り時間」には、完了予定時刻までの残り時間が格納される。「時間係数」には、その残り時間に対応する時間係数が格納される。
【０１５８】
図３０は、部品対定義テーブルの例を示す図である。部品対定義テーブル１４０には、運用操作部品のそれぞれに対応付けて、ロールバック処理時に実行すべき運用操作部品があらかじめ格納されている。部品対定義テーブル１４０は、「Ｇｏ」および「Ｂａｃｋ」の各データ項目を含み、「Ｇｏ」および「Ｂａｃｋ」のそれぞれに「運用操作部品」および「オプション」の各データ項目が設けられる。
【０１５９】
「運用操作部品」は、対象となる運用操作部品の名称（操作内容）が格納される。「オプション」には、対応する運用操作部品に対して設定可能な変数が格納される。「オプション」は、各運用操作部品に複数対応付けることができる。「Ｂａｃｋ」に登録された運用操作部品の操作内容は、対応する「Ｇｏ」に登録された運用操作部品とは相反する内容となっている。排他制御部１１０は、ロールバックの対象とする運用操作部品が部品対定義テーブル１４０の「Ｇｏ」に登録されていた場合、その運用操作部品に対応付けて「Ｂａｃｋ」に登録された運用操作部品を実行する。
【０１６０】
次に、運用自動化サーバ１００の処理についてフローチャートを用いて説明する。
図３１は、ワークフロー実行部の処理例を示すフローチャートである。図３１の処理は、ワークフローごとに、そのワークフローに対応するワークフロー実行部１２０によって行われる。
【０１６１】
［ステップＳ５１］ワークフローの処理を開始する際、ワークフロー実行部１２０は、排他制御部１１０に対して、ワークフローの開始、およびワークフローの実行に際して用いる変数の情報を通知する。変数に関する情報は、例えば、ワークフローを起動したユーザのユーザＩＤ、ワークフローの起動方式などの情報を含む。
【０１６２】
［ステップＳ５２］ワークフロー実行部１２０は、ワークフロー管理テーブル１３１から該当ワークフローに対応付けられた１つのレコードを選択する。ワークフロー実行部１２０は、選択したレコードに基づいて次に実行する運用操作部品を判別し、排他制御部１１０に対してその運用操作部品の実行開始を通知する。このとき、ワークフロー実行部１２０は、排他制御部１１０に対して、実行する運用操作部品の識別番号と、その運用操作部品が用いる変数の情報を通知する。ワークフロー実行部１２０は、これらの情報を通知した後、排他制御部１１０からの指示待ち状態となる。
【０１６３】
このステップＳ５２では、「運用操作部品名」にアクティビティや並列分岐の開始または終了を示す情報が登録されている場合もあるが、これらの場合でも上記と同様に、処理の内容を示す情報（例えば識別番号）と、その処理で用いられる変数の情報が排他制御部１１０に通知される。
【０１６４】
［ステップＳ５３］ワークフロー実行部１２０は、排他制御部１１０からの指示を受け取る。ワークフロー実行部１２０は、指示された内容を判別し、指示内容に応じた処理を行う。通常は、排他制御部１１０から処理を継続する旨の通知（Action）が出力され、ワークフロー実行部１２０は、Actionの受信に応じてステップＳ５４以降の処理を実行する。また、排他制御部１１０からActionが出力されるまでの間、ワークフロー実行部１２０は処理待ち状態となる。
【０１６５】
［ステップＳ５４］ワークフロー実行部１２０は、処理の実行前における操作対象資源の状態を示す情報を、ワークフロー管理テーブル１３１におけるステップＳ５２で選択したレコード内の「バックアップ資源」の項目に登録する。
【０１６６】
［ステップＳ５５］ワークフロー実行部１２０は、ステップＳ５２で選択したレコードに定義された処理を業務サーバ２１０に実行させる。
［ステップＳ５６］ワークフロー実行部１２０は、処理が正常に完了したか否かを示す応答情報を排他制御部１１０に通知する。
【０１６７】
なお、選択したレコードに定義された処理が並列分岐の開始または終了の場合、ステップＳ５５では特に何の処理も実行されない。
また、ワークフロー実行部１２０は、定義された処理を業務サーバ２１０に実行させる際、その実行前における操作対象資源の状態に基づいて、定義された処理の実行を省略可能かを判定する。そして、省略可能である場合、ワークフロー実行部１２０は、ステップＳ５４での「バックアップ資源」への情報登録をスキップし、ステップＳ５５でも特に何の処理も行わずに、ステップＳ５６で処理の完了を通知する。
【０１６８】
なお、定義された処理の実行を省略可能かは、排他制御部１１０によって判定されてもよい。この場合、ワークフロー実行部１２０は、ステップＳ５３において、定義された処理を実行するか、あるいはその実行を省略するかの指示を排他制御部１１０から受ける。
【０１６９】
［ステップＳ５７］ワークフロー実行部１２０は、ワークフロー管理テーブル１３１に基づき、該当ワークフローに次の運用操作部品が登録されているかを判定する。この判定は、該当ワークフローに対応する未選択のレコードが存在するかによって行われる。次の運用操作部品がある場合、その運用操作部品についてステップＳ５２からの処理が実行される。一方、次の運用操作部品がない場合、ワークフロー実行部１２０は、排他制御部１１０に対してワークフローの終了を通知し、処理を終了する。
【０１７０】
図３２は、排他制御部の処理例を示すフローチャートである。図３２の処理は、ワークフローごとに実行される。
［ステップＳ７１］排他制御部１１０は、ワークフロー実行部１２０からの通知を待つ。排他制御部１１０がワークフロー実行部１２０からの通知を受信すると、次のステップＳ７２の処理が実行される。
【０１７１】
［ステップＳ７２］排他制御部１１０が、図３１のステップＳ５１で出力されるワークフロー開始通知を受けた場合、ステップＳ７３の処理が実行され、それ以外の通知を受けた場合、ステップＳ７４の処理が実行される。
【０１７２】
［ステップＳ７３］排他制御部１１０は、ワークフロー開始時の排他制御処理を実行する。処理の詳細については図３３において説明する。
［ステップＳ７４］排他制御部１１０が、図３１のステップＳ５２で出力される、ワークフローに含まれる処理の開始通知を受けた場合、ステップＳ７５の処理が実行される。一方、排他制御部１１０が、図３１のステップＳ５６で出力される、ワークフローに含まれる処理についての応答情報を受けた場合、ステップＳ７８の処理が実行される。
【０１７３】
［ステップＳ７５］排他制御部１１０は、ワークフロー動作中の排他制御処理を実行する。処理の詳細については図３６において説明する。
［ステップＳ７６］排他制御部１１０は、ステップＳ７４で開始が通知された処理が、入力操作に応じた処理を伴うアクティビティかを判定する。通知された処理がこのようなアクティビティである場合、ステップＳ７７の処理が実行され、このようなアクティビティでない場合、ステップＳ７９の処理が実行される。
【０１７４】
［ステップＳ７７］排他制御部１１０は、アクティビティが所定時間以内に完了するかを判定するための計時処理を開始する。なお、このときに開始される計時処理については図３８において説明する。
【０１７５】
［ステップＳ７８］排他制御部１１０は、応答情報受信時の処理を実行する。処理の詳細については図３９において説明する。
［ステップＳ７９］ワークフローが終了していない場合、ステップＳ７１に戻る。一方、ワークフローが終了した場合、排他制御部１１０は、該当ワークフローについての処理を終了する。ワークフローの終了は、図３１のステップＳ５７で出力されるワークフローの終了通知を受けたことによって判定される。
【０１７６】
図３３は、ワークフロー開始時の排他制御処理の例を示すフローチャートである。この図３３の処理は、図３２のステップＳ７３の処理に対応する。
［ステップＳ９１］排他制御部１１０は、ワークフロー管理テーブル１３１から、実行対象のワークフロー（図３２のステップＳ７１で実行開始が通知されたワークフロー）の情報を取得する。
【０１７７】
［ステップＳ９２］排他制御部１１０は、運用操作部品定義テーブル１３２から、実行対象のワークフロー情報に含まれる「運用操作部品名」に対応する「部品種別」を取得する。これにより、排他制御部１１０は、実行対象のワークフロー情報に含まれる運用操作部品の種別を決定する。
【０１７８】
［ステップＳ９３］排他制御部１１０は、ワークフロー開始時に確定済みの変数情報を変数管理テーブル１３３に記録する。ワークフロー開始時に確定済みの変数情報とは、例えば、あらかじめ値が設定された変数、またはワークフロー実行部１２０より渡された変数などである。
【０１７９】
［ステップＳ９４］排他制御部１１０は、開始するワークフローの排他情報を仮決定する。処理の詳細については図３４において説明する。
［ステップＳ９５］排他制御部１１０は、仮決定した排他情報の実行優先度を計算する。処理の詳細については図３５において説明する。
【０１８０】
図３４は、排他情報の仮決定の処理例を示すフローチャートである。この図３４の処理は、図３３のステップＳ９４、および後述する図３６のステップＳ１３３の各処理に対応する。
【０１８１】
［ステップＳ１０１］排他制御部１１０は、ワークフロー管理テーブル１３１から、実行対象のワークフローの運用操作部品の情報を取得する。
［ステップＳ１０２］排他制御部１１０は、運用操作部品定義テーブル１３２に基づいて、実行対象のワークフローに含まれる運用操作部品をモデル化する。すなわち、排他制御部１１０、運用操作部品定義テーブル１３２に基づいて、実行対象のワークフローに含まれる運用操作部品を、対応する部品種別に変換する。
【０１８２】
［ステップＳ１０３］排他制御部１１０は、ワークフロー管理テーブル１３１および変数管理テーブル１３３を用いて、実行対象のワークフローにおいて変数の値または変数名が連続している運用操作部品を抽出する。すなわち、排他制御部１１０は、ワークフロー管理テーブル１３１の「部品Ｎｏ．」および「次の部品Ｎｏ．」から、実行対象のワークフロー内での部品種別（モデル化した運用管理部品）の処理順を判定する。そして、排他制御部１１０は、変数管理テーブル１３３に基づいて、その処理順において同じ部品種別の変数の値または同じ変数名が連続するか否かを判定する。その結果、排他制御部１１０は、ワークフロー管理テーブル１３１から、その処理順において同じ部品種別の変数の値または同じ変数名が連続する運用操作部品の区間を抽出する。
【０１８３】
［ステップＳ１０４］排他制御部１１０は、ワークフロー管理テーブル１３１の「操作対象」、「操作サービス、資源」、「出力」のデータ項目を用いて、その処理順に基づいて、運用操作部品の出力値（実行結果）が後続の運用操作部品の入力値になっている運用操作部品の区間を抽出する。
【０１８４】
［ステップＳ１０５］排他制御部１１０は、ステップＳ１０３またはステップＳ１０４において抽出した区間を、排他区間として仮決定する。
［ステップＳ１０６］排他制御部１１０は、運用操作部品定義テーブル１３２、ユーザ係数テーブル１３７、起動方式係数テーブル１３８および時間係数テーブル１３９に基づいて、仮決定した排他区間の実行優先度を仮決定する。
【０１８５】
すなわち、排他制御部１１０は、運用操作部品定義テーブル１３２から、仮決定した排他区間に含まれる部品種別に対応する操作重要度を取得し、操作重要度同士を加算する。また、排他制御部１１０は、ユーザ係数テーブル１３７から、ワークフローを起動したユーザのユーザＩＤに対応するユーザ係数を取得する。また、排他制御部１１０は、起動方式係数テーブル１３８から、ワークフローの起動方法に対応する起動方式係数を取得する。
【０１８６】
また、排他制御部１１０は、ワークフローの完了予定時刻と現在時刻との差分から、完了予定時刻までの残り時間を算出する。ここで、排他制御部１１０は、あらかじめ登録されている各運用操作部品の完了までにかかる時間に基づいて、ワークフローの完了予定時刻を算出してもよい。また、排他制御部１１０は、過去に実行したワークフローの履歴情報（例えば、排他獲得履歴テーブル１３６）から取得した完了時刻を完了予定時刻としてもよい。
【０１８７】
排他制御部１１０は、時間係数テーブル１３９から、その算出した残り時間に対応する時間係数を取得する。そして、排他制御部１１０は、上述した式（１）を用いて操作緊急度を算出し、上述した式（２）を用いて実行優先度を算出する。
【０１８８】
［ステップＳ１０７］排他制御部１１０は、インスタンス管理テーブル１３４および排他情報管理テーブル１３５に、仮決定した排他区間に関する情報（仮決定した排他区間、実行優先度、ユーザ係数、起動方式係数、操作緊急度などのステップＳ１０３〜Ｓ１０６で用いた情報）を格納する。
【０１８９】
図３５は、排他情報の実行優先度の計算処理例を示すフローチャートである。この図３５の処理は、図３３のステップＳ９５、および後述する図３６のステップＳ１３４の各処理に対応する。
【０１９０】
［ステップＳ１１１］排他制御部１１０は、インスタンス管理テーブル１３４およびユーザ係数テーブル１３７から、仮決定した排他区間に関する情報（ユーザ係数、起動方式係数、排他Ｎｏ．、完了予定時刻など）を取得する。
【０１９１】
［ステップＳ１１２］排他制御部１１０は、運用操作部品定義テーブル１３２から、その排他Ｎｏ．に対応する排他区間に含まれる部品種別を取得する。
［ステップＳ１１３］排他制御部１１０は、運用操作部品定義テーブル１３２から、その排他Ｎｏ．に対応する排他区間に含まれる操作重要度情報を取得する。
【０１９２】
なお、ステップＳ１１２，Ｓ１１３の処理順は逆でもよい。
［ステップＳ１１４］排他制御部１１０は、ステップＳ１１１で取得した完了予定時刻から現在の時刻を差し引いて、完了予定時刻までの残り時間を算出し、時間係数テーブル１３９から、その算出した残り時間に対応する時間係数を取得する。排他制御部１１０は、上述した式（１）を用いて操作緊急度を算出し、上述した式（２）を用いて、その排他区間の実行優先度を算出する。
【０１９３】
［ステップＳ１１５］排他制御部１１０は、算出した操作緊急度および実行優先度を排他情報管理テーブル１３５に格納する。
図３６は、ワークフロー動作中の排他制御処理の例を示すフローチャートである。この図３６の処理は、図３２のステップＳ７５の処理に対応する。
【０１９４】
［ステップＳ１３１］排他制御部１１０は、ワークフロー実行部１２０から通知された情報に含まれる変数の情報（確定した変数の情報）、またはあらかじめ値が設定された変数を、変数管理テーブル１３３に格納する。
【０１９５】
［ステップＳ１３２］排他制御部１１０は、インスタンス管理テーブル１３４から、ワークフローの定義情報を取得する。
［ステップＳ１３３］排他制御部１１０は、仮決定した排他区間に関する情報を更新する。このステップＳ１３３の処理の詳細は、図３４と同様である。
【０１９６】
［ステップＳ１３４］排他制御部１１０は、実行優先度情報を更新する。このステップＳ１３４の処理の詳細は、図３５と同様である。
［ステップＳ１３５］排他制御部１１０は、排他アクション動作を決定する。処理の詳細については図３７において説明する。
【０１９７】
図３７は、排他アクション決定処理の例を示すフローチャートである。この図３７の処理は、図３６のステップＳ１３５の処理に対応する。
［ステップＳ１４１］排他制御部１１０は、実行対象のワークフローについて仮決定した排他区間に関する情報と実行優先度情報を取得する。ここでは、排他制御部１１０は、インスタンス管理テーブル１３４から、実行対象のワークフローについて仮決定した排他区間に関する情報（排他Ｎｏ．など）を取得する。排他制御部１１０は、その排他Ｎｏ．をキーとして、排他情報管理テーブル１３５から実行優先度を取得する。
【０１９８】
［ステップＳ１４２］排他制御部１１０は、実行中のワークフローについて、ワークフローの実行状況、現在の排他区間に関する情報と実行優先度情報、仮決定された排他区間に関する予定情報と実行優先度情報を取得する。ここでは、排他制御部１１０は、インスタンス管理テーブル１３４を読み込んで、ワークフローの実行状況を取得する。
【０１９９】
排他制御部１１０は、インスタンス管理テーブル１３４および排他情報管理テーブル１３５から、実行中のワークフロー（ただし、図３２のステップＳ７１の初回処理において実行開始が通知された、実行対象のワークフローを除く）について現在の排他区間に関する情報を取得する。具体的には、排他制御部１１０は、まず、インスタンス管理テーブル１３４の「部品Ｎｏ．（現在）」から、ワークフローで現在の対象となっている運用操作部品（現在の処理位置）を判定する。次に、排他制御部１１０は、インスタンス管理テーブル１３４およびワークフロー管理テーブル１３１に基づいて、その運用操作部品（現在の処理位置）がどの排他区間に含まれるかを判定する。排他制御部１１０は、判定した排他区間の排他Ｎｏ．をキーとして、排他情報管理テーブル１３５から実行優先度を取得する。
【０２００】
［ステップＳ１４３］排他制御部１１０は、インスタンス管理テーブル１３４および排他情報管理テーブル１３５から、実行中のワークフロー（ただし、図３２のステップＳ７１の初回処理において実行開始が通知された、実行対象のワークフローを除く）について仮決定した排他区間に関する情報を取得する。具体的には、排他制御部１１０は、まず、インスタンス管理テーブル１３４から、ワークフローで現在の対象となっている運用操作部品（現在の処理位置）が属する排他区間以外の排他区間の情報を取得する。次に、排他制御部１１０は、その排他区間の排他Ｎｏ．をキーとして、排他情報管理テーブル１３５から実行優先度を取得する。排他制御部１１０は、実行対象のワークフローおよびステップＳ１４２において情報を取得したワークフローに含まれる、実行優先度を取得した排他区間の中から、実行優先度情報が最も大きい排他区間を抽出する。
【０２０１】
［ステップＳ１４４］ステップＳ１４３で抽出された排他区間が属するワークフローが、図３２のステップＳ７１の初回処理において実行開始が通知された、実行対象のワークフローである場合、ステップＳ１４５の処理が実行される。一方、抽出されたワークフローが実行対象のワークフローでない場合、ステップＳ１４６の処理が実行される。
【０２０２】
［ステップＳ１４５］排他制御部１１０は、実行対象のワークフローの処理を継続する旨の通知（Action）を、実行対象のワークフローに対応するワークフロー実行部１２０に出力する。
【０２０３】
［ステップＳ１４６］排他制御部１１０は、ワークフロー実行部１２０にActionを出力しないことにより、実行対象のワークフローを処理待ち状態にする。この後、図３６のステップＳ１３４の処理が再度実行され、さらにステップＳ１３５の処理（すなわち図３７の処理）が実行される。図３７のステップＳ１４４において、ステップＳ１４３で抽出された排他区間が属するワークフローが実行対象のワークフローであると判定されるまで、対応するワークフロー実行部１２０が処理待ち状態とされて、ステップＳ１３４，Ｓ１３５の処理が繰り返される。
【０２０４】
なお、このステップＳ１４６では、ステップＳ１４３で抽出された排他区間に付与された排他権が解除されたとき、図３６のステップＳ１３４の処理が実行されるようにしてもよい。
【０２０５】
なお、ステップＳ１４５，Ｓ１４６では、排他制御部１１０は、排他獲得履歴テーブル１３６に対して、必要に応じて情報の新規登録または更新を行う。例えば、排他権を獲得し、その排他区間の処理が完了された場合、排他制御部１１０は「完了時刻」の情報を更新する。また、実行対象の運用操作部品が含まれる排他区間が排他解除待ちである場合、排他制御部１１０は「開始待ち時間」の情報を更新する。
【０２０６】
図３８は、計時処理の例を示すフローチャートである。この図３８の処理は、図３２のステップＳ７７において、図３２の処理とは独立して開始されるものである。
［ステップＳ１６１］排他制御部１１０は、時刻のカウント値を「０」にリセットして計時を開始する。それ以後、排他制御部１１０は、対応するワークフロー実行部１２０からの、処理対象のアクティビティが正常に完了したことを示す完了通知を監視する。
【０２０７】
［ステップＳ１６２］排他制御部１１０が完了通知を受信すると、ステップＳ１６８の処理が実行される。一方、排他制御部１１０が完了通知を受信していない場合、ステップＳ１６３の処理が実行される。
【０２０８】
［ステップＳ１６３］排他制御部１１０は、時刻のカウント値が所定のしきい値に達したかを判定する。カウント値がしきい値に達した場合にはステップＳ１６４の処理が実行され、カウント値がしきい値に達していない場合にはステップＳ１６２の処理が実行される。
【０２０９】
［ステップＳ１６４］排他制御部１１０は、処理対象のアクティビティが含まれる排他区間についての実行優先度、この排他区間と同一資源を操作する他のワークフローの排他区間についての実行優先度を取得し、これらの実行優先度を比較する。
【０２１０】
処理対象のアクティビティが含まれる排他区間についての実行優先度が、他の排他区間についての実行優先度より低くなった場合、ステップＳ１６６の処理が実行される。一方、処理対象のアクティビティが含まれる排他区間についての実行優先度が、他の排他区間についての実行優先度以上である場合、ステップＳ１６５の処理が実行される。
【０２１１】
［ステップＳ１６５］排他制御部１１０は、時刻のカウント値を「０」にリセットする。
［ステップＳ１６６］排他制御部１１０は、対応するワークフロー実行部１２０に、アクティビティの実行中止を要求する。これにより、アクティビティの処理が強制的に終了される。
【０２１２】
［ステップＳ１６７］排他制御部１１０は、処理対象のアクティビティが含まれている排他区間の先頭位置まで、ロールバック処理を行う。なお、図示しないが、このステップＳ１６７でのロールバック対象区間は、実際には図３９のステップＳ１８２〜Ｓ１８４と同様に決定される。例えば、処理対象のアクティビティが含まれている排他区間より前に並列分岐の開始位置がある場合には、その並列分岐の分岐先のそれぞれの処理系列について、並列分岐の開始位置までロールバック処理が行われる。
【０２１３】
ロールバック処理が完了すると、排他制御部１１０は、処理対象のアクティビティが含まれているワークフローに与えていた排他権を解除する。なお、ロールバック処理の詳細については図４０で説明する。
【０２１４】
［ステップＳ１６８］排他制御部１１０は、計時を終了する。
以上の図３８の処理によれば、排他制御部１１０は、人の入力操作に応じた処理を伴うアクティビティの実行指示をワークフロー実行部１２０に与えたとき、計時を開始して、アクティビティが一定時間以内に正常に完了するかを監視する。アクティビティが一定時間以内に完了しない場合、長時間、人の入力操作待ちの状態になっていると推定される。この場合、排他制御部１１０は、アクティビティの実行を強制的に終了させることで、アクティビティの実行遅延が他のワークフローの実行スケジュールに影響を与えることを回避する。
【０２１５】
ただし、アクティビティが一定時間以内に完了しない場合であっても、アクティビティが含まれる排他区間の実行優先度が最も高ければ、アクティビティの実行遅延は他のワークフローの実行スケジュールに特に影響を与えないと考えられる。そこで、このような場合、排他制御部１１０は、アクティビティの実行を終了させずに、さらに一定時間が経過するまで、アクティビティの実行が完了するかを監視し続ける。
【０２１６】
図３９は、応答情報受信時の処理例を示すフローチャートである。この図３９の処理は、図３２のステップＳ７８の処理に対応する。
［ステップＳ１８１］排他制御部１１０は、ワークフロー実行部１２０からの応答情報が、正常に処理が完了したことを通知するものか、あるいは異常が発生したことを通知するものかを判定する。正常に処理が完了したことが通知された場合、図３９の処理は終了されて、図３２のステップＳ７９の処理が実行される。一方、異常が発生したことが通知された場合、ステップＳ１８２の処理が実行される。
【０２１７】
［ステップＳ１８２］排他制御部１１０は、異常が発生した処理が含まれる排他区間の先頭位置を確認する。具体的には、排他制御部１１０は、排他獲得履歴テーブル１３６を参照して、実行中の排他区間の中から、異常が発生した処理が含まれるワークフローの番号に対応付けられた排他区間の番号を抽出する。次に、排他制御部１１０は、排他情報管理テーブル１３５を参照し、排他獲得履歴テーブル１３６から抽出した排他区間の番号に対応する「部品Ｎｏ．（ロック開始）」の項目から、該当排他区間の先頭の処理を示す部品番号を抽出する。
【０２１８】
［ステップＳ１８３］排他制御部１１０は、ワークフロー管理テーブル１３１を参照して、異常が発生した処理が含まれるワークフローにおいて、異常が発生した処理より前に最初に現れる並列分岐の位置を確認する。
【０２１９】
なお、ステップＳ１８２，Ｓ１８３の処理順は逆でもよい。
［ステップＳ１８４］ステップＳ１８２で確認された排他区間の先頭位置より前に、並列分岐の開始位置がある場合には、ステップＳ１８６の処理が実行される。一方、ステップＳ１８２で確認された排他区間の先頭位置より前に、並列分岐の開始位置がない場合には、ステップＳ１８５の処理が実行される。
【０２２０】
［ステップＳ１８５］排他制御部１１０は、異常が発生した処理が含まれる排他区間の先頭位置まで、ロールバック処理を行う。ロールバック処理が完了すると、排他制御部１１０は、異常が発生した処理が含まれているワークフローに与えていた排他権を解除する。なお、ロールバック処理の詳細については図４０で説明する。
【０２２１】
［ステップＳ１８６〜Ｓ１８８］ステップＳ１８３で確認された並列分岐の開始位置から分岐して、並列に実行される複数の処理系列それぞれについて、ステップＳ１８７のロールバック処理が行われる。すなわち、ステップＳ１８７の処理が並列に実行される処理系列の数だけループされる。
【０２２２】
各処理系列についてのロールバック処理が完了すると、排他制御部１１０は、異常が発生した処理が含まれているワークフローに与えていた排他権を解除する。なお、ロールバック処理の詳細については図４０で説明する。
【０２２３】
以上の図３９の処理によれば、ワークフロー実行部１２０から処理の異常発生が通知されたとき、その処理が含まれる排他区間の先頭位置より前に並列分岐の開始位置がない場合には、排他区間の先頭位置までロールバック処理が行われる。これにより、操作対象資源の状態は、排他区間の実行直前の状態まで戻される。そして、この状態から、ロールバックされた排他区間から排他権が解除され、他のワークフローによって操作対象資源を操作することが可能になる。
【０２２４】
また、ワークフロー実行部１２０から処理の異常発生が通知されたとき、その処理が含まれる排他区間の先頭位置より前に並列分岐の開始位置がある場合には、その並列分岐による分岐先のそれぞれの処理系列について、ロールバック処理が行われる。これにより、操作対象資源の状態は、並列分岐の開始前の状態まで確実に戻される。従って、異常が発生した処理が含まれる排他区間だけでなく、この排他区間と並列に実行される他の排他区間における処理の中断が原因となって、他のワークフローの処理に異常が発生するという事態の発生確率を低減できる。
【０２２５】
図４０は、ロールバック処理の例を示すフローチャートである。この図４０の処理は、図３８のステップＳ１６７，図３９のステップＳ１８５，Ｓ１８７のそれぞれに対応する。
【０２２６】
［ステップＳ２０１］排他制御部１１０は、ワークフロー管理テーブル１３１からロールバック対象区間に含まれる処理名（「運用操作部品名」に登録された情報）を取得して、処理リストに逆順に登録する。処理リストは、運用自動化サーバ１００のＲＡＭ１０２などに一時的に生成される。
【０２２７】
［ステップＳ２０２］排他制御部１１０は、処理リストからロールバックの対象処理を選択し、その処理の情報を取得する。
［ステップＳ２０３］排他制御部１１０は、選択された処理が参照系の運用操作部品の処理かを判定する。対象処理が参照系の運用操作部品の処理である場合、ステップＳ２０５の処理が実行され、対象処理がそれ以外の処理である場合、ステップＳ２０４の処理が実行される。
【０２２８】
［ステップＳ２０４］排他制御部１１０は、ワークフロー管理テーブル１３１において、選択された処理に対応する「バックアップ資源」の項目に情報が格納されているかを判定する。当該項目に情報が格納されている場合、ステップＳ２０６の処理が実行され、格納されていない場合、ステップＳ２０５の処理が実行される。
【０２２９】
［ステップＳ２０５］選択された処理が参照系の運用操作部品の処理である場合（ステップＳ２０３：Ｙｅｓ）、操作対象資源の状態を戻すための処理は特に必要とならない。また、「バックアップ資源」の項目に情報が格納されていない場合（ステップＳ２０４：Ｎｏ）、選択された処理は実際には実行されていないことから、同様に操作対象資源の状態を戻すための処理は特に必要とならない。
【０２３０】
このため、排他制御部１１０は、選択された処理に関する情報を処理リストから削除する。これにより、後のステップＳ２１０において、選択された処理について操作対象資源の状態を戻すための処理が特に何も行われなくなり、操作対象資源の状態を、ロールバック対象区間の前の状態に確実に戻すことが可能になる。
【０２３１】
［ステップＳ２０６］排他制御部１１０は、選択された処理とは相反する処理を行う運用操作部品が、部品対定義テーブル１４０に登録されているかを判定する。相反する処理を行う運用操作部品が部品対定義テーブル１４０に登録されていた場合、ステップＳ２０７の処理が実行され、登録されていない場合、ステップＳ２０８の処理が実行される。
【０２３２】
［ステップＳ２０７］排他制御部１１０は、選択された処理とは相反する処理を行う運用操作部品の名称を、部品対定義テーブル１４０から抽出する。排他制御部１１０は、選択された処理についての処理リスト上の「運用操作部品名」の情報を、部品対定義テーブル１４０から抽出した運用操作部品名によって入れ替える。
【０２３３】
［ステップＳ２０８］排他制御部１１０は、ワークフロー管理テーブル１３１において、選択された処理に対応する「バックアップ資源」の項目に登録されている情報を読み出し、処理リストにおいて該当処理に対応付けて設定する。
【０２３４】
［ステップＳ２０９］排他制御部１１０は、選択された処理が処理リスト上の最後の処理かを判定する。選択された処理が処理リスト上の最後の処理でない場合、未選択の処理についてステップＳ２０２以降の処理が実行される。選択された処理が処理リスト上の最後の処理である場合、ステップＳ２１０の処理が実行される。
【０２３５】
［ステップＳ２１０］排他制御部１１０は、処理リストを順に辿りながらロールバック処理を行う。排他制御部１１０は、処理リストの先頭から順にレコードを選択し、選択されたレコードに対してステップＳ２０８の処理により登録された情報を用いて、選択されたレコードに登録された処理名に対応する処理を、業務サーバ２１０に実行させる。
【０２３６】
［ステップＳ２１１］ロールバック処理が完了すると、排他制御部１１０は、ロールバック対象区間に設定されていた排他権を解除する。具体的には、排他制御部１１０は、ロールバック対象区間に設定されていた排他区間に対応するレコードを、インスタンス管理テーブル１３４、排他情報管理テーブル１３５および排他獲得履歴テーブル１３６から削除する。
【０２３７】
これにより、対応する排他資源に対する操作を他のワークフローが行うことができるようになる。例えば、他のワークフローに含まれる、対応する排他資源を操作する運用操作部品が、図３７のステップＳ１４６に対応する排他待ち状態となっている場合に、この運用操作部品が実行されるようになる。
【０２３８】
なお、上記の各実施の形態に示した装置（ワークフロー制御装置１、運用自動化サーバ１００など）の処理機能は、コンピュータによって実現することができる。その場合、各装置が有すべき機能の処理内容を記述したプログラムが提供され、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc−Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disk）などがある。
【０２３９】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０２４０】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【０２４１】
以上の各実施の形態に関し、さらに以下の付記を開示する。
（付記１）  同一のリソースを用いた処理をそれぞれ含む第１のワークフローおよび第２のワークフローの実行を制御するためのワークフロー制御プログラムにおいて、
コンピュータに、
前記第１のワークフローに含まれる処理のうち、前記リソースを用いた１つ以上の処理を含む第１の処理群を実行し、
前記第１の処理群に含まれるいずれかの処理が中断したとき、前記リソースの状態を前記第１の処理群の実行開始前の状態に戻し、
前記リソースの状態が前記第１の処理群の実行開始前の状態に戻ると、前記第２のワークフローに含まれる処理のうち、前記リソースを用いた１つ以上の処理を含む第２の処理群の実行を開始する、
処理を実行させることを特徴とするワークフロー制御プログラム。
【０２４２】
（付記２）  前記コンピュータに、
前記第１の処理群に含まれる処理のうち、入力操作の受け付け処理を含む処理の実行が、所定時間以内に完了しない場合に、当該処理の実行を中断する、
処理をさらに実行させることを特徴とする付記１記載のワークフロー制御プログラム。
【０２４３】
（付記３）  前記コンピュータに、
前記第１のワークフローに含まれる処理それぞれについて、それぞれの処理の実行前における前記リソースの状態を示す情報を記憶部に記憶する、
処理をさらに実行させ、
前記リソースの状態を戻す処理では、前記第１の処理群に含まれる実行された処理それぞれの内容と、前記記憶部に記憶された、当該実行された処理それぞれの実行前における前記リソースの状態を示す情報とに基づいて、前記リソースの状態を前記第１の処理群の実行開始前の状態に戻す、
ことを特徴とする付記１または２記載のワークフロー制御プログラム。
【０２４４】
（付記４）  前記リソースの状態を戻す処理では、前記第１の処理群に含まれる処理のうち、実行が中断した位置から前記第１の処理群の先頭位置までの処理それぞれについて、前記リソースの状態をそれぞれの処理の実行前の状態に戻すための状態復元処理を実行することを特徴とする付記３記載のワークフロー制御プログラム。
【０２４５】
（付記５）  前記状態復元処理は、対応する処理に対して相反する処理であることを特徴とする付記４記載のワークフロー制御プログラム。
（付記６）  前記記憶部への記憶では、前記第１のワークフローに含まれる処理のうち、前記リソースに格納されたデータを更新する更新処理については、当該処理の実行前における前記リソースの状態を示す情報として、更新前のデータを前記記憶部に記憶し、
前記リソースの状態を戻す処理では、実行が中断した位置から前記第１の処理群の先頭位置までに前記更新処理が含まれる場合、前記記憶部から当該更新処理に対応する前記更新前のデータを読み出し、読み出した前記更新前のデータによって前記リソースに格納された更新後のデータを更新する処理を、当該更新処理に対応する前記状態復元処理として実行する、
ことを特徴とする付記４記載のワークフロー制御プログラム。
【０２４６】
（付記７）  前記記憶部への記憶では、前記第１のワークフローに含まれる処理の中に、実行が省略された処理がある場合、当該処理について実行が省略されたことを前記記憶部に記憶し、
前記リソースの状態を戻す処理では、前記記憶部に記憶された情報に基づき、実行が中断した位置から前記第１の処理群の先頭位置までに実行が省略された処理がある場合には、当該処理に対応する前記状態復元処理をスキップする、
ことを特徴とする付記４記載のワークフロー制御プログラム。
【０２４７】
（付記８）  前記記憶部への記憶では、前記第１のワークフローが第１のリソースを用いた処理と第２のリソースを用いた処理とを含む場合、前記第１のワークフローに含まれる前記第１のリソースを用いた処理それぞれについて、それぞれの処理の実行前における前記第１のリソースの状態を示す情報を前記記憶部に記憶するとともに、前記第１のワークフローに含まれる前記第２のリソースを用いた処理それぞれについて、それぞれの処理の実行前における前記第２のリソースの状態を示す情報を前記記憶部に記憶し、
前記リソースの状態を戻す処理では、前記第１のワークフローが並列分岐を含み、前記並列分岐による第１の分岐先に、前記第１のリソースを用いた１つ以上の処理を含む前記第１の処理群が含まれ、前記並列分岐による第２の分岐先に、前記第２のリソースを用いた１つ以上の処理を含む第３の処理群が含まれる場合に、前記第３の処理群に含まれるいずれかの処理が中断したとき、前記記憶部に記憶された情報に基づいて、前記第１のリソースの状態と前記第２のリソースの状態とを前記並列分岐の実行開始前の状態に戻す、
ことを特徴とする付記３記載のワークフロー制御プログラム。
【０２４８】
（付記９）  同一のリソースを用いた処理をそれぞれ含む第１のワークフローおよび第２のワークフローの実行を制御するワークフロー制御装置において、
前記第１のワークフローに含まれる処理のうち、前記リソースを用いた１つ以上の処理を含む第１の処理群を実行する第１の実行部と、
前記第１の処理群に含まれるいずれかの処理が中断したとき、前記リソースの状態を前記第１の処理群の実行開始前の状態に戻すロールバック処理部と、
前記リソースの状態が前記第１の処理群の実行開始前の状態に戻ると、前記第２のワークフローに含まれる処理のうち、前記リソースを用いた１つ以上の処理を含む第２の処理群の実行を開始する第２の実行部と、
を有することを特徴とするワークフロー制御装置。
【０２４９】
（付記１０）  前記ロールバック処理部は、前記第１の処理群に含まれる処理のうち、入力操作の受け付け処理を含む処理の実行が、所定時間以内に完了しない場合に、当該処理の実行を中断させて、前記リソースの状態を前記第１の処理群の実行開始前の状態に戻すことを特徴とする付記９記載のワークフロー制御装置。
【０２５０】
（付記１１）  前記第１の実行部は、前記第１のワークフローに含まれる処理それぞれを実行するとともに、それぞれの処理の実行前における前記リソースの状態を示す情報を記憶部に記憶し、
前記ロールバック処理部は、前記第１の処理群に含まれる実行された処理それぞれの内容と、前記記憶部に記憶された、当該実行された処理それぞれの実行前における前記リソースの状態を示す情報とに基づいて、前記リソースの状態を前記第１の処理群の実行開始前の状態に戻す、
ことを特徴とする付記９または１０記載のワークフロー制御装置。
【０２５１】
（付記１２）  前記ロールバック処理部は、前記第１の処理群に含まれる処理のうち、実行が中断した位置から前記第１の処理群の先頭位置までの処理それぞれについて、前記リソースの状態をそれぞれの処理の実行前の状態に戻すための状態復元処理を実行することを特徴とする付記１１記載のワークフロー制御装置。
【０２５２】
（付記１３）  前記状態復元処理は、対応する処理に対して相反する処理であることを特徴とする付記１２記載のワークフロー制御装置。
（付記１４）  前記第１の実行部は、前記第１のワークフローに含まれる処理のうち、前記リソースに格納されたデータを更新する更新処理については、当該処理の実行前における前記リソースの状態を示す情報として、更新前のデータを前記記憶部に記憶し、
前記ロールバック処理部は、実行が中断した位置から前記第１の処理群の先頭位置までに前記更新処理が含まれる場合、前記記憶部から当該更新処理に対応する前記更新前のデータを読み出し、読み出した前記更新前のデータによって前記リソースに格納された更新後のデータを更新する処理を、当該更新処理に対応する前記状態復元処理として実行する、
ことを特徴とする付記１２記載のワークフロー制御装置。
【０２５３】
（付記１５）  前記第１の実行部は、前記第１のワークフローに含まれる処理の中に、実行が省略された処理がある場合、当該処理について実行が省略されたことを前記記憶部に記憶し、
前記ロールバック処理部は、前記記憶部に記憶された情報に基づき、実行が中断した位置から前記第１の処理群の先頭位置までに実行が省略された処理がある場合には、当該処理に対応する前記状態復元処理をスキップする、
ことを特徴とする付記１２記載のワークフロー制御装置。
【０２５４】
（付記１６）  前記第１の実行部は、前記第１のワークフローが第１のリソースを用いた処理と第２のリソースを用いた処理とを含む場合、前記第１のワークフローに含まれる前記第１のリソースを用いた処理それぞれについて、それぞれの処理の実行前における前記第１のリソースの状態を示す情報を前記記憶部に記憶するとともに、前記第１のワークフローに含まれる前記第２のリソースを用いた処理それぞれについて、それぞれの処理の実行前における前記第２のリソースの状態を示す情報を前記記憶部に記憶し、
前記ロールバック処理部は、前記第１のワークフローが並列分岐を含み、前記並列分岐による第１の分岐先に、前記第１のリソースを用いた１つ以上の処理を含む前記第１の処理群が含まれ、前記並列分岐による第２の分岐先に、前記第２のリソースを用いた１つ以上の処理を含む第３の処理群が含まれる場合に、前記第３の処理群に含まれるいずれかの処理が中断したとき、前記記憶部に記憶された情報に基づいて、前記第１のリソースの状態と前記第２のリソースの状態とを前記並列分岐の実行開始前の状態に戻す、
ことを特徴とする付記１１記載のワークフロー制御装置。
【０２５５】
（付記１７）  同一のリソースを用いた処理をそれぞれ含む第１のワークフローおよび第２のワークフローの実行を制御するワークフロー制御方法において、
コンピュータが、
前記第１のワークフローに含まれる処理のうち、前記リソースを用いた１つ以上の処理を含む第１の処理群を実行し、
前記第１の処理群に含まれるいずれかの処理が中断したとき、前記リソースの状態を前記第１の処理群の実行開始前の状態に戻し、
前記リソースの状態が前記第１の処理群の実行開始前の状態に戻ると、前記第２のワークフローに含まれる処理のうち、前記リソースを用いた１つ以上の処理を含む第２の処理群の実行を開始する、
ことを特徴とするワークフロー制御方法。
【符号の説明】
【０２５６】
１  ワークフロー制御装置
２  第１の実行部
３  第２の実行部
４  ロールバック処理部
５  リソース
１１，１２  ワークフロー
１１ａ〜１１ｃ，１２ａ〜１２ｃ  処理
１１−１，１２−１  処理群
【図１】
2014191604.tif 000003
【図２】
2014191604.tif 000004
【図３】
2014191604.tif 000005
【図４】
2014191604.tif 000006
【図５】
2014191604.tif 000007
【図６】
2014191604.tif 000008
【図７】
2014191604.tif 000009
【図８】
2014191604.tif 000010
【図９】
2014191604.tif 000011
【図１０】
2014191604.tif 000012
【図１１】
2014191604.tif 000013
【図１２】
2014191604.tif 000014
【図１３】
2014191604.tif 000015
【図１４】
2014191604.tif 000016
【図１５】
2014191604.tif 000017
【図１６】
2014191604.tif 000018
【図１７】
2014191604.tif 000019
【図１８】
2014191604.tif 000020
【図１９】
2014191604.tif 000021
【図２０】
2014191604.tif 000022
【図２１】
2014191604.tif 000023
【図２２】
2014191604.tif 000024
【図２３】
2014191604.tif 000025
【図２４】
2014191604.tif 000026
【図２５】
2014191604.tif 000027
【図２６】
2014191604.tif 000028
【図２７】
2014191604.tif 000029
【図２８】
2014191604.tif 000030
【図２９】
2014191604.tif 000031
【図３０】
2014191604.tif 000032
【図３１】
2014191604.tif 000033
【図３２】
2014191604.tif 000034
【図３３】
2014191604.tif 000035
【図３４】
2014191604.tif 000036
【図３５】
2014191604.tif 000037
【図３６】
2014191604.tif 000038
【図３７】
2014191604.tif 000039
【図３８】
2014191604.tif 000040
【図３９】
2014191604.tif 000041
【図４０】
2014191604.tif 000042