dT*blog

design and programming

HttpUnitでもタイムアウトを実現する

先日、「HttpUnitはタイムアウトに未対応だって」で、HttpUnitがソケット通信中のタイムアウトをサポートしていないことについて、嘆き悲しんだわけです。

もはや HttpUnit に修正パッチ当てるしか無いのかなーなんて思っていたけど、裏技っぽいものを発見。Sun JVM 限定だけど、以下のコードでタイムアウト値が設定できた。

// コネクション確立時に使用するタイムアウト値
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");

// 入力ストリーム読み出し時に使用するタイムアウト値 System.setProperty("sun.net.client.defaultReadTimeout", "10000");

プログラムの先頭で、上記のようにプロパティを設定しちゃえば、それ以降の HttpUnit が使用する URLConnection がその値を参照して動いてくれる。もしタイムアウトになった場合は、SocketTimeoutException をスローする。

ただし、プロパティを設定すると JVM 単位でしか制御できなくなるはず。サーブレットコンテナ上で使う場合や、コネクションごとに値を変えたいケースでは、現実的じゃない。簡単なクライアントだったらOKだけれども。

こうなってくると、いよいよスレッドかなー。スレッドにしておくと、後々の利便性も高そうだし、やってみる価値はありそう。

Posted by dT by 16:59

トラックバック

このエントリーのトラックバックURL
http://www.deftrash.com/admin/mt/mt-tb.cgi/422

コメント




保存しますか?

(書式を変更するような一部のHTMLタグを使うことができます)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31