付録 A
iBank アプリケーションの仕様
この章では、移行例として iBank アプリケーションを使用します。このアプリケーションは、次の機能を持つ基本的なオンラインバンキングサービスをシミュレートします。
- オンラインバンキングサービスへのログオン
- 個人データおよび支店データの表示および編集
- 清算勘定を示す預金口座の概要表示
- 個々のトランザクション履歴を表示するために、口座ごとにドリルダウンする機能
- 口座から口座へ資金をオンラインで移動できる振替サービス
- 一定の元本および年利回り率で複数年に及ぶ複利配当額の見積り
アプリケーションは MVC (Model-View-Controller) モデルに基づいて設計されています。
- EJB はアプリケーションのビジネスおよびデータモデルコンポーネント定義に使用
- Java Server Pages はプレゼンテーションロジックを処理し、ビューを表す
- サーブレットはコントローラとして動作し、アプリケーションロジックの処理、ビジネスロジックコンポーネントの呼び出し、EJB 経由のビジネスデータへのアクセス (モデル)、Java Server Pages 表示のための処理データのディスパッチ (ビュー) を行う
アプリケーションコンポーネントのアセンブルと配備には、標準 J2EE メソッドを使用します。これには、配備記述子の定義とアプリケーションコンポーネントのアーカイブファイルへのアセンブルが含まれます。
- HTML ページ、画像、サーブレット、JSP、カスタムタグライブラリ、および必要に応じてサーバーサイド Java クラスを含み、Web アプリケーションで使用する WAR アーカイブファイル
- 配備記述子、Bean クラスおよびインタフェース、スタブおよびスケルトンクラス、および必要に応じてその他のヘルパークラスを含み、1 つ以上の EJB のアセンブルで使用する EJB-JAR アーカイブファイル
- Web アプリケーションモジュールおよびアプリケーションで使用される EJB モジュールを含み、エンタープライズアプリケーションモジュールのパッケージングで使用する EAR アーカイブファイル
標準の J2EE アセンブルメソッドを使用すると、Sun ONE Application Server 6.0/6.5 と Sun ONE Application Server 7 間の相違やそれに伴う問題点を指摘するのに役立ちます。
アプリケーション開発用ツール
Sun ONE Studio Enterprise Edition for Java、リリース 4.0
Sun ONE Application Server 7 は EJB 1.0 および EJB 1.1 標準をサポートしています。したがって iBank アプリケーションの他の EJB (2 セッション EJB および BMP エンティティ Bean) は Sun ONE Studio for Java で開発され、asadmin deploy を使用して Sun ONE Application Server 7 にパッケージされ、配備されます。これにより、Sun ONE Application Server 7 で1.1 EJB 開発用の他社製の IDE の使用をテストする際にも役立ちます。さらに、Sun ONE Application Server 6.5 で開発された 1.1 EJB を Sun ONE Application Server 7 に移行する際にも役立ちます。
Sun ONE Studio for Java 開発環境は、iBank アプリケーションの EJB コンポーネントを Sun ONE Application Server に移行する場合にも使用されます。EJB 1.0 標準から EJB 1.1 へのコードの移行、CMP エンティティ Beans 用の O/R マッピング、アプリケーションの複数のモジュールの配備プロパティおよびパッケージングの設定などを行います。
Oracle 8i 8.1.6
データベーススキーマ
iBank データベーススキーマは次のビジネスルールに基づいて決定されます。
- iBank 企業は主要都市に支店を持つ
- 支店は各地域のすべての顧客を管理する
- 顧客は自分の居住地域の支店に 1 つ以上の口座を持つ
- 顧客の口座は支店番号と口座番号で一意に識別され、これとは別に顧客はそれぞれ顧客番号を持つ。引落可能な現在の決済残高が口座に記録される
- 口座の種類は当座預金や普通預金などの口座タイプで区別される
- 各口座タイプには、支店や顧客に関わらず、このタイプのすべての口座に適用される金利や当座借越限度額などの細則が保存される
- 顧客の口座に入金があった場合、または口座からの引き落としがあった場合、その取引は取引履歴と呼ばれるすべての取引のログに記録される
- 取引履歴には支店コード、口座番号、記帳 (記録) 日付、取引タイプ識別コード、特定の取引に対する補足説明、および取引金額など、各取引についての詳細な情報が保存される
- 現金預金、クレジットカード支払、口座間の送金など、様々な取引が取引タイプで識別される
これらのビジネスルールを図解したものが次のエンティティ関連図です。
図 A-1 データベーススキーマ
次に示すのはデータベースモデルから作成された表定義です。主キー列は太字、外部キー列は斜体で示されます。
|
BRANCH
|
|
BRANCH_CODE
|
CHAR(4)
|
NOT NULL
|
支店を識別する 4 桁のコード
|
|
BRANCH_NAME
|
VARCHAR(40)
|
NOT NULL
|
支店名
|
|
BRANCH_ADDRESS1
|
VARCHAR(60)
|
NOT NULL
|
支店の住所、1 行目
|
|
BRANCH_ADDRESS2
|
VARCHAR(60)
|
|
支店の住所、2 行目
|
|
BRANCH_CITY
|
VARCHAR(30)
|
NOT NULL
|
支店の所在都市
|
|
BRANCH_ZIP
|
VARCHAR(10)
|
NOT NULL
|
支店の郵便番号
|
|
BRANCH_STATE
|
CHAR(2)
|
NOT NULL
|
支店の住所、都市名略称
|
|
CUSTOMER
|
|
CUST_NO
|
INT
|
NOT NULL
|
iBank 顧客番号 (グローバル)
|
|
BRANCH_CODE
|
CHAR(4)
|
NOT NULL
|
この顧客が口座を持つ支店
|
|
CUST_USERNAME
|
VARCHAR(16)
|
NOT NULL
|
顧客のログインユーザー名
|
|
CUST_PASSWORD
|
VARCHAR(10)
|
NOT NULL
|
顧客のログインパスワード
|
|
CUST_EMAIL
|
VARCHAR(40)
|
|
顧客の電子メールアドレス
|
|
CUST_TITLE
|
VARCHAR(3)
|
NOT NULL
|
顧客の称号
|
|
CUST_GIVENNAMES
|
VARCHAR(40)
|
NOT NULL
|
顧客の名
|
|
CUST_SURNAME
|
VARCHAR(40)
|
NOT NULL
|
顧客の姓
|
|
CUST_ADDRESS1
|
VARCHAR(60)
|
NOT NULL
|
顧客の住所、1 行目
|
|
CUST_ADDRESS2
|
VARCHAR(60)
|
|
顧客の住所、2 行目
|
|
CUST_CITY
|
VARCHAR(30)
|
NOT NULL
|
顧客の居住都市
|
|
CUST_ZIP
|
VARCHAR(10)
|
NOT NULL
|
顧客の郵便番号
|
|
CUST_STATE
|
CHAR(2)
|
NOT NULL
|
顧客の住所、都市名略称
|
|
ACCOUNT_TYPE
|
|
ACCTYPE_ID
|
CHAR(3)
|
NOT NULL
|
3 桁の口座タイプコード
|
|
ACCTYPE_DESC
|
VARCHAR(30)
|
NOT NULL
|
口座タイプの説明
|
|
ACCTYPE_INTERESTRATE
|
DECIMAL(4.2)
|
DEFAULT 0.0
|
年利
|
|
ACCOUNT
|
|
BRANCH_CODE
|
CHAR(4)
|
NOT NULL
|
支店コード (主キー構成要素 1)
|
|
ACC_NO
|
CHAR(8)
|
NOT NULL
|
口座番号 (主キー構成要素 2)
|
|
CUST_NO
|
INT
|
NOT NULL
|
口座名義人
|
|
ACCTYPE_ID
|
CHAR(3)
|
NOT NULL
|
口座タイプ。ACCOUNT_TYPE を参照
|
|
ACC_BALANCE
|
DECIMAL(10.2)
|
DEFAULT 0.0
|
決済後の利用可能残高
|
|
TRANSACTION_TYPE
|
|
TRANSTYPE_ID
|
CHAR(4)
|
NOT NULL
|
4 桁の取引タイプコード
|
|
TRANSTYPE_DESC
|
VARCHAR(40)
|
NOT NULL
|
取引コードの説明
|
|
TRANSACTION_HISTORY
|
|
TRANS_ID
|
LONGINT
|
NOT NULL
|
全取引のシリアル番号
|
|
BRANCH_CODE
|
CHAR(4)
|
NOT NULL
|
ACCOUNT 参照キー構成要素 1
|
|
ACC_NO
|
CHAR(8)
|
NOT NULL
|
ACCOUNT 参照キー構成要素 2
|
|
TRANSTYPE_ID
|
CHAR(4)
|
NOT NULL
|
TRANSACTION_TYPE を参照する項目
|
|
TRANS_POSTDATE
|
TIMESTAMP
|
NOT NULL
|
取引の記帳日付および時刻
|
|
TRANS_DESC
|
VARCHAR(40)
|
|
取引に関する追記事項
|
|
TRANS_AMOUNT
|
DECIMAL(10.2)
|
NOT NULL
|
取引額
|
アプリケーション間の移動とロジック
アプリケーション間の移動についての上位レベルビュー
図 A-2 アプリケーション間の移動とロジック
- ログインのプロセス
図 A-3 ログインのプロセス

