- PR -

@IT記事「クラスローダの仕組みを知る」について

1
投稿者投稿内容
koe
大ベテラン
会議室デビュー日: 2003/07/13
投稿数: 198
投稿日時: 2004-05-11 10:33
2004/5/11公開のJava Tips「クラスローダの仕組みを知る」において、
Webアプリケーションサーバのクラスローダの仕組みが
Tomcat 5の実例を元に解説されています。
このあたりははまる人が多いところなので、こういった解説記事があると
他人に説明しやすくなり助かります。

ただ、上記の記事でおかしいと思う点がありました。それは、クラスローダ
System に関する説明です。件の記事には以下のように書いてあります。

| System 環境変数CLASSPATHに設定されているクラス

確かにJakartaのサイトにあるクラスローダに関するドキュメントには
以下のように書いてあり、一見正しいように思えます。

| System - This class loader is normally initialized from the contents of the
| CLASSPATH environment variable.

ですが、その後にはさらに以下のように書いてあります。

| However, the standard Tomcat 5 startup scripts
| ($CATALINA_HOME/bin/catalina.sh or %CATALINA_HOME%\bin\catalina.bat)
| totally ignore the contents of the CLASSPATH environment variable itself,

このように、「環境変数CLASSPATHの内容を無視する」と書いてあります。

実際、初心者が陥りやすいトラブルとして「jarファイルを環境変数CLASSPATHに
追加したのにClassNotFoundExceptionが発生する」というものを頻繁に見かけます。
件の記事の内容ですと、このトラブルの対策になるどころか誘発してしまいかねません。
閲覧者の多い@ITの、特に入門者向けの記事ですので、早めに修正した方がいいのでは
ないでしょうか。
はしもと
大ベテラン
会議室デビュー日: 2003/02/05
投稿数: 182
投稿日時: 2004-05-11 14:05
記事自体はクラスローダについてです。
その観点から言うと、間違ったことは言っていないですよね。

事実、Tomcat は CLASSPATH 環境変数を元に System クラスローダを
作成しています。

しかしその CLASSPATH 環境変数を設定しているのは、Tomcat のアーカイブに
同梱されている起動スクリプトで、このスクリプトが、ユーザが設定した
CLASSPATH 環境変数を上書きしています。

という事で、Tomcat がユーザが設定した CLASSPATH 環境変数を
無視するのは、クラスローダそのものとは無関係です。

しかし、この記事のみを見て誤解する人は居ると思うので、
記事に追記する事は反対しません。
koe
大ベテラン
会議室デビュー日: 2003/07/13
投稿数: 198
投稿日時: 2004-05-11 20:01
引用:

はしもとさんの書き込み (2004-05-11 14:05) より:
記事自体はクラスローダについてです。
その観点から言うと、間違ったことは言っていないですよね。


そのとおりでした。クラスローダの説明という意味ではおかしくはありませんね。
1

スキルアップ/キャリアアップ(JOB@IT)