2016年10月26日水曜日

<Java>EJBだとアクセス修飾子でコンパイルエラーにならない?

最近、プログラミングで困ったことをアップしておきます。

Stateless EJBから、同パッケージの別クラスのメソッドへのアクセス不可でもコンパイルエラーにはならなず、実行時エラーになる。

説明が難しいですね。。。
まず、アクセス修飾子についておさらいですが、
protectedが付与されたメンバには、自クラス・同パッケージ・サブクラスからアクセスできます。

Oracle The Java™ Tutorials Controlling Access to Members of a Class

antのビルドは通ったのですが、 実行時、stateless EJB bean からアクセスする際に下記のエラーが出ました。

java.lang.IllegalAccessError: tried to access method Connected.getString(Ljava/lang/String;)Ljava/sql/ResultSet; from class sample

先輩に教わりましたが、publicにすると問題なく実行できました。
protectedだから問題ないと思ってましたが、実行時のエラーから問題のあるメソッドは特定できていたので、試してみるべきでした。。。
同パッケージなのに、protectedでアクセスできないというのは、クラスローダーが違うからみたいです。 java EEのデバッグしんどい。。。

参照: stack overflow / java.lang.IllegalAccessError: tried to access method

0 件のコメント:

コメントを投稿