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

拡張機能 [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)や、バッチファイル等による自動化に向いた「運用コマンド」を提供しています。

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30