Sun ONE ロゴ     前へ      目次      索引      次へ     
Sun ONE Application Server 7 サーバーアプリケーションの移行および再配備



付録 A

iBank アプリケーションの仕様

サンプルアプリケーションとして使用するのは「iBank」です。「iBank」は次の機能を持ち、基本的なオンラインバンキングサービスをシミュレートします。

  • オンラインバンキングサービスへのログオン
  • 詳細な個人情報および支店情報の表示と編集
  • 口座およびその決済後残高の一覧表示
  • 口座ごとの取引明細の表示
  • 口座間で資金のオンライン振替を可能にする振替サービス
  • 指定された元金と年利に基づいた複数年の複利予測

アプリケーションは MVC (Model-View-Controller) モデルに基づいて設計されています。

  • EJB はアプリケーションのビジネスおよびデータモデルコンポーネント定義に使用
  • Java Server Pages はプレゼンテーションロジックを処理し、ビューを表す
  • サーブレットはコントローラとして動作し、アプリケーションロジックの処理、ビジネスロジックコンポーネントの呼び出し、EJB 経由のビジネスデータへのアクセス (モデル)、Java Server Pages 表示のための処理データのディスパッチ (ビュー) を行う

アプリケーションコンポーネントのパッケージングと配備には、標準 J2EE メソッド、配備記述子のインクルード定義、およびアーカイブファイル内のアプリケーションコンポーネントのパッケージングが使用されます。

  • HTML ページ、画像、サーブレット、JSP、カスタムタグライブラリ、および必要に応じてサーバーサイド Java クラスを含み、Web アプリケーションで使用する WAR アーカイブファイル
  • 配備記述子、Bean クラスおよびインタフェース、スタブおよびスケルトンクラス、および必要に応じてその他のヘルパークラスを含み、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 で開発され、提供されている Application Assembly Tool を使用して Sun ONE Application Server 7 にパッケージされ、配備されます。このような方法で開発するため、1.1 EJB 開発用のサードパーティ IDE を Sun ONE Application Server 7 でテストできます。また、Sun ONE Application Server 6.5 用に開発された 1.1 EJB も Sun ONE Application Server 7 に移行し、テストできます。

Java 開発環境用の Sun ONE Studio は、iBank アプリケーションの EJB コンポーネントを Sun ONE Application Server に移行する場合にも使用されます。EJB 1.0 標準コードの EJB 1.1 標準向けの調整、CMP エンティティ Beans 用の O/R マッピング、アプリケーションの複数のモジュールの配備プロパティおよびパッケージングの設定などを行います。

Oracle 8i 8.1.6

データベースは Oracle 8i バージョン 8.1.6 で開発されており、アクセスに使用される JDBC ドライバは thin Oracle ドライバ (type 4) です。

データベーススキーマ

  • iBank データベーススキーマは次のビジネスルールに基づいて決定されます。
  • iBank は国内の大都市に支店を持つ
  • 支店は各地域のすべての顧客を管理する
  • 顧客は自分の居住地域の支店に 1 つ以上の口座を持つ
  • 顧客の口座は支店番号と口座番号で一意に識別され、これとは別に顧客はそれぞれ顧客番号を持つ。引落可能な現在の決済残高が口座に記録される
  • 口座の種類は当座預金や普通預金などの口座タイプで区別される
  • 各口座タイプには、支店や顧客に関わらず、このタイプのすべての口座に適用される金利や当座借越限度額などの細則が保存される
  • 顧客の口座に入金があった場合、または口座からの引き落としがあった場合、その取引は取引履歴と呼ばれるすべての取引のログに記録される
  • 取引履歴には支店コード、口座番号、記帳 (記録) 日付、取引タイプ識別コード、特定の取引に対する補足説明、および取引金額など、各取引についての詳細な情報が保存される
  • 現金預金、クレジットカード支払、口座間の送金など、様々な取引が取引タイプで識別される

これらのビジネスルールを図解したものが次のエンティティ関連図です。


この図は iBank アプリケーションのデータベーススキーマを示しています。

図 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

 

取引額

 

アプリケーション間の移動とロジック

   アプリケーション間の移動についての上位レベルビュー


この図は各 iBank アプリケーション間の移動についての上位レベルビューです。

   詳細なアプリケーションロジック

  • ログインの手順


この図は iBank アプリケーションのログインの手順を示しています。

  • 詳細情報の表示 / 編集


この図は iBank アプリケーションの「★view and edit★」画面です。

  • 口座一覧と取引履歴


この図は iBank アプリケーションの「★Account Summary and transaction history★」のページです。

  • 資金振替


この図は iBank アプリケーションの「★Fund Transfer★」のページです。

  • 利息計算


この図は iBank アプリケーションの「★Interest Calculation★」のページです。

アプリケーションコンポーネント

  • データコンポーネント

データベーススキーマの各表はエンティティ Bean としてカプセル化されます。

エンティティ Bean

 

データベーステーブル

 

Account

 

ACCOUNT 表

 

AccountType

 

ACCOUNT_TYPE 表

 

Branch

 

BRANCH 表

 

Customer

 

CUSTOMER 表

 

Transaction

 

TRANSACTION_HISTORY 表

 

TransactionType

 

TRANSACTION_TYPE 表

 

ほとんどすべてのエンティティ Beans がコンテナ管理による持続性 (CMP) を使用します。ただし Customer は例外で、Bean 管理による持続性 (BMP) を使用します。

現在アプリケーション側では AccountAccountTypeBranch、および Customer beans だけを使用しています。

  • ビジネスコンポーネント
  • アプリケーションのビジネスコンポーネントはセッション Beans でカプセル化されます。

BankTeller Bean はステートフルセッション Bean であり、顧客とシステムとの対話をすべてカプセル化します。BankTeller は特に次の目的で使用されます。

  • authCheck() メソッドによる顧客の認証
  • getAccountSummary() メソッドによる顧客の口座リスト取得
  • transferFunds() メソッドによる 1 人の顧客の口座間の資金振替

InterestCalculator Bean はステートレスセッション Bean であり、資金計算をカプセル化します。projectEarnings() メソッドによる複利計算で使用されます。

  • アプリケーションロジックコンポーネント (サーブレット)

コンポーネント名

 

目的

 

LoginServlet

 

BankTeller セッション Bean (authCheck() メソッド) によるユーザーの認証、HTTP セッションの生成、およびセッションのユーザー情報保存を行う。正常に認証された場合は要求をメインメニューページ (UserMenu.jsp) に転送する

 

CustomerProfileServlet

 

顧客および支店に関する詳細情報をそれぞれのエンティティ Beans から取得し、要求を「view/edit details」ページ (CustomerProfile.jsp) に転送する

 

UpdateCustomerDetailsServlet

 

CustomerProfile.jsp での顧客の詳細情報の変更が妥当かどうかをチェックし、妥当な場合は顧客のエンティティ Bean を更新して反映する。処理が正常に実行された場合は UpdatedDetails.jsp にリダイレクトし、入力が正しくない場合は DetailsUpdateFailed.jsp にリダイレクトする

 

ShowAccountSummaryServlet

 

顧客の口座リストを BankTeller セッション Bean から getAccountSummary() メソッドで取得し、要求を AccountSummary.jsp に転送して表示する

 

TransferFundsServlet

 

顧客の口座リストを BankTeller セッション Bean から getAccountSummary() メソッドで取得後、要求を TransferFunds.jsp に転送し、ユーザーによる転送設定を許可する

 

CheckTransferServlet

 

ユーザーが振替元および振替先として指定した口座をチェックし、入力した金額の振替ができるかどうかを確認する。BankTeller セッション Bean の transferFunds() メソッドを呼び出し、振替を行う。入力または処理エラーの場合は CheckTransferFailed.jsp にリダイレクトし、処理が正常に実行された場合は TransferSuccess.jsp にリダイレクトする

 

ProjectEarningsServlet

 

InterestCalc.jsp でユーザーが定義した利息計算パラメータを取得し、InterestCalculator ステートレスセッション Bean の projectEarnings() メソッドを呼び出して計算を行う。結果を ShowProjectionResults.jsp ページに転送して表示する。入力が無効な場合は BadIntCalcInput.jsp にリダイレクトする

 

  • プレゼンテーションロジックコンポーネント (JSP ページ)

コンポーネント名

 

目的

 

index.jsp

 

ログインページとしても使用されるアプリケーションの索引ページ

 

LoginError.jsp

 

入力されたユーザー証明書が無効な場合に表示されるログインエラーのページ。ログインできなかった理由を示すメッセージを表示する

 

Header.jsp

 

アプリケーションのすべての HTML ページに動的に追加されるページヘッダ

 

CheckSession.jsp

 

このページはアプリケーションのすべてのページに静的に追加され、ユーザーがログインしているかどうか、つまり有効な HTTP セッションを保有しているかどうかを確認する。有効なセッションを保有していない場合は、NotLoggedIn.jsp ページにリダイレクトされる

 

NotLoggedIn.jsp

 

最初にログインの手順を実行せずに、アプリケーションのページにアクセスしようとした場合にリダイレクトされるページ

 

UserMenu.jsp

 

