<< 2008/08/31 | Home | 2008/09/02 >>
PR: 転職    ドメイン    電子機器    インプラント    転職サイト    ダイエット 食事    転職    コンタクトレンズ    流行キーワード    英会話   

JBoss5 CR1で、Sunのチュートリアルを動かす。

SunのJavaEEチュートリアルにある、EJB3のサンプル、converterを、JBoss5 CR1で動かしてみた。で、結論から言うと動かないわけなんだけど、原因を見てみると、EJBのルックアップで失敗している。JSFなら、インジェクションできるんだけど、JSPなんで、JNDIルックアップをしている。チュートリアルでは、

    InitialContext ic = new InitialContext();
    converter = (Converter)ic.lookup(Converter.class.getName());

という感じで、クラスのパッケージ名を含めた完全修飾名を渡すことで取得している。JBossでは、これだと見つからないと言われる。ここの名前は”アプリケーション名/EJB名/remote"という書式で指定する必要があるようだ(追記:nekopさんからの情報で、やはりJNDI名は仕様で規定されていないらしい)。

    InitialContext ic = new InitialContext();
    converter = (Converter)ic.lookup("converter/ConverterBean/remote");

先頭の"converter"は、EARファイルの名前から".ear"を除いたもの。ConverterBeanの部分はEJBの実装クラス名。これはよろしくないので、@Stateless(name = "XXX")として、抽象的な名前を指定してやるのが良いかと思われる。

で、これだけだと、Converterにはキャストできないというエラーが出る。どうも別のクラスローダで、Converterインターフェースを読んでしまうようだ(これはJBossのバグなのかもしれない これもnekopさんからの情報によると、チュートリアルが、EJBのjarを、Web moduleのWEB-INF/libに入れてしまっているせい。このあたりも現在の仕様では明確な規定が無いそうだ)。jndi.propertiesをWebアプリケーションのクラスパスに入れてやればok (これは、Web ModuleのWEB-INF/classes, libからEJBのインターフェースを除いてやれば不要)。

java.naming.factory.url.pkgs=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=localhost

う〜む、このあたりの互換性が無いのは、問題なんじゃないだろうか。

猫ページ

猫ページ更新完了。

このサイトの掲載内容は私自身の見解であり、必ずしもIBMの立場、戦略、意見を代表するものではありません。
日本アイ・ビー・エム 花井 志生 Since 1997.6.8