(57)【特許請求の範囲】
【請求項１】
コンピュータに、
管理対象の機器に対して、人手によって実施するか、もしくはネットワークを介した遠隔操作の自動実行によって実施する複数の作業の実施手順が定義された複数のワークフローそれぞれについて、人手によって実施する人手作業の数を示す人手作業数を特定し、
前記複数のワークフローそれぞれについて、特定された前記人手作業数に基づいて、遠隔操作の自動実行による作業を実施するために前記機器との間で確立したコネクションを使用する優先度を決定する、
処理を実行させるコネクション管理プログラム。
【請求項２】
前記人手作業数の特定では、ワークフロー内の未実施の作業に含まれる人手作業の数を、該ワークフローの前記人手作業数とする、
請求項１記載のコネクション管理プログラム。
【請求項３】
前記人手作業数の特定では、ワークフローにおける現在実行中の作業から該ワークフローの終了に至るすべての経路それぞれについて、経路上の人手作業の数を算出し、算出された人手作業の数の最大値を、該ワークフローの前記人手作業数とする、
請求項１または２記載のコネクション管理プログラム。
【請求項４】
前記優先度の決定では、前記人手作業数が多いワークフローほど優先度を高くする、
請求項１乃至３のいずれかに記載のコネクション管理プログラム。
【請求項５】
呼出元ワークフローから呼び出されるサブワークフローがあるとき、前記呼出元ワークフローについて決定した優先度を、前記サブワークフローの優先度とする、
請求項１乃至４記載のコネクション管理プログラム。
【請求項６】
呼出元ワークフローから呼び出されるサブワークフローがあるとき、前記呼出元ワークフローが、前記サブワークフローの終了を待って呼び出し後の作業を実施する同期型の呼び出し処理を行う場合、前記呼出元ワークフローについて決定した優先度を、前記サブワークフローの優先度に決定し、前記呼出元ワークフローが、前記サブワークフローの終了を待たずに呼び出し後の作業を実施する非同期型の呼び出し処理を行う場合、前記サブワークフローについての前記人手作業数に基づいて前記サブワークフローの優先度を決定する、
請求項１乃至４のいずれかに記載のコネクション管理プログラム。
【請求項７】
前記機器に対して接続されているコネクションの数であるコネクション数と、前記機器を操作対象として遠隔操作の自動実行によって実施する作業を含むワークフローの数であるワークフロー数とを比較し、前記コネクション数の方が多い場合、前記コネクション数と前記ワークフロー数との差に相当する数のコネクションを停止する、
請求項１乃至６のいずれかに記載のコネクション管理プログラム。
【請求項８】
コンピュータが、
管理対象の機器に対して、人手によって実施するか、もしくはネットワークを介した遠隔操作の自動実行によって実施する複数の作業の実施手順が定義された複数のワークフローそれぞれについて、人手によって実施する人手作業の数を示す人手作業数を特定し、
前記複数のワークフローそれぞれについて、特定された前記人手作業数に基づいて、遠隔操作の自動実行による作業を実施するために前記機器との間で確立したコネクションを使用する優先度を決定する、
コネクション管理方法。
【請求項９】
管理対象の機器に対して、人手によって実施するか、もしくはネットワークを介した遠隔操作の自動実行によって実施する複数の作業の実施手順が定義された複数のワークフローを記憶する記憶部と、
前記複数のワークフローそれぞれについて、人手によって実施する人手作業の数を示す人手作業数を特定し、前記複数のワークフローそれぞれについて、特定された前記人手作業数に基づいて、遠隔操作の自動実行による作業を実施するために前記機器との間で確立したコネクションを使用する優先度を決定する演算部と、
を有する情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コネクション管理プログラム、コネクション管理方法、および情報処理装置に関する。
【背景技術】
【０００２】
コンピュータシステムの運用管理における一連の作業は、ワークフローを用いて自動実行させることができる。例えばワークフロー実行サーバが、予め作業手順を規定したワークフローに従って、管理対象となる対象機器に対して、ネットワークを介した遠隔操作により作業を実施する。
【０００３】
運用管理におけるワークフローを用いて自動実行する業務の適用範囲の拡大に伴い、複数のワークフローを同時に実行する場面も増えてきている。複数のワークフローを同時に実行すると、１つの対象機器に対する複数作業が、同じ時間帯に重複して発生することがある。この場合、例えばワークフロー実行サーバから対象機器に対して、複数のコネクションが接続され、それぞれのコネクションを介して、ワークフローに従った複数の作業が並列で実行される。
【０００４】
ワークフローに関する技術としては、例えば排他ロックを行う排他制御の単位を示す排他区間を動的に決定する技術がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１４−６７４０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
複数のワークフローを同時に実行したとき、同じ時間帯に共通の対象機器に対して操作する作業数が、ワークフロー実行サーバから対象機器に接続できるコネクション数の上限を超えることがある。この場合、優先度の高いワークフローの作業から順に実行される。実行する作業の優先度は、例えばワークフローの重要度などから決定される。そして、優先度が高いワークフローの作業から順に、空きのコネクションが割り当てられ、割り当てられたコネクションを介して機器の操作が実行される。
【０００７】
しかし、従来の実行の優先度の決定方法では、ワークフローに人手作業が含まれるか否かが考慮されていない。そのため、十分な処理の効率化が図られていない。例えば人手作業を含むワークフローでは、人手作業の直前までの作業が、コネクション数の上限値超えによって待たされてしまうと、人手作業に取りかかる時間が遅れ、その結果、ワークフローの終了時間も遅くなってしまう。
【０００８】
１つの側面では、本発明は、複数のワークフローを効率的に実施できるようにすることを目的とする。
【課題を解決するための手段】
【０００９】
１つの案では、コンピュータに以下の処理を実行させるコネクション管理プログラムが提供される。
コンピュータは、管理対象の機器に対して、人手によって実施するか、もしくはネットワークを介した遠隔操作の自動実行によって実施する複数の作業の実施手順が定義された複数のワークフローそれぞれについて、人手によって実施する人手作業の数を示す人手作業数を特定する。そしてコンピュータは、複数のワークフローそれぞれについて、特定された人手作業数に基づいて、遠隔操作の自動実行による作業を実施するために機器との間で確立したコネクションを使用する優先度を決定する。
【発明の効果】
【００１０】
１態様によれば、複数のワークフローを効率的に実施できる。
【図面の簡単な説明】
【００１１】
【図１】第１の実施の形態に係る情報処理装置の構成例を示す図である。
【図２】第２の実施の形態のシステム構成例を示す図である。
【図３】ワークフロー実行サーバのハードウェアの一構成例を示す図である。
【図４】ワークフロー実行のための機能を示すブロック図である。
【図５】ワークフロー定義記憶部の一例を示す図である。
【図６】スケジュール定義記憶部の一例を示す図である。
【図７】ワークフロー履歴記憶部の一例を示す図である。
【図８】通信スレッド情報記憶部の一例を示す図である。
【図９】キュー情報記憶部の一例を示す図である。
【図１０】ワークフロー実行サーバにおける動的コネクション共有の一例を示す図である。
【図１１】通信スレッド起動例を示す図である。
【図１２】対象機器の接続コネクション数が上限を超えた場合の例を示す図である。
【図１３】通信スレッドの処理の一例を示す図である。
【図１４】監視スレッドの通信スレッド管理例を示す図である。
【図１５】優先度の判定に使用する指標間の関係を示す図である。
【図１６】目標完了日時の指定の有無と優先度との関係を示す図である。
【図１７】目標完了日時の決定例を示す図である。
【図１８】人手作業の有無と優先度との関係を示す図である。
【図１９】残人手作業数の算出例を示す図である。
【図２０】「Activitiesタグ」に設定される情報の例を示す図である。
【図２１】「Transitionsタグ」に設定される情報の例を示す図である。
【図２２】残人手作業数の算出例を示す図である。
【図２３】ワークフロー開始日時と優先度との関係を示す図である。
【図２４】サブワークフローの優先度判定に用いる指標の例を示す図である。
【図２５】呼出元ワークフローの目標完了日時と同期型サブワークフローの実行時間との関係を示す図である。
【図２６】ワークフローの種別ごとの優先度判別に使用する指標の例を示す図である。
【図２７】優先度情報生成処理の手順を示すフローチャートの前半である。
【図２８】優先度情報生成処理の手順を示すフローチャートの後半である。
【図２９】機器操作制御処理の手順の一例を示すフローチャートである。
【図３０】通信スレッド割り当て処理の手順の一例を示すフローチャートである。
【図３１】通信スレッドの処理手順を示すフローチャートである。
【図３２】監視スレッドの処理の手順の一例を示すフローチャートである。
【図３３】並列で実行するワークフローの例を示す図である。
【図３４】ワークフローの残人手作業数の考慮の有無による処理時間の違いを示す図である。
【図３５】サブワークフローの優先度制御を示す図である。
【発明を実施するための形態】
【００１２】
以下、本実施の形態について図面を参照して説明する。なお各実施の形態は、矛盾のない範囲で複数の実施の形態を組み合わせて実施することができる。
〔第１の実施の形態〕
図１は、第１の実施の形態に係る情報処理装置の構成例を示す図である。情報処理装置１０は、記憶部１１と演算部１２とを有している。
【００１３】
記憶部１１は、複数のワークフロー２，３を記憶する。各ワークフロー２，３には、管理対象の機器１に対して、人手によって実施するか、もしくはネットワークを介した遠隔操作の自動実行によって実施する複数の作業の実施手順が定義されている。
【００１４】
演算部１２は、複数のワークフロー２，３それぞれに示される実施手順に沿って作業を実行する。演算部１２は、ワークフロー２，３に示される作業のうち、自動実行によって実施する作業を実行する。また演算部１２は、ワークフロー２，３に示される作業のうち、人手で実行する作業（人手作業）については、人手作業が完了したことを示す完了入力を待ち、完了入力の受信により当該作業が完了したものと判断し、次の作業に処理を進める。
【００１５】
また演算部１２は、自動実行によって実施する作業を実行する際には、複数のワークフロー２，３それぞれについて、人手作業数を特定する。例えば演算部１２は、ワークフロー２，３内の未実施の作業に含まれる人手作業数を特定する。
【００１６】
さらに演算部１２は、遠隔操作の自動実行による作業（機器操作）を実施するために機器１との間で確立したコネクション４を確立する。そして演算部１２は、複数のワークフロー２，３それぞれについて、機器１との間で確立したコネクション４を使用する優先度を決定する。例えば、演算部１２は、人手作業数が多いワークフローほど優先度を高くする。
【００１７】
図１の例において、ワークフロー２の最初の作業（機器操作α）と、ワークフロー３の最初の作業（機器操作β）との実施タイミングが同時になったものとする。これらの作業は、いずれも自動実行によって実施する作業である。このときワークフロー２における未実施の人手作業数は「１」である。またワークフロー３における未実施の人手作業数は「０」である。そのため、演算部１２は、ワークフロー２の作業の実施の優先度を、ワークフロー３の作業の実施の優先度よりも低く評価する。すなわち、演算部１２は、ワークフロー２の実施のために優先的にコネクション４を使用する。その結果、演算部１２は、コネクション４を介して、機器１に対する機器操作αを先に実行し、その後、機器操作βを実行する。
【００１８】
このようにして、未実施の人手作業が多く残っているワークフローの作業を優先的に実施することができる。その結果、自動実行よりも作業に時間を要する人手作業に早期に取りかかることができ、ワークフローの実施完了時期を早めることができる。
【００１９】
例えば、人手作業は機器操作の十倍以上の時間を要する。図１の例では、機器操作の所要時間がいずれも１分であり、人手作業の所要時間は１０分であるものとする。このような場合、ワークフロー２の機器操作αを優先的に実行することで、ワークフロー２の処理が遅延なしに実行される。また、ワークフロー２の人手作業を実施している期間中にワークフロー３の処理を完了することができる。すると、２つのワークフロー２，３の両方の処理が完了するまでの所要時間は、ワークフロー２を単独で実行させた場合と同様の時間（１１分）となる。
【００２０】
これに対して、ワークフロー２の機器操作αよりも前にワークフロー３の機器操作βを実施してしまうと、機器操作αの実施が１分だけ待たされる。この場合、２つのワークフロー２，３の両方の処理が完了するまでの所要時間は１２分となり、ワークフロー２の機器操作αを優先的に実行した場合よりも時間がかかる。
【００２１】
すなわち、第１の実施の形態に示すように、人手作業の多いワークフロー２の優先度を高め、優先度が高いワークフローの遠隔操作に対して優先的にコネクション４を使用させることで、ワークフロー２，３の両方の処理を早期に完了させることができる。
【００２２】
なお、ワークフロー内には分岐条件が含まれることがある。この場合、分岐条件における分岐判断の結果に応じ、未実施の人手作業数が変わってくる。そこで、演算部１２は、ワークフロー内には分岐条件が含まれている場合、ワークフローにおける現在実行中の作業からワークフローの終了に至るすべての経路それぞれの人手作業数を算出する。そして演算部１２は、算出された人手作業数の最大値を、該ワークフローの人手作業数として特定する。これにより、所要時間が最も長くなる可能性があるワークフローの処理を優先して実施することができ、複数のワークフローを実施する場合の処理の完了を早めることができる。
【００２３】
また、ワークフローの中には、他のワークフローから呼び出されるサブワークフローがある。呼出元ワークフローから呼び出されるサブワークフローについては、演算部１２は、呼出元ワークフローについて人手作業数に基づいて決定した優先度を、サブワークフローの優先度としてもよい。これにより、サブワークフローの処理の遅延によって、優先度の高いワークフローの処理が遅延することを抑止できる。
【００２４】
ただし、サブワークフローには、同期型で呼び出されるものと、非同期型で呼び出されるものがある。呼出元ワークフローが、サブワークフローの終了を待って呼び出し後の作業を実施するような呼び出しが、同期型の呼び出しである。呼出元ワークフローが、サブワークフローの終了を待たずに呼び出し後の作業を実施するような呼び出しが、非同期型の呼び出しである。演算部１２は、サブワークフローの呼び出しが、同期型か非同期型かにより、サブワークフローの優先度の決定方法を変えてもよい。例えば、演算部１２は、呼出元ワークフローが同期型の呼び出し処理を行う場合、呼出元ワークフローについて人手作業数に基づいて決定した優先度を、サブワークフローの優先度とする。他方演算部１２は、呼出元ワークフローが、非同期型の呼び出し処理を行う場合、サブワークフローについての人手作業数に基づいて決定した優先度を、そのサブワークフローの優先度とする。これにより、非同期型で呼び出されるサブワークフローのように、呼出元ワークフローの処理を遅延させることがないワークフローが、無駄に優先度が高くなり、他のワークフローの処理を遅延させてしまうことを抑止できる。
【００２５】
なお、図１の例では、機器１との間で１つのコネクション４のみを接続しているが、機器１との間に、ワークフロー実施のためのコネクションを複数確立することもできる。その場合、確立するコネクション数が多すぎると、ワークフローの実施以外の目的での機器１との通信効率が劣化してしまう。そこで、演算部１２は、余分なコネクションを停止するようにしてもよい。例えば演算部１２は、機器１に対して接続されているコネクション数と、機器１を操作対象とした遠隔操作による作業を実施したワークフロー数とを比較する。そして、演算部１２は、コネクション数の方が多い場合、コネクション数とワークフロー数との差に相当する数のコネクションを停止する。これにより、適切なコネクション数に抑えることができ、情報処理装置１０と機器１との通信の効率化が図れる。
【００２６】
なお、演算部１２は、例えば情報処理装置１０が有するプロセッサにより実現することができる。また、記憶部１１は、例えば情報処理装置１０が有するメモリまたはストレージ装置により実現することができる。
【００２７】
〔第２の実施の形態〕
次に第２の実施の形態について説明する。
図２は、第２の実施の形態のシステム構成例を示す図である。ネットワーク２０は、ワークフロー実行サーバ１００、複数の対象機器３１，３２，・・・、ｗｅｂ／アプリケーション（ＡＰ）サーバ４１、および端末装置４２が接続されている。
【００２８】
ワークフロー実行サーバ１００は、ワークフローに従って、対象機器３１，３２，・・・に対して遠隔操作によって作業を実行するコンピュータである。対象機器３１，３２，・・・は、運用管理の対象となるサーバ機器、ストレージ、スイッチなどの機器である。ｗｅｂ／ＡＰサーバ４１は、ワークフロー管理用のｗｅｂアプリケーションなどのプログラムを実行するコンピュータである。端末装置４２は、運用管理を行う管理者が使用するコンピュータである。
【００２９】
次に、ワークフロー実行サーバ１００のハードウェアについて説明する。
図３は、ワークフロー実行サーバのハードウェアの一構成例を示す図である。ワークフロー実行サーバ１００は、プロセッサ１０１によって装置全体が制御されている。プロセッサ１０１には、バス１０９を介してメモリ１０２と複数の周辺機器が接続されている。プロセッサ１０１は、マルチプロセッサであってもよい。プロセッサ１０１は、例えばＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、またはＤＳＰ（Digital Signal Processor）である。プロセッサ１０１がプログラムを実行することで実現する機能の少なくとも一部を、ＡＳＩＣ（Application Specific Integrated Circuit）、ＰＬＤ（Programmable Logic Device）などの電子回路で実現してもよい。
【００３０】
メモリ１０２は、ワークフロー実行サーバ１００の主記憶装置として使用される。メモリ１０２には、プロセッサ１０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、メモリ１０２には、プロセッサ１０１による処理に必要な各種データが格納される。メモリ１０２としては、例えばＲＡＭ（Random Access Memory）などの揮発性の半導体記憶装置が使用される。
【００３１】
バス１０９に接続されている周辺機器としては、ストレージ装置１０３、グラフィック処理装置１０４、入力インタフェース１０５、光学ドライブ装置１０６、機器接続インタフェース１０７およびネットワークインタフェース１０８がある。
【００３２】
ストレージ装置１０３は、内蔵した記憶媒体に対して、電気的または磁気的にデータの書き込みおよび読み出しを行う。ストレージ装置１０３は、コンピュータの補助記憶装置として使用される。ストレージ装置１０３には、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。なお、ストレージ装置１０３としては、例えばＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）を使用することができる。
【００３３】
グラフィック処理装置１０４には、モニタ２１が接続されている。グラフィック処理装置１０４は、プロセッサ１０１からの命令に従って、画像をモニタ２１の画面に表示させる。モニタ２１としては、ＣＲＴ（Cathode Ray Tube）を用いた表示装置や液晶表示装置などがある。
【００３４】
入力インタフェース１０５には、キーボード２２とマウス２３とが接続されている。入力インタフェース１０５は、キーボード２２やマウス２３から送られてくる信号をプロセッサ１０１に送信する。なお、マウス２３は、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【００３５】
光学ドライブ装置１０６は、レーザ光などを利用して、光ディスク２４に記録されたデータの読み取りを行う。光ディスク２４は、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク２４には、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。
【００３６】
機器接続インタフェース１０７は、ワークフロー実行サーバ１００に周辺機器を接続するための通信インタフェースである。例えば機器接続インタフェース１０７には、メモリ装置２５やメモリリーダライタ２６を接続することができる。メモリ装置２５は、機器接続インタフェース１０７との通信機能を搭載した記録媒体である。メモリリーダライタ２６は、メモリカード２７へのデータの書き込み、またはメモリカード２７からのデータの読み出しを行う装置である。メモリカード２７は、カード型の記録媒体である。
【００３７】
ネットワークインタフェース１０８は、ネットワーク２０に接続されている。ネットワークインタフェース１０８は、ネットワーク２０を介して、他のコンピュータまたは通信機器との間でデータの送受信を行う。
【００３８】
以上のようなハードウェア構成によって、ワークフロー実行サーバ１００における第２の実施の形態の処理機能を実現することができる。なお、ｗｅｂ／ＡＰサーバ４１や端末装置４２も、図３に示したワークフロー実行サーバ１００と同様のハードウェアにより実現できる。また、第１の実施の形態に示した情報処理装置１０も、図３に示したワークフロー実行サーバ１００と同様のハードウェアにより実現することができる。
【００３９】
ワークフロー実行サーバ１００は、例えばコンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、第２の実施の形態の処理機能を実現する。ワークフロー実行サーバ１００に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。例えば、ワークフロー実行サーバ１００に実行させるプログラムをストレージ装置１０３に格納しておくことができる。プロセッサ１０１は、ストレージ装置１０３内のプログラムの少なくとも一部をメモリ１０２にロードし、プログラムを実行する。またワークフロー実行サーバ１００に実行させるプログラムを、光ディスク２４、メモリ装置２５、メモリカード２７などの可搬型記録媒体に記録しておくこともできる。可搬型記録媒体に格納されたプログラムは、例えばプロセッサ１０１からの制御により、ストレージ装置１０３にインストールされた後、実行可能となる。またプロセッサ１０１が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
【００４０】
次に、ワークフローを実行するための各装置の機能について説明する。
図４は、ワークフロー実行のための機能を示すブロック図である。管理者は、端末装置４２からｗｅｂ／ＡＰサーバ４１にアクセスし、ｗｅｂ／ＡＰサーバ４１内のｗｅｂアプリケーション４１ａに対して、ワークフローの実行スケジュールなどの管理情報を入力する。ｗｅｂ／ＡＰサーバ４１はｗｅｂアプリケーション４１ａを実行し、ワークフロー定義やワークフローの実行スケジュールなどの情報を、ワークフロー実行サーバ１００に送信する。
【００４１】
ワークフロー実行サーバ１００は、ワークフロー定義記憶部１１０、スケジュール定義記憶部１２０、ワークフロー履歴記憶部１３０、通信スレッド情報記憶部１４０、ワークフロー制御部１５０、および通信デーモン１６０を有している。
【００４２】
ワークフロー定義記憶部１１０は、ワークフローごとの作業の手順を示す情報（ワークフロー定義）を記憶する。スケジュール定義記憶部１２０は、ワークフローの実行スケジュールを示す情報（スケジュール定義）を記憶する。ワークフロー履歴記憶部１３０は、ワークフローの実行状態（ステータス）を記憶する。通信スレッド情報記憶部１４０は、対象機器３１，３２，・・・との通信を制御する通信スレッド１６４，１６５，１６６，・・・に関する情報を記憶する。
【００４３】
ワークフロー制御部１５０は、ワークフローを実行するためのワークフロー実行プロセス１５１，１５２，・・・を生成し、ワークフロー実行プロセス１５１，１５２，・・・によりワークフローの実行を制御する。例えばワークフロー制御部１５０は、ユーザ入力によるワークフローの実行指示、または予め設定されたスケジュールに示されたワークフローの実行開始時刻の到達を契機に、ワークフロー実行プロセス１５１，１５２，・・・を生成する。生成されたワークフロー実行プロセス１５１，１５２，・・・は、実行時の入力情報に基づいて、実行するワークフローの優先度情報を生成し、対象機器との通信に備える。またワークフロー実行プロセス１５１，１５２，・・・は、対象機器に対する操作が発生した場合、通信要求を通信デーモン１６０に送信することで、通信処理を依頼する。
【００４４】
通信要求には、以下の情報が含まれる。
・対象機器接続情報
・ワークフローの優先度情報
・ワークフロー情報
・操作内容
なお、ワークフロー実行プロセス１５１，１５２，・・・は、ワークフローの実行が人手作業の実施タイミングになると、ｗｅｂ／ＡＰサーバ４１からの人手作業完了の通知を待つ。
【００４５】
通信デーモン１６０は、ワークフロー実行サーバ１００で運用を管理する対象の対象機器３１，３２，・・・との通信を一元管理する。通信を管理するため、通信デーモン１６０は、要求受付部１６１、キュー情報記憶部１６２、監視スレッド１６３、および通信スレッド１６４，１６５，１６６，・・・を有する。
【００４６】
要求受付部１６１は、ワークフロー実行プロセス１５１，１５２，・・・から対象機器３１，３２，・・・への通信要求を受け付ける。そして要求受付部１６１は、受け付けた通信要求に対する、使用可能な通信スレッドの割り当てを行う。
【００４７】
キュー情報記憶部１６２は、実行待ちの通信要求を記憶する。
監視スレッド１６３は、ワークフロー履歴記憶部１３０を参照することで、ワークフロー実行プロセス１５１，１５２，・・・で実行されているワークフローの終了を監視する。そして監視スレッド１６３は、不要となった通信スレッドの終了処理を行う。
【００４８】
通信スレッド１６４，１６５，１６６，・・・は、対象機器３１，３２，・・・とコネクション１６４ａ，１６５ａ，１６６ａ，・・・を確立し、コネクション１６４ａ，１６５ａ，１６６ａ，・・・を介した通信を行う。そして通信スレッド１６４，１６５，１６６，・・・は、対象機器３１，３２，・・・上で、通信要求に示されている操作内容に応じた操作を実行し、操作の結果をワークフロー実行プロセス１５１，１５２，・・・に返す。
【００４９】
なお、図４に示した各要素間を接続する線は通信経路の一部を示すものであり、図示した通信経路以外の通信経路も設定可能である。また、図４に示した各要素の機能は、例えば、その要素に対応するプログラムモジュールをコンピュータに実行させることで実現することができる。
【００５０】
次に図５〜図９を参照し、ワークフロー実行サーバ１００の各記憶部に保持される情報について詳細に説明する。
図５は、ワークフロー定義記憶部の一例を示す図である。ワークフロー定義記憶部１１０には、ワークフローごとの複数のワークフロー情報１１１，１１２，・・・が格納されている。複数のワークフロー情報１１１，１１２，・・・それぞれには、ワークフローＩＤ、ワークフロー定義情報、重要度、実行時間などが含まれている。ワークフローＩＤは、ワークフローを識別する識別子である。ワークフロー定義情報は、運用管理の作業手順を示す情報である。重要度は、ワークフローの重要性を数値化した値である。実行時間は、ワークフローの実行に要する時間である。
【００５１】
図６は、スケジュール定義記憶部の一例を示す図である。スケジュール定義記憶部１２０には、ワークフローごとのスケジュール管理情報１２１，１２２，・・・が格納されている。スケジュール管理情報１２１，１２２，・・・には、対応するワークフローのワークフローＩＤ、実行スケジュールなどが含まれている。実行スケジュールは、ワークフローの実行開始日時、および実行終了日時が設定された情報である。
【００５２】
図７は、ワークフロー履歴記憶部の一例を示す図である。ワークフロー履歴記憶部１３０には、ワークフローごとの履歴情報１３１，１３２，・・・が格納されている。履歴情報１３１，１３２，・・・には、対応するワークフローのワークフローＩＤ、ステータスなどが含まれている。ステータスは、ワークフローの実行状態を示す情報である。
【００５３】
図８は、通信スレッド情報記憶部の一例を示す図である。通信スレッド情報記憶部１４０には、対象機器情報管理テーブル１４１、スレッド情報管理テーブル１４２、および要求ワークフロー情報管理テーブル１４３が格納されている。
【００５４】
対象機器情報管理テーブル１４１は、対象機器３１，３２，・・・に関する情報を設定するデータテーブルである。対象機器情報管理テーブル１４１には、対象機器ＩＤ、接続ＩＰ（Internet Protocol）アドレス、接続プロトコル、アカウントＩＤ、およびパスワードの欄が設けられている。対象機器ＩＤの欄には、対象機器３１，３２，・・・の識別情報（対象機器ＩＤ）が設定される。接続ＩＰアドレスの欄には、対象機器３１，３２，・・・のＩＰアドレスが設定される。接続プロトコルの欄には、対象機器３１，３２，・・・に接続するための通信プロトコルが設定される。１つの対象機器に対して、接続用の複数の通信プロトコルが設定可能である。アカウント名の欄には、対応する接続プロトコルで対応する対象機器に接続する際のアカウント名が設定される。パスワードの欄には、対応するアカウントで対象機器に接続する際の、認証用のパスワードが設定される。
【００５５】
スレッド情報管理テーブル１４２は、通信スレッドに関する情報を設定するデータテーブルである。スレッド情報管理テーブル１４２には、対象機器ＩＤ、スレッドＩＤ、および状態の欄が設けられている。対象機器ＩＤの欄には、通信相手の対象機器３１，３２，・・・の対象機器ＩＤが設定される。スレッドＩＤの欄には、対象機器３１，３２，・・・との通信を行う通信スレッドの識別子（スレッドＩＤ）が設定される。状態の欄には、対応する通信スレッドの動作状態が設定される。
【００５６】
要求ワークフロー情報管理テーブル１４３は、通信を行っている対象機器とワークフローとの対応関係を示す情報を設定するデータテーブルである。要求ワークフロー情報管理テーブル１４３には、対象機器ＩＤとワークフローＩＤとの欄が設けられている。対象機器ＩＤの欄には、通信相手の対象機器３１，３２，・・・の対象機器ＩＤが設定される。ワークフローＩＤの欄には、通信要求の送信元であるワークフロー実行プロセスが実行しているワークフローの識別子（ワークフローＩＤ）が設定される。
【００５７】
図９は、キュー情報記憶部の一例を示す図である。キュー情報記憶部１６２には、通信要求管理テーブル１６２ａが格納されている。通信要求管理テーブル１６２ａには、対象機器ＩＤ、優先度、要求元情報、および要求処理情報の欄が設けられている。対象機器ＩＤの欄には、処理待ちの通信要求の通信相手である対象機器の対象機器ＩＤが設定される。優先度の欄には、通信要求の優先度の判断指標となる情報が設定される。要求元情報の欄には、通信要求の送信元であるワークフロー実行プロセスが実行しているワークフローのワークフローＩＤが設定される。要求処理情報の欄には、通信要求によって要求されている処理の内容が設定される。
【００５８】
図９の例では、優先度の判断指標として、重要度、目標完了日時、残人手作業数、および開始日時が設定されている。重要度は、対応するワークフローの重要度である。目標完了日時は、対応するワークフローの処理を完了させる目標の日時である。残人手作業数は、対応するワークフローの以後の作業で発生する可能性がある、人手作業の最大数である。開始日時は、対応するワークフローの実行を開始した日時である。
【００５９】
以上のような構成のワークフロー実行サーバ１００により、ワークフローを効率的に実行することができる。
すなわち、ワークフロー実行サーバ１００は、通信デーモン１６０によるコネクションの一元管理を行う。そしてワークフロー実行サーバ１００は、動的なコネクション共有を行う。具体的には、ワークフロー実行サーバ１００は、通信要求発生時に既存の不使用コネクションが有る場合は複数ワークフローで共有する。他方、ワークフロー実行サーバ１００は、不使用コネクションが無い場合や既存コネクションが存在しない場合は、新たなコネクションを作成し、対象機器に対するワークフローが終了するまでコネクションを保持する。
【００６０】
またワークフロー実行サーバ１００は、対象機器の接続数の上限を超えた場合の通信エラーを、ワークフロー固有の優先度を考慮したキューイングにより回避する。ワークフローの優先度は、ワークフローの重要度、目標完了日時、残人手作業数、ワークフローの多段構成などに基づいて決定される。
【００６１】
＜動的コネクション共有＞
ここで、動的コネクション共有について具体的に説明する。
図１０は、ワークフロー実行サーバにおける動的コネクション共有の一例を示す図である。運用操作を実施する対象機器を示す接続先情報（接続先アドレス、通信プロトコル、接続アカウント、接続数）は、実行されるワークフローにより異なる。また、スケジュールされていない時期にユーザからワークフローの実行指示が入力されることもある。そのため、各ワークフローがいつ実行されるかは、明確には分からない。またワークフロー内の分岐条件が決定するまでは、分岐以降の作業が確定しないため、どの対象機器への通信要求が発生するのかは不明である。そのため、接続先や、接続するべきコネクション数を事前に特定することはできない。
【００６２】
そこで、ワークフロー実行サーバ１００は、コネクション共有を行う。ここで、一般的なコネクション共有では、同時に実行されると通信要求数を事前に決定し、決定した数の通信要求に応じたコネクションを予め確立する。しかし、前記のように、何時どのワークフローが実行されるかを事前に決定することはできず、分岐条件が決定するまでは、通信要求が出力されるか否かも確定しない。そのため、一般的なコネクション共有では、想定される最大の同時通信要求数に合わせた多数のコネクションを確立し、それを常時維持することとなる。そのため、無駄なコネクションが多く存在し、他の通信処理を圧迫してしまう。
【００６３】
そこで、第２の実施の形態に係るワークフロー実行サーバ１００では、通信要求が発生した時点でコネクションプーリングを行い、動的にプーリングしたコネクションを共有する、動的なコネクションプーリングを実施する。動的コネクション共有では、同一の接続先、接続条件を使用するワークフローでコネクションを共有することで、接続するコネクション数の増加を抑止する。そして動的コネクション共有では、使用するワークフローが終了を検知すると該当するコネクションを開放して、余分なコネクションが何時までも残存することを抑止する。
【００６４】
動的コネクションの管理は通信デーモン１６０で行う。例えば、通信デーモン１６０は、以下の情報に基づいて、通信コネクションの共有を行うための通信スレッド１６４，１６５，１６６，・・・を制御する。
・通信要求の発生
・接続先（接続ＩＰアドレス）
・接続アカウント
・接続プロトコル
・要求元ワークフロー情報
・ワークフローのステータス
図１０の例では、３つのワークフロー実行プロセス１５１〜１５３により、ワークフロー５１〜５３が実行されている。ワークフロー実行プロセス１５１がワークフロー５１の最初の機器操作の作業を実行するとき、ワークフロー実行プロセス１５１から通信デーモン１６０へ通信要求が出力される。同様にワークフロー実行プロセス１５２がワークフロー５２の最初の機器操作の作業を実行するとき、ワークフロー実行プロセス１５２から通信デーモン１６０へ通信要求が出力される。ここで、２つのワークフロー実行プロセス１５１，１５２が出力した通信要求における接続先と接続方法（接続のアカウントやプロトコル）が同じであったものとする。この場合、通信デーモン１６０は、２つの通信要求を処理する通信スレッド１６４を起動する。通信スレッド１６４は、通信要求の接続先となる対象機器３１との間でコネクションを確立し、対象機器３１に対する操作を実行する。
【００６５】
ワークフロー実行プロセス１５１が実行するワークフロー５１の２つ目の機器操作では、操作対象が対象機器３２である。ワークフロー実行プロセス１５１は、当該機器操作の作業を実行するとき、通信デーモン１６０へ、接続先として対象機器３２を指定した通信要求を出力する。すると通信デーモン１６０は、新たな通信スレッド１６５を起動する。通信スレッド１６５は、通信要求の接続先となる対象機器３２との間でコネクションを確立し、対象機器３２に対する操作を実行する。
【００６６】
ワークフロー実行プロセス１５３が実行するワークフロー５３の最初の機器操作では、操作対象が対象機器３１であるが、接続方法が、ワークフロー５１，５２の最初機器操作と異なる。この場合、ワークフロー実行プロセス１５３が、当該機器操作の作業を実行するときに、接続先として対象機器３１を指定した通信要求を出力すると、通信デーモン１６０は、新たな通信スレッド１６６を起動する。通信スレッド１６６は、通信要求の接続先となる対象機器３１との間でコネクションを確立し、対象機器３１に対する操作を実行する。
【００６７】
このように、通信デーモン１６０は、２つの通信要求における接続先と接続方法が同じ通信要求であれば、１つの通信スレッドで処理する。他方、通信デーモン１６０は、２つの通信要求における接続先が同じであっても、接続方法が異なれば、２つの通信要求を別の通信スレッドで処理する。
【００６８】
またワークフロー実行プロセス１５１〜１５３は、ワークフロー５１〜５３を実行するとき、ワークフロー５１〜５３の実行状態をワークフロー履歴記憶部１３０に格納する。例えばワークフロー実行プロセス１５１〜１５３は、ワークフロー５１〜５３の実行を開始したとき、ワークフロー履歴記憶部１３０に対して、ワークフロー５１〜５３のステータスとして「実行中」を設定する。またワークフロー実行プロセス１５１〜１５３は、ワークフロー５１〜５３の実行が完了したとき、ワークフロー履歴記憶部１３０に対して、ワークフロー５１〜５３のステータスとして「停止中」を設定する。
【００６９】
また通信デーモン１６０は、通信スレッド１６４〜１６６に関する情報を、通信スレッド情報記憶部１４０に格納する。そして通信デーモン１６０内の監視スレッド１６３が、ワークフロー履歴記憶部１３０と通信スレッド情報記憶部１４０との内容を解析し、余分な通信スレッドの有無を判断する。例えばステータスが「実行中」のワークフロー数より多くの通信スレッドが存在している場合、監視スレッド１６３は、ワークフロー数を超過している分の通信スレッドは、余分であると判断する。そして監視スレッド１６３は、余分な通信スレッドの削除（機能停止）処理を実行する。このようにして、ワークフローの実行状況に応じて、通信スレッドの数が動的に管理される。
【００７０】
＜通信スレッドの起動制御＞
通信デーモン１６０は、動的コネクション共有において、利用する最小減の数の通信スレッドを起動する。例えば通信デーモン１６０は、ワークフロー実行プロセスから送信された通信要求を、要求受付部１６１で受信する。要求受付部１６１は、通信スレッド情報記憶部１４０を参照し、通信要求６１の接続先である対象機器への通信スレッドの存在の有無、および通信スレッドの使用状況を確認する。使用可能な通信スレッド（同一接続情報を持つ、状態が停止中の通信スレッド）が存在する場合は、通信デーモン１６０は、取得した通信要求に既存通信スレッドを割り当てる。他方、使用可能な通信スレッドが存在しない場合は、通信デーモン１６０は、新たに通信スレッドを作成して通信処理を行う。
【００７１】
図１１は、通信スレッド起動例を示す図である。例えば通信デーモン１６０において、２つの通信スレッド１６４，１６５が起動されている状況を想定する。通信スレッド１６４は不使用であるが、通信スレッド１６５は、ワークフロー実行プロセス１５１から送信された通信要求の処理を実行しているものとする。なお、通信スレッド１６４におけるコネクションの接続先は、対象機器３１である。また通信スレッド１６５におけるコネクションの接続先は、対象機器３２である。
【００７２】
このときワークフロー５２を実行しているワークフロー実行プロセス１５２から、対象機器３１を接続先とする通信要求６１が出力されたものとする。この通信要求６１の接続方法は、通信スレッド１６４が対象機器３１とコネクションを接続したときの接続方法と同じであるものとする。通信要求６１を受信した要求受付部１６１は、通信スレッド情報記憶部１４０を参照し、既存の通信スレッドの有無とその通信スレッドの使用状況とを確認する。この場合、対象機器３１に同じ接続方法でコネクションの接続を確立した不使用の通信スレッド１６４が存在し、この通信スレッド１６４の状態は「休止中」である。そこで、要求受付部１６１は、通信要求６１の処理を、通信スレッド１６５に実行させる。
【００７３】
またワークフロー５３を実行しているワークフロー実行プロセス１５３から、対象機器３２を接続先とする通信要求６２が出力されたものとする。この通信要求６２の接続方法は、通信スレッド１６５が対象機器３２とコネクションを接続したときの接続方法と同じであるものとする。通信要求６２を受信した要求受付部１６１は、通信スレッド情報記憶部１４０を参照し、既存の通信スレッドの有無とその通信スレッドの使用状況とを確認する。この場合、対象機器３２にコネクションの接続を確立した通信スレッド１６５は存在するが、状態が「稼動中」である。そのため、要求受付部１６１は、通信要求６２の処理を実行する通信スレッド１６６を新たに作成し、通信スレッド１６６に通信要求６２の処理を実行させる。
【００７４】
次に、対象機器の接続コネクション数が上限を超えた場合の処理について説明する。
図１２は、対象機器の接続コネクション数が上限を超えた場合の例を示す図である。通信要求の接続先である対象機器の通信スレッドが使用中のとき、通信デーモン１６０は、新たに通信スレッドを作成する。その際、通信デーモン１６０は、対象機器に接続上限数分のコネクションが使用されていると、通信スレッドのコネクション生成にて接続数上限エラーとなる。接続数上限エラーを検知した通信スレッドは、対象機器に対する通信要求をキュー情報記憶部１６２に格納し、自通信スレッドを終了する。キュー情報記憶部１６２に通信要求を格納する際、通信スレッドは、通信要求と共に、優先度の判断指標となる情報（重要度と目標完了日時など）をキュー情報記憶部１６２に格納する。
【００７５】
例えば図１２の例では、２つの通信スレッド１６４，１６５が、対象機器３１とコネクションを接続し、通信を行っている。対象機器３１の同時接続可能数（コネクション数の最大値）は、「２」であるものとする。このとき、ワークフロー５３を実行しているワークフロー実行プロセス１５３が、対象機器３１を接続先とする通信要求６３を出力した場合を想定する。この場合、通信デーモン１６０は、通信スレッド１６６を新規に起動する。通信スレッド１６６は、対象機器３１とのコネクション接続を試みる。しかし対象機器３１は、接続されているコネクション数が同時接続可能数に達しており、新たなコネクションを接続することができない。そこで対象機器３１は、接続数が上限を超えてしまうことを示すエラーを通信スレッド１６６に通知する。通信スレッド１６６は、エラーの応答を受信すると、通信要求６３をキュー情報記憶部１６２に格納し、自身の処理を終了する。
【００７６】
次に、通信スレッドの処理について具体的に説明する。
図１３は、通信スレッドの処理の一例を示す図である。例えば通信要求６４を受信した通信スレッド１６４は、対象機器３１とコネクションを確立することで通信接続を行う。そして通信スレッド１６４は、通信要求６４に応じた機器操作の処理が完了すると、要求元であるワークフロー実行プロセス１５１へ処理結果６５を送信する。さらに通信スレッド１６４は、キュー情報記憶部１６２内に、対象機器３１を接続先とする処理待ち通信要求があるかどうかを確認する。該当する通信要求がある場合、通信スレッド１６４は、該当する通信要求を取得し、通信処理を継続する。処理待ち要求が存在しない場合は、通信スレッド１６４は、通信スレッド情報記憶部１４０に対して、自身の状態を「休止中」に変更する。その後、通信スレッド１６４は、コネクションを保持したまま、自身を休止状態とする。「休止中」の状態の通信スレッド１６４が保持しているコネクションが、不使用のコネクションである。
【００７７】
＜通信スレッド停止制御＞
次に、監視スレッド１６３が行う、余分な通信スレッドの停止制御について具体的に説明する。
【００７８】
図１４は、監視スレッドの通信スレッド管理例を示す図である。通信要求を実行した通信スレッドは、使用していたワークフローがすべて終了すると不要となる。また、実行中のワークフロー数を超える通信スレッドも不要である。そのため、監視スレッド１６３は、実行中のワークフロー数と通信スレッドの起動状況とを監視して、不要な通信スレッドを終了させる。
【００７９】
例えば監視スレッド１６３は、ワークフローを実行するワークフロー実行プロセスからの通信要求を契機に開始する。そして、監視スレッド１６３は、監視対象となる通信スレッドが少なくとも１つ存在する限り監視を行う。
【００８０】
監視スレッド１６３は、定期的にワークフロー履歴記憶部１３０から実行中のワークフローの情報を抽出する。そして監視スレッド１６３は、通信スレッド情報記憶部１４０を参照し、要求ワークフロー情報へワークフローの稼働状態を反映して、通信スレッド情報記憶部１４０内の通信スレッド情報の更新を行う。また監視スレッド１６３は、更新後の通信スレッド情報を基に、不要な通信スレッドの終了と通信スレッド情報からの削除を行う。削除する通信スレッドは、状態が休止中のスレッドから選択される。この際、通信スレッドが存在しなくなる対象機器の情報は、通信スレッド情報記憶部１４０から削除される。
【００８１】
＜ワークフローの優先度＞
次に、動的コネクション共有では、限られた通信スレッドが接続したコネクションを用いて、複数の通信要求の処理が行われる。異なるワークフローを実行する複数のワークフロー実行プロセスから出力された複数の通信要求のうち、どの通信要求から実行するのかは、要求元のワークフローの優先度に基づいて決定される。
【００８２】
このように、通信デーモン１６０の処理の中で、キューイングされた通信要求の実行順はワークフローの優先度から決定するが、ワークフローの優先度は「高中低」といった単純な分類分けだけでは不十分である。また、ワークフローは、複数のワークフローを組み合わせて構成される場合があり、下位層のワークフローの優先度をどの様に決定するかの論理が重要となる。
【００８３】
例えば通信デーモン１６０は、受信した通信要求をキュー情報記憶部１６２にキューイングし、その通信要求の要求元となるワークフローの優先度に応じた順番で、キューイングされた通信要求に応じた処理を実行する。通信デーモン１６０は、ワークフローの優先度は下記指標に基づいて自動的に決定する。
・指標１：ワークフローの重要度（ワークフロー情報内の指定または実行時の指定を適用）
・指標２：ワークフローの目標完了日時（ワークフロー実行開始からの実行時間またはスケジュールの終了日時）
・指標３：ワークフロー上の残りの人手作業の数
・指標４：ワークフローの開始日時
なお、他のワークフローから呼び出されるサブワークフローの重要度については、呼出元ワークフローの各指標を考慮して優先度が決定される。その際、サブワークフローが同期型サブワークフローなのか非同期型サブワークフローなのかにより、優先度決定処理が異なる。
【００８４】
＜＜単一ワークフローの優先度＞＞
まず、他のワークフローとの呼び出し関係を有していない単一ワークフローの優先度について説明する。
【００８５】
単一ワークフローの優先度判定に用いる指標には以下の４つがある。上記の４つの指標の組み合わせにより、優先度が決定される。
＜＜＜指標１：ワークフローの重要度＞＞＞
ワークフローには、例えば「高中低」といった重要度が設定できる。ワークフローの重要度は、ワークフローの内容により決定される。例えば、業務影響を伴うトラブル対処のワークフローであれば、他のワークフローを停止してでも実行しなければならず重要度は「高」となる。バックアップなどのワークフローではバックアップが遅延しても業務に影響はないため、重要度は「低」となる。
【００８６】
ワークフローの重要度はワークフローの定義に事前に設定されている場合と、実行時の入力情報として指定される場合がある。ワークフローの定義と実行時の入力情報との両方に重要度が設定されている場合、実行時の入力情報に設定されている重要度が優先される。
【００８７】
＜＜＜指標２：ワークフローの目標完了日時＞＞＞
優先度の判定指標の中で、最も優先されるのは重要度である。重要度が同じワークフロー同士では、それらのワークフローの目標完了日時によって優先度が判定される。ワークフローの目標完了日時は、ワークフロー実行開始からの実行時間またはスケジュールの終了日時によって指定される。
【００８８】
システム運用上、ワークフローの実行では、顧客と取り決めたサービスレベルアグリーメント（ＳＬＡ）が考慮される。そのため、ワークフローに対して「開始から××分で完了する」といった実行時間に関する指定が存在する。また、ワークフローの遅延を監視するため、ワークフローの実行時間が設定されている場合もある。例えば、基幹業務サーバのダウン対応のためのワークフローは開始から３０分で完了するものと、実行時間が設定される。また、人事業務サーバのワークフローは開始から３時間で完了するものと、実行時間が設定される。
【００８９】
ワークフローの実行時間はワークフローの定義に事前に設定されている場合と、実行時の入力情報として指定される場合がある。ワークフローの定義と実行時の入力情報との両方に実行時間が設定されている場合、実行時の入力情報に設定されている実行時間が優先される。
【００９０】
また、定期的に実行されるワークフローは、実行開始および終了の日時がスケジュールに設定される。スケジュールでは、業務影響を考慮した終了日時が設定される。例えば、業務システムの定期バックアップなどでは、業務アプリケーションの停止を伴うため、例えば「業務時間外の××時に開始し、○○時に終了する」とスケジュールに設定される。
【００９１】
なお、ワークフローの「実行時間」は「ワークフローの開始から××分で完了」と言う指定だが、言い換えると「ワークフローの開始から××月××日  ○○時○○分までに完了」となり、ワークフローの“定期スケジュール”の完了日時の指定と同意である。言わば指標２と指標３とは、共にワークフローの「目標完了日時」の指定である。そのため、ワークフローの「実行時間」と「スケジュール」は同列に扱うことができる。
【００９２】
図１５は、優先度の判定に使用する指標間の関係を示す図である。図１５に示すように、ワークフローの実行時間やスケジュールに基づいて、ワークフローの目標完了日時が指定される。目標完了日時は、重要度が同じワークフロー間での優先度の比較に用いられる。換言すると、重要度が異なるワークフローの優先度は重要度のみで決定され、ワークフローの目標完了日時は考慮されない。
【００９３】
また、ワークフローの「実行時間」や「スケジュール」はワークフローの用途により、どのような値を設定するのかが決まる。そのため、ワークフローの用途によっては、ワークフローの目標完了日時の指定がない場合がある。すなわち、「実行時間」と「スケジュール」との何れの指標も設定されていないワークフローが存在する。目標完了日時の指定がないワークフローは優先されないものと判断でき、そのようなワークフローよりも目標完了日時が指定されたワークフローの方が優先される。
【００９４】
図１６は、目標完了日時の指定の有無と優先度との関係を示す図である。図１６に示すように、「実行時間」の指定、または「スケジュール」による終了日時の指定があるワークフロー７１〜７３は、「実行時間」と「スケジュール」とのいずれもが指定されていないワークフロー７４よりも優先度が高くなる。
【００９５】
なお、「実行時間」または「スケジュール」が設定されているワークフロー７１〜７３同士では、目標完了日時が早い方のワークフローが優先される。「実行時間」と「スケジュール」との両方が設定されているワークフロー７１の目標完了日時は、「実行時間」に応じて計算される目標完了日時と、「スケジュール」の終了日時で示される目標完了日時とのうちの早い方の日時である。
【００９６】
図１７は、目標完了日時の決定例を示す図である。図１７において、ワークフローＸは、２時に実行を開始し、７時に終了するようにスケジュールされている。またワークフローＸの実行時間は３時間である。実行時間の指定に従えば、ワークフローＸの実行を２時に開始すると、５時に終了する。この場合、実行時間に応じた目標完了日時の方が、スケジュールに応じた目標完了日時よりも早くなる。従って、ワークフローＸの目標完了日時は、実行時間に応じた目標完了日時「５時」となる。
【００９７】
ワークフローＹは、２時に実行を開始し、７時に終了するようにスケジュールされている。またワークフローＹの実行時間は６時間である。実行時間の指定に従えば、ワークフローＹの実行を２時に開始すると、８時に終了する。この場合、スケジュールに応じた目標完了日時の方が、実行時間に応じた目標完了日時よりも早くなる。従って、ワークフローＸの目標完了日時は、スケジュールに応じた目標完了日時「７時」となる。
【００９８】
以上のように、通信デーモン１６０は、重要度の高いワークフローの通信要求の処理を優先し、同一重要度のワークフローの通信要求の場合は、目標完了日時が早いワークフローの通信要求の処理を優先する。
【００９９】
＜＜＜指標３：ワークフロー上の残りの人手作業の数＞＞＞
複数のワークフローにおいて、重要度が同一かつ目標完了日時が同一の場合がある。この場合、人手作業の介在有無によって優先度が決定される。
【０１００】
多くのワークフローでは人手を介在させる処理が存在する。例えばワークフローに定義された作業が「処理依頼通知（メール通知など）」→「実作業（ハードウェアの交換など）」→「処理結果入力（処理遷移）」の場合、「実作業」が人手作業となる。このような人手作業を含むワークフローでは、人手作業が完了するまでワークフローは滞留し、自動処理のみで構成されたワークフローより処理に時間が掛かる。
【０１０１】
図１８は、人手作業の有無と優先度との関係を示す図である。図１８の例では、左側に示したワークフロー７５は、最初の作業は対象機器の遠隔操作で自動実行可能な機器操作であるが、その後の２つの作業が、人手作業である。他方、右側に示したワークフロー７６は、すべての作業が自動実行可能な機器操作である。人手作業は、自動実行可能な機器操作よりも時間がかかる。そのため、ワークフロー７５は、ワークフロー７６よりも実行に時間がかかる。
【０１０２】
図１８の例において、ワークフロー７５を実行する際に通信要求が出力されるのは、最初の機器操作の作業を実行するときである。この機器操作の実行が遅れると、その後の人手作業の実行開始時期が遅れ、実行に時間のかかるワークフロー７５の実行完了がさらに遅れてしまう。そこで、ワークフロー７５の最初の機器操作の実行のための通信要求は、ワークフロー７６の実行のための通信要求よりも優先度が高く設定される。
【０１０３】
具体的には、通信デーモン１６０は、同一重要度，目標完了日時の場合、人手作業まで早期に遷移することを優先するために、機器操作以降の人手作業数（残人手作業数）を算出して、残人手作業数が多いワークフローを優先する。なお、ワークフローの処理分岐やサブワークフローの有無により、人手作業数の増減が考えられるが、第２の実施の形態では、通信発生時点の最大人手作業数を、残人手作業数として採用する。
【０１０４】
図１９は、残人手作業数の算出例を示す図である。図１９の例では、ワークフロー７７からサブワークフロー７８の同期呼び出しを行っている。同期呼び出しでは、呼出元のワークフロー７７の処理を実行する際、サブワークフロー７８の処理が完了するのを待って、呼び出し後の処理が実行される。
【０１０５】
ここで、ワークフロー７７の最初の作業「機器操作Ａ」を実行するときの残人手作業数は、サブワークフロー７８内の処理も含めて算出される。図１９の例では、図中の太線で示した処理ルートを辿ったときに、残りの人手作業数が最大値「３」となる。従って、「機器操作Ａ」を実行するときの残人手作業数は「３」である。
【０１０６】
また、ワークフロー７７，７８の処理が進行し、サブワークフロー７８の「機器操作Ｃ」を実行するときの残人手作業数は、「機器操作Ｃ」以降の処理のみから算出される。図１９の例では、「機器操作Ｃ」を実行するときの残人手作業数は「２」である。
【０１０７】
なお、ワークフローは、例えばＸＭＬ形式ファイルで管理される。ＸＭＬで記述されたワークフローには、例えば「Activitiesタグ」と「Transitionsタグ」が含まれる。
図２０は、「Activitiesタグ」に設定される情報の例を示す図である。「Activitiesタグ」は、自動化処理、分岐処理、人手作業を管理する情報であることを示すタグである。「Activitiesタグ」は、ワークフロー内で一意なＩＤと名称で管理されている。「Activitiesタグ」には、個々の処理内容や処理終了後の遷移先を示す遷移先ＩＤや、自動化処理、分岐処理、人手作業などのアクティビティの種別が設定される。人手作業の場合、アクティビティの種別は「Role」である。
【０１０８】
図２１は、「Transitionsタグ」に設定される情報の例を示す図である。「Transitionsタグ」は、遷移先を定義する情報であることを示すタグである。「Transitionsタグ」は、ワークフロー内で一意なＩＤと名称で管理されている。そして「Transitionsタグ」には、遷移元のアクティビティのＩＤ（遷移元ＩＤ）、遷移先のアクティビティのＩＤ（遷移先ＩＤ）が設定される。
【０１０９】
ＸＭＬで記述されたワークフローでは、現在実行している処理（アクティビティ）以降の人手作業数（残人手作業数）は、以下のようにして抽出することができる。
例えば、現在のワークフローの処理位置（Activity）を、ワークフロー履歴記憶部１３０で状態と共に管理させる。そして、現在の処理位置（Activity）から、ワークフロー定義（ＸＭＬファイル）を基に遷移先にあるPerformerが「Role」であるActivity数をカウントすることで、残人手作業数の抽出が可能である。
【０１１０】
以下、具体的なＸＭＬ形式のワークフローを用いて、残人手作業数の算出方法について説明する。
図２２は、残人手作業数の算出例を示す図である。図２２には、ワークフロー定義を記述したＸＭＬファイル９１と、ワークフロー定義に示される処理手順を示すワークフロー遷移図９２とが示されている。
【０１１１】
例えば、自動処理（任意のコマンドを実行）においてコマンド実行に失敗した場合、もしくはコマンドの異常終了で復帰した場合、人手で復旧処理（異常時対処）を実施して処理を完了する。現処理位置がアクティビティのＩＤ「166」の「任意のコマンドを実行」である場合、遷移先パターンは以下の通りである。
パターン１「ID:166→ID:171→ID:164→ID:168→ID:163」
パターン２「ID:166→ID:172→ID:165→ID:169→ID:163」
パターン３「ID:166→ID:172→ID:165→ID:170→ID:164→ID:168→ID:163」
各ルートの人手作業（Performer："Role"）の数をカウントすることで、各ルートの人手作業数を算出できる。図２２の例では、ID:164が人手作業である。従って、パターン１の人手作業数は「１」、パターン２の人手作業数は「０」、パターン３の人手作業数は「１」である。その結果、残人手作業数は「１」となる。
【０１１２】
＜＜＜指標４：ワークフローの開始日時＞＞＞
重要度、目標完了日時、残人手作業数がいずれも同じワークフローの通信要求の場合、キュー情報記憶部１６２へのキューイングの順ではなく、ワークフローの開始日時が早い通信要求を優先する。これは、ユーザビリティ的に先に実行されたワークフローを先に完了させることを意図したものである。
【０１１３】
図２３は、ワークフロー開始日時と優先度との関係を示す図である。図２３の例では、ワークフローＸは、ワークフローＹよりも早く実行が開始されている。従って、ワークフローＸの方が、ワークフローＹよりも優先度が高くなる。
【０１１４】
このように、ワークフローの優先度は重要度、目標完了日時、残人手作業数、および開始日時に基づいて決定される。
以上が、単一ワークフローの優先度に関する説明である。
【０１１５】
＜＜サブワークフローの優先度＞＞
ワークフローは、単一ワークフローの場合と、呼び出し関係を有する複数のワークフローで構成される場合とがある。複数のワークフローのうちの、最上位のワークフロー（ルートワークフロー）の優先度については、単一ワークフローの場合と同様に判定できる。
【０１１６】
ルートとなるワークフローから呼び出されて実行されるワークフロー（サブワークフロー）には、完了を待ち合わせる「同期型」と、完了を待ち合わせない「非同期型」がある。通信デーモン１６０は、独立した単一ワークフローについては、個々のワークフローの指標に基づいて優先度を決定するが、サブワークフローについては、ルートワークフローの優先度を踏まえて優先度を決定する。
【０１１７】
・同期型のサブワークフロー
同期型サブワークフローの処理時間が上位ワークフローの目標完了日時を超えると、上位ワークフローが目標完了日時を守れない。そのため、同期型サブワークフローの優先度の判定には、上位ワークフローの優先度の指標が流用される。ただし、残人手作業数はワークフローの進捗状況によって変化するため、起点となる操作処理単位に再計算される。
【０１１８】
・非同期型のサブワークフロー
非同期型サブワークフローは上位ワークフローの目標完了日時を考慮せずにすむが、上位ワークフローの１ワークフローである。そのため、非同期型サブワークフローの優先度の判定には、上位ワークフローの重要度のみが流用される。
【０１１９】
図２４は、サブワークフローの優先度判定に用いる指標の例を示す図である。図２４の例では、ルートワークフロー８１からは、同期型のサブワークフロー８２の呼び出しと、非同期型のサブワークフロー８４の呼び出しが行われる。サブワークフロー８２からは、同期型のサブワークフロー８３の呼び出しが行われる。サブワークフロー８３からは、非同期型のサブワークフロー８５の呼び出しが行われる。
【０１２０】
このような場合、同期型のサブワークフロー８２，８３については、ルートワークフロー８１の優先度の指標（重要度、目標完了日時、残人手作業数、開始日時）が流用される。すなわち、ルートワークフロー８１の優先度の指標に基づいて、サブワークフロー８２，８３の優先度が判定される。
【０１２１】
ルートワークフロー８１から呼び出される非同期型のサブワークフロー８４は、ルートワークフロー８１の重要度と、自身の目標完了日時、残人手作業数、および開始日時に基づいて、優先度が判定される。同様に、サブワークフロー８３から呼び出される非同期型のサブワークフロー８５は、ルートワークフロー８１の重要度と、自身の目標完了日時、残人手作業数、および開始日時に基づいて、優先度が判定される。
【０１２２】
ところで、同期型のサブワークフロー８２，８３も実体は１つのワークフローであり、「実行時間」の設定が可能である。同期型のサブワークフロー８２，８３はルートワークフロー８１の目標完了日時より早く終了しなければ、ルートワークフロー８１において目標完了日時を達成できない。そのため、同期型のサブワークフロー８２，８３には、ルートワークフロー８１の目標完了日時より早く終了するような「実行時間」が設定されている場合がある。ただし、厳密な管理を要求しない場合も多い。そこで、通信デーモン１６０は、サブワークフロー８２，８３の優先度の判定において、ルートワークフローの目標完了時間のみを利用し、サブワークフロー８２，８３の「実行時間」は無視する。
【０１２３】
なお、既存のワークフローを同期型のサブサークフローとして呼び出す新たなワークフローを作成する場合がある。この場合、呼出元として作成したワークフローの「実行時間」が、呼出先のサブワークフローの「実行時間」より短い場合がある。このような場合、通信デーモン１６０は、同期型のサブワークフローの優先度の判定指標として、呼出元のワークフローから指定された目標完了日時と、自身の「実行時間」に応じた終了日時とを比較し、早い方の目標完了日時を採用する。
【０１２４】
図２５は、呼出元ワークフローの目標完了日時と同期型サブワークフローの実行時間との関係を示す図である。図２５の上から順に、最初の例では、呼出元ワークフローの目標完了日時よりも、同期型サブワークフローの実行時間に基づく終了日時の方が、時刻が早い。この場合、同期型サブワークフローの実行時間に基づく終了日時が、同期型サブワークフローの目標完了日時として採用される。
【０１２５】
二番目の例では、呼出元ワークフローの目標完了日時よりも、同期型サブワークフローの実行時間に基づく終了日時の方が、時刻が遅い。この場合、呼出元ワークフローの目標完了日時が、同期型サブワークフローの目標完了日時として採用される。
【０１２６】
三番目の例では、呼出元ワークフローに目標完了日時が指定されているが、同期型サブワークフローへの実行時間の指定がない。この場合、呼出元ワークフローの目標完了日時が、同期型サブワークフローの目標完了日時として採用される。
【０１２７】
四番目の例では、呼出元ワークフローには目標完了日時が指定されておらず、同期型サブワークフローには実行時間が指定されている。この場合、呼出元ワークフローについて、目標完了日時の設定がないものとされる。
【０１２８】
五番目の例では、呼出元ワークフローには目標完了日時が指定されておらず、同期型サブワークフローにも実行時間が指定されていない。この場合、呼出元ワークフローについて、目標完了日時の設定がないものとされる。
【０１２９】
このように、通信デーモン１６０は、ワークフローの特性を考慮して、単一ワークフロー、同期型サブワークフロー、非同期型サブワークフローそれぞれの優先度判定の指標を使い分けている。なお、ルートワークフローの優先度判定に使用する指標は、単一ワークフローと同じである。
【０１３０】
図２６は、ワークフローの種別ごとの優先度判別に使用する指標の例を示す図である。なお図２６には重要度と目標完了日時に関してのみ示しており、残人手作業数と開始日時については、省略している。
【０１３１】
例えば単一ワークフローまたはルートワークフローであれば、重要度として、自ワークフローの重要度が採用される。目標完了日時として、自ワークフローの実行時間に基づく終了日時または自ワークフローのスケジュールによる終了日時が採用される。
【０１３２】
同期型サブワークフローであれば、重要度として、ルートワークフローの重要度が採用される。目標完了日時として、ルートワークフローの目標完了日時、自ワークフローの実行時間に基づく終了日時、または自ワークフローのスケジュールによる終了日時が採用される。
【０１３３】
非同期型サブワークフローであれば、重要度として、ルートワークフローの重要度が採用される。目標完了日時として、自ワークフローの実行時間に基づく終了日時、または自ワークフローのスケジュールによる終了日時が採用される。
【０１３４】
＜ワークフロー実行手順＞
次に、ワークフロー実行時のワークフロー実行サーバ１００における処理について、具体的に説明する。
【０１３５】
例えばｗｅｂ／ＡＰサーバ４１からワークフロー制御部１５０に、ワークフローの実行要求が入力されたとき、またはスケジュール定義記憶部１２０内のスケジュールにおいて、ワークフローの実行開始日時になったときにワークフローが実行される。ワークフローを実行する場合、ワークフロー制御部１５０が、ワークフロー実行プロセスを生成する。生成されたワークフロー実行プロセスは、実行するワークフローの優先度情報（重要度、目標完了日時）を生成して通信処理に備える。
【０１３６】
以下、ワークフロー実行プロセス１５１（図４参照）が優先度情報を生成する場合を例にとり、図２７、図２８を参照して優先度情報生成処理を詳細に説明する。
図２７は、優先度情報生成処理の手順を示すフローチャートの前半である。図２７には、実行するワークフロー自身に設定された指標のみに関する優先度情報生成処理を示している。以下、図２７に示す処理をステップ番号に沿って説明する。
【０１３７】
［ステップＳ１０１］ワークフロー実行プロセス１５１は、ワークフローの実行要求に重要度指定があるか否かを判断する。重要度指定がある場合、処理がステップＳ１０４に進められる。重要度指定がなければ、処理がステップＳ１０２に進められる。
【０１３８】
［ステップＳ１０２］ワークフロー実行プロセス１５１は、実行するワークフローに、予め重要度が定義されているか否かを判断する。例えば、ワークフロー実行プロセス１５１は、ワークフロー定義記憶部１１０を参照し、実行するワークフローのワークフロー情報内に重要度が設定されている場合、重要度が定義されていると判断する。重要度が定義されている場合、処理がステップＳ１０４に進められる。重要度が定義されていない場合、処理がステップＳ１０３に進められる。
【０１３９】
［ステップＳ１０３］ワークフロー実行プロセス１５１は、実行するワークフローの優先度情報の重要度として、最低のレベル「低」をメモリに格納する。その後、処理がステップＳ１０５に進められる。
【０１４０】
［ステップＳ１０４］ワークフロー実行プロセス１５１は、実行要求に含まれている重要度指定、またはワークフロー情報として予め設定されている重要度定義を、実行するワークフローの優先度情報の重要度として、メモリに格納する。
【０１４１】
［ステップＳ１０５］ワークフロー実行プロセス１５１は、実行要求に実行時間の指定があるか否かを判断する。実行時間の指定がある場合、処理がステップＳ１０８に進められる。実行時間の指定がない場合、処理がステップＳ１０６に進められる。
【０１４２】
［ステップＳ１０６］ワークフロー実行プロセス１５１は、実行するワークフローに、予め実行時間が定義されているか否かを判断する。例えば、ワークフロー実行プロセス１５１は、ワークフロー定義記憶部１１０を参照し、実行するワークフローのワークフロー情報内に実行時間が設定されている場合、実行時間が定義されていると判断する。実行時間が定義されている場合、処理がステップＳ１０８に進められる。重要度が定義されていない場合、処理がステップＳ１０７に進められる。
【０１４３】
［ステップＳ１０７］ワークフロー実行プロセス１５１は、実行するワークフローの目標完了日時を初期化（空のデータ）した値を、優先度情報の目標完了日時として、メモリに格納する。その後、処理がステップＳ１０９に進められる。
【０１４４】
［ステップＳ１０８］ワークフロー実行プロセス１５１は、実行要求に含まれている実行時間、またはワークフロー情報として予め設定されている実行時間に基づいて、目標完了日時を算出する。例えばワークフロー実行プロセス１５１は、ワークフローの実行開始日時に実行時間を加算した値を、目標完了日時とする。そしてワークフロー実行プロセス１５１は、算出した目標完了日時を、ワークフローの優先度情報の目標完了日時として、メモリに格納する。
【０１４５】
［ステップＳ１０９］ワークフロー実行プロセス１５１は、実行するワークフローのスケジュール定義があるか否かを判断する。例えばワークフロー実行プロセス１５１は、スケジュール定義記憶部１２０内に、実行するワークフローのワークフローＩＤが設定されたスケジュール管理情報が、優先度情報として格納されていれば、スケジュール定義があると判断する。スケジュール定義がある場合、処理がステップＳ１１０に進められる。スケジュール定義がなければ、処理がステップＳ１２１（図２８参照）に進められる。
【０１４６】
［ステップＳ１１０］ワークフロー実行プロセス１５１は、現在設定されている目標完了日時と、スケジュールに基づく終了日時（終了スケジュール）とを比較する。目標完了日時の方が早いか、目標完了日時と終了スケジュールとが等しい場合、処理がステップＳ１２１に進められる。終了スケジュールの方が早いか、または目標完了日時が初期値の場合、処理がステップＳ１１１に進められる。
【０１４７】
［ステップＳ１１１］ワークフロー実行プロセス１５１は、実行するワークフローの優先度情報の目標完了日時として、終了スケジュールを設定する。その後、処理がステップＳ１２１に進められる。
【０１４８】
図２７の処理によって、各ワークフローに対して、そのワークフローが単一ワークフローであった場合の優先度情報が設定される。ただし、ワークフローの中には、他のワークフローから呼び出されて実行されるサブワークフローがあり、サブワークフローについては、図２４に示したように、呼出元ワークフローからの優先度情報の一部または全部を流用することとなる。そこで、ワークフローの実行契機に応じて、優先度情報に示される指標の値を変更することで、最終的な優先度情報が得られる。
【０１４９】
以下、図２８を参照して、優先度情報生成処理のうちの、実行契機に基づく優先度情報の変更処理について説明する。
図２８は、優先度情報生成処理の手順を示すフローチャートの後半である。図２８には、実行契機に応じた優先度情報生成処理を示している。以下、図２８に示す処理をステップ番号に沿って説明する。
【０１５０】
［ステップＳ１２１］ワークフロー実行プロセス１５１は、ワークフローの実行契機がなにかを判断する。スケジュールにおける開始日時になったことの検知、または手動指示に基づくｗｅｂ／ＡＰサーバ４１からの実行要求の入力が実行契機であれば、処理がステップＳ１２２に進められる。他のワークフロー実行プロセスからの呼び出しであれば、処理がステップＳ１２３に進められる。
【０１５１】
［ステップＳ１２２］ワークフロー実行プロセス１５１は、自身が実行する自ワークフローの重要度を採用する。ワークフロー実行プロセス１５１は、自ワークフローの優先度情報の重要度の値を、そのまま維持する。その後、処理がステップＳ１２５に進められる。
【０１５２】
［ステップＳ１２３］ワークフロー実行プロセス１５１は、自ワークフローの優先度情報における重要度として、呼出元のワークフローの重要度を採用する。すなわちワークフロー実行プロセス１５１は、自ワークフローの優先度情報における重要度の値を、呼出元のワークフローの重要度と同じ値に変更する。
【０１５３】
［ステップＳ１２４］ワークフロー実行プロセス１５１は、呼び出しが同期型か否かを判断する。同期型であれば、処理がステップＳ１２６に進められる。非同期型であれば、処理がステップＳ１２５に進められる。
【０１５４】
［ステップＳ１２５］ワークフロー実行プロセス１５１は、優先度情報に、自ワークフローの開始日時を設定する。その後、処理がステップＳ１３０に進められる。
［ステップＳ１２６］ワークフロー実行プロセス１５１は、優先度情報に、呼出元ワークフローの開始日時を設定する。
【０１５５】
［ステップＳ１２７］ワークフロー実行プロセス１５１は、呼出元ワークフローに対して目標完了日時の設定があるか否かを判断する。目標完了日時の設定があれば、処理がステップＳ１２８に進められる。目標完了日時の設定がなければ、処理がステップＳ１３０に進められる。
【０１５６】
［ステップＳ１２８］ワークフロー実行プロセス１５１は、呼出元ワークフローの目標完了日時と、自ワークフローの目標完了日時とを比較する。呼出元ワークフローの目標完了日時の方が早ければ、処理がステップＳ１２９に進められる。自ワークフローの目標完了日時の方が早ければ、処理がステップＳ１３０に進められる。
【０１５７】
［ステップＳ１２９］ワークフロー実行プロセス１５１は、自ワークフローの優先度情報における目標完了日時として、呼出元ワークフローの目標完了日時を採用する。すなわち、ワークフロー実行プロセス１５１は、自ワークフローにおける優先度情報の目標完了日時の値を、呼出元ワークフローの目標完了日時と同じ値に変更する。その後、処理がステップＳ１３１に進められる。
【０１５８】
［ステップＳ１３０］ワークフロー実行プロセス１５１は、自ワークフローの目標完了日時を採用する。すなわちワークフロー実行プロセス１５１は、自ワークフローの優先度情報の目標完了日時の値を、そのまま維持する。
【０１５９】
［ステップＳ１３１］ワークフロー実行プロセス１５１は、ワークフローに従った処理の実行を開始する。
このように、起動されたワークフロー実行プロセス１５１は、ワークフローを実行する前に優先度情報を生成して通信処理に備える。そしてワークフロー実行プロセス１５１は、対象機器への操作処理に推移した場合、機器操作制御処理を実行する。機器操作制御処理では、ワークフロー実行プロセス１５１は、優先度情報の一部として残人手作業数を抽出し、通信デーモン１６０へ通信要求を送信することで、対象機器への操作を依頼する。通信要求には、対象機器接続情報、優先度情報、ワークフロー情報などが含まれる。
【０１６０】
図２９は、機器操作制御処理の手順の一例を示すフローチャートである。以下、図２９に示す処理をステップ番号に沿って説明する。
［ステップＳ１４１］ワークフロー実行プロセス１５１は、現在実行中の作業より後の人手作業の最大数をカウントする。ワークフロー実行プロセス１５１は、カウントした値を、残人手作業数とする。
【０１６１】
［ステップＳ１４２］ワークフロー実行プロセス１５１は、優先度情報に、残人手作業数を追加する。
［ステップＳ１４３］ワークフロー実行プロセス１５１は、優先度情報を含む通信要求を、通信デーモン１６０に送信する。
【０１６２】
ワークフロー実行プロセス１５１は、通信要求に対する処理結果の応答を受信すると、ワークフローの次の作業に処理を進める。次の作業が人手作業であれば、ワークフロー実行プロセス１５１は、人手作業の完了通知が入力されるまで、ワークフローの実行を停止する。
【０１６３】
次に、通信要求を取得した通信デーモン１６０における要求受付部１６１の処理について説明する。要求受付部１６１は、受信した通信要求への通信スレッドの割り当てを行う。
【０１６４】
図３０は、通信スレッド割り当て処理の手順の一例を示すフローチャートである。以下、図３０に示す処理をステップ番号に沿って説明する。
［ステップＳ１５１］要求受付部１６１は、通信要求の接続先の対象機器にコネクションを接続しており、接続方法が通信要求と同じ既存の通信スレッドが存在するか否かを判断する。該当する通信スレッドが存在すれば、処理がステップＳ１５２に進められる。該当する通信スレッドが存在しなければ、処理がステップＳ１５５に進められる。
【０１６５】
［ステップＳ１５２］要求受付部１６１は、通信要求の接続先の対象機器にコネクションを接続しており、接続方法が通信要求と同じ既存の通信スレッドの状態を確認する。状態が稼働中であれば、処理がステップＳ１５５に進められる。状態が停止中であれば、処理がステップＳ１５３に進められる。
【０１６６】
［ステップＳ１５３］要求受付部１６１は、キュー情報記憶部１６２に、取得した通信要求の情報を、キュー情報として格納する。
［ステップＳ１５４］要求受付部１６１は、通信要求の接続先の対象機器にコネクションを接続しており、接続方法が通信要求と同じ既存の通信スレッドへ、キュー情報記憶部１６２に格納した通信要求の処理を実行させる通信イベントを通知する。その後、通信スレッド割り当て処理が終了する。
【０１６７】
［ステップＳ１５５］要求受付部１６１は、新たな通信スレッドを作成する。そして要求受付部１６１は、作成した通信スレッドに通信要求の処理の実行を要求する通信イベントを通知する。このとき要求受付部１６１は、通信要求の送信元のワークフロー実行プロセスが実行しているワークフローの監視を、監視スレッド１６３に要求する。その後、監視スレッド１６３により、該当ワークフローの状態が監視される。
【０１６８】
このようにして、要求受付部１６１により、通信要求に、いずれかの通信スレッドが割り当てられ、割り当てられた通信スレッドへ、通信要求の処理要求が送信される。そして、通信スレッドは、処理要求によって指定された通信要求の処理を実行する。以下、通信スレッド１６４（図４参照）が通信要求に応じた処理を実行する場合を例にとり、通信スレッドの処理を詳細に説明する。
【０１６９】
図３１は、通信スレッドの処理手順を示すフローチャートである。以下、図３１に示す処理をステップ番号に沿って説明する。
［ステップＳ１６１］通信スレッド１６４は、新規に起動されたときの処理要求で指定された通信要求の接続先となる対象機器へのコネクションを確立する。
【０１７０】
［ステップＳ１６２］通信スレッド１６４は、通信異常が発生したか否かを判断する。通信異常が発生した場合、処理がステップＳ１６３に進められる。正常にコネクションが確立した場合、処理がステップＳ１６７に進められる。
【０１７１】
［ステップＳ１６３］通信スレッド１６４は、通信異常の種別を判断する。通信異常の種別は、例えば対象機器から通知される。通信異常の種別が接続数超過の場合、処理がステップＳ１６４に進められる。通信異常の種別が接続数超過以外の場合、処理がステップＳ１６６に進められる。
【０１７２】
［ステップＳ１６４］通信スレッド１６４は、同じ対象機器を接続先として、同じ接続方法で接続している他の通信スレッドが存在するか否かを判断する。該当する通信スレッドが存在すれば、処理がステップＳ１６５に進められる。該当する通信スレッドが存在しなければ、処理がステップＳ１６６に進められる。
【０１７３】
［ステップＳ１６５］通信スレッド１６４は、通信要求を、キュー情報としてキュー情報記憶部１６２に格納する。その後、通信スレッド１６４の処理が終了する。
［ステップＳ１６６］通信スレッド１６４は、通信要求の送信元であるワークフロー実行プロセスに、通信異常を通知する。その後、通信スレッド１６４の処理が終了する。このように、通信スレッド１６４は、対象機器の既存通信スレッドが存在しない場合、または接続数上限以外の通信異常を検知した場合は、ワークフロー実行プロセスに通信異常を通知し、通信要求をキューイングせずに処理を終了する。
【０１７４】
［ステップＳ１６７］通信スレッド１６４は、コネクションが確立すると、通信スレッド１６４自身の情報を、通信スレッド情報記憶部１４０に格納する。このとき、スレッド情報管理テーブル１４２に設定される通信スレッド１６４状態は、「稼働中」である。
【０１７５】
［ステップＳ１６８］通信スレッド１６４は、処理を実行する通信要求における接続先の対象機器に対する処理を実行する。例えば通信スレッド１６４は、対象機器に対して遠隔操作によってコマンドを入力し、対象機器の環境設定を変更したり、対象機器のプログラムを更新したりする。なお、キュー情報記憶部１６２にキューイングされた通信要求の処理を実行する場合は、優先度の高いワークフローの通信要求から順に処理が実行される。
【０１７６】
［ステップＳ１６９］通信スレッド１６４は、ワークフロー実行プロセスへ処理結果を通知する。
［ステップＳ１７０］通信スレッド１６４は、キュー情報記憶部１６２から、キュー情報を取得する。
【０１７７】
［ステップＳ１７１］通信スレッド１６４は、登録されているキュー情報の中に、自身が実行する通信要求があるか否かを判断する。通信スレッド１６４は、該当する通信要求があれば、該当する通信要求のうち、優先度が最も高いワークフローの通信要求を取得し、処理をステップＳ１６８に進める。対合する通信要求がなければ、処理がステップＳ１７２に進められる。
【０１７８】
［ステップＳ１７２］通信スレッド１６４は、通信スレッド情報における通信スレッド１６４の状態として、「休止中」を設定する。
［ステップＳ１７３］通信スレッド１６４は、通信イベントまたは停止イベントの発生を待つ。いずれかのイベントの通知を通信スレッド１６４が受信すると、処理がステップＳ１７４に進められる。
【０１７９】
［ステップＳ１７４］通信スレッド１６４は、通知されたイベントが、通信イベントか停止イベントかを判断する。通信イベントを受信した場合、処理がステップＳ１７５に進められる。停止イベントを受信した場合、処理がステップＳ１７６に進められる。
【０１８０】
［ステップＳ１７５］通信スレッド１６４は、通信スレッド情報記憶部１４０における通信スレッド１６４の状態を「稼動中」に設定し、処理をステップＳ１７０に進める。
［ステップＳ１７６］通信スレッド１６４は、通信スレッド情報記憶部１４０から通信スレッド１６４自身の情報を削除する。このとき通信スレッド１６４は、接続先の対象機器とのコネクションを切断する。
【０１８１】
［ステップＳ１７７］通信スレッド１６４は、通信スレッド情報記憶部１４０を参照し、通信スレッド１６４と同じ対象機器を接続先とする通信スレッド数が「０」になったか否かを判断する。例えば、通信スレッド１６４が接続した対象機器の対象機器ＩＤで、通信スレッド情報記憶部１４０内のスレッド情報管理テーブル１４２を検索する。検索の結果、一件のレコードもヒットしなかった場合、該当通信スレッド数は「０」である。該当する通信スレッド数が「０」であれば、処理がステップＳ１７８に進められる。台頭する通信スレッド数が「１」以上であれば、処理が終了する。
【０１８２】
［ステップＳ１７８］通信スレッド１６４は、通信スレッド情報記憶部１４０から、通信スレッド１６４の接続先である対象機器に関する情報を削除する。例えば通信スレッド１６４は、対象機器情報管理テーブル１４１から、通信スレッド１６４の接続先である対象機器の対象機器ＩＤが設定されたレコードを削除する。その後、処理が終了する。
【０１８３】
このようにして、通信スレッド１６４により、優先度が高いワークフローの通信要求から順に実行される。なお、ステップＳ１７３，Ｓ１７４に示した停止イベントは、監視スレッド１６３から通知されるイベントである。監視スレッド１６３は、ワークフローの実況状況と、通信スレッドの時刻状況とを監視して、通信スレッドの数が過剰と判断したときに停止イベントを発生させる。
【０１８４】
図３２は、監視スレッドの処理の手順の一例を示すフローチャートである。以下、図３２に示す処理をステップ番号に沿って説明する。
［ステップＳ１８１］監視スレッド１６３は、ワークフロー履歴記憶部１３０から、ワークフローの履歴情報を取得する。
【０１８５】
［ステップＳ１８２］監視スレッド１６３は、通信スレッド情報記憶部１４０へ、ワークフローの稼働状況を反映させる。例えば監視スレッド１６３は、稼動中のワークフローのワークフローＩＤと、そのワークフローの実行のために出力された通信要求における接続先の対象機器の対象機器ＩＤとの組を、要求ワークフロー情報管理テーブル１４３に格納する。また監視スレッド１６３は、停止中のワークフローのワークフローＩＤが設定されたレコードを、要求ワークフロー情報管理テーブル１４３から削除する。
【０１８６】
［ステップＳ１８３］監視スレッド１６３は、未処理の対象機器を選択し、通信スレッド情報記憶部１４０から、選択した対象機器の対象機器ＩＤに関連付けられた通信スレッド情報を取得する。
【０１８７】
［ステップＳ１８４］監視スレッド１６３は、選択した対象機器に接続している通信スレッド数と、その対象機器を接続先とする通信要求の出力元であるワークフローの数（要求ワークフロー数）とを比較する。通信スレッド数の方が、要求ワークフロー数よりも多ければ、処理がステップＳ１８５に進められる。要求ワークフロー数が通信スレッド数以上であれば、処理がステップＳ１８６に進められる。
【０１８８】
［ステップＳ１８５］監視スレッド１６３は、余分な通信スレッドに停止イベントを発行する。例えば監視スレッド１６３は、通信スレッド数から要求ワークフロー数を減算した値を、余分な通信スレッド数とする。そして監視スレッド１６３は、スレッド情報管理テーブル１４２内の、余分な通信スレッドが存在する対象機器の対象機器ＩＤに関連付けられたレコードのうち、状態が「停止中」のレコードを抽出する。監視スレッド１６３は、抽出したレコードから、余分な通信スレッド数分のレコードを選択し、選択したレコードに示されるスレッドＩＤに対応する通信スレッドに、停止イベントを発行する。この停止イベントを受信した通信スレッドは、処理を停止する。
【０１８９】
［ステップＳ１８６］監視スレッド１６３は、すべての対象機器に対して、ステップＳ１８３〜Ｓ１８５の処理を実行したか否かを判断する。すべての対象機器に対する処理が完了していれば、処理がステップＳ１８７に進められる。未処理の対象機器があれば、処理がステップＳ１８３に進められる。
【０１９０】
［ステップＳ１８７］監視スレッド１６３は、監視する通信スレッドがなくなったかどうかを判断する。例えば監視スレッド１６３は、通信スレッド情報記憶部１４０に、通信スレッドの情報がまったくなくなった場合、監視する通信スレッドがなくなったと判断する。監視する通信スレッドがなくなった場合、監視処理が終了する。監視する通信スレッドが残存していれば、処理がステップＳ１８８に進められる。
【０１９１】
［ステップＳ１８８］監視スレッド１６３は、一定期間スリープし、その後処理をステップＳ１８１に進める。
このようにして、一定期間ごとに余分な通信スレッドの有無がチェックされ、余分な通信スレッドが停止させられる。
【０１９２】
＜第２の実施の形態の効果＞
第２の実施の形態では、残人手作業数に基づいて優先度を判定している。これにより、残人手作業数が多いワークフローの通信要求を先に処理させることができ、複数のワークフローを並列で実行した場合の全ワークフローの完了時刻を早めることができる。
【０１９３】
例えばワークフローの作り（人手作業の有無）を考慮せずに優先度を決定すると、人手作業を含むワークフローを優先的に処理することができない。そのため、あるワークフローの処理が人手作業で滞留している間に、他のワークフローの処理を進めるといった効率的な処理制御が行われず、多重実行によるワークフローの完了遅延が大きくなる。
【０１９４】
図３３は、並列で実行するワークフローの例を示す図である。図３３に示した例では、自動で実効可能な機器操作の作業の所要時間は１分、人手作業の所要時間は１０分であるものとする。
【０１９５】
ここで、対象機器の最大接続数を１とした時、対象機器への通信は１スレッドで処理されワークフローＸ，Ｙ，Ｚが順次実行される。そのため、１つのワークフローの通信要求の処理を実行中は他ワークフローの通信要求がキューイングされて処理の滞留が発生する。
【０１９６】
以下、ワークフローの残人手作業数を考慮しない場合と、ワークフローの残人手作業数を考慮した場合との各ワークフローの処理時間の違いについて検討する。
まずワークフローＸの処理時間について考える。ワークフローＸが単体で実行された場合は「機器操作３個」×「所要時間１分」＝「ワークフローＸの処理時間３分」となる。
【０１９７】
しかし、ワークフローＸ，Ｙ，Ｚを同時に実行した場合の機器操作は通信スレッドへの依頼順で処理される。すなわち、ワークフローＸの２つ目の機器操作は、ワークフローＹ，Ｚの機器操作の処理後（２分後）に実行される。そのため、ワークフローＸ全体の処理時間は６分となる。同様に、ワークフローＹ全体の処理時間は７分となる。
【０１９８】
次に、ワークフローの残人手作業数を考慮しない場合のワークフローＸの処理時間について考える。
図３４は、ワークフローの残人手作業数の考慮の有無による処理時間の違いを示す図である。ワークフローＺが単体で実行された場合は「機器操作２個」×「所要時間１分」＋「人手作業１０分」＝「ワークフローＺ処理時間１２分」である。ワークフローＸ，Ｙ，Ｚを同時に実行した場合は人手作業処理（１０分）後にワークフローＺの２つ目の機器操作の通信要求が行われる。そのため、ワークフローＺ全体の処理時間は１４分となる。
【０１９９】
ワークフローの残人手作業数を考慮した場合、ワークフローＺの１つ目の機器操作を優先することで、通信スレッドでの滞留時間を１分短縮でき、ワークフローＺ全体の処理時間は１３分となる。
【０２００】
このように、通信スレッドで人手作業があるワークフローＺの優先度を考慮した場合、通信スレッドでの滞留時間が短縮される。
また、第２の実施の形態では、サブワークフローの優先度情報として、ルートワークフローの優先度情報の少なくとも一部を流用している。これにより、サブワークフローの優先度が低いことによりルートフローの処理が遅延してしまうことを抑止できる。
【０２０１】
図３５は、サブワークフローの優先度制御を示す図である。例えば、図３５に示すワークフローＸの重要度は「高」である。ワークフローＸから非同期に呼び出されるサブワークフローＹの重要度は「低」である。また単一のワークフローＺの重要度は「中」である。
【０２０２】
このとき、非同期のサブワークフローＹにおいて呼出元のワークフローＸの重要度を引き継がないと、個々のワークフローの優先度でキュー制御される。そのため、サブワークフローＹよりワークフローＺが優先的に処理され、サブワークフローＹの処理の完了が遅延する可能性がある。
【０２０３】
それに対して、第２の実施の形態に示すように、非同期のサブワークフローＹにおいて呼出元のワークフローＸの重要度を引き継ぐことで、サブワークフローＹの重要度は「高」と判断される。その結果、重要度が高いワークフローＸの処理の一環であるサブワークフローＹの処理の完了が遅延することを抑止できる。
【０２０４】
なお、同期型のサブワークフローであれば、ルートワークフローの優先度情報のすべてを引き継ぐため、優先度の判定において、ルートワークフローと同等の扱いを受けることができる。その結果、サブワークフローの設定の誤りなどにより、優先度の高いルートワークフローの処理が遅延することが抑止される。
【０２０５】
以上が第２の実施の形態の説明である。
〔その他の実施の形態〕
第２の実施の形態では、優先度判断の指標として、重要度、目標完了日時、残人手作業数、および開始日時を用いているが、これらの指標の一部のみを用いて優先度を判断してもよい。
【０２０６】
また第２の実施の形態では、優先度を決定するための指標の判断の順番を、重要度、目標完了日時、残人手作業数、開始日時としている。そして、先に判断した指標において値が一致するワークフロー同士の優先度を、後の指標に基づいて判断している。このような指標の判断の順番を入れ替えてもよい。
【０２０７】
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。さらに、前述した実施の形態のうちの任意の２以上の構成（特徴）を組み合わせたものであってもよい。
【符号の説明】
【０２０８】
１  機器
２，３  ワークフロー
４  コネクション
１０  情報処理装置
１１  記憶部
１２  演算部
【図１】
0006597360.tif 000002
【図２】
0006597360.tif 000003
【図３】
0006597360.tif 000004
【図４】
0006597360.tif 000005
【図５】
0006597360.tif 000006
【図６】
0006597360.tif 000007
【図７】
0006597360.tif 000008
【図８】
0006597360.tif 000009
【図９】
0006597360.tif 000010
【図１０】
0006597360.tif 000011
【図１１】
0006597360.tif 000012
【図１２】
0006597360.tif 000013
【図１３】
0006597360.tif 000014
【図１４】
0006597360.tif 000015
【図１５】
0006597360.tif 000016
【図１６】
0006597360.tif 000017
【図１７】
0006597360.tif 000018
【図１８】
0006597360.tif 000019
【図１９】
0006597360.tif 000020
【図２０】
0006597360.tif 000021
【図２１】
0006597360.tif 000022
【図２２】
0006597360.tif 000023
【図２３】
0006597360.tif 000024
【図２４】
0006597360.tif 000025
【図２５】
0006597360.tif 000026
【図２６】
0006597360.tif 000027
【図２７】
0006597360.tif 000028
【図２８】
0006597360.tif 000029
【図２９】
0006597360.tif 000030
【図３０】
0006597360.tif 000031
【図３１】
0006597360.tif 000032
【図３２】
0006597360.tif 000033
【図３３】
0006597360.tif 000034
【図３４】
0006597360.tif 000035
【図３５】
0006597360.tif 000036