ステートレスセッション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 Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

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