PR

ステートレスセッションBeanでの実装

2007年10月12日(金)
田澤 孝之

銀行の入出金処理

ここでは銀行処理をシンプルに考えます。利用者は口座を作成し、口座に対して入金処理と出金処理を行います。この銀行処理のイメージを図2に示します。


銀行処理のイメージ
図2:銀行処理のイメージ

OOAD(Object-Oriented Analysis&Design:オブジェクト指向分析/設計)を実施し、最終的に設計クラスができあがります。図3にクラス図を示します。



銀行処理クラス図
図3:銀行処理クラス図
(画像をクリックすると別ウィンドウに拡大図を表示します)

クラス 用途
BankControl 銀行処理インタフェース
BankControlBean 銀行処理実装クラス
Account 口座クラス
表2:銀行処理クラスの用途

このクラスをそのままPOJOで記述してください。UMLツールからスケルトンコードを生成してもかまいません。実はこれでEJBの実装の半分は完成しています。Javaプログラム設計のベストプラクティスであるインタフェースベースのクラス設計を適用し、インタフェース「BankControl」を定義して、それに対する実装クラスを作成します。

インターフェース BankControl.java

public interface BankControl {

   public Account deposit(Account account, int amount);
   public Account withdraw(Account account, int amount);

}

次に入金(1)と出金(2)の2つのビジネスメソッドをもつコントロールクラスBankControlBeanをPOJOで実装します。

実装クラスBankControlBean.java

public class BankControlBean implements BankControl {

   public BankControlBean() {
   }

   public Account deposit(Account account, int amount) {        ←(1)
      account.setBalance(account.getBalance() + amount);
      return account;
   }

   public Account withdraw(Account account, int amount) {       ←(2)
      account.setBalance(account.getBalance() - amount);
      return account;
   }

}

口座であるAccountは一般的にいわれるJavaBeansです。これは通常のJavaのクラスで、3つの属性(1)を持ちそれぞれの属性に対して設定と取得のメソッド(2)を持ちます。

口座クラス Account.java

import java.io.Serializable;

public class Account implements Serializable {

   private int id;      ←(1)
   private int balance; ←(1)
   private String name; ←(1)

   public Account(int id, int balance, String name) {
      this.id = id;
      this.balance = balance;
      this.name = name;
   }

   public int getBalance() {             ←(2)
      return balance;
   }
   public void setBalance(int balance) { ←(2)
      this.balance = balance;
   }

   public int getId() {                  ←(2)
      return id;
   }
   public void setId(int id) {           ←(2)
      this.id = id;
   }

   public String getName() {             ←(2)
   return name;
   }
   public void setName(String name) {    ←(2)
   this.name = name;
   }
}

最後に、このビジネスロジックを利用するクライアントコードは以下のようになります。

EJBクライアント BankClient.java

public class BankClient {

public static void main(String[] args) {

BankControl bankControl = new BankControl ();

Account accountA = new Account(1000, 0, "ttazawa");
Account accountB = new Account(2000, 100000, "eyazawa");

accountA = bankControl.deposit(accountA, 15000);

System.out.println(accountA.getName() +":"+ accountA.getBalance());
System.out.println(accountB.getName() +":"+ accountB.getBalance());

accountA = bankControl.withdraw(accountA, 10000);
accountB = bankControl.deposit(accountB, 10000);

System.out.println(accountA.getName() +":"+ accountA.getBalance());
System.out.println(accountB.getName() +":"+ accountB.getBalance());

  }

以上がPOJOでの実装です。

レッドハット株式会社

JBossグループ SE部 マネージャー
1989年より日立製作所にてIT業界に身をおく。1998年より日本BEAシステムズにてTPモニタ、サーバサイドJavaにフォーカス。特にJ2EE に特化しプリセールス、インストラクタ、SOAコンサルタント業務に従事。2006年よりファストサーチ&トランスファで企業向けサーチソリュー ションコンサルタントを経て、2007年よりレッドハットにてJBossの販売提案と導入技術支援を行う。「EJB 2.0 徹底攻略」(技術評論社)など著書、共著多数。

Think IT会員サービス無料登録受付中

Think ITでは、より付加価値の高いコンテンツを会員サービスとして提供しています。会員登録を済ませてThink ITのWebサイトにログインすることでさまざまな限定特典を入手できるようになります。

Think IT会員サービスの概要とメリットをチェック

他にもこの記事が読まれています