Interface付きのEJBが単純な形でLookUpできない
この内容は陳腐化しています。次の日の記事を参照して下さい。
GroovyでEJBを書いてみた
年末のJava Advent Calendarのネタにと思い、GroovyでEJBを書いてみてました。
そうしたら、なぜか動かない。
調べてみると、ちょうど以下と同じ現象。
https://community.jboss.org/thread/166422
日付は1年以上前。
中に書いてある解決策はまったく綺麗な形には見えないのでやりたくない。
むむむ。
GroovyからJavaのクラスへの変換について
GroovyからJavaのクラスへの変換時には、必ずGroovyObjectというインターフェースがimplimentsされるようです。
public class JavaClass implements GroovyObject
なんか怪しい。
EJBのビジネスインターフェースについて
EJB3.0
EJB3.0ではEJBでは必ずインターフェースを作る必要がありました。
@Local //ビジネスインターフェースには@Localアノテーション(ローカルインターフェース)をつける。 //(@Remoteアノテーション(リモートインターフェース)でも可) public interface EJBView { void doSomething(); } @Stateless //実装には@Statelessアノテーションを付ける。 //(@StateFullアノテーションでも可) public class EJBImpl implements EJBView { @Override public void doSomething() { } } public class EJBExecutorServlet extends HttpServlet { @EJB //呼び出し側ではインターフェースを指定してインジェクションする EJBView ejb;
EJB3.1
EJB3.1ではLocalインターフェースである場合に限りEJBではインターフェースが不要になりました。
@Stateless //実装には@Statelessアノテーションを付ける。 //(@StateFullアノテーションでも可) public class EJBImpl { public void doSomething() { } } public class EJBExecutorServlet extends HttpServlet { @EJB //呼び出し側では実装を指定してインジェクションする EJBImpl ejb;
とまあ、こんな感じでインターフェースが不要になり、楽になったわけです。
しかしながら、省略された場合インターフェースは自動生成されます。
というあたりで、これが原因っぽい。
ということで検証コードを書いてみた
ビジネスインターフェースでないインターフェースをimplimentsしている場合にどうなるか。
詳しくは以下を。
https://github.com/megascus/CannotExecuteEJBWithInterface
結論だけ言うと、見事にこれが原因みたいです。
単純な形では呼び出すことができませんでした。
ぐぬぬ。
これがGroovyでEJB作っても上手く動かなかった理由なのね。
どういう形でJNDIに保存されているのかは別途調べる必要があるけれども、今日はここまで。