最終的にTomcatへのWARとしてデプロイされるWebアプリケーションを設計/開発しています。このアプリケーションの機能の1つは、ユーザーが画像をサーバーにアップロードして編集(サムネイルの生成など)できることです。内部では、ImageMagick
とそのJavaアダプタライブラリを使用しますIM4Java
。
初期のプロトタイプでは、アプリケーションを再デプロイするたびに、ImageMagickがサーバー上で「ウォームアップ」するのに時間がかかることが示されています。これにより、次の2つの可能性のいずれかを検討するようになりました。
ImageService.war
プライマリアプリと一緒にデプロイし、基本的に内部へのすべての呼び出しを処理するWebサービスを作成しますIM4Java
(たとえば、RESTfulサービスを公開し、リクエストを受信するとImageMagickを実行するだけです。プライマリWebアプリは、編集されたファイルを見つけることができません。同じローカルファイルシステム上); またThread
サブクラス(つまり)を作成し、ImageServiceThread
それを開始してデプロイ時に実行し、Tomcatがアプリをアンデプロイするときにシャットダウンされることを確認します。
これらの2つの見通しにより、この問題についてより抽象的な意味で考えるようになりました。作業を別のスレッドに委任する必要があるのはいつか、本格的な別のアプリ(この場合はWAR)を作成するのが適切なのはいつですか。
私たちのプライマリアプリは、この「イメージサービス」の唯一のユーザーになります。これにより、別のWARはやり過ぎで不要だと思います。しかし、Tomcat内でのスレッド化を扱ったことはなく、スレッドのライフサイクルがプライマリ/メインアプリスレッドのライフサイクルと一致するようにスレッドを生成して強制終了できるかどうかはわかりません。
そのような決定の一部としてどのような要素を考慮する必要がありますか?前もって感謝します。