minimize

事業拡大のため、新しい仲間を募集しています。
→詳しくはこちら

とりあえず最初のお約束としてこれでしょう。
ちなみに「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

実行の前にもう一つ。
クラスパスの通っている場所に、「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.」のメッセージが出力されているでしょうか。