Java EE上のSI向けフレームワーク

2010年1月22日(金)
深津 康行

拡張機能 [1] アプリケーション共通機能

COREの提供する拡張機能の1つ目は、「アプリケーション共通機能」です。これは、文字通り、開発者が業務アプリケーションを実装する際に、共通部品として利用することになる機能群です。提供されている主なアプリケーション共通機能は、以下に示す通りです。

  • バリデータ
  • フォーマッタ
  • 二重送信抑止
  • コード・マスタ(テーブルのキャッシュ参照機能)
  • 各種Java API(アプリケーション・ログ出力、メッセージ管理、日付計算、etc.)
  • 各種JavaScript(クライアント・サイド二重送信抑止、キー抑止、etc.)

最も種類の多い拡張部品としては、バリデータ部品があります。ObjectWorks+では、値のバリデーション情報を画面ファイル(JSP)のタグ内に記述する通常のJSFの方式と異なり、入力されたデータを格納するJavaクラス(Model)にアノテーションとして記述する、「モデル・バリデータ」方式となっています。こうすることで、あるデータ項目のバリデーション情報を複数の画面ファイルへ分散させず、一元管理することができます(図2-1)。

COREは、データのやり取りに用いるDTO(Data Transfer Object)のフィールド宣言部に付与できる、バリデーションのための各種のアノテーションを提供しています。
--------------------------------------------------------------------------------
public UserInfo {
    @KSSCheckZenkaku // ← 変数”yomi”が全角文字列であることをチェックするバリデータ
    private String yomi;
    ...
}
--------

DTOにこのアノテーションを付与しておけば、画面ファイル側ではバリデーションをかけるためのカスタム・タグを記述するだけで、この仕様に沿ったバリデーションが起動する仕組みとなります(コーディングのイメージは第4回で紹介します)。

この機能は、Seamが内包するO/Rマッピング・ツール「Hibernate」の、「Hibernate Validator」という機能を利用しています。このHibernate Validatorも、Java EE 6では「JSR-303:Bean Validator」として標準化された仕様です。つまり、ObjectWorks+では、Java EE 6以降に標準規格となる仕様に基づいたバリデーションを採用しています。

このほか、統一フォーマットに従ってログを出力できるアプリケーション・ログ出力部品や、メッセージを画面に返す手順を統一するためのメッセージ管理部品、画面側でキー抑止をするためのJavaScript部品など、大抵の業務システムで必要とされ、多くの場合ユーザーが自作する必要が生じていたような、汎用的な機能群を提供しています。

拡張機能 [2] フレームワーク基盤機能

拡張機能の2つ目は、「フレームワーク基盤機能」です。これは、個々のアプリケーション開発者というよりは、アプリケーション全体の方式設計者や基盤設計者が使用する、基盤寄りの共通機能群です。以下が、主な提供機能です。

  • 拡張DI×AOP機能
  • ログ・ジャーナル出力
  • 例外処理
  • 閉塞制御、流量制御
  • 運用機能(JMXインタフェース、運用画面、運用コマンド)

先頭の「拡張DI×AOP機能」は、すべての部品群の土台となる機能です。ObjectWorks+では前述の通り、統一DI×AOP機能としてSeamを活用し、標準的なDIコンテナの仕様に則って拡張部品群を提供しています。ですが、現在のSaemにはAOPを実現するインターセプター(処理を横取りして共通機能を差し込むクラス)を設定ファイルから利用する機能がありません。こうした機能は、Seamをベースにした「JSR-299:Java Context and Dependency Injection(CDI)」で一部標準化されており、今後Seamでも拡張されていくことが期待されています。

Seamは本来、アプリケーション・ソースコードへアノテーションを付与することでAOPを実現し、余計な設定ファイルを作成しなくても済むことをコンセプトの1つとしています。しかし、こうした方式はアプリケーションの生産性を高める一方で、部品利用の管理を難しくする側面も持ちます。SIの現場では、あえてこうした仕組みを用いず、従来どおり設定ファイルで設計情報を一元化した方が良い場面もあります。そこでObjectWorks+では、アプリケーション全体の基盤的な設計にかかわる「フレームワーク基盤機能」の多くを、こうした設定ファイルからも利用できるようにすることで、メンテナンス性を高く保つことを指向しています。

【主要な提供機能の内容(一部)】

ログ・ジャーナル出力

統一したログ・フォーマットで基盤的に共通して出力すべきログを容易に出力できるようにしています。種類としては、

  • ログ(トレース、稼働統計、SQL稼働統計、処理時間超過アラート)
  • ジャーナル(HTTPアクセス、インターセプタ、Webサービス)

などがあります。特徴的な点としては、これらログに共通する「リクエストID」を与え、リクエストに対するすべての処理のひも付けができるうえ、認証の仕組みと組み合わせることで「ユーザーID」を埋め込み、ユーザーごとの操作履歴などをトレースすることができるようになることなどが挙げられます。

流量制御/閉塞制御

同時リクエスト処理数をコントロールしたり、特定のサービスを一時的に閉塞したりする機能は、一般的なJava EEのアプリケーション・サーバー製品でも提供されています。アプリケーション・サーバーでは、HTTPセッション数による流量制御やURL単位の閉塞など、比較的大きな粒度での制御が可能ですが、SIの現場ではより細かく、特定のJavaクラスだけを制御したい、といった要件がある場合があります。

ObjectWorks+では、ビジネス・ロジックを実装したJavaクラスのクラス名称に対するネーミング・ルールに従って、特定の名称のJavaクラスにだけ、流量/閉塞制御インターセプターをかけるといったことが可能になっています。

運用機能

ObjectWorks+では、これらの拡張機能を動的に操作するための運用機能も提供しています。フレームワーク基盤機能はいずれも、Javaでシステムの管理/監視を行うための標準仕様であるJMX(Java Management Extensions)のインターフェースを備えており、流量制御や閉塞制御などを動的に変更することができるようになっています。

JMXインターフェースを利用した運用機能として、GUIによる操作が可能な「運用画面」(図2-2)や、バッチファイル等による自動化に向いた「運用コマンド」を提供しています。

野村総合研究所(NRI)
基盤ソリューション事業本部 副主任システムコンサルタント。入社以来、Java/Web系フレームワークの開発・導入支援や、開発標準化コンサルティングなどに従事。現在はNRIのSIフレームワーク「ObjectWorks+」を中心に、開発基盤ソリューションの企画と顧客への提案を行っている。ObjectWorks+ :http://works.nri.co.jp/

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています