とりあえず最初のお約束としてこれでしょう。
ちなみに「Stateless Beanって何?」という質問がある方。
他にいくつも有用なページがありますので、そこで学んでおいて下さい。
今回は、基本的な用語の解説は省略します。
まず最初に。2004/10/13現在、Eclipseの最新バージョン3.1M2は
まだJDK5に完全対応していません。
よって、EJB3.0のサンプルを含め
これから紹介するソースはEclipse上で正常にコンパイルできません。
コンパイルとビルドにはAntを必要とします。
EJB3.0の場合、
一つのEJBを作成するのに「インターフェイス」「実装クラス」の2つが必要です。
以前までのEJBではこの他にHomeインターフェイスというのが必要でしたが
EJB3.0においてこれは不要です。
SampleというEJBを作ることにします。
必要なjavaファイルは「Sample.java」「SampleBean.java」の2つです。
前者をEJBインターフェイス、後者をEJB実装クラスと呼ぶことにします、
実装クラス名は、インターフェイス名 + Bean
で統一します。
サンプルEJBでは、たった一つのメソッドだけを実装することにします。
ソースコードは以下の通りです。
Sample.java
import javax.ejb.Remote; @Remote public interface Sample { void func(); }
SampleBean.java
import javax.ejb.Stateless; @Stateless public class SampleBean implements Sample { public void func() { System.out.println("execute func."); } }
非常にシンプルですね。
通常(非EJB)のJavaファイルとほとんど差がありません。
唯一、「@Remote」「@Stateless」というAnnotation(注釈)があるのみです。
この構文はJDK5から採用になっていて、JDK4以前の環境ではコンパイル出来ません。
よって、EJB3.0を使う場合にJDK5は必須条件となります。
見て解るように、このインターフェイス/クラスは
非EJBの環境でもそのまま使えます。
逆に、既存のJavaファイルにAnnotationを付けるだけで
そのクラスはEJBとして使うことが出来ます。
これがEJB3.0で採用されている「POJO」という概念です。
さぁ、では早速デプロイ(JBossへインストール)しましょう。
「え?xmlファイルは作らないの?」
以前までのEJBをやっていた方ならこう思うはずです。
EJB2.0までは、非常に面倒なxmlファイルを記述する必要がありました。
EJB3.0では、xmlファイルは一切必要ありません。
そのための情報は、先程説明したAnnotationに含まれているからです。
作成したclassファイル群をjar形式で圧縮し、拡張子を「ejb3」とします。
このファイルをJbossのデプロイフォルダ(JBoss/server/all/deploy)にコピーするだけで
EJBのデプロイは完了です。
JBossのコンソール画面にデプロイ成功のメッセージが出ますので確認して下さい。
さて、作成したEJBを実際に動かしてみましょう。
これは通常のJavaファイルから行います。
以下のファイルを作成して下さい。
public class Client { public static void main(String[] args) throws Exception { Context ctx = new InitialContext(); Sample ejb = (Sample) ctx.lookup(Sample.class.getName()); ejb.func(); } }
EJBを呼び出すには、InitialContextクラスのインスタンスを使います。
このインスタンスの lookup メソッドを、
EJBインターフェイスの完全限定名を引数に渡して呼び出します。
これで、EJBインターフェイスを取得することが出来ます。
あとはこのEJBインターフェイスを使って
普通にEJBメソッドを呼び出すだけです。
実行の前にもう一つ。
クラスパスの通っている場所に、「jndi.properties」というファイルを作成しましょう。
内容は以下のようにします。
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces java.naming.provider.url=localhost
これは、JNDI用の設定ファイルで
InitialContextのコンストラクタ内部で使用されます。
Clientクラスを実行します。
今までの作業がうまくいっていれば、実行は成功するはずです。
JBossのコンソール画面に「execute func.」のメッセージが出力されているでしょうか。