読者です 読者をやめる 読者になる 読者になる

EJB3.1とJBoss5.1.0GAでClassCastException

Java JBoss

JBoss5.1.0GA上で管理されるリモートインタフェースをlookupしようとしたら、エラーになった。

Caused by: java.lang.ClassCastException: javax.naming.Reference cannot be cast to (Beanインタフェース名)

調べるとJBossのバージョン間で互換性がないだとか、同じエラーでも色々原因はあるようなんだけど、どうもjbossall-client.jar(このjar自体は他のjarを参照するだけなので、実際はこの中が参照しているjar群)とjnpserver.jarだけをクラスパスに含めると、不足があり、上記エラーになってしまう模様。

ただし、JBossのインストールフォルダの下にあるjar(commonとlib)を片っ端からクラスパスに含めるとうまく行く。
つまり、「何か」必要なjarがクラスパスにあるかどうかによって、うまくlookupできるかどうかが変わっているようだ。

で、今回のケースだと、http://www.coderanch.com/t/454071/java-EJB-SCBCD/certification/javax-naming-Reference-cannot-cast を参考に、クライアント側で最低限必要なjarは以下であることが分かった。

人海戦術で調べた所、今回のエラーに関して肝になっているのはjboss-ejb3-proxy-impl.jarで、このjarはjbossal-client.jarからも参照されていないにも関わらず、クラスパスから抜けているとClassCastExceptionが起こってしまう。なんでかは詳しくみていないけど。

ともあれ、実際にクライアントアプリをパッケージングする時も上記のjarだけを含めればよいことが分かったので、パッケージファイル等々も少しダイエットできそうだ。