2012-03-06 12 views
0

ユーザーリクエストと計算を処理し、それらをThreadsとRuntime.exec()を拡張することによってサーバー上の(カスタマイズされた)実行可能ファイルに渡すWebアプリケーションシステムを開発しようとしています(Linuxおよび/またはWindows) 。これらの計算は非常に時間がかかる可能性があり、HttpSessionの持続時間を超える可能性があります。これが起こってセッションが終了すると、スレッド/プロセスもHttpSessionとともに終了します(右?)。HttpSession内でプロセスを開始し、セッションが終了する前に別の「所有者」に渡しますか?

私の質問:セッション内でプロセスを開始し、それをセッションに依存しないプロセスにハンドオーバする方法はありますか?

プロセスIDをトレースできないかどうかは関係ありません。ユーザーのセッションが終了しても、Webサーバー上でプロセスを起動して実行させる方法のみを検索します。

私はアイデアやヒントに感謝しています!

+1

セッションは外部プロセスとは関係ありませんが、サーブレットの実行を長期間ロックすることは**恐ろしい**アプローチです。共有DBや何らかの種類のパイプのような、ある種の非同期メッセージシステムを使用する必要があります。 – Viruzzo

+0

私はCoolspotがそれを示唆しているとは思わないし、実際にそれを避ける方法を尋ねています。 –

+0

多分あなたのページで投票を使用して、N秒または何分になるかを問い合わせて、処理が完了したかどうかを尋ねるメッセージが表示されます。 –

答えて

1

あなたのジョブズCEOは、私がRuntime.exec経由でプロセスを開始するか、Webサーバーの内部から新しいスレッドを作成することはお勧めしませんHttpSessionの

+0

ありがとう、一見で面白そうに見えます!私はそれを見てみましょう。 – Coolspot

1

の全てでは依存しないようにするには、Quartzのようなジョブスケジューリングlibrayを使用する必要があります。それは技術的に可能なことが多いのですが、それは良い考えではありません。基本的には、開始しているスレッドはWebコンテナコントロール(リクエストを処理する多数のワーカースレッドがあります)の下にはありません。独自のスレッドを開始することで、Webサーバーは独自の負荷を管理することができなくなり、意図しない結果が生じる可能性があります。私はどうなるのか

は以下の通りです:

  • 新しい計算のためのリクエストが来たとき、私は一意のIDを作成し、ユーザーIDを持つ「保留計算」としてDBにそれを保存したいです。
  • 次に、要求のデータをパッケージ化し、JMSキューに配置して計算をスケジュールします。
  • ウェブコンテナは、そのIDをウェブブラウザに返すことができます。
  • ウェブブラウザはこのIDを使用して、「計算はIDはまだ完了しましたか?」とWebサーバーに戻ることができます。サーバーはデータベースをチェックして、ステータスがまだ「保留中」であるかどうかを確認できます。
  • あなたのウェブページには、「処理中」というメッセージとプログレスバーが表示され、定期的にリフレッシュし、計算がまだ進行中かどうかを確認することができます。それはあなたのHttpSessionを生かし続けるでしょう(ただし、ユーザーが再度ログインしてIDを確認することはできません。または、DBレコードのユーザー名を保存しておけば、ユーザーの「保留中の」計算をすべて見ることができます)。
  • 計算は、基本的にJMS/MQキューの受信メッセージをリッスンしてから新しいスレッドを作成する別のアプリケーションによって実行されます。これは、同じマシン上または別のマシン上にあることができます(JMSを使用すると、JMS設定を使用して柔軟にJMSメッセージを受信して​​複数の「ワーカー」マシンで計算を実行できます)。
  • 計算が終了すると"ワーカー"が結果をパッケージし、JMS応答メッセージ(IDを含む)を送信します。
  • サーバーに戻ると、結果をデータベースに挿入し、
  • 結果が利用可能であるため、Webページが最新表示されたら、結果ページにリダイレクトしてデータベースから結果を取得することができます。JMSを使用しての

利点:

  • メッセージを永続化することができ、問題がある場合に憤慨。
  • のJava EE仕様DBに計算結果を格納する対応

利点:歴史的な計算

    • ルック計算は、前の計算からの結果を見ることができる冪等である場合。

    希望するものがあります。

  • 関連する問題