Tomcat単体からJBossにサーブレット、JSPを移行しております。

そこで、Tomcatでは出ていない下記問題がでてしまいました。
JBoss上の設定ファイルの問題なのでしょうか。
ご教授お願いいたします。

【問題】
サーブレット中のloadClass(className)メソッドでクラスがNotFoundになる

【状況】
classNameをフルパスで指定すると、エラーがでません

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/02/08 17:52:46
  • 終了:--

回答(2件)

id:quintia No.1

quintia回答回数562ベストアンサー獲得回数712005/02/09 08:28:38

ポイント25pt

urlはダミーです。

使いたいclassがJDK(or JDSK)本来のものか、自分で書いたものか、他のライブラリに属するものか? と、そのclassファイルをどこに置いているか? が書かれていないと回答しづらいです。

「classNameをフルパスで指定するとエラーがでません」というのはclasspathに直に記述すると、という意味でしょうか?

であればあなたはJBossの設定ファイルについてちゃんと理解しているということですね。

それともclassの名前をパッケージ部分を含めて全部書くとエラーが出ません、という意味でしょうか?

であれば、NotFoundではなくて、JDK,JDSKのバージョンアップに伴ったクラスの増加分や、JBoss自体のライブラリと名前が衝突しているということなのではないでしょうか。

あなたが使いたいclassについて

<%@ page import=”foo.bar.Requred”%>

とか

import foo.bar.Requred;

の様に明にimportを書いて置くのが楽かと思います。

こちらのURLはダミーではありません。

id:maribu

対象クラスはJSP中の独自のタグから呼んでいる独自のクラスです。

対象クラスは、deploy¥xxxxx.war¥WEB-INF¥classes¥パッケージ名配下に置いてあります。

パッケージ名を全て指定して、loadClassするとエラーになりません。

よろしくお願い致します。

2005/02/09 12:13:23
id:quintia No.2

quintia回答回数562ベストアンサー獲得回数712005/02/10 18:48:43

ポイント25pt

なかなか回答が付かない様ですので推測だけお話しします。

loadClassしている方とloadClassされる方が同じパッケージに属していると思いこんでいるだけで、その2つは実は別のClassLoaderにより読み込まれていると推測します。

ClassLoader は、システム(VM)により近いものから、自分で生成するURLClassLoaderまで、階層構造を成していているわけです。

AというClassLoaderでロードされたfoo.Barと、AというClassLoaderでロードされたfoo.Bazとは一見同じfooパッケージに属している様に見えて、実は違うfooパッケージだったりするのです。

loadClassされる方のClassLoaderが、loadClassしている側よりも上の階層に位置しているとこんなことも起こりうるのではないかなぁ、と思った次第です。

loadClassする方のstatic{} 初期化子で確認してみるといいのかも。

static{

ClassLoader a = this.class.getClassLoader();

ClassLoader b =

loadClass(cname).getClassLoader();

System.out.println(a.toString());

System.out.println(b.toString());

//とか、

while ((a=a.getParent()) != null) {

if (a.equals(b)) {

System.out.println(”aはbの下の階層だった”);

}

}

}

自分では試していないソースですのであしからず。

id:maribu

ありがとうございます。勉強になりました。

2005/02/11 02:13:09

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません