HomeDocumentation > 9. サンプル・アプリケーション > 9.3. DayTrader
{scrollbar}

Apache DayTrader ベンチマークサンプル

DayTrader とは

DayTrader は株式のオンライン・トレード・システムを基にしたベンチマーク・アプリケーションです。元々は IBM によって開発された Trade Performance Benchmark Sample で、2005年に Apache Geronimo コミュニティに寄贈されました。DayTrader には、ログインやポートフォリオの表示、株価情報の検索、株の売買の機能があります。Mercury LoadRunner や Rational Performance Tester、Apache JMeter といった Web の負荷ツールで DayTrader に現実世界に近い負荷をかけることで、様々なベンダから提供されている Java Platform, Enterprise Edition (Java EE) アプリケーションサーバの性能の計測や比較をすることが出来ます。負荷の測定に加え、DayTrader には Java EE のコンポーネントやデザインパターンの機能や性能のテストに使えるような、基本的な機能が備わっています。

アプリケーション・アーキテクチャ

DayTrader は Java EE の中核となる技術によって構成されています。それは、プレゼンテーション層のためのサーブレットや JavaServer Pages(JSP)、バックエンドのビジネス層や永続化層のための Java database connectivity(JDBC)、Java Message Service(JMS)、Enterprise JavaBean(EJB)、Message-Driven Bean(MDB) といった技術です。以下の図は、DayTrader のアーキテクチャの概要を表しています。

プレゼンテーション層

プレゼンテーション層は、いくつかのサーブレットと JSP からなり、ほぼ Model-View-Controller (MVC) パターンに沿っています。TradeAppServlet はクライアントからのリクエストを処理する中心的なサーブレットであり、目的のビジネスロジックを呼び出し、適切な JSP に要求を転送します。それ以外のいくつかのサーブレットと JSP は、DayTrader のランタイムオプションの構成やサポート用データベースのメンテナンスに利用します。

ビジネス層と永続化層

ビジネス層と永続化層は、DayTrader の大部分を構成します。TradeServices インターフェースは、業務処理の中心部分を定義します。例えば、register や login、getHoldings、buy、completeOrder、logout などです。DayTrader は3つの異なる実装を提供しており、これらはよく使われる3つの Java EE デザインパターンに対応しています。これらの実装について、以下で説明します。ユーザは、構成用のページで Runtime Mode を変更することで、これらを切り替えられれます。

実装

詳細

TradeDirect
(デフォルト)

Pattern: Servlet-to-JDBC
Runtime Mode: Direct

TradeDirect クラスは、サポートするデータベースに対するCRUD(create、read、update、delete)操作を、JDBCのコードを使って直接行います。データベース接続やコミット、ロールバックの処理はコード内で手動で管理されます。2フェーズコミットを行う場合は、JTAのユーザトランザクションを使って手動で行います。

TradeJDBC

Pattern: Servlet-to-SessionBean-to-JDBC
Runtime Mode: Session Direct

TradeJDBC ステートレスセッションビーンは、TradeDirectクラスのラッパーです。TradeDirect がJDBCの処理や接続を処理するのに対し、セッションビーンは全てのトランザクション処理を制御します。この実装はJava EE のデザインパターンとして非常に一般的なものです。

TradeBean

Pattern: Servlet-to-SessionBean-to-EntityBean
Runtime Mode: EJB

TradeBean ステートレスセッションビーンは Caontainer Managed Persistence (CMP) エンティティビーンを使ってビジネスオブジェクトを処理します。これらのオブジェクトの状態は、アプリケーションサーバのEJBコンテナによって完全に管理されます。

ビジネス層のその他のコンポーネントとしては、Java Messaging Service (JMS) があります。DayTrader において、JMS は2つの目的で使われています。非同期での株式の売買と株価の更新処理です。これらの処理について、以下の表で詳細を説明します。

処理

詳細

非同期の注文処理

株の売買の操作が行われる際、クライアント接続から TradeBroker JMS キューに注文の要求が投入されます。TradeBrokerMDB は、キューからメッセージを受信し、売買処理を行います。

株価の更新

株が売買されると、株価が更新されて、それが JMS のトピックに配信されます。TradeStreamerMDB は価格更新のメッセージを処理しますが、それ以上のことは行いません。DayTrader に含まれている TradeStreamer Java EE クライアントを使うことで、株価の動きをリアルタイムに表示することが出来ます。

ビジネスオブジェクトとリレーションシップ

次の図は、データベースのスキーマとビジネスオブジェクトとの関係を表しています。Container managed relationship (CMR) についても、表されています。

Create diagram and add here

ビジネス処理(TradeServices で定義)

前述のように、DayTrader アプリケーションの主な機能は全て、TradeServices インターフェースで定義されます。これらの機能の詳細を、次の表で説明します。

処理

詳細

login

 

logout

 

buy

 

sell

 

getMarketSummary

 

queueOrder

 

completeOrder

 

cancelOrder

 

orderCompleted

getOrders

 

getClosedOrders

 

createQuote

 

getQuote

 

getAllQuotes

 

updateQuotePriceVolume

 

getHoldings

 

getHolding

 

getAccountData

 

getAccountProfileData

 

updateAccountProfile

 

register

 

resetTrade

 

ユーザインターフェースの操作

DayTrader のJSPとサーブレットによるWebインターフェースで、たいていの株取引とポートフォリオ管理用のアプリケーションに備わっている基本的な操作が行えます。それらの操作を契機に、ビジネスロジックと永続化層内の対応する処理が起動されます。次の表は、それぞれのユーザの操作とそれに対する業務処理をまとめたものです。

UIの操作

ビジネス処理のフロー

Register 登録

 

Login ログイン

 

View Account アカウントの表示

 

View Account Profile アカウントプロファイルの表示

Update Account Profile アカウントプロファイルの更新

 

View Portfolio ポートフォリオの表示

 

Sell Holding 売却

 

View Quotes 株の表示

 

Buy Stock 購入

 

Logout ログアウト

 

ソースの入手方法

http://svn.apache.org/repos/asf/geronimo/daytrader/trunk