ステートレスセッションBeanでの実装
ステートレスセッションBeanでの実装
さて、POJOで実装した銀行処理をEJBにしてみましょう。とはいっても、ここで構える必要はもうありません。
まずPOJOで記述したインターフェースBankControlに、アノテーション@Remoteをクラスに定義(1)します。このEJBはEJBクライアントから呼び出すためにリモートインターフェースが必要になります。もしWebコンテナからのみ利用する場合は@Localと記述することができ ます。EJB仕様ではこのインターフェースを特にビジネスインターフェースと呼びます。
インターフェース BankControl.java
import javax.ejb.Remote;
@Remote ←(1)
public interface BankControl {
public Account deposit(Account account, int amount);
public Account withdraw(Account account, int amount);
}
次にEJBの実装クラスBankControlBeanです。このEJBは状態を保持しない設計とするので、ステートレスセッションBeanを適用します。したがって、@StatelessアノテーションをBankControlBeanクラスに定義(1)します。
実装クラスBankControlBean.java
import javax.ejb.Stateless;
@Stateless ←(1)
public class BankControlBean implements BankControl {
public BankControlBean() {
}
public Account deposit(Account account, int amount) {
account.setBalance(account.getBalance() + amount);
return account;
}
public Account withdraw(Account account, int amount) {
account.setBalance(account.getBalance() - amount);
return account;
}
}
これでEJBは完成です。
このように、EJB 3は通常のJavaクラス(POJO)を実装することとさほど変わりません。EJB 1.x、EJB 2.xで存在していたホームインターフェースやデプロイメント記述子はもう必要ないのです。
EJB 3のビルドとJBoss EAPへのデプロイ
ここではEJBをJBoss Enterprise Application Platform 4.2.0(以下、JBoss EAP)にEJBをデプロイしてみます。JBoss EAPのインストールについては以下の事を参考にしてください。
作成したEJB 3はコンパイル後に、仕様に基づきパッケージ化する必要があります。しかし、あまり難しく考えることはありません。javacコマンドを利用して作成した クラスをコンパイルし、jarコマンドを利用してJARファイルにアーカイブするのみです。一般的にこのプロセスはAntを利用するのがよいでしょう。
以下にビルドファイルの例を示します。
Antビルドファイル build.xml
このビルドファイルを用いてmainターゲット(1)を実行するとbuild/jarsディレクトリにejb3bankapp.jarが作成されます。なお、コンパイル時のクラスパスにはサーバディレクトリのlibディレクトリにあるすべてのJARファイルを指定してください。
>ant main
生成されたejb3bankapp.jarを展開すると以下のようになります。
次にdeployターゲット(2)を実行するとJBoss EAPのdeployディレクトリにejb3bankapp.jarがコピーされ自動的にデプロイされます。
>ant deploy
JBoss EAPのデプロイはサーバディレクトリにあるdeployディレクトリにJARファイルをコピーするのみです。デプロイが正常に完了すると、コンソールに以下のメッセージが表示されます。
次回はデプロイが完了したEJBにリモートクライアントからアクセスしてみます。さらにステートフルセッションBeanも利用してみます。