正常にログインするとリダイレクトされる、メインのアプリケーションメニューページ。実行できるすべての操作に対するリンクを持つ

 

CustomerProfile.jsp

 

編集可能な顧客の詳細情報や支店の詳細情報が表示されるページ。このページで住所変更が可能

 

UpdatedDetails.jsp

 

詳細情報の正常更新後にリダイレクトされるページ

 

DetailsUpdateFailed.jsp

 

入力エラーのため詳細情報を更新できない場合にリダイレクトされるページ

 

AccountSummaryPage.jsp

 

ある顧客の持つ複数の口座を一覧表として表示するページ。口座番号、口座のタイプ、現在の残高を表示する。表の口座番号をクリックすると、その口座の詳細な取引履歴が表示される

 

ShowTransactionHistory.jsp

 

ある口座の詳細な取引履歴を表示するページ。カスタムタグライブラリを使用して表示を行う

 

TransferFunds.jsp

 

ある口座から別の口座への指定された金額の振替を設定するページ

 

TransferCheckFailed.jsp

 

選択された資金振替の設定が正しくない場合にリダイレクトされるページ

 

TransferSuccess.jsp

 

ユーザーが設定した送金が正常に実行された場合に表示されるページ。確認メッセージが表示される

 

InterestCalc.jsp

 

複利計算パラメータ入力用のページ

 

BadIntCalcInput.jsp

 

複利計算パラメータが正しくない場合にリダイレクトされるページ

 

ShowProjectionResults.jsp

 

利息計算が正常に実行された場合にリダイレクトされるページ。予測結果を表形式で表示する

 

Logout.jsp

 

アプリケーションの終了ページ。ユーザーに関連付けられたステートフルセッション Bean を削除し、HTTP セッションを無効化する

 

Error.jsp

 

予期しないエラーが発生するとリダイレクトされるページ。発生したエラーの詳細情報を表示する

 

移行時に発生する問題を考慮した最適な設計の選択

アプリケーションの設計については、特に「実際の」コンテキストで議論すべきものが多いのは確かですが、一般的な J2EE アプリケーションの移行で発生する可能性がある問題を、サンプルアプリケーションでできるだけ網羅することも考慮する必要があります。

このセクションでは J2EE アプリケーションの移行時に発生する可能性がある問題を検討し、移行時にこれらの問題をチェックするために iBank に用意されているコンポーネントについて説明します。

選択された移行を処理するための次のテクノロジーに焦点を当てて説明します。

サーブレット

  • iBank にはサーブレットがいくつか用意されており、以下についての潜在的な問題を特定できます。
  • サーブレット API の一般的な機能の使用
  • HTTP セッションおよび HTTP 要求の属性の保存または取得
  • サーブレットコンテキスト初期化パラメータの取得
  • ページのリダイレクト

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) では、次のテストが可能です。

  • 初期コンテキストの JNDI 検索
  • JDBC 経由のプールデータソースアクセス
  • BMP カスタム検索の定義 ("findByCustUsername()")

コンテナ管理による持続性 ("Account" および "Branch" Beans) では、次のテストが可能です。

  • 開発ツールを使用する、配備記述子内のオブジェクトとリレーショナル間の (O/R) マッピング
  • 複合主キーの使用 ("Account")
  • Account Bean とその findOrderedAccountsForCustomer() メソッドを使用するカスタム CMP 検索の定義。これによって配備記述子のクエリロジック宣言の差異を確認し、オブジェクト集計を返す場合の複雑な例を見ることができる

セッション Beans :

ステートレスセッション Beans。InterestCalculator では次のテストが可能です。

  • ステートレスセッションBean の使用と配備
  • 計算用ビジネスメソッドの呼び出し

ステートフルセッション Beans。BankTeller では次のテストが可能です。

  • JNDI と初期コンテキストを使用する様々なインタフェースの検索
  • JDBC によるデータベースクエリ
  • Bean methods の様々なトランザクション属性の使用
  • コンテナ境界設定トランザクションの使用
  • 呼び出し間の会話型ステートの維持
  • "getAccountSummary()" メソッドなど、エンティティ Beans のフロントエンドとして動作するビジネスメソッド

アプリケーションのパッケージ化

iBank は、次の J2EE 標準プロシージャをそれぞれ指定のファイルを使用してパッケージ化します。

  • Web アプリケーションモジュールには Web アプリケーションアーカイブファイルを使用し、EJB には EJB-JAR アーカイブを使用
  • エンタープライズアプリケーションアーカイブファイル (EAR ファイル) は、Web アプリケーションおよび EJB モジュールの最終パッケージ化で使用


前へ      目次      索引      次へ     
Copyright 2002 Sun Microsystems, Inc. All rights reserved.