2009-07-08 3 views
3

私は、データベースとやりとりする多くの実行ファイルによって構成された、大きなWindowsレガシーアプリケーションを持っています。 実行可能ファイルは、4つの主な目的を有する:Windowsアプリケーションでのバッチファイルの置き換えについての質問はありますか?

(a)は、解析およびデータベース

上のファイルをロードし(B)ファイルを変換(例えば、ファイルをエンコード)Tthisも多くの部分にファイルを分割してもよいです。

(C)

(d)はこれらの実行可能ファイルは、彼らが何をすべきかに基づいて、3種類のものとすることができるバッチファイルによって呼び出されるファイル

を生成するデータベース内の複雑なアップデートのいくつかの並べ替えを実行します。

(1)外部パスからファイルを取得し、(b)、(c)で変換し、アクティビティの結果に関する通知を送信し、データベースにレコードを書き込みます。

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

(3)、(ABCD)実行ファイルの他の複雑なシーケンスをコーディネート活動の結果に関する通知を送信、データベースにレコードを書き込む

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

環境に関する情報のほとんど(一般的なディレクトリなど)にもタイプのファイルのほとんど(1)または(2)され、重複している:

問題がありますとても似ている。

-Theバッチファイルは、テスト環境のために簡単に設定できません、また彼らは簡単に自動的に

をテストしている

通知のため、開始条件を待つ-Theコードが一部重複ES(ある場合errorAコールB 、エラーbコールc、エラーdコールe)。後藤の

-The使用は

- あなたは、バッチファイルが廃止され、正確にその定期的に 開く必要が送信または受信されているファイルを理解-to

と呼ばれているトラックを維持することはできません各バッチごとに個別に

-Theyは、アプリケーションの設計上の制約を課す、共通のコードでは、(各ジョブが呼び出された回数をカウントし、ES。デフォルトのロギングポリシーを持っている)、水平機能が実装-to離れ

抽象化することはできません(書き込みが必要ですunmaintainable?)多くのファイルのコード。プラス側では

:バッチが何らかの理由で失敗した場合、それは難しいことではない だと安全な状態に戻って状況を置くためのバッチを書くためになるよう

  • バッチファイルを簡単に変更されています。

  • これらは戦闘テスト済みです。

    • 私は通知するための一般的な機能と構成(機能を提供するいくつかのJavaライブラリを記述します。彼らは、私は、このソリューションを作ってみた

    長い時間のために生産してきましたタスクのクラスをロードして実行することができるJavaの "スクリプトエンジンフレームワーク"コマンドラインアプリケーションを記述する(タスククラスは関数を使用することができます) tで提供)

  • これらのスクリプトは、必要に応じて別のjarのクラスでユーザーが提供することができます。

  • スクリプトが自動スクリプトエンジンは、出力に

  • がコピーからファイルの生産を分離自体の説明とそのパラメータをスクリプトを依頼することができ

  • 注釈を用いて文書化することができます私が代わりにスクリプト言語(PHP、Pythoの、ジャワの賛成で決めた


n)コンパイルの利点を得ることができ、 "致命的なエラー"を引き起こしてスクリプトの実行を停止させる共通のライブラリに何かを書くことを恐れる必要はありません。

私は一方で、私は同様に私が入れますタイプ3 のバッチを表現するのは困難になることを恐れ、これはほとんどの標準的なバッチファイル(タイプ1と2)の実行をsimplyfyすることを感じます自動化されたデプロイメントを配置し、悪いバッチファイルを作成すると問題が発生する可能性があります。コンパイルやテストのために発生する可能性が低い場合でも、エンジン自体にバグのあるコードをデプロイするか、すべてのスクリプトに影響を与えます。

システムの信頼性は100%で、システムタスクを実行するには締め切りとタイムウィンドウが必要です。

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

バッチファイルは問題ありませんか?彼らはこの文脈で広く使われていますか?

私は正しい方向に進むと思いますか?私が考慮していないものはありますか? <

もっと良いアイデアはありますか?

私に役立つフレームワークを知っていますか?

今後このシステムを開発する価値はあると思いますか、それともバッチを維持するのがよいでしょうか?

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

答えて

1

私は、かなり似ていたアプリケーション上で働いてきた100+ .cmdのファイルは、OSQLを呼び出します。私たちはあなたがやっているのと同じくらい多くの問題を抱えていますが、エラー処理の問題もあります。私の意見では、あなたのスケジューラーとバッチ/スクリプトファイルの間のフレームワークを書くよりも、あなたが望むことをするスケジューラーを手に入れる方が良い選択です。このタイプのシステムでは旧式のものが必要です。Job Scheduler。実行可能ファイルの順序を呼び出し、エラーを処理し、構成済みの引数を渡します。 ZenaからJobSchedulerまでのさまざまなオプションがあります。私は良いGUIで1つを選ぶことをお勧めします。

+0

はい、私が考慮しなかったことは、スケジューラでこれらの種類の機能を動かすことでした。私は、スケーラビリティを確保するために、スケーラビリティを確保する必要があります。 (JobSchedulerはクールです、私はそれを試しています)私はあまりにも多くのものをカスタマイズする必要があることを恐れる?たとえば、私は現在のユリウス日をJobパラメータとして提供することができ、dbのsmthを待つことができます。私はスケジューラーの経験がありません、それが生産されたら、システム管理者が監視作業をする必要があると思いますか?今日まで、私たちは非常に基本的なスケジューラを持っており、与えられた時間にのみジョブを起動できます。 –

+0

多くのスケジューラはかなり強力です(あなたが会計日などの独自のカレンダーを定義できるようになります)。しかし、はい、物事はオペレータ/管理者のオーバーウォッチが必要です。他のすべてのものも見つけました。私たちはそのようなもののための演算子を指定しましたが、あなたの状況は異なるかもしれません。誰があなたのプロダクションシステムを今見守っていますか? –

+0

短い答えは...誰も...私たちはこのシンプルなスケジューラを持っていますが、私は非常にシンプルで(ちょうど与えられた時間にジョブを起動します)、制御フローやエラー報告必要に応じて一部の人物)が単一のジョブに委任されます。 私はスケジューラがやると思うが、私は変更する可能性のある抵抗を恐れている。とにかく私はそれを試して、私の同僚にそれを示すつもりです、ありがとう。 あなたの投稿は、エラー処理/制御フローの報告が仕事そのものではなくスケジューリングの一部でなければならないことを認識させました。 –

0

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

3

PowerShellをお勧めします。

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

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

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

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

ハッピースクリプティング。

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

Wikipediaのページ
http://en.wikipedia.org/wiki/Windows_PowerShell

+0

私はPowerShellを見てきました。非常に面白いですが、非常に複雑です。 プロ: - それは確かに窓とうまく統合されます! - その非常に柔軟な 私には唯一の懸念事項があります: - 私は現在Visual Studio C#を持っていません。購入できませんが、多くのコマンドレットを開発する必要があります。 - msdnのドキュメントはあまり明確ではありません。バージョン2はベータステージでも同様です。 - ウェブでは、個々のスクリプトを超えるシステムの例はあまりありません。 .net用の無料ライブラリーの利用可能性? –

+0

ところで、このような長い質問をお読みいただきありがとうございます! :-) –

0

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

関連する問題