SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

Java RTSによる金融アプリケーションの作成

リアルタイムアプリケーションによる取引

  • このエントリーをはてなブックマークに追加

デモの実行結果とチャート

 デモを実行するには、株価更新アプリケーション、取引エンジン(リアルタイムと非リアルタイムの2バージョン)、およびJavaFXベースのチャートアプリケーションが必要です(すべて本稿冒頭のリンクからダウンロード可能)。株価データを転送するために標準Java EE JMSプロバイダが必要です。このデモでは、SunのJava EE 5アプリケーションサーバに付属するものを使用しました。設定を行うため、JMSトピックの送り先をjms/QuoteUpdatesという名前で作成してください。

 OrderManagerの非リアルタイム版とリアルタイム版の違いを表示するため、チャート作成アプリケーションを実行します。このJavaFXアプリケーションでは、オープンソースのJFreeChartを使用します。

 (メモ:このチャートアプリケーションのJavaFXバージョンを作成していただいたSunのJim Clarke氏に感謝します。)

 図5に、非リアルタイムバージョンの取引エンジンからの出力を示します。多くの取引機会の喪失、金銭的損失、タイムクリティカルループの時間の揺れ(割り込みがあった証拠)、およびガベージコレクションイベント(グレーの垂直バー)があったことがわかります。全体として、これはサンプルの金融機関が資金を失ったことを意味します。

図5 オーダーブックの取引エンジン
図5 オーダーブックの取引エンジン

 リアルタイムバージョンからの出力は、かなり違います(図6を参照)。失われた取引機会や金銭的損失がないことに注意してください。タイムクリティカルなループの時間は一定です(割り込みがない証拠)。また、ガベージコレクションイベント(グレーの垂直バー)は発生していますが、これはクリティカルな処理に影響していません。

図6 オーダーブックの取引エンジン
図6 オーダーブックの取引エンジン

デモアプリケーションの実行

 デモを実行するには複数のステップが必要です。最初に実行するときは、準備に手間がかかります。最初に、Java RTS Version 2の評価版をダウンロードし、インストールします。Solaris 10が稼働するPC(x86/x64またはSPARCプロセッサ)にインストールする必要があります。やむをえない事情がある場合は、VMwareなどの仮想サーバソフトウェア上で稼働するSolaris 10にインストールすることもできますが、リアルタイムの動作は得られない可能性が大です。

 次に、JMSプロバイダを設定し、実行します(jms/QuoteUpdatesトピックが定義されている必要があります)。取引の通知はJMX MBean通知としてチャートコンポーネントに送信されるため、このコンポーネントをJMSプロバイダとしてアプリケーションサーバと一緒に実行するのが最適です。

 次に、以下のコマンドを使ってチャートアプリケーションを実行します(アプリケーションサーバを実行するサーバのIPアドレスは実際のものに置き換えます)。

java -jar dist/RTfx.jar com.sun.oss.trader.fx.Main -- 
-host <app server IP address>

 (チャートアプリケーションは任意のコンピュータで実行できます。取引システムがあるSolaris 10コンピュータ上で実行しなければならないわけではありません)。

 次に、取引エンジン(非リアルタイム版またはリアルタイム版)をSolarisのNetBeans内で開始します。Java RTSアプリケーションの開発は、任意のプラットフォームでNetBeansまたはEclipseを使って行えますが、SunからはSolaris上でJava RTSアプリケーションをデバッグするための専用NetBeansプラグインが提供されています。取引エンジンは、次のコマンドを使ってコマンドラインからでも実行できます。

  • リアルタイムバージョン(Solaris 10で実行)
  • <path to JavaRTS>/bin/java ?jar dist/RTTradingEngine.jar
    
  • 非リアルタイムバージョン(比較のためにSolaris 10で実行するが、必須ではない)
  • java ?jar dist/TradingEngine.jar
    

 株式情報の更新を開始するには、Quote Publisherアプリケーションのディレクトリに移動し、次のコマンドを実行します(JMSプロバイダのJARファイルがclasspathに設定されていることが前提)。

java ?jar dist/QuotePublisher.jar

 以上の順序でアプリケーションを開始すると、間もなく取引データが次々とチャートに表示されます。通常、非リアルタイムバージョンでは、ガベージコレクションイベントが損失(市場ティックの喪失)と同時に起こることが、取引がチャート化されるにつれてわかります。チャートが負の領域に急降下し、ラインが赤に変わってそのことを示します。リアルタイムバージョンの場合、取引は直線を形成し、市場ティックの喪失は見られません。

 最も重要なことは、リアルタイムバージョンでもガベージコレクションが発生しているという事実です。しかし、このイベントはタイムクリティカルな取引コードに割り込みません。Java RTSによって、リアルタイムメソッドの処理時間が変動しないことが保証されます。

リアルタイムアプリケーションを比較的簡単に実現

 このサンプルアプリケーションは、Javaでのリアルタイムアプリケーションの開発が比較的簡単なことを証明しています。事実、最小限のコードを修正するだけで、取引エンジンをリアルタイム対応にすることができました。

 ただし、どのリアルタイムアプリケーションにも共通することですが、独自のリアルタイムJavaアプリケーションを設計するには、さらに多くの作業が必要です。重要なイベントが適切な優先順位で処理されるように設定しなければならないからです。とはいえ、Javaコードの書き方が大きく変わることはありません。リアルタイム動作の部分はJava RTSに任せておけばよいからです。

次のページ
補足説明

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Eric Bruno(Eric Bruno)

ニューヨークを拠点とするコンサルタント。大規模なWebアプリケーション、データベースシステム、リアルタイムトランザクションシステムをJavaとC++で開発した経験を持つ。詳しくは個人ページhttp://www.ericbruno.com/を参照。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/1866 2007/11/22 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング