2011-10-19 18 views
0

私はJavaアプリケーションを持っています(実際にはgrailsです)。私は外部プログラムを実行する必要があります。私は自分のアプリを自己完結型にしたい、つまり、外部のスクリプト/プログラムをwarファイルの一部にすることが望ましい。この外部スクリプト/プログラムもいくつかのファイルを生成する必要があります。ベストプラクティスはJava Webアプリケーションで外部プログラムを実行します

私の質問は、最終的な製品がアプリのパーミッションに応じてあまりにも薄過ぎないように、この種のことを行う方法についてのベストプラクティスがあるかどうかです。

答えて

0

これを確実にするために必要なことの1つは、一度に1つのスレッドだけがプログラムのインスタンスを実行することです。そこでいくつかのロックと同期が必要です。

複数のユーザー/要求/スレッドが同じプログラムを異なる入力で実行しようとするシナリオを想像してみてください。それは災害になります。プログラムを実行している間にプログラムをロックしたり、プログラムを実行するたびに新しいインスタンスを作成する必要があります。あなたはこれに非常に注意する必要があります。

また、プログラムが実行された後にクリーンアップし、出力を生成する場合は、クリーンアップする必要があります。

ユーザーがシステムに悪意のあるコマンドを渡し、他のアプリケーションを乗っ取ろうとする場合は、注意が必要です。

全体的には、あなたがセキュリティと正確性について注意する必要があり

0

セキュリティ(私が言及した第1の方式。) - あなたのアプリがarbitaryの実行を許可しないことを保証する(ユーザーが供給)ホストシステム上のコード。 SQLインジェクションスタイルの攻撃を考えてください。データを渡す必要がある場合は、最初にデータベースに挿入し、外部プロセスに主キーを渡すことをお勧めします。これは、バッファオーバーフロータイプの状況を回避するのに役立ちます。

堅牢性 - このプログラムは失敗したり、時間がかかったり、その他の未知の副作用がありますか。別のスレッドや異なるプロセスから実行することによって、メインプログラムをこのプログラムから分離します。

ロギング - この外部アプリケーションからログを収集する必要がある場合は、セッションID(または同等のもの)を渡して、ウェブセッションのエラーを追跡できるようにすることができます。

0

サービス要求を追跡する小さな管理システムを設計できます。ほとんどのプロジェクトにはこのような目的があるため、非常に便利なコンポーネントです。

アプリはサービスから実行する必要があります。そのサービス自体に対するリクエストは非同期である必要があります。また、これに加えて、フィードバックを得て、そのサービス状況を追跡することができます。

関連する問題