RS

RS(Resource Server)は、SMFv2システムにおいて

  • データベースアクセスレイヤ
  • ユーザインターフェイスの提供
  • 周辺サーバとの連携における中央サーバ

としての役割を持っており、いわばSMFv2システムの中核となるサーバです。

本章では、このRSについての概要を解説します。

RSの構成

RSの一般的な構成は以下の図のようになります。

../_images/rs_arch.png

RSの中心部分はJavaのライブラリ(rs-api.jar)としてSDKに含まれています。 このJavaライブラリを用いてWebサイトなどのUIを開発することが可能です。 必要に応じてTomcatなどのJ2EE Servlet Containerに載せて利用します。 このJavaライブラリが提供するAPIはWebアプリケーションなどのUI用のものと周辺サーバーとの通信用の二種類に大別されます。

Java実行環境について

RS-APIライブラリは、Oracle JDK 6上で開発されています。 このため、RSではJRE 6もしくはJDK 6をインストールし、正常に実行されるようにする必要があります。

なお、SMF SDKではJava実行環境の構築に関する詳細については触れません。 Oracle社のWebサイトなどを参考にセットアップを行ってください。

RS-APIライブラリが依存する非標準ライブラリ

RS-APIライブラリでは標準でJDKに付属しない外部ライブラリに依存しています。 外部ライブラリの詳細はrs-api.zipを展開して確認してください。

これらのライブラリについては、SMF SDK にあらかじめライブラリ本体のJARファイルが含まれているので、それらをそのまま利用することもできます。 ただし、各ライブラリに対するメンテナンスはSMF SDKでは行われませんのでご了承ください。 これらのライブラリのセキュリティアップデート等のメンテナンスはRSベンダで独自に行っていただくようお願いします。

またデータベースへの接続のために利用するデータベース用のJDBCドライバが必要です。 現在SMF SDKでサポートされているデータベースとドライバの組み合わせは以下のようになります。

データベース JDBCドライバ
MySQL 5.0 MySQL Connector/J 5.1.X

これらのドライバについてはSMF SDKに含まれていません。 利用するデータベースに合わせて用意をお願いします。

APIアーキテクチャ

RS-APIライブラリのクラス群は二つのグループに分かれています。

../_images/rs_api.png

Generic RS-APIはデータベースへのアクセスレイヤとして機能し、RSで扱うデータモデルが定義されています。 基本的に扱うモデルごとに〜API(Application Program Interface)という名前のクラスと〜DTO(Data Transfer Object)というクラスが存在しています。 例えばServiceAdapterAPIとServiceAdapterDTOがそれらにあたります。 このDTOクラスを次の図のようにAPIクラスのメソッドを用いてやり取りすることでDTOに含まれる情報をデータベースに保存したり取り出したりすることが出来ます。 データベースとのやり取りやARMSプロトコル自体は隠蔽され、Webアプリケーションの構築を主眼においたAPIになってます。

../_images/rs_api_flow.png

XML-RPC RS-APIはApache XML-RPC 3.0用のハンドラクラスとなっています。 Servlet APIやSocket APIなどを使いこのApache XML-RPCとXML-RPC RS-APIを実行環境にあわせてサーバ環境にインストールすることによって他サーバとの連携が行われARMSプロトコルや監視情報に関する処理が行われます。 UIレイヤの実装を柔軟にするためハンドラクラスのみ用意されています。 このハンドラに入出力されるデータをJavaコードにより直接参照することは避けてください。 周辺サーバから参照できるURL上にXML-RPCのエンドポイントとして展開します。

システムとデータモデル

DTOにはサービスアダプタ、各サーバ、エンドユーザなどといったデータモデルがそのままマッピングされたものがあります。 ここではそれらのDTOの相関を図示します。

../_images/rs_dto.png

各APIやDTOの役割についてはRS-APIのJavadocを参照してください。

(CD-ROMドライブ):\RS\rs-api-X.XX.zip
(展開したrs-api-X.XX)\doc/index.html

トランザクションとロック

Generic RS-APIで扱うDTOの一部には通常のプロパティの他に世代番号(version number)が含まれています。 この数値によりoptimistic lockを実現しています。 この世代番号はデータベースに保存されたものに割り当てられ、更新が起こる度にこの世代番号も違う番号となります。

RS-APIレイヤまたはUIレイヤの両方でデータ更新の競合を検知することが可能です。 RS-APIレイヤは例外として検知され、UIレイヤでは世代番号の比較により検知可能です。

なおデータベースレベルのトランザクションとロックはAPIクラスの1メソッド内ごとに隠蔽されています。

コンフィグ処理のメカニズム

APIではUI作成者が利用しやすい構造化されたコンフィグと実際にサービスアダプタに渡される生のコンフィグを分けて持つことが出来ます。 どちらもデータベース内部ではバイト列ですが、前者はJavaオブジェクトとしてUIに取り出され、後者はそのままバイト列としてサービスアダプタに渡されます。

これらのコンフィグ同士の相互変換はUI実装者が指定したジェネレータ(Javaインタフェースをimplementする)によって個々のコンフィグごとに行われます。

リクエスト処理のメカニズム

サービスアダプタへのメッセージの発行はRS-APIでは「リクエスト」として処理されます。 リクエストの種類はARMSのPushメッセージの種類と1対1で対応しています。

このリクエストのサーバ/サービスアダプタ間の処理仕方には以下の3種類があります。

完全同期処理

サービスアダプタにリクエスト投入処理を行い結果が返ってくるまでAPIコールがプロックされます。 この完全同期処理を行えるリクエストの種類は限られています。 主にデバッグやトラブルシュート目的で利用します。
../_images/rs_push_sync.png

投入同期処理

サービスアダプタにリクエスト投入処理を行うところまでAPIコールがブロックされます。 結果は待たずに処理を戻すのでUIレイヤではRequestIDを元に結果が取得されたかをRS-APIに対してポーリングする必要があります。 主に単体のサービスアダプタで単発のリクエストを実行する場面で利用します。
../_images/rs_push_halfsync.png

非同期処理

サービスアダプタへのリクエスト投入開始も含め非同期に処理されます。 主に複数のサービスアダプタや、複数のリクエストを投入する場合に利用します。 ARMS Proxyに非同期処理の開始を依頼するのみでAPIコールは戻ります。
../_images/rs_push_async.png

ロギング機構

RS-APIライブラリではJakarta Commons Loggingを利用してログを出力します。 ログ出力の内容については別紙を参照してください。 またログ出力の設定ファイルに関する詳細はJakarta Commons Loggingのドキュメントを参照してください。 サンプルの設定ファイルがRS-APIに含まれています。

(SMF SDKパッケージ):\RS\rs-api-X.XX.zip
(展開したrs-api-X.XX)\example\log4j.properties

設定ファイル

RS-APIライブラリは、以下の設定ファイルに基づいて動作します。

  • rs-api.properties

以下、各設定ファイルの記述について解説します。

rs-api.properties

rs-api.propertiesはJavaのProperties形式の設定ファイルでRS-APIが用いる動作パラメータ値やデータベース接続の設定を行います。

RS-APIライブラリは通常classpathにあるrs-api.propertiesとJREのシステムプロパティsmf.homeが設定されている場合に$smf.home\etc\rs-api.propertiesの設定内容を読み込んで動作します。 個々の設定項目についてはRS-APIライブラリのJavadocを参照してください。