3

データベースと相互作用する多くの実行可能ファイルで構成される大きなWindowsレガシーアプリケーションがあります。実行可能ファイルには、主に4つの目的があります。

(a)データベース上のファイルの解析とロード

(b)ファイルを変換します(たとえば、ファイルをエンコードします)。これにより、ファイルを多くの部分に分割することもできます。

(c)データベースである種の複雑な更新を実行する

(d)ファイルを作成する

これらの実行可能ファイルは、バッチファイルによって呼び出されます。バッチファイルは、実行内容に基づいて3つのタイプになります。

(1)条件を待ち、外部パスからファイルを取得し、場合によっては(b)で変換し、(c)を実行し、アクティビティの結果に関する通知を送信し、データベースにレコードを書き込みます

(2)条件を待ち、(c)を実行し、ファイルを作成し、(b)で変換してから、1つまたは複数の宛先(ローカルファイル、データベース、ftp)にコピーし、アクティビティの結果に関する通知を送信します、データベースにレコードを書き込みます。

(3)(abcd)実行可能ファイルの他の複雑なシーケンスを調整し、アクティビティの結果に関する通知を送信し、データベースにレコードを書き込みます

バッチファイルは、Windowsマシン上の通常のBATファイルです(おそらく相互に呼び出します)。ファイルはスケジューラーによって起動されます。

問題は次のとおりです。

-各バッチファイルでは、環境(共通ディレクトリなど)に関するほとんどの情報が複製されており、タイプ(1)または(2)のほとんどのファイルは非常によく似ています。

-バッチファイルは、テスト環境用に簡単に構成することも、自動的に簡単にテストすることもできません。

-通知および開始条件の待機のコードが部分的に重複しています(errorAがbを呼び出す場合、エラーbがcを呼び出す場合、エラーdがeを呼び出す場合)。

-gotoの使用

-どのバッチファイルが廃止され、どのバッチファイルが定期的に呼び出されるかを正確に追跡することはできません

-送信または受信されたファイルを理解するには、バッチごとに個別に開く必要があります。

-アプリケーションに設計上の制約を課し、一般的なコードを抽象化することはできません

-水平機能を実装するには(たとえば、デフォルトのログポリシーがあり、各ジョブが呼び出された回数を数えます)、多くのファイルに(保守不可能な?)コードを書き込む必要があります。

プラス面:

  • バッチファイルは簡単に変更できるため、何らかの理由でバッチが失敗した場合でも、バッチを作成して状況を安全な状態に戻すことは難しくありません。

  • 彼らは戦いでテストされています。彼らは長い間生産されてきました

私はこの解決策を思いついた:

  • 共通の関数と構成(イベントを通知する関数、ファイルを転送する関数、条件を待つ関数)を提供するJavaライブラリーをいくつか作成します。

  • タスククラスをロードして実行できるJava「スクリプトエンジンフレームワーク」コマンドラインアプリケーションを作成します。(タスククラスは、上記のライブラリで提供されている関数を使用できます。)

  • スクリプトは、ユーザーが必要に応じて別のjarファイルのクラスで提供できます。

  • スクリプトは、注釈を使用して自動文書化できます

  • スクリプトエンジンは、スクリプトにそれ自体とそのパラメータの説明を出力するように要求できます

  • ファイルの作成とコピーを分離する


スクリプト言語(PHP、Python)ではなく、Javaを使用することにしました。これにより、コンパイルのメリットを享受でき、「致命的なエラー」を引き起こす可能性のある共通のライブラリに何かを書くことを恐れる必要がなくなります。スクリプトの実行を停止します。

これにより、最も標準的なバッチファイル(タイプ1および2)の実行が簡単になると思いますが、タイプ3のバッチを表すのは難しいと思います。また、自動展開と私の心配は、悪いバッチファイルを書くと問題が発生する可能性がある一方で、エンジン自体(コンパイルとテストのために発生する可能性が低い場合でも)または構成にバグのあるコードをデプロイすると、すべてのスクリプトに影響を与える大きな懸念が生じる可能性があることです。

