このページで解決しない高度なJavaのシステム障害はJaTSにお任せください

Trouble 19: その他の問題



<Q19-1>Sunが公開しているftpクラスで複数ファイルを転送しようとすると例外が発生します。


<発生環境>
OS Linux
JDK JDK1.3
Vender Sun
<A19-1>
Sunの公開しているftpクラスが、ファイル転送後にsocketをクローズしていないのが原因です。logoff(bye)をすればsocketはクローズされるため、不具合ではなく、仕様である可能性もあります。
なお、このftpクラスはSunが参考のために公開していたクラスのため、Sunのサポート対象外となっています。
現在、この不具合(?)が直っているかどうかは不明です。
Page Top

<Q19-2>JUnitを利用する際、テストケースコンパイル時にメソッドassert()において警告が発生します。

テストケースコンパイル時に警告が発生します。以下はその例。

警告: リリース 1.4 では assert はキーワードなので識別子として使うことはできません。
assert(true);
^ 注: JunitAssert.java は推奨されない API を使用またはオーバーライドしています。
注: 詳細については、-deprecation オプションを指定して再コンパイルしてください。
警告 1 個

<発生環境>
OS any
JDK JDK1.4.0
Vender any
<A19-2>
JDK1.4から「assert」が予約語になりました。したがって、「assert」という文字列は識別子として利用する事ができません。
assert()ではなく、assertTrue()を利用してください。(JUnit3.7APIのjunit.framework.Assertクラスを参照)
Page Top

<Q19-3>Tomcat5上でcommons-loggingを使ったウェブアプリケーションのデプロイが例外発生して失敗してしまいます。

Tomcat5上でcommons-loggingを使ったウェブアプリケーションを読み込むとNullPointerExceptionが発生してデプロイ終了してしまう場合があります。

<発生環境>
JDK 1.5.0
Tomcat 5.5
<A19-3>
これはcommons-loggingのVersion 1.1を利用している場合に発生する問題です。
commons-loggingのClass Loaderの問題で発生します。

これを回避するためには、commons.loggingのVersionを1.0.4に変更する必要があります。

参考URL:
https://issues.apache.org/bugzilla/show_bug.cgi?id=39631

参考)

以下のエラーメッセージは、commons.loggingとLog4jをTomcatで利用した場合の
スタックトーレスの出力例です。

java.lang.NullPointerException
  at org.apache.log4j.Category.isEnabledFor(Category.java:746)
  at org.apache.commons.logging.impl.Log4JLogger.isTraceEnabled
  (Log4JLogger.java:327)
  at org.apache.catalina.startup.TldConfig.tldScanResourcePaths
  (TldConfig.java:581)
==== 以下省略 ==== 

Page Top

<Q19-4>Jakarta Commons HttpClientをマルチスレッド環境で利用時に想定よりもパフォーマンスが向上しません。

Jakarta Commons HttpClientをマルチスレッド環境で利用時に想定よりもパフォーマンスが向上しません。
※Java SE 5 で動作確認を行いました。

<発生環境>
OS Windows XP
JDK any
<A19-4>
HttpClientをマルチスレッドで効率よく利用するには、実は、
一般に知られている実装方法とはことなる実装に切り替える必要があります。

Webや雑誌などのチュートリアル記事などで広く紹介されているHttpClientの利用方法
(以下、デフォルト版) は、シングルスレッド環境を想定した利用方法になっています。


マルチスレッド環境に適した方法でHttpClientを利用をするためには、
次のような実装 (以下、マルチスレッド版) にする必要があります。

1.接続マネージャをデフォルト版からマルチスレッド版のMultiThreadedHttpConnectionManagerに変更する。

2.クライアントインスタンスを複数スレッドで共有する。

3.同一ホストへの同時接続数をデフォルト値(2)から変更する。

当社の検証環境では、マルチスレッド版では、デフォルト版の2倍以上のスループットが計測されました。

参考)
・HTTPClientのコネクションプーリングは、接続するHTTPサーバがkeep-aliveに
  対応していることが前提となっています。

・デフォルト版のコネクションプーリングでは、直前の1コネクションのみを
  プーリングする実装になっています。
  このため、複数のホストに交互に接続する利用方法では、
  コネクションプーリングが有効に働きません。

 (例)
   1.ホストAへリクエスト送信
   2.ホストBへリクエスト送信
   3.ホストAへリクエスト送信 ...
  そこで、複数のホストへの接続を行うアプリケーションにおいて、
  コネクションプーリングを有効活用するためには、シングルスレッドであっても
  マルチスレッド版と同じ実装をする必要があります。


 この記事の詳細な情報をJTSメールマガジンにて配信しています。
 情報を取得したい方は、メールマガジンのバックナンバーを参照して下さい。

Page Top
アンケートフォーム

このページに掲載されていた情報は役にたちましたか?

  • とても役に立った
  • 役に立った
  • あまり役にたたなかった
  • 役にたたなかった

注意:本文書の内容に誤りがあり、またこの文書によって不利益を被っても、
Acroquest Technology 株式会社は一切関知いたしません。

  • 現象別Index
  • 原因別Index

Find Bugsバグ詳細

Find Bugs Bug Descriptions日本語版

RSSで更新情報を取得する

RSSとは、ホームページの更新情報を配信する為のフォーマットです。
RSSを利用すると、登録したページの情報が更新された場合に、更新情報を自動的に受け取る事ができます。

詳細

弊社小森が執筆致しました

Javaでオブジェクト指向開発

Javaプログラミング言語習得において、新人プログラマーの最初の障害は「オブジェクト指向の壁」です。
本書は、Javaのソフトウェア開発を中心に事業を発展させてきたAcroquest社の新人教育セミナーを加筆・書籍化したもので、大卒の新人に対して、ゼロからJava言語を教えてきた実績をフィードバックしています。

メールマガジン配信中

Javaトラブルシューティングのメルマガをはじめました!是非ご購読ください

詳細