- 詳細情報の表示 / 編集
図 A-4 詳細情報の表示 / 編集

- 口座一覧と取引履歴
図 A-5 口座一覧と取引履歴

- 資金振替
図 A-6 資金振替

- 利息計算
図 A-7 利息計算

アプリケーションコンポーネント
データベーススキーマの各表はエンティティ Bean としてカプセル化されます。
|
エンティティ Bean
|
データベーステーブル
|
|
Account
|
ACCOUNT 表
|
|
AccountType
|
ACCOUNT_TYPE 表
|
|
Branch
|
BRANCH 表
|
|
Customer
|
CUSTOMER 表
|
|
Transaction
|
TRANSACTION_HISTORY 表
|
|
TransactionType
|
TRANSACTION_TYPE 表
|
ほとんどすべてのエンティティ Beans がコンテナ管理による持続性 (CMP) を使用します。ただし Customer は例外で、Bean 管理による持続性 (BMP) を使用します。
現在アプリケーション側では Account、AccountType、Branch、および Customer beans だけを使用しています。
アプリケーションのビジネスコンポーネントはセッション Beans でカプセル化されます。
BankTeller Bean はステートフルセッション Bean であり、顧客とシステムとの対話をすべてカプセル化します。BankTeller は特に次の目的で使用されます。
- authCheck() メソッドによる顧客の認証
- getAccountSummary() メソッドによる顧客の口座リスト取得
- transferFunds() メソッドによる 1 人の顧客の口座間の資金振替
InterestCalculator Bean はステートレスセッション Bean であり、資金計算をカプセル化します。projectEarnings() メソッドによる複利計算で使用されます。
移行時に発生する問題を考慮した最適な設計の選択
アプリケーションの設計については、特に「実際の」コンテキストで議論すべきものが多いのは確かですが、一般的な J2EE アプリケーションの移行で発生する可能性がある問題を、サンプルアプリケーションでできるだけ網羅することも考慮する必要があります。
このセクションでは J2EE アプリケーションの移行時に発生する可能性がある問題を検討し、移行時にこれらの問題をチェックするために iBank に用意されているコンポーネントについて説明します。
選択された移行を処理するための次のテクノロジーに焦点を当てて説明します。
サーブレット
iBank アプリケーションにはサーブレットがいくつか用意されており、以下についての潜在的な問題を特定できます。
Java Server Pages
JSP の仕様に関しては次の面を重視しています。
- JSP 宣言、スクリプトレット、式、およびコメントの使用
- 静的なインクルード (<%@ include file="…" %>)。特に CheckSession.jsp ファイルの各ページへの追加でテスト
- 動的なインクルード (<jsp:include page=… />)。各ページへの Header.jsp の動的なインクルードに対応
- カスタムタグライブラリの使用。カスタムタグライブラリを ShowTransactionHistory.jsp で使用
- JSP 例外処理のエラーページ。アプリケーションエラーリダイレクト用の Error.jsp ページ
JDBC
iBank アプリケーションは接続プールおよびデータソース経由でデータベースにアクセスします。BMP エンティティ Bean、BankTeller セッション Bean、カスタムタグライブラリでアクセスロジックをプログラミングすることもでき、CMP エンティティ Beans でアクセス方法を宣言することもできます。
Enterprise Java Beans (EJB)
iBank アプリケーションでは様々な Enterprise Java Beans を使用しています。
エンティティ Beans :
Bean 管理による持続性 (Customer Bean) では、次のテストが可能です。
- 開発ツールを使用する、配備記述子内のオブジェクトとリレーショナル間の (O/R) マッピング
- 複合主キーの使用 ("Account")
- "Account" Bean とその findOrderedAccountsForCustomer() メソッドを使用するカスタム CMP 検索の定義。これによって配備記述子のクエリロジック宣言の差異を確認し、オブジェクト集計を返す場合の複雑な例を見ることができる
- ステートレスセッション Bean の使用と配備
- 計算用ビジネスメソッドの呼び出し
- JNDI と初期コンテキストを使用する様々なインタフェースの検索
- JDBC によるデータベースクエリ
- Bean methods の様々なトランザクション属性の使用
- コンテナ境界設定トランザクションの使用
- 呼び出し間の会話型ステートの維持
- "getAccountSummary()" メソッドなど、エンティティ Beans のフロントエンドとして動作するビジネスメソッド
アプリケーションアセンブリ
- Web アプリケーションモジュールには Web アプリケーションアーカイブファイルを使用し、EJB には EJB-JAR アーカイブを使用
- エンタープライズアプリケーションアーカイブファイル (EAR ファイル) は、Web アプリケーションおよび EJB モジュールの最終パッケージ化で使用