- PR -

EJBをLookupするときのnarrowingについての質問です。

1
投稿者投稿内容
たららん
常連さん
会議室デビュー日: 2001/11/07
投稿数: 22
投稿日時: 2001-11-29 21:24
お世話になります。

Lookupした時,Lookupは行なうことができるのですが,
その後のnarrowingの時にNoClassDefFoundErrorが投げられます。

現在はnarrowを以下のように行なっております。

Object homeHoge = ctxStateHandler.lookup("hogehoge");

hogehogeHome myHome =
(hogehogeHome)PortableRemoteObject.narrow(
homeHoge,hogehogeHome.class);

NoClassDefFoundErrorをなくしたいのですが,どのように行なえばよろしいでしょうか?

よろしくお願い致します。
ふる
会議室デビュー日: 2001/11/29
投稿数: 5
投稿日時: 2001-11-29 23:37
NoClassDefFoundErrorとは実行時にクラスパスがしっかり設定していないときに発生するよくあるエラーのひとつです。解決するための方法は、やはりエラーメッセージをよく読めば大丈夫だと思います。あと、Errorについてよく分からないときでもAPIを参照して調べればそのErrorクラスの意味するところがわかるはずです。

現在あげられている問題の解決方法としては、ユーザ定義クラスが怪しいところなのでちゃんとhogehogeHomeに対するクラスパス設定がされているか、確認するといいです。
あと、付け加えていえばクラス名も命名規約にのっとった名前を付けるといいです。
(クラス名の先頭は大文字)
たららん
常連さん
会議室デビュー日: 2001/11/07
投稿数: 22
投稿日時: 2001-11-30 00:43
ふるさん,ありがとうございます。

クラスパスがおかしいんですね。
それで,つっこんで質問なのですが,
クラスパスはどのクラスパスを設定する必要があるのか
わかるでしょうか?

JRunを使ってるのですが,JRunにあるクラスパスのことでしょうか?
それともシステムのクラスパスのことでしょうか?

クラスパスのミスなんて初歩的なんでしょうが,
調べてみましたがわかりませんでした。

また,一つ目のServletからEJBをLookupするのはできてるのですが,
EJBからEJBをLookupしたときにはnarrowでエラーになります。

ピンとくることがありましたら教えてください。
お願い致します。
ふうた
大ベテラン
会議室デビュー日: 2001/08/23
投稿数: 198
お住まい・勤務地: 岡山
投稿日時: 2001-11-30 11:35
NoClassDefFoundError のエラーが表示されている時に、どのクラスがないかも一緒に表示されていると思いますが、どうでしょうか?

ちなみに、これはEJBを使われているのでしょうか?そうであれば、APサーバのマニュアルに従って、デプロイ&インストールすれば問題ないと思います。
たららん
常連さん
会議室デビュー日: 2001/11/07
投稿数: 22
投稿日時: 2001-11-30 13:10
ふうたさん,アドバイスありがとうございます。

EJBを使用しています。
デプロイは行ないました。
インストールというのは何のことでしょうか?

あと,使用状況なのですが,ServletからEJBを一度呼び,
そのEJBから次のEJBを呼ぶというようなかんじで使用しています。

ServletからのEJBをLookupした時に行なうnarrowは上手くいっているようで,
そのまま次のEJBをLookupをしています。
で,EJBからEJBをLookupした時にLookupは正しく成功するのですが,
narrowが上手くいきません。ここでのエラーがNoClassDefFoundErrorと
なっております。 といった状況なのです。
クラスパスの問題でしたら一つ目のEJB呼び出しも上手くいかないのではと
思っているのですが,どうなんでしょうか?


ひょっとして,EJBからEJBを呼び出すことはできないのでしょうか?
そんなことはないと思っているのですが。
教えていただけませんでしょうか?


よろしくお願い致します。
ふうた
大ベテラン
会議室デビュー日: 2001/08/23
投稿数: 198
お住まい・勤務地: 岡山
投稿日時: 2001-11-30 19:08
引用:
インストールというのは何のことでしょうか?


すみません。これは、私が使っているAPサーバだけの話だと思います。
(私が使っているAPサーバだと、デプロイは「インストールイメージを作る」だけ、インストールは「それを実際のAPサーバに持っていって(コピーして)動かせる状態まですること」と分かれています。)
一般的にはデプロイと呼ばれる作業だけすればよいのだと思います。
これは、お使いのAPサーバのマニュアルで確認してください。

引用:
ひょっとして,EJBからEJBを呼び出すことはできないのでしょうか?


それはないはずです。(それでは、分散オブジェクトになりません・・・)

サーブレット(EJBクライアント)からEJB(SessionBean?)を呼び出す時にも、クライアント側にもEJB(SessionBean?)のホームクラスといったクラスを配置していると思いますが、同様にEJB(SessionBean?)からEJB(EntityBean?)を呼び出す時も、EJB(SessionBean?)がEJBクライアントであると考えると、EJB(EntityBean?)のホームクラスといったクラスを配置する必要があると思いますがこういったことは考慮されているでしょうか?

あと、考えられるとするとネームサーバにEJB(EntityBean?)が登録されていないとか?!

先の投稿にも書きましたが、どういったクラスが見つからないと表示されているのかを確認するためにエラーメッセージをもう一度見なおしてみてはどうでしょうか?
まずはそこからではないでしょうか?



[ メッセージ編集済み 編集者: ふうた 編集日時 2001-11-30 19:14 ]
ふる
会議室デビュー日: 2001/11/29
投稿数: 5
投稿日時: 2001-11-30 20:29
重複しますが、どのクラスが怪しいかはメッセージに表示されています。
だから、その内容さえ見れば解決します。
>あと、考えられるとするとネームサーバにEJB(EntityBean?)が登録されていないとか?!

とありますが、その場合はNameNotFoundExceptionが出るはずなのでありません。
ふうたさんの言うとおり、とりあえずはエラーメッセージを見るのが一番です。
繰り返しになりますが、基本的なエラーなのでEJBには特に関係ありません。
たららん
常連さん
会議室デビュー日: 2001/11/07
投稿数: 22
投稿日時: 2001-12-02 22:13
アドバイスありがとうございました。 

APサーバによって、ディプロイにの仕方色々あるんですね。

結果なのですが、ディプロイのやり方に問題がありまして、
ちゃんとEJBサーバに登録できていなかったようです。
その結果、NoClassdefFoundErrorが出てました。
ディプロイの方法を変更したら上手くいきました。

そうですよね、EJBって分散のためにあるのにEJBからEJBを
呼べないっていうのは大問題ですからね。

色々教えていただきましてありがとうございました。

また、よろしくお願いします。
1

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