- - PR -
Servletでの処理中メッセージ(プログレスバー等)の表示
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-05-09 23:32
Servletの処理が重い(数十秒の処理時間)ため、
AntのSplashタスクのような処理中メッセージ or プログレスバー等を使用して、 処理中であることをエンドユーザに表示したいと考えています。 ※本来は非同期処理にすべき個所ですが、都合上同期処理にしなければなりません。 ※ブラウザ右上の地球の回転で処理中が分かりますが、もう少し目立つ処理中メッセージが必要とされています。 このように、サーバに一旦リクエストを送信した後に、 クライアント側にて何らかの処理を行うことは実現可能なのでしょうか? おそらく 1)Servletで別Threadを起動して処理 2)JavaScriptで表示 で実装すれば何とかなるのかもしれませんが、実現方式が思いつきません。 そのようなコーディング例や Jakartaでのユーティリティクラスなど情報がございましたらご教授願います。 [ メッセージ編集済み 編集者: くりお 編集日時 2004-05-10 01:28 ] | ||||
|
投稿日時: 2004-05-10 04:17
アプレットでも使用すればなんとか行けそうな気がします。 ブラウザだけでは無理かとおもいますが。 数十秒の処理の方をどうにか、ばらせるようにするほうが正しいとは おもいますが。。。無理なんでしょうね。 | ||||
|
投稿日時: 2004-05-10 06:50
[Servletで別Threadを起動して処理]について簡単なコード例が以下にあります。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=7110&forum=12 長期の処理であれば一般的には MDB を使うのが妥当でしょう。 | ||||
|
投稿日時: 2004-05-10 09:54
返信ありがとうございます。
本来はご意見のとおり、処理を分割したり、MDBを使用すべきだと思いますが、 いろいろな都合上、オンライン同期処理を行わなければなりません。 > せんさん やっぱり、AppletなどRichクライアントが必要になるのでしょうねぇ。 ここら辺がThin クライアントの限界なのでしょうか・・・ > インギさん 別Thread起動の情報のご提供ありがとうございます。 | ||||
|
投稿日時: 2004-05-10 11:59
私が只今、設計しているシステムでも、
同様な要求がユーザーさんからありました。 この要求に対して、とりあえず、 下記のような感じのHTMLを作成してみました。 こんな感じでなんとかいけそうな気がしてます。
| ||||
|
投稿日時: 2004-05-11 11:45
servletからthreadを起動することができれば 非常に便利だとは思っています。 しかし、博識ではありますが、servletからの thread起動ってお作法としてあまりよろしく ないとされていませんでしたっけ? そういう事が今まで頭にあったので、なるべく しないよう心がけてはいたのですが、大丈夫 なのでしょうか? 以前、私もサーバのメモリ参照のためのツール をservletからthread起動で監視するタイプで 作りましたが、某ApServerでは起動時点ではじか れてしまいました。 | ||||
|
投稿日時: 2004-05-11 12:03
補足
どうやら、servletの仕様としては 明確に書いてあるわけでもないようです。 webを調査してたらJavaHouseにて下記の 記事を見ました。 http://java-house.jp/ml/archive/j-h-b/047924.html ただ、以前私が扱ったサーバ(日立のコズミネキサス5) ではservletからのthread起動をサーバ起動時に監視 しているみたいで、怒られた記憶があります。 | ||||
|
投稿日時: 2004-05-12 05:06
はい、その通りサーブレットに関わらずコンテナ管理外のスレッド起動は大変大きなコストを伴いますのであまりお勧めはしません。
あくまでゴリ押しのソリューションとして挙げました。 サーブレットの仕様上は問題ありませんが。 トラフィックの少なめのイントラならなんとかなるかもしれませんがインターネットからアクセス可能のサイトで、簡単なリクエストでぼこぼこスレッドを起動するようなつくりでは簡単に OutOfMemoryError に陥りますのでへたな CGI よりタチが悪いです。 ですので J2EE 的な作法としては MDB を使うのが正攻法です。実装もとても簡単ですし。 不用意にたくさんのスレッドの起動を防止する方法としては commons-ThreadPool を使う方法もありますね。 同等のものを自分で実装しても良いですが、スレッド回りはしばしば火種になるので細心の注意が必要です。 http://jakarta.apache.org/commons/sandbox/threadpool/ どのような実装方法をとるにせよ JMeter 等で十分に負荷テストをしてサイジングを適切に行っておくのは重要です。 [ メッセージ編集済み 編集者: インギ 編集日時 2004-05-12 05:08 ] | ||||
1
