J2EEWebアプリからトリガーしたいシェルスクリプトがあります。
スクリプトは、処理、FTPなど、多くのことを実行します。これはレガシーなことです。
実行には長い時間がかかります。
これに対する最善のアプローチは何だろうかと思います。ユーザーがリンクをクリックしてスクリプトをトリガーし、スクリプトが開始されたことを示すメッセージをユーザーに表示できるようにしたいと思います。スクリプトの実行に長い時間がかかるという事実に関係なく、HTTP要求/応答サイクルを瞬時に実行したいと思います。
私は3つのオプションを考えることができます:
- ユーザーのクリックの処理中に新しいスレッドを生成します。ただし、これはJ2EE仕様に準拠しているとは思いません。
- スクリプトをトリガーする前に、HTTP応答ストリームに出力を送信してコミットします。これにより、HTTP要求/応答サイクルが終了したように見えますが、実際には、要求を処理しているスレッドは、シェルスクリプトが終了するのを待ってそこにとどまっています。だから私は基本的に私自身の目的のためにコンテナのHTTP処理スレッドをハイジャックしました。
- メインスクリプトをバックグラウンドで開始するラッパースクリプトを作成します。これにより、リクエスト/レスポンスサイクルがコンテナ内で正常に終了します。
上記はすべて、サーブレットとRuntime.getRuntime()。exec()を使用します。
これは、Java1.4.2でOracleのOC4Jアプリサーバーを使用するSolarisで実行されます。
誰が最もハッキーな解決策であるか、そしてその理由について何か意見がありますか?
それとも誰かがより良いアプローチを持っていますか?Quartzを利用できますが、シェルスクリプトをJavaプロセスとして再実装する必要はありません。
ありがとう。