2011-12-28 9 views
0

クライアントがリクエストすると、複数のメールを異なるアドレスに送信するサーブレットがあります。servletrequestを非同期で処理して、クライアントに迅速に応答し、バックグラウンドで大量のタスクを処理します。

メールの送信に時間がかかるので、クライアントは応答を受信するまで待つ必要があります。私はメールを非同期的に送信して、クライアントに速やかに応答を送り返したいと思っています。

また、メールの送信は数分で遅れる可能性があり、リアルタイムである必要はありません。

クライアント要求このサーブレット、サーブレットが追加されます:次のように私の心に来ている 私はDB内の任意の情報を保存して、アプリケーション内でこれを処理したいしたくないonly.Theソリューションですメーリングリストとその内容をServletContextの属性として返す。 ヘルパーサーブレットthatsが起動時にロードされ、毎週(例えば)10分後に実行されるtimertaskスレッドが生成され、servletcontext属性の読み取り、メールの送信属性を削除します。

これが良い解決策であるかどうかをご提案ください。もしあれば、より良いものを提案してください。

答えて

0

あなたのソリューションは合理的です。ただし、リクエストが来るたびにメーラースレッドを起動するだけです。この理由から、別の "ヘルパー"サーブレットを用意する必要はありません。

さらに、thread poolがあり、リクエストごとにCallableを提出してください。

スレッド/スレッドプールのオプションについては特に注意してください。(優雅な)Tomcatのシャットダウン時にすべての電子メールの送信が完了していることを確認してください。 Tomcatのシャットダウンは、すべての電子メールが送信された後で終了する必要があります。

関連する問題