システムは100%信頼できる必要があり、システムタスクを実行するための期限と「時間枠」があることに注意してください。

私の質問は次のとおりです。

バッチファイルは大丈夫だと思いますか?それらはこの文脈で広く使用されていますか?

私は正しい方向に進んでいると思いますか?考えていないことはありますか?<

誰かがより良いアイデアを持っていますか?

私を助けることができるフレームワークを知っていますか?

将来的に柔軟性を高めるためにこのシステムを開発する価値があると思いますか、それともバッチを保持したほうがいいですか?

開発する新しいソリューションは、最初は既存のシステムと統合されるため、たとえば、アプリケーションサーバーで機能するようにすべてを書き直すことはできません。

4

4 に答える 4

3

PowerShellの使用をお勧めします。

私の意見では、それは前進するための最も目立たない方法です. PowerShell は、これまで使用してきたすべてのシェル コマンドをサポートし、さらに PowerShell 関数の作成を開始して、コードを再利用し、ロジックの重複を減らすことができます。また、Powershell スクリプトは、バッチ ファイルと同様に簡単に変更できます。Windows 7 または Windows 2008 の最新バージョンでは、ISE (統合スクリプト環境) を取得し、コードをステップ実行してインタラクティブにデバッグできます。

より高度な機能が必要な場合は、.NET フレームワークを使用して洗練された CmdLets (コマンドレット) を作成し、それらを Powershell スクリプト コード内の関数として使用できます。

もう 1 つの利点は、他のスクリプト環境で行うような複雑な文字列操作を行う必要がないことです。これは、複雑なコマンドを作成できるオブジェクト パイプラインがあるため、あるコマンドの出力を別のコマンドの入力として使用できるためです。

私は日常的に PowerShell を使用して、.NET アセンブリのインストールとアンインストール、Microsoft BizTalk エンティティの展開と展開解除、データベース スクリプトの実行、Web サイトの作成、構成、および削除を行っています。

幸せなスクリプト。

優れた Powershell ブログ
http://pshscripts.blogspot.com/

ウィキペディアのページ
http://en.wikipedia.org/wiki/Windows_PowerShell

于 2009-07-08T08:53:03.773 に答える
1

私は、OSQL を呼び出す 100 以上の .cmd ファイルで、非常によく似たアプリケーションに取り組んできました。私たちはあなたと同じ問題をたくさん抱えており、エラー処理の問題もありました. 私の意見では、スケジューラとバッチ/スクリプト ファイルの間を行き来するフレームワークを作成するよりも、必要なことを実行するスケジューラを取得する方が良いオプションです。このタイプのシステムには、昔ながらのJob Schedulerが必要なように思えます。実行可能ファイルの順序を呼び出し、エラーを処理し、構成された引数を渡します。ZenaからJobSchedulerまで、さまざまなオプションがあります。優れた GUI を備えたものを選択することをお勧めします。

于 2009-07-08T09:01:44.147 に答える
0

バッチ ファイルを置き換える場合は、.NET 言語を使用します。.NET には、スレッド化、アプリケーションの開始、出力の処理を簡単に行うためのライブラリが含まれています。もちろん、スクリプト言語として C# を使用したり、PowerShell や Python を使用したりすることもできます。

于 2009-07-08T08:49:57.103 に答える
0

Quartz ( http://www.quartz-scheduler.org/ )を試すこともできます。Java で構築されたオープン ソースの無料のスケジューリング ツールであり、さまざまな種類のタスクをサポートし、さまざまなデータベースを利用できます。これまでのところ、DB2 で使用しています。私たちは2年以上生産に使用しており、魅力のように機能します. サービスとして実行するために、Java サービス ラッパー プログラムを実装する必要がありましたが、それは非常に簡単に実現できました。

于 2009-08-26T21:31:42.993 に答える