- - PR -
TomcatとApatch連携の複数アクセス。
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2002-07-24 20:22
皆様お疲れ様です。
今Tomcat4.0.3+Apache1.3.26とJDK1.3.1の組み合わせで、 サーブレットを使用した、 Excelドキュメントダウンロードプログラムを作成しているのですが、 複数のクライアントからサーブレットにアクセスするとダウンロードがうまくいきません。 (1クライアントのアクセスならうまくいく(1度に何度もクリックしたら駄目)のと、 Tomcat単体であれば複数クライアントからのアクセスは可能でした。) ApacheのエラーLogとして以下が表示されます。 java.net.SocketException: Connection reset by peer: socket write error at java.net.SocketOutputStream.socketWrite(Native Method) at java.net.SocketOutputStream.write(SocketOutputStream.java:60) at org.apache.catalina.connector.warp.WarpConnection.send(WarpConnection.java:220) at org.apache.catalina.connector.warp.WarpResponse$Stream.flush(WarpResponse.java:289) at org.apache.catalina.connector.warp.WarpResponse$Stream.close(WarpResponse.java:299) at org.apache.catalina.connector.warp.WarpResponse$Stream.finish(WarpResponse.java:311) at org.apache.catalina.connector.warp.WarpResponse.finishResponse(WarpResponse.java:152) at org.apache.catalina.connector.warp.WarpRequestHandler.handle(WarpRequestHandler.java:222) at org.apache.catalina.connector.warp.WarpConnection.run(WarpConnection.java:194) at java.lang.Thread.run(Thread.java:479) ドキュメントダウンロードのプログラムには java.io.InputStreamと javax.servlet.http.HttpServletResponseと java.io.BufferedOutputStreamを使用して作成しています。 最大接続数などの設定等をすれば、 うまくいくだろうと思い、 いろいろ調べましたが特に設定の必要もなさそうなので、 困っております。 もしどなたか上記の連携でファイルのダウンロードをサーブレットで、 作成された方がおられたら、ご返事お願いします。 [ メッセージ編集済み 編集者: ラオウとトキ 編集日時 2002-07-24 20:27 ] [ メッセージ編集済み 編集者: ラオウとトキ 編集日時 2002-07-24 20:44 ] | ||||
|
投稿日時: 2002-07-24 23:46
複数のスレッドから同一のServletインスタンスにアクセスしています。
Servletのフィールド(インスタンス変数)にstreamなどの作業途中の一時的なオブジェクトを入れてるとアクセスが競合しておかしなことになるかもしれません。 排他制御をするか、あるいはインスタンス変数を使わないようにコードを修正するのは、プログラマの責任です。 | ||||
|
投稿日時: 2002-07-25 11:04
>Servletのフィールド(インスタンス変数)にstreamなどの作業途中の一時的なオブジェクトを>入れてるとアクセスが競合しておかしなことになるかもしれません。
>排他制御をするか、あるいはインスタンス変数を使わないようにコードを修正するのは、プロ >グラマの責任です。 まずは、ご返答ありがとうございます。 doPostやdoGetしたServletクラスにダウンロードのコーディングを書いているのではなく、 (ここにインスタンス変数を使用すると確かおっしゃる競合が起こりまずいので、) ダウンロード用のクラスを作成して、 複数アクセス可能なようにインスタンスを作成し、 作成したインスタンスを使用して、 ダウンロード実行しております。 ダウンロードクラスにはインスタンス変数は使用しておりません。 ただひっかかるのは、Tomcat単体(Tomcatオンリー)では、 動作していたものが、 何故Tomcat+Apacheの連携だと動作しないかです。 もしその辺りの事情が詳しいのであれば、 その辺りの返答(贅沢ですが)もいただきたいのですが。 どうでしょうか? [ メッセージ編集済み 編集者: ラオウとトキ 編集日時 2002-07-25 11:05 ] | ||||
|
投稿日時: 2002-07-25 12:17
コードも提示せずに返答を求めるのはどうかと思いますよ。 現象を再現するコードがない以上、返答側は推量で返答するしかありません。 あと、TomcatとApacheの連携の設定に関する情報も必要ですね。 | ||||
|
投稿日時: 2002-07-25 12:33
> Tomcat単体であれば複数クライアントからのアクセスは可能
この部分を見落としてました。失礼しました。 でも、そんなことってある、というのが率直な印象です。 まず、連携部分のインストールやコンフィギュレーションを良く見直した方がよいと思います。 それでも問題がないと思うなら、それは既知のかなり大きな問題に違いありません。 Tomcat+Apacheの連携まわりは接続モジュールに問題が多いでしょうから、モジュール名を検索キーにしてGoogle等を使って集めましょう。 あるいは、JakartaのBug Databaseで検索してみてはいかが。 Tomcat 4なら沢山情報が得られると想像します。 | ||||
|
投稿日時: 2002-07-25 12:59
>あと、TomcatとApacheの連携の設定に関する情報も必要ですね。
OSの情報も大事ですね。 Excelドキュメントダウンロードプログラムということなので、Windowsでしょうか。 Windowsの場合は、そもそも動いた実績があるのかを確認するのが先決ですね。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=773&forum=12 | ||||
|
投稿日時: 2002-07-25 13:50
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=1678&forum=12&2
上記スレッドの延長線での質問だと思われるので環境はおそらく以下のとおりだと 思います。 Windows2000Server+Tomcat4.0.3+Oracle8.1.7+JDK1.3.1 返答してくれる人がわざわざ他のスレッドを見てくれるとは思えないので きちんと環境は明記しほうがいいですよ。 | ||||
|
投稿日時: 2002-07-25 18:27
まずは皆様お疲れ様です。 皆様すっみません〜!。お世話かけます。 もっと詳しく内容書くべきでした。すみません。 結局いろいろ調べた結果、 同じ症状の現象がいくつかみられる掲示板等を拝見するに至りました。 私の場合は http://www.itnavi.com/apaTomcatForWin.htmを参考にしながら、 mod_webapp.so とlibapr.dllを使用してTomcat+Apacheの連携を取ったのですが、 この.soファイルと.dllを使用すると今回の現象が出て、動作も不安定と言う、 告知等を発見しましたので、、 mod_jk.dllを使用した連携をとるようにしました所、 今回の現象は全くでなくなりました。 ご支援してくださった方々どうもありがとうございました。 ちなみに、 http://www.ops.dti.ne.jp/~tmizuno/servlet/tomcat/install_402xp.htmlで、 mod_jk.dllを参考にして連携をしました。 TomcatやApacheのバージョンが違うせいか、 記述通りやっても動きませんでしたので、 一応調べた事を記述しておきます。 Apacheのhttpd.confに2点追加です。 AddModule mod_jk.c <==追加する <IfModule mod_jk.c> JkWorkersFile "C:/ApacheTomcat/conf/workers.properties" JkLogFile "C:/ApacheTomcat/logs/jk.log" JkLogLevel warn JkMount /*.jsp ajp13 JkMount /servlet/* ajp13 JkMount /examples/* ajp13 JkMount /test/* ajp13 <==追加するWebアプリを記述 </IfModule> 以下は追加しない所です。 <Location /project/WEB-INF/ > AllowOverride None deny from all </Location> Tomcat側のserver.xmlに追加記述を以下にする <Context path="/test" docBase="test" debug="0" reloadable="true" crossContext="true"/> 以上です。 皆様ありがとうございました。 | ||||
1
