(57)【要約】      （修正有）【課題】利用可能なバッチシステムとスクリプト言語の組み合わせが異なるサーバ向けにバッチスクリプトを動的に生成し、新たなバッチシステムとスクリプト言語への対応を容易に行うことができるようにする。【解決手段】バッチスクリプトの生成に必要な処理をバッチシステムに依存する処理とスクリプト言語に依存する処理とに分類し、前者をバッチドライバ４３０に格納し、後者を言語ドライバ４６０に格納する。さらに、それらの処理をバッチシステムごと、スクリプト言語ごとにモジュール化しておく。そして、バッチスクリプトの生成指示があった場合は、指定されたバッチシステムに対応するバッチドライバモジュールと、指定されたスクリプト言語に対応する言語ドライバモジュールとを選択し、これらを組み合わせてバッチススクリプトの生成をおこなう。【選択図】図２
2006260281.tif 000002
【特許請求の範囲】
【請求項１】
処理すべき内容と、スクリプトを実行するバッチシステムの種別と、スクリプトを記述するスクリプト言語の種別とを指定され、前記バッチシステムにおいて実行可能であり、前記スクリプト言語で記述され、前記内容を処理するスクリプトを生成するスクリプト生成プログラムであって、
バッチシステムごとに用意されたバッチモジュール群の中から、指定されたバッチシステムに対応したバッチモジュールを選択するバッチモジュール選択手順と、
スクリプト言語ごとに用意された言語モジュール群の中から、指定されたスクリプト言語に対応した言語モジュールを選択する言語モジュール選択手順と、
前記バッチモジュール選択手順が選択したモジュールと、前記言語モジュール選択手順が選択したモジュールとを組み合わせ、前記内容を処理するスクリプトを生成するスクリプト生成手順と
をコンピュータに実行させることを特徴とするスクリプト生成プログラム。
【請求項２】
前記バッチモジュール群に含まれるバッチモジュールは、処理を呼び出すための共通のインターフェースを備えることを特徴とする請求項１に記載のスクリプト生成プログラム。
【請求項３】
前記言語モジュール群に含まれる言語モジュールは、処理を呼び出すための共通のインターフェースを備えることを特徴とする請求項１または２に記載のスクリプト生成プログラム。
【請求項４】
前記バッチモジュールは、対応するバッチシステムに当該スクリプトを投入するためのコマンドを出力する投入コマンド出力手順を含んだことを特徴とする請求項１に記載のスクリプト生成プログラム。
【請求項５】
前記バッチモジュールは、対応するバッチシステムが備える機能を利用するためのパラメータを出力するバッチ依存前処理出力手順を含んだことを特徴とする請求項１に記載のスクリプト生成プログラム。
【請求項６】
前記言語モジュールは、対応するスクリプト言語に特有な前処理を出力する言語依存前処理出力手順を含んだことを特徴とする請求項１に記載のスクリプト生成プログラム。
【請求項７】
前記言語モジュールは、対応するスクリプト言語に特有な後処理を出力する言語依存後処理出力手順を含んだことを特徴とする請求項１に記載のスクリプト生成プログラム。
【請求項８】
前記バッチモジュールは、対応するバッチシステムに不足する機能を前記言語モジュールの機能を呼び出すことによりスクリプト言語で表現して出力することを特徴とする請求項１に記載のスクリプト生成プログラム。
【請求項９】
前記バッチモジュールは、対応するバッチシステムに不足する機能をファイルへ書き出し、
前記言語モジュールは、前記バッチモジュールがファイルに書き出した内容を読取り、その内容をスクリプト言語で表現して出力することを特徴とする請求項１に記載のスクリプト生成プログラム。
【請求項１０】
何らかのバッチシステムを稼動させ、何らかのスクリプト言語を利用可能な複数のサーバ装置と、バッチ処理を前記サーバ装置に割り振って投入するジョブ投入装置とを備えたバッチ実行システムにおいて、
前記ジョブ投入装置は、
実行を指示されたジョブを割り振るサーバ装置を選択するサーバ選択手段と、
バッチシステムごとに用意されたバッチモジュール群の中から、前記サーバ選択手段により選択されたサーバ装置で稼動するバッチシステムに対応したバッチモジュールを選択するバッチモジュール選択手順と、
スクリプト言語ごとに用意された言語モジュール群の中から、前記サーバ選択手段により選択されたサーバ装置で利用可能なスクリプト言語に対応した言語モジュールを選択する言語モジュール選択手順と、
前記バッチモジュール選択手順が選択したモジュールと、前記言語モジュール選択手順が選択したモジュールとを組み合わせ、前記ジョブを処理するスクリプトを生成するスクリプト生成手順と
を備えたことを特徴とするバッチ実行システム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、バッチスクリプト動的に生成するスクリプト生成プログラムおよびバッチ実行システムに関し、特に、利用可能なバッチシステムとスクリプト言語の組み合わせが異なるサーバ向けにバッチスクリプトを動的に生成することができ、新たなバッチシステムとスクリプト言語への対応を容易におこなうことができるスクリプト生成プログラムおよびバッチ実行システムに関するものである。
【背景技術】
【０００２】
近年、グリッドコンピューティングと呼ばれる情報処理方式が注目されている。グリッドコンピューティングとは、複数のコンピュータをネットワークで結合して大規模な仮想コンピュータを形成し、仮想コンピュータを形成するコンピュータ間で負荷分散をおこなって資源の有効活用を図る方式のことである。
【０００３】
ここで、グリッドコンピューティング環境においてバッチ処理を実行する場合を考える。グリッドコンピューティング環境においてバッチ処理を実行する場合、仮想コンピュータを構成する各コンピュータの環境が問題となる。
【０００４】
コンピュータに大量のバッチ処理を実行させる場合、バッチのキュー管理などをおこなうバッチシステムと呼ばれるシステムを利用するのが一般的であるが、このバッチシステムには様々な種類が存在し、それぞれのバッチシステムは、特有のバッチスクリプトの書式を定めている。また、バッチスクリプトを記述するスクリプト言語にも複数の種類が存在し、それぞれシンタックスが異なっている。
【０００５】
仮想コンピュータを構成する全てのコンピュータにおいて同一のバッチシステムとスクリプト言語を利用することができれば問題ないが、実際のグリッドコンピューティング環境は、既存のコンピュータを活用した異種混合環境であることが多く、バッチシステムとスクリプト言語を共通化することが難しい場合がある。
【０００６】
バッチシステムとスクリプト言語を共通化することなく仮想コンピュータにバッチスクリプトを実行させるには、バッチスクリプトの実行を割当てられたコンピュータに合わせて、バッチスクリプトを動的に生成する仕組みを仮想コンピュータ内に設ければよい。
【０００７】
実行環境に合わせてバッチスクリプトを生成する技術は、たとえば、特許文献１において開示されている。この技術をもちいれば、バッチスクリプトともに指定されたキーワードに対応した開始文と終了文をバッチスクリプトに付加することにより、目的のバッチシステムに応じた書式のバッチスクリプトを生成することができる。
【０００８】
【特許文献１】特願昭６１−１９７６５１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら、特許文献１において開示されている技術は、バッチスクリプトを記述するスクリプト言語が複数存在する場合には適応することができない。バッチシステム固有の記述内容には、記述するスクリプト言語に依存するものがあり、固定された開始文と終了文を単純に付加するだけでは対応が困難である。
【００１０】
全てのバッチシステムとスクリプト言語の組み合わせに対応した開始文と終了文を用意して対応することも考えられるが、新たなバッチシステムやスクリプト言語への対応が必要になるたびに、それに応じた開始文と終了文を用意することが必要になるため、メンテナンスの工数が非常に大きくなる。
【００１１】
この発明は、上述した従来技術による問題点を解消するためになされたものであり、利用可能なバッチシステムとスクリプト言語の組み合わせが異なるサーバ向けにバッチスクリプトを動的に生成することができ、新たなバッチシステムとスクリプト言語への対応を容易におこなうことができるスクリプト生成プログラムおよびバッチ実行システムを提供することを目的とする。
【課題を解決するための手段】
【００１２】
上述した課題を解決し、目的を達成するため、本発明は、処理すべき内容と、スクリプトを実行するバッチシステムの種別と、スクリプトを記述するスクリプト言語の種別とを指定され、前記バッチシステムにおいて実行可能であり、前記スクリプト言語で記述され、前記内容を処理するスクリプトを生成するスクリプト生成プログラムであって、バッチシステムごとに用意されたバッチモジュール群の中から、指定されたバッチシステムに対応したバッチモジュールを選択するバッチモジュール選択手順と、スクリプト言語ごとに用意された言語モジュール群の中から、指定されたスクリプト言語に対応した言語モジュールを選択する言語モジュール選択手順と、前記バッチモジュール選択手順が選択したモジュールと、前記言語モジュール選択手順が選択したモジュールとを組み合わせ、前記内容を処理するスクリプトを生成するスクリプト生成手順とをコンピュータに実行させることを特徴とする。
【００１３】
この発明によれば、バッチシステムに依存するスクリプトの生成ルールを処理するバッチモジュールと、スクリプト言語に依存するスクリプトの生成ルールを処理する言語モジュールとを組み合わせてスクリプトの生成をおこなうように構成したので、実行環境に適合したバッチスクリプトを動的に生成することができる。
【００１４】
また、バッチモジュールはバッチシステムごとに用意され、言語モジュールはスクリプト言語ごとに用意されるので、新たなバッチシステムやスクリプト言語に対応する必要が生じた場合もそのバッチシステムやスクリプト言語に対応したモジュールを追加するだけで対応することできる。
【００１５】
また、本発明は、上記の発明において、前記バッチモジュール群に含まれるバッチモジュールは、処理を呼び出すための共通のインターフェースを備えることを特徴とする。
【００１６】
この発明によれば、バッチモジュールが共通のインターフェースを備えるように構成したので、新たなバッチモジュールを追加する必要が生じた場合に実装しなければならない処理が明確化され、実装を効率的におこなうことができる。
【００１７】
また、本発明は、上記の発明において、前記言語モジュール群に含まれる言語モジュールは、処理を呼び出すための共通のインターフェースを備えることを特徴とする。
【００１８】
この発明によれば、言語モジュールが共通のインターフェースを備えるように構成したので、新たな言語モジュールを追加する必要が生じた場合に実装しなければならない処理が明確化され、実装を効率的におこなうことができる。
【００１９】
また、本発明は、上記の発明において、前記バッチモジュールは、対応するバッチシステムに当該スクリプトを投入するためのコマンドを出力する投入コマンド出力手順を含んだことを特徴とする。
【００２０】
この発明によれば、スクリプトを投入するためのコマンドをバッチモジュールが生成するように構成したので、スクリプト投入手段がバッチシステムの仕様の違いを意識せずにスクリプトを投入することができる。
【００２１】
また、本発明は、上記の発明において、前記バッチモジュールは、対応するバッチシステムが備える機能を利用するためのパラメータを出力するバッチ依存前処理出力手順を含んだことを特徴とする。
【００２２】
また、本発明は、上記の発明において、前記言語モジュールは、対応するスクリプト言語に特有な前処理を出力する言語依存前処理出力手順を含んだことを特徴とする。
【００２３】
また、本発明は、上記の発明において、前記言語モジュールは、対応するスクリプト言語に特有な後処理を出力する言語依存後処理出力手順を含んだことを特徴とする。
【００２４】
また、本発明は、上記の発明において、前記バッチモジュールは、対応するバッチシステムに不足する機能を前記言語モジュールの機能を呼び出すことによりスクリプト言語で表現して出力することを特徴とする。
【００２５】
これらの発明によれば、スクリプトの構造を汎用化した各部位ごとにスクリプトを生成するように構成したので、スクリプトを生成するモジュールの処理を細分化された形で整理することができ、実装を効率的におこなうことができる。
【００２６】
また、本発明は、上記の発明において、前記バッチモジュールは、対応するバッチシステムに不足する機能をファイルへ書き出し、前記言語モジュールは、前記バッチモジュールがファイルに書き出した内容を読取り、その内容をスクリプト言語で表現して出力することを特徴とする。
【００２７】
この発明によれば、スクリプトを生成するモジュール間の呼び出しをおこなわずに、ファイルを介して情報をやりとりするように構成したので、モジュール間の切片が明確化され、不具合発生時に不具合箇所の切り分けを容易におこなうことができる。
【００２８】
また、本発明は、何らかのバッチシステムを稼動させ、何らかのスクリプト言語を利用可能な複数のサーバ装置と、バッチ処理を前記サーバ装置に割り振って投入するジョブ投入装置とを備えたバッチ実行システムにおいて、前記ジョブ投入装置は、実行を指示されたジョブを割り振るサーバ装置を選択するサーバ選択手段と、バッチシステムごとに用意されたバッチモジュール群の中から、前記サーバ選択手段により選択されたサーバ装置で稼動するバッチシステムに対応したバッチモジュールを選択するバッチモジュール選択手順と、スクリプト言語ごとに用意された言語モジュール群の中から、前記サーバ選択手段により選択されたサーバ装置で利用可能なスクリプト言語に対応した言語モジュールを選択する言語モジュール選択手順と、前記バッチモジュール選択手順が選択したモジュールと、前記言語モジュール選択手順が選択したモジュールとを組み合わせ、前記ジョブを処理するスクリプトを生成するスクリプト生成手順とを備えたことを特徴とする。
【００２９】
この発明によれば、動作環境に適応したスクリプトを動的に生成できるように構成したので、動作環境が異なるサーバ装置が混在する場合であっても、バッチ処理の振り分けを実現することができる。
【発明の効果】
【００３０】
本発明によれば、バッチシステムに依存するスクリプトの生成ルールを処理するバッチモジュールと、スクリプト言語に依存するスクリプトの生成ルールを処理する言語モジュールとを組み合わせてスクリプトの生成をおこなうように構成したので、実行環境に適合したバッチスクリプトを動的に生成することができるという効果を奏する。
【００３１】
また、バッチモジュールはバッチシステムごとに用意され、言語モジュールはスクリプト言語ごとに用意されるので、新たなバッチシステムやスクリプト言語に対応する必要が生じた場合もそのバッチシステムやスクリプト言語に対応したモジュールを追加するだけで対応することできるという効果を奏する。
【００３２】
また、本発明によれば、バッチモジュールが共通のインターフェースを備えるように構成したので、新たなバッチモジュールを追加する必要が生じた場合に実装しなければならない処理が明確化され、実装を効率的におこなうことができるという効果を奏する。
【００３３】
また、本発明によれば、言語モジュールが共通のインターフェースを備えるように構成したので、新たな言語モジュールを追加する必要が生じた場合に実装しなければならない処理が明確化され、実装を効率的におこなうことができるという効果を奏する。
【００３４】
また、本発明によれば、スクリプトを投入するためのコマンドをバッチモジュールが生成するように構成したので、スクリプト投入手段がバッチシステムの仕様の違いを意識せずにスクリプトを投入することができるという効果を奏する。
【００３５】
また、本発明によれば、スクリプトの構造を汎用化した各部位ごとにスクリプトを生成するように構成したので、スクリプトを生成するモジュールの処理を細分化された形で整理することができ、実装を効率的におこなうことができるという効果を奏する。
【００３６】
また、本発明によれば、スクリプトを生成するモジュール間の呼び出しをおこなわずに、ファイルを介して情報をやりとりするように構成したので、モジュール間の切片が明確化され、不具合発生時に不具合箇所の切り分けを容易におこなうことができるという効果を奏する。
【００３７】
また、本発明によれば、動作環境に適応したスクリプトを動的に生成できるように構成したので、動作環境が異なるサーバ装置が混在する場合であっても、バッチ処理の振り分けを実現することができるという効果を奏する。
【発明を実施するための最良の形態】
【００３８】
以下に添付図面を参照して、この発明に係るスクリプト生成プログラムおよびバッチ実行システムの好適な実施の形態を詳細に説明する。
【実施例】
【００３９】
まず、本実施例に係るバッチ実行システムの構成について説明する。図１は、本実施例に係るバッチ実行システムの構成を示すブロック図である。同図に示すように、バッチ実行システム１０００は、ジョブの実行を依頼するオペレータ端末１０１〜１０７とネットワーク等によって接続された構成をとる。なお、図示したオペレータ端末の数は、一例であり、この数の通りである必要はない。
【００４０】
バッチ実行システム１０００は、フロントエンドとして機能するジョブ投入装置２００と、実際にジョブを実行する装置であるサーバ３１０〜３４０とを有し、これらをネットワーク等で接続した仮想コンピュータとして機能する。なお、図示したサーバの数は、一例であり、この数の通りである必要はない。
【００４１】
ジョブ投入装置２００は、オペレータ端末１０１〜１０７からジョブを受け付け、負荷状況等を考慮してこのジョブを実行するサーバを選択し、そのサーバに対応したバッチスクリプトを生成して投入する装置であり、ジョブ受付部２１０と、ジョブキュー管理部２２０と、サーバ選定部２３０と、スクリプト生成部２４０と、スクリプト投入部２５０とを有する。
【００４２】
ジョブ受付部２１０は、オペレータ端末１０１〜１０７からジョブの実行依頼を受け付ける処理部である。ジョブキュー管理部２２０は、ジョブ受付部２１０が受け付けたジョブをキューに格納し、状態を管理する処理部である。サーバ選定部２３０は、サーバ３１０〜３４０の負荷状況を監視し、キューに格納された未処理のジョブに割当てるサーバを選定する処理部である。
【００４３】
スクリプト生成部２４０、サーバ選定部２３０が選定したサーバのバッチシステムとスクリプト言語に応じたバッチスクリプトを生成する処理部である。スクリプト投入部２５０は、スクリプト生成部２４０が生成したバッチスクリプトを、サーバ選定部２３０が選定したサーバに投入する処理部である。
【００４４】
サーバ３１０〜３４０は、バッチスクリプトを実行する装置であり、それぞれ、異なるバッチシステムとスクリプト言語とを備える。たとえば、サーバ３１０は、バッチシステムＡをもちいてｓｈ（標準シェル）で記述されたバッチスクリプトを実行する。また、サーバ２０は、バッチシステムＢをもちいてｐｅｒｌで記述されたバッチスクリプトを実行する。
【００４５】
なお、ここでは説明の便宜上、一つのサーバが一つのスクリプト言語を備えるものとしているが、ひとつのサーバが複数のスクリプト言語を備えていてもよい。また、すべてのサーバが異なるバッチシステムとスクリプト言語を備えるように図示しているが、バッチシステムとスクリプト言語の一方もしくは両方が同一のサーバが存在していてもよい。
【００４６】
次に、バッチ実行システム１０００の特徴部分であるスクリプト生成部２４０の構成について説明する。スクリプト生成部２４０の実体は、スクリプト生成プログラム４００であり、このスクリプト生成プログラム４００は、ジョブ投入装置２００もしくは他のコンピュータの記憶装置に記憶され、ジョブ投入装置２００のプロセッサによってジョブ投入装置２００のメモリ上に展開されて実行される。
【００４７】
スクリプト生成プログラム４００は、ジョブ投入装置２００が受け付けたジョブ定義データと、バッチスクリプトの生成対象のバッチシステム名と、スクリプト言語名とを入力として受け取り、生成したバッチスクリプトと、このバッチスクリプトを実行するためのコマンドファイルとを出力する。
【００４８】
図２は、スクリプト生成プログラム４００の構成を示すブロック図である。同図に示すように、スクリプト生成プログラム４００は、バッチドライバ選択部４１０と、バッチドライバテーブル４２０と、バッチドライバ４３０と、言語ドライバ選択部４４０と、言語ドライバテーブル４５０と、言語ドライバ４６０と、スクリプト生成部４７０とを有する。
【００４９】
バッチドライバ選択部４１０は、バッチドライバテーブル４２０を参照し、入力として受け取ったバッチシステム名に対応するバッチドライバモジュールを選択する処理部である。バッチドライバテーブル４２０は、バッチシステムの名称と、そのバッチシステムに対応したバッチスクリプトを生成するためのバッチドライバモジュールとの対応表である。
【００５０】
バッチドライバ４３０は、特定のバッチシステムに対応したバッチスクリプトを生成するためのバッチドライバモジュールの集合体であり、各バッチドライバモジュールは、共通のインターフェースを有し、同様の手順で操作することが可能になっている。
【００５１】
言語ドライバ選択部４４０は、言語ドライバテーブル４５０を参照し、入力として受け取ったスクリプト言語名に対応する言語ドライバモジュールを選択する処理部である。言語ドライバテーブル４５０は、スクリプト言語の名称と、そのスクリプト言語に対応したバッチスクリプトを生成するための言語ドライバモジュールとの対応表である。
【００５２】
言語ドライバ４６０は、特定のスクリプト言語に対応したバッチスクリプトを生成するための言語ドライバモジュールの集合体であり、各言語ドライバモジュールは、共通のインターフェースを有し、同様の手順で操作することが可能になっている。
【００５３】
スクリプト生成部４７０は、バッチドライバ選択部４１０が選択したバッチドライバモジュールと、言語ドライバ選択部４４０が選択した言語ドライバモジュールとを組み合わせて制御し、バッチスクリプトを生成させる処理部である。
【００５４】
本実施例に係るスクリプト生成プログラム４００は、このように、バッチシステムごとに用意されたバッチドライバモジュールと、スクリプト言語ごとに用意された言語ドライバモジュールとを組み合わせてバッチスクリプトの生成をおこなう。このように、バッチシステムに依存したモジュールと、スクリプト言語に依存したモジュールとを分離することにより、対応するバッチシステムやスクリプト言語が増えた場合でも、それに対応したモジュールを追加するだけで適応することが可能になる。
【００５５】
バッチドライバモジュールと言語ドライバモジュールの詳細について説明する前に、バッチスクリプトとジョブ定義データのフォーマットについて説明しておく。図３は、本実施例に係るスクリプト生成プログラム４００が生成するバッチスクリプトのフォーマットを示すサンプル図である。
【００５６】
同図に示すように、スクリプト生成プログラム４００が生成するバッチスクリプトは、起動指示と、バッチ依存前処理と、言語依存前処理と、バッチ言語依存前処理と、本文と、バッチ言語依存後処理と、言語依存後処理とからなる。このフォーマットは、全てのバッチシステムおよびスクリプト言語に対応できるようになっている。
【００５７】
起動指示は、当該のバッチスクリプトを実行するスクリプト言語を指定する部分である。図３の例では、「＃！／ｂｉｎ／ｓｈ」が設定されており、この記述は、このバッチスクリプトをｓｈで実行することを指定している。起動指示の記述は、生成対象のスクリプト言語に依存する。
【００５８】
バッチ依存前処理は、バッチシステム特有の前処理をパラメータ指定の形で記述する部分である。バッチシステムは、処理に必要なファイルを転送する機能や、異常が発生した場合にメールを送信して通知する機能などをもっており、それらのバッチシステム特有の機能に必要なパラメータをここに記述する。図３の例では、「＃＄」という文字列で始まるコメントがバッチシステム固有の機能のためのパラメータに相当し、ここでは、転送が必要な入出力ファイル名と異常通知用のメールアドレスとを指定している。バッチ依存前処理の記述は、生成対象のバッチシステムに依存する。
【００５９】
言語依存前処理は、スクリプト言語固有の前処理を記述する部分である。スクリプト言語によっては、他の処理を実行する前におこなっておくべき定型的な処理がある場合があり、そのような処理をここに記述する。また、ここには、翻訳して生成した本文を実行するために必要となる関数や変数を定義することもできる。図３の例では、特定の割込み信号を無視して処理を実行するための処理が記述されている。言語依存前処理の記述は、生成対象のスクリプト言語に依存する。
【００６０】
バッチ言語依存前処理は、バッチシステム固有の前処理をスクリプト言語をもちいて記述する部分である。バッチシステムは、それぞれ動作が異なる部分があり、その動作の違いを吸収するための処理をここに記述する。具体的には、一般的なバッチシステムの動作を標準動作と想定し、生成対象のバッチシステムに不足している動作をここに記述する。
【００６１】
たとえば、あるバッチシステムでは、バッチスクリプトの実行時に自動的に作業ディレクトリに移動するが、別のバッチシステムではバッチスクリプトに作業ディレクトリに移動する処理を記述する必要がある。また、あるバッチシステムでは、処理に必要なファイルが自動的に転送されるが、あるバッチシステムでは、バッチスクリプトにファイルを移動する処理を記述する必要がある。図３の例では、作業ディレクトリに移動する処理をスクリプト言語を用いて記述している。バッチ言語依存前処理の内容は、生成対象のバッチシステムに依存し、その処理内容の表現形式はスクリプト言語に依存する。
【００６２】
本文は、バッチの目的とする処理を記述する部分である。具体的には、バッチ定義データの本文を生成対象のスクリプト言語に翻訳した結果をここに記述する。本文の記述は、生成対象のスクリプト言語に依存する。
【００６３】
バッチ言語依存後処理は、バッチシステム特有の後処理をスクリプト言語をもちいて記述する部分である。バッチ言語依存前処理と同様に、一般的なバッチシステムの動作を標準動作と想定し、生成対象のバッチシステムに不足している動作をここに記述する。図３の例では、処理結果を示す文字列を環境変数に設定する処理をスクリプト言語を用いて記述している。バッチ言語依存後処理の内容は、生成対象のバッチシステムに依存し、その処理内容の表現形式はスクリプト言語に依存する。
【００６４】
言語依存後処理は、スクリプト言語固有の後処理を記述する部分である。スクリプト言語によっては、他の処理を実行した後におこなっておくべき定型的な処理がある場合があり、そのような処理をここに記述する。図３の例では、割込み信号を再び受け付けるための処理が記述されている。言語依存前処理の記述は、生成対象のスクリプト言語に依存する。
【００６５】
図４は、本実施例に係るジョブ投入装置２００が受け付けるジョブ定義データの一例を示すサンプル図である。同図に示すように、ジョブ投入装置２００が受け付けるジョブ定義データは、属性と、本文とからなる。
【００６６】
属性は、バッチシステムが備えている機能を利用するためのパラメータを一般化したものを記述する部分である。既に説明したように、多くのバッチシステムは、処理に必要なファイルを転送する機能や、異常が発生した場合にメールを送信して通知する機能などをもっており、それらの機能を利用するために必要な情報をここに記述する。
【００６７】
生成対象のバッチシステムが、ここに指定したパラメータに対応する機能をもっていない場合は、生成するバッチスクリプトのバッチ言語依存前処理もしくはバッチ言語依存後処理にその機能を補うための処理が記述される。たとえば、図４の例では、処理に必要な入力ファイルが属性として記述されているが、生成対象のバッチシステムがファイルを転送する機能をもっていない場合は、バッチ言語依存前処理にこれらのファイルを転送する処理が記述される。
【００６８】
属性には、バッチスクリプトの生成対象のバッチシステムとスクリプト言語のいずれか一方、もしくは、両方を明示的に指定することもできる。この指定があった場合、サーバ選択部２３０は、指定された条件が満たされるように考慮してサーバの選択をおこなう。
【００６９】
本文は、当該のジョブで実行したい処理を記述する部分である。この部分は、複数のスクリプト言語に翻訳されるため、必要最小限の機能を備えたスクリプト言語で記述される。本文を記述するスクリプト言語は、既存のスクリプト言語の文法に準拠したものであってもよいし、全く新規のスクリプト言語であってもよい。
【００７０】
なお、ここでは、属性と本文とが一体となって提供される例を示したが、これらは、別々に提供されても構わない。
【００７１】
次に、バッチドライバ４３０を構成するバッチドライバモジュールの構成について説明する。図５は、バッチドライバモジュールの構成を示すブロック図である。同図に示すように、バッチドライバモジュール４３１は、バッチ依存前処理出力部４３１ａと、バッチ言語依存前処理出力部４３１ｂと、バッチ言語依存後処理出力部４３１ｃと、投入コマンド出力部４３１ｄとを有する。
【００７２】
バッチドライバモジュール４３１は、バッチシステムごとに一つずつ存在するが、全て同様の構成を有しており、同一のインターフェースをもちいて処理を呼び出すことができるようになっている。
【００７３】
バッチ依存前処理出力部４３１ａは、ジョブ定義データに記述された属性データを入力として受け取り、当該のバッチシステムでパラメータとして利用可能な属性データを抜粋して整形し、バッチスクリプトのバッチ依存前処理に相当する文字列を出力する処理部である。
【００７４】
バッチ言語依存前処理出力部４３１ｂは、ジョブ定義データに記述された属性データを入力として受け取り、言語ドライバモジュールの言語翻訳部４６１ｄの機能を呼び出して、バッチスクリプトのバッチ言語依存前処理に必要な記述を出力する処理部である。バッチ言語依存後処理出力部４３１ｃは、ジョブ定義データに記述された属性データを入力として受け取り、言語ドライバモジュールの言語翻訳部４６１ｄの機能を呼び出して、バッチスクリプトのバッチ言語依存後処理に必要な記述を出力する処理部である。
【００７５】
なお、バッチドライバモジュール４３１は、オブジェクト指向技術に基づいたオブジェクトとして構成することもできる。その場合、テンプレート機能やインターフェース機能をもちいてインターフェースを雛型化し、さらに、継承の仕組みを有効に利用することで開発効率を向上させることができる。
【００７６】
投入コマンド出力部４３１ｄは、生成されたバッチスクリプトをバッチシステムに投入するためのコマンドを出力する処理部である。バッチスクリプトの投入コマンドは、バッチシステムごとに異なっているが、投入コマンド出力部４３１ｄが投入コマンドを生成することにより、スクリプト投入部２５０は、バッチシステムの違いを意識せずにバッチスクリプトを投入することができる。投入コマンド出力部４３１ｄは、バッチスクリプトの投入のために定義ファイルが必要であれば、その生成もおこなう。
【００７７】
次に、言語ドライバ４６０を構成する言語ドライバモジュールの構成について説明する。図６は、言語ドライバモジュールの構成を示すブロック図である。同図に示すように、言語ドライバモジュール４６１は、起動指示出力部４６１ａと、言語依存前処理出力部４３６ｂと、言語依存後処理出力部４６１ｃと、言語翻訳部４６１ｄとを有する。
【００７８】
言語ドライバモジュール４６１は、スクリプト言語ごとに一つずつ存在するが、全て同様の構成を有しており、同一のインターフェースをもちいて処理を呼び出すことができるようになっている。
【００７９】
起動指示出力部４６１ａは、バッチスクリプトの起動指示に相当する文字列を出力する処理部である。言語依存前処理出力部４６１ｂは、バッチスクリプトの言語依存前処理に必要な記述を出力する処理部である。言語依存後処理出力部４６１ｃは、バッチスクリプトのバッチ言語依存後処理に必要な記述を出力する処理部である。
【００８０】
言語翻訳部４６１ｄは、ジョブ定義データに記述された属性情報を基に、バッチシステムに特有の前処理や後処理を生成対象のスクリプト言語で表現するために、バッチ言語依存前処理出力部４３１ｂとバッチ言語依存後処理出力部４３１ｃから利用される。翻訳処理の内容は、主に、文字列の変換と制御構造の変換である。
【００８１】
バッチスクリプトを記述するためのスクリプト言語は、それぞれ文字列の記述形式が異なる。たとえば、あるスクリプト言語では、ダブルクォーテーションで囲まれた字句が文字列となり、別のスクリプト言語では、シングルクォーテーションで囲まれた字句が文字列となる。スクリプト言語によっては、制御句以外は全て文字列として扱われる。
【００８２】
また、文字列中のバックスラッシュのような文字が特殊な意味をもつ場合があり、その効果を打ち消すために別の文字を追加する、いわゆる、エスケープと呼ばれる処理が必要になる場合もある。言語翻訳部４６１ｄは、このような文字列の記述形式の違いを出力に反映させる。
【００８３】
また、バッチスクリプトを記述するためのスクリプト言語は、それぞれ制御構造が異なる。たとえば、条件分岐や反復などの書式はスクリプト言語ごとに異なるので、スクリプト言語の言語仕様に合わせた変換をおこなう。
【００８４】
ところで、バッチドライバモジュールのバッチ言語依存前処理出力部４３１ｂとバッチ言語依存後処理出力部４３１ｃの実装は、必ずしも正しい記述がなされているとは限らない。実装が誤っていた場合に、サーバでバッチファイルを実行する段階ではなく、言語翻訳部４６１ｄが翻訳をおこなう段階で発見できることが望ましい。
【００８５】
言語翻訳部４６１ｄが本文の文法ミス等を発見できるようにするには、言語翻訳部４６１ｄに強力な構文検査の機能をもたせてもよいし、オブジェクト指向技術を利用して処理過程に応じた文字列クラスを定義し、不正な文字列クラスの文字列がバッチスクリプトに出力されないように検査することとしてもよい。
【００８６】
後者の方式の場合、たとえば、以下のような処理をおこなうことで本文の誤りを発見することが可能になる。まず、「未翻訳の文字列」、「翻訳過程の文字列」、「翻訳が完了した文字列」という３つの文字列クラスを定義し、ジョブ定義データに記述された本文を構文解析した構文木の各要素を「未翻訳の文字列」に型変換する。そして、構文木の葉の部分から翻訳を進め、翻訳が完了した部分は「翻訳が完了した文字列」に型変換し、翻訳途中の部分は「翻訳過程の文字列」に型変換する。こうして全ての翻訳が完了したときに「翻訳が完了した文字列」以外の型が残っていれば、本文に誤りがあったことになる。
【００８７】
なお、言語ドライバモジュール４６１は、オブジェクト指向技術に基づいたオブジェクトとして構成することもできる。その場合、テンプレート機能やインターフェース機能をもちいてインターフェースを雛型化し、さらに、継承の仕組みを有効に利用することで開発効率を向上させることができる。
【００８８】
次に、スクリプト生成プログラム４００の処理手順について説明する。図７は、スクリプト生成プログラム４００の処理手順を示すフローチャートである。同図に示すように、まず、バッチドライバ選択部４１０が、指定されたバッチシステムファイル名に対応するバッチドライバモジュールをバッチドライバテーブル４２０から選択する（ステップＳ１０１）。続いて、言語ドライバ選択部４４０が、指定されたスクリプト言語名に対応する言語ドライバモジュールを言語ドライバテーブル４５０から選択する（ステップＳ１０２）。
【００８９】
バッチドライバモジュール４３１と言語ドライバモジュール４６１が選択されたならば、まず、言語ドライバモジュール４６１の起動指示出力部４６１ａがバッチスクリプトに起動指示を出力する（ステップＳ１０３）。続いて、バッチドライバモジュール４３１のバッチ依存前処理出力部４３１ａがバッチ依存前処理を出力し（ステップＳ１０４）、言語ドライバモジュール４６１の言語依存前処理出力部４６１ｂが言語依存前処理を出力する（ステップＳ１０５）。
【００９０】
そして、バッチドライバモジュール４３１のバッチ言語依存前処理出力部４３１ｂが、言語翻訳部４６１ｄを呼び出してバッチ言語依存前処理を出力し（ステップＳ１０６）、言語ドライバモジュール４６１の言語翻訳部４６１ｄが本文を翻訳して出力する（ステップＳ１０７）。そして、バッチドライバモジュール４３１のバッチ言語依存後処理出力部４３１ｃが、言語翻訳部４６１ｄを呼び出してバッチ言語依存後処理を出力し（ステップＳ１０８）、言語ドライバモジュール４６１の言語依存後処理出力部４６１ｄが言語依存後処理を出力してバッチスクリプトの出力が完了する（ステップＳ１０９）。
【００９１】
バッチスクリプトの出力が完了したならば、投入コマンド出力部がバッチスクリプトを実行するためのバッチ投入コマンドをコマンドファイルに出力して一連の処理は完了する（ステップＳ１１０）。
【００９２】
なお、上記の説明ではバッチスクリプトを生成する過程において、バッチドライバモジュール４３１が言語ドライバモジュール４６１の機能を呼び出すこととしたが、中間ファイルを利用して情報を引き継ぐ構成としてもよい。
【００９３】
具体的には、バッチドライバモジュール４３１が、バッチスクリプトのバッチ言語依存前処理とバッチ言語依存後処理に出力すべき内容を何らかの言語で記述した中間ファイルを生成し、言語ドライバモジュール４６１が中間ファイルを読んでそこに記述された内容を生成対象のスクリプト言語に翻訳して出力する構成となる。
【００９４】
このようにモジュール間の呼び出し関係をなくすことにより、モジュール間の切片が明確になり、不具合が発生した場合に、原因がどちらのモジュールにあるのかを容易に判別できるようになる。なお、中間ファイルに出力するスクリプトは、ジョブ定義データの本文と同じスクリプト言語で記述するものとしてもよいし、他のスクリプト言語で記述するものとしてもよい。
【００９５】
上述してきたように、本実施例では、バッチシステムに依存するスクリプトの生成ルールを処理するバッチドライバモジュールと、スクリプト言語に依存するスクリプトの生成ルールを処理する言語ドライバモジュールとを組み合わせてスクリプトの生成をおこなうように構成したので、実行環境に適合したバッチスクリプトを動的に生成することができる。
【００９６】
また、バッチドライバモジュールはバッチシステムごとに用意され、言語ドライバモジュールはスクリプト言語ごとに用意されるので、新たなバッチシステムやスクリプト言語に対応する必要が生じた場合もそのバッチシステムやスクリプト言語に対応したモジュールを追加するだけで対応することできる。
【００９７】
（付記１）処理すべき内容と、スクリプトを実行するバッチシステムの種別と、スクリプトを記述するスクリプト言語の種別とを指定され、前記バッチシステムにおいて実行可能であり、前記スクリプト言語で記述され、前記内容を処理するスクリプトを生成するスクリプト生成プログラムであって、
バッチシステムごとに用意されたバッチモジュール群の中から、指定されたバッチシステムに対応したバッチモジュールを選択するバッチモジュール選択手順と、
スクリプト言語ごとに用意された言語モジュール群の中から、指定されたスクリプト言語に対応した言語モジュールを選択する言語モジュール選択手順と、
前記バッチモジュール選択手順が選択したモジュールと、前記言語モジュール選択手順が選択したモジュールとを組み合わせ、前記内容を処理するスクリプトを生成するスクリプト生成手順と
をコンピュータに実行させることを特徴とするスクリプト生成プログラム。
【００９８】
（付記２）前記バッチモジュール群に含まれるバッチモジュールは、処理を呼び出すための共通のインターフェースを備えることを特徴とする付記１に記載のスクリプト生成プログラム。
【００９９】
（付記３）前記言語モジュール群に含まれる言語モジュールは、処理を呼び出すための共通のインターフェースを備えることを特徴とする付記１または２に記載のスクリプト生成プログラム。
【０１００】
（付記４）前記バッチモジュールは、対応するバッチシステムに当該スクリプトを投入するためのコマンドを出力する投入コマンド出力手順を含んだことを特徴とする付記１に記載のスクリプト生成プログラム。
【０１０１】
（付記５）前記バッチモジュールは、対応するバッチシステムが備える機能を利用するためのパラメータを出力するバッチ依存前処理出力手順を含んだことを特徴とする付記１に記載のスクリプト生成プログラム。
【０１０２】
（付記６）前記言語モジュールは、対応するスクリプト言語に特有な前処理を出力する言語依存前処理出力手順を含んだことを特徴とする付記１に記載のスクリプト生成プログラム。
【０１０３】
（付記７）前記言語モジュールは、対応するスクリプト言語に特有な後処理を出力する言語依存後処理出力手順を含んだことを特徴とする付記１に記載のスクリプト生成プログラム。
【０１０４】
（付記８）前記言語モジュールは、スクリプトを実行するスクリプト言語を指定する所定の文字列を出力する起動指示出力手順を含んだことを特徴とする付記１に記載のスクリプト生成プログラム。
【０１０５】
（付記９）前記バッチモジュールは、対応するバッチシステムに不足する機能を前記言語モジュールの機能を呼び出すことによりスクリプト言語で表現して出力することを特徴とする付記１に記載のスクリプト生成プログラム。
【０１０６】
（付記１０）前記バッチモジュールは、対応するバッチシステムに不足する機能をファイルへ書き出し、
前記言語モジュールは、前記バッチモジュールがファイルに書き出した内容を読取り、その内容をスクリプト言語で表現して出力することを特徴とする付記１に記載のスクリプト生成プログラム。
【０１０７】
（付記１１）処理すべき内容と、スクリプトを実行するバッチシステムの種別と、スクリプトを記述するスクリプト言語の種別とを指定され、前記バッチシステムにおいて実行可能であり、前記スクリプト言語で記述され、前記内容を処理するスクリプトを生成するスクリプト生成方法であって、
バッチシステムごとに用意されたバッチモジュール群の中から、指定されたバッチシステムに対応したバッチモジュールを選択するバッチモジュール選択工程と、
スクリプト言語ごとに用意された言語モジュール群の中から、指定されたスクリプト言語に対応した言語モジュールを選択する言語モジュール選択工程と、
前記バッチモジュール選択工程が選択したモジュールと、前記言語モジュール選択工程が選択したモジュールとを組み合わせ、前記内容を処理するスクリプトを生成するスクリプト生成工程と
を含んだことを特徴とするスクリプト生成方法。
【０１０８】
（付記１２）何らかのバッチシステムを稼動させ、何らかのスクリプト言語を利用可能な複数のサーバ装置と、バッチ処理を前記サーバ装置に割り振って投入するジョブ投入装置とを備えたバッチ実行システムにおいて、
前記ジョブ投入装置は、
実行を指示されたジョブを割り振るサーバ装置を選択するサーバ選択手段と、
バッチシステムごとに用意されたバッチモジュール群の中から、前記サーバ選択手段により選択されたサーバ装置で稼動するバッチシステムに対応したバッチモジュールを選択するバッチモジュール選択手順と、
スクリプト言語ごとに用意された言語モジュール群の中から、前記サーバ選択手段により選択されたサーバ装置で利用可能なスクリプト言語に対応した言語モジュールを選択する言語モジュール選択手順と、
前記バッチモジュール選択手順が選択したモジュールと、前記言語モジュール選択手順が選択したモジュールとを組み合わせ、前記ジョブを処理するスクリプトを生成するスクリプト生成手順と
を備えたことを特徴とするバッチ実行システム。
【産業上の利用可能性】
【０１０９】
以上のように、本発明に係るスクリプト生成プログラムおよびバッチ実行システムは、スクリプトの動的な生成に有用であり、特に、利用可能なバッチシステムとスクリプト言語の組み合わせが異なるサーバ向けにバッチスクリプトを動的に生成することができ、新たなバッチシステムとスクリプト言語への対応を容易におこなうことが必要な場合に適している。
【図面の簡単な説明】
【０１１０】
【図１】本実施例に係るバッチ実行システムの構成を示すブロック図である。
【図２】スクリプト生成プログラムの構成を示すブロック図である。
【図３】本実施例に係るスクリプト生成プログラムが生成するバッチスクリプトのフォーマットを示すサンプル図である。
【図４】本実施例に係るジョブ投入装置が受付けるジョブ定義データの一例を示すサンプル図である。
【図５】バッチドライバモジュールの構成を示すブロック図である。
【図６】言語ドライバモジュールの構成を示すブロック図である。
【図７】スクリプト生成プログラムの処理手順を示すフローチャートである。
【符号の説明】
【０１１１】
１０１、１０２、１０３、１０４、１０５、１０６、１０７  オペレータ端末
２００    ジョブ投入装置
２１０    ジョブ受付部
２２０    ジョブキュー管理部
２３０    サーバ選択部
２４０    スクリプト生成部
２５０    スクリプト投入部
３１０、３２０、３３０、３４０  サーバ
４００    スクリプト生成プログラム
４１０    バッチドライバ選択部
４２０    バッチドライバテーブル
４３０    バッチドライバ
４３１    バッチドライバモジュール
４３１ａ  バッチ依存前処理出力部
４３１ｂ  バッチ言語依存前処理出力部
４３１ｃ  バッチ言語依存後処理出力部
４３１ｄ  投入コマンド出力部
４４０    言語ドライバ選択部
４５０    言語ドライバテーブル
４６０    言語ドライバ
４６１    言語ドライバモジュール
４６１ａ  起動指示出力部
４６１ｂ  言語依存前処理出力部
４６１ｃ  言語依存後処理出力部
４６１ｄ  言語翻訳部
４７０    スクリプト生成部
１０００    バッチ実行システム
【図１】
2006260281.tif 000003
【図２】
2006260281.tif 000004
【図３】
2006260281.tif 000005
【図４】
2006260281.tif 000006
【図５】
2006260281.tif 000007
【図６】
2006260281.tif 000008
【図７】
2006260281.tif 000009