ステートレスセッション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

Antビルドファイル build.xml
(画像をクリックすると別ウィンドウに拡大図を表示します)

このビルドファイルを用いてmainターゲット(1)を実行するとbuild/jarsディレクトリにejb3bankapp.jarが作成されます。なお、コンパイル時のクラスパスにはサーバディレクトリのlibディレクトリにあるすべてのJARファイルを指定してください。



>ant main

   生成されたejb3bankapp.jarを展開すると以下のようになります。



EJB JARファイルのディレクトリ構成
図4:EJB JARファイルのディレクトリ構成

次にdeployターゲット(2)を実行するとJBoss EAPのdeployディレクトリにejb3bankapp.jarがコピーされ自動的にデプロイされます。



>ant deploy

JBoss EAPのデプロイはサーバディレクトリにあるdeployディレクトリにJARファイルをコピーするのみです。デプロイが正常に完了すると、コンソールに以下のメッセージが表示されます。


デプロイメッセージ
図5:デプロイメッセージ
(画像をクリックすると別ウィンドウに拡大図を表示します)

次回はデプロイが完了したEJBにリモートクライアントからアクセスしてみます。さらにステートフルセッションBeanも利用してみます。

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30