最近、プログラミングで困ったことをアップしておきます。
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