Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

GUIツールを利用した「patterns & practices Enterprise Library」の構成

Microsoftのエンタープライズ向けライブラリによるアプリケーション開発の概要

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2005/10/19 16:00

Enterprise Libraryは、MicrosoftのPatterns & Practicesによって提供される、エンタープライズアプリケーションを開発する際によく用いられる機能を提供するライブラリです。本稿では、Enterprise Libraryの使用方法を例を挙げて説明します。

はじめに

 「patterns & practices Enterprise Library」(以下、「Enterprise Library」と表記)は、Microsoftの「patterns & practices」によって提供される、エンタープライズアプリケーションを開発する際によく用いられる機能を提供するライブラリです。

 本稿では、Enterprise Libraryの使用方法を例を挙げて説明します。

対象読者

 .NET frameworkを用いたエンタープライズアプリケーションの開発者。

必要な環境

 Microsoft Visual Studio .NET 2003上で動作確認しています。

インストール

 以下にEnterprise Libraryのインストール方法を示します。

Enterprise Libraryの入手

 Enterprise Libraryは、Microsoftのサイトから入手できます。

インストール

 ダウンロードしたファイルを実行すると、インストールが行われます。

 インストール時にEnterprise Libraryのコンパイルを行うように指定できますので([Compile Enterprise Library]をチェックする)、コンパイルしておくことをお勧めいたします。ただし、ここでチェックしなかった場合でも、後から[プログラム]-[Microsoft patterns & practices]-[Enterprise Library - June 2005]-[Build Enterprise Library]でコンパイル可能です。

 インストール後、[プログラム]-[Microsoft patterns & practices]-[Enterprise Library - June 2005]-[Install Services]を実行して、Enterprise Libraryが使用しているWMIのエントリを構成します。

 他にも、[プログラム]-[Microsoft patterns & practices]-[Enterprise Library - June 2005]以下にヘルプ(Enterprise Library Documentation)、構成ツール(Enterprise Library Configuration)、サンプル(Quickstart Applications)などが作成されます。

Enterprise Libraryとは

 以下に、Enterprise Libraryの概要を示します。

Enterprise Libraryの特徴

 Enterprise Libraryは、複数の「Application Block」によって構成されます。Application Blockは一種のガイダンスで、ソースコードとして提供されますので、そのまま使用することも、拡張・変更することも可能です。

 特徴として、以下の点が挙げられます。

  • 一貫性
  • 全てのApplication Blockは一貫したデザインパターンや実装方法に基づいているため、いずれかを理解したら他のApplication Blockも容易に理解できます。
  • 拡張性
  • Application Blockの個別の機能は、拡張点であるProviderとして抽出されているため、容易に拡張を行うことができます。
  • 使いやすさ
  • グラフィカルな構成ツール、明快で完全なドキュメント、豊富なサンプルを提供しています。
  • 統合性
  • 他のApplication Blockによって提供される機能を利用するProviderが実装されているため、複数のブロックの機能を容易に関連付けられます。もちろん、必要な機能を提供するApplication Blockのみを使用することも可能です。
    例えば、Exception Handling Application Blockを用いて例外に対するポリシーを設定し、ある例外に対してはLogging and Instrumentation Application Blockを使用してログを出力し、出力先としてDatabase Access Application Blockを使用してデータベースを選択するといった動作を、構成ツールによる設定だけで指定することが可能です。

Application Block

 Enterprise Library June 2005リリースで提供されるApplication Blockは、以下のものがあります。

  • Caching Application Block
  • ローカルでのデータキャッシュを行います。キャッシュデータの格納場所として、インメモリ、データベース、分離ストレージが提供されています。外部に格納する際は、データを暗号化する機能も提供されています。
  • Configuration Application Block
  • アプリケーションでの設定情報の読み書きを行います。設定情報の格納場所として、アプリケーション構成ファイル(「app.config」あるいは「web.config」)、データベース、レジストリ、SQL Server、XMLファイルが提供されています。データを暗号化する機能も提供されています。
  • Data Access Application Block
  • データベース利用を簡単にします。対象データベースとしてSQL Server、Oracleが提供されています。
  • Cryptography Application Block
  • 暗号化および復号化とハッシュの算出を行います。暗号化アルゴリズムとしてDES、RC2、Rijndael、トリプルDESが提供されています。ハッシュアルゴリズムとしてMD5、SHA1、SHA256、SHA384、SHA512、SHA1を用いたHMAC、トリプルDESを用いたMACが提供されています。
  • Exception Handling Application Block
  • 例外に対する一貫した処理ポリシーを処理します。処理として、ログの生成、例外の置換、例外のラップが提供されています。
  • Logging and Instrumentation Application Block
  • ログ出力とパフォーマンス計測のための記録を行います。出力先として、データベース、e-mail、イベント ログ、ファイル、MSMQ、WMI が提供されています。
  • Security Application Block
  • 認証、承認、プロファイルの利用、ロールといったユーザ管理を行います。認証データ元としてデータベースが、承認データ元として承認マネージャ、ルール式記述が、プロファイル記録先としてデータベースが、ロールデータ元としてデータベース、Active Directoryが提供されています。

 また、利用方法のサンプルであるQuick Startに、新規Application Blockを作成するためのサンプルとしてHello World Application Blockが提供されています。

構成ツール

 前述の特徴でも記したのですが、GUIの構成ツールによってBlockの構成が容易に行えます。以下に、構成ツールの画面表示例を示します。なお、本サンプルでは表示を日本語化しております。

新規アプリケーションの構成を行う状態
新規アプリケーションの構成を行う状態

 ここから、コンテキストメニュー-[New]-[Logging and Instrumentation Application Block]を選択すると、

コンテキストメニューから選択すると…
コンテキストメニューから選択すると…
依存するApplication Blockの設定も自動的に加えられます
依存するApplication Blockの設定も自動的に加えられます

 上図のように、依存するApplication Blockの設定も自動的に加えられます。さらに、Application BlockやProviderが参照するProviderはドロップダウンで選択できますし、参照先のProviderの設定も展開して表示できます。

参照先のProviderの設定を展開したところ
参照先のProviderの設定を展開したところ

 また、値が間違っている場合は検証エラーを通知してくれる機能もあります。

検証エラー
検証エラー

 構成ツールで容易に構成が設定できますので、Enterprise Libraryの提供する機能に関するポリシーの変更であれば、運用時であっても対応することが可能となります。

構成ツールの日本語化について
 筆者らが共同管理しているサイトenterpriselibrary.jpで、Microsoftアーキテクトエバンジェリスト 荒井省三氏より提供して頂いた「構成ツールを日本語化するためのDLL」を配布しています。他にも、Enterprise Libraryに関する様々な情報を発信しておりますので、ご興味のある方はぜひご覧ください。

Application Blockを利用したアプリケーションの作成

 Application Blockを利用する際の作業を以下に挙げます。いくつかのApplication Blockでは必要がない作業もあります。

  1. 必要なApplication Blockを利用するための設定をアプリケーション構成ファイルに記述します。これは、付属の構成ツールを用いて簡単に行うことができます。
  2. 参照設定でApplication Blockのアセンブリを含めます。
  3. Application BlockのFactoryクラスを用いて構成ファイルに指定した名前のProviderを取得します。
  4. 取得したProviderに対してメソッドを呼び出し、処理を実行します。

 では、具体例を挙げて説明します。

 Windowsアプリケーションを作成し、アプリケーションのログを出力する場面を想定しています。

アプリケーション構成ファイルの記述

 Windowsアプリケーションなので、app.configに対して記述を行います。まだ追加していなければ、プロジェクトに追加しておきます。

 [プログラム]-[Microsoft patterns & practices]-[Enterprise Library - June 2005]-[Enterprise Library Configuration]で構成ツールを起動します。

構成ツール起動時の表示
構成ツール起動時の表示

 メニューから[File]-[Open Application]を選択し、app.configを開きます。すると、ツリー上に[Application]要素が追加されます。この配下に、使用するApplication Blockの設定を行っていきます。

 [Application]要素を右クリックして[New]-[Logging and Instrumentation Application Block]を選択します。すると、選択した[Logging and Instrumentation Application Block]要素の他に、依存する[Configuration Application Block]要素が自動で作成され、Logging and Instrumentation Application Block配下にも既定のProviderが生成されたことが確認できます。

Logging and Instrumentation Application Blockの作成直後
Logging and Instrumentation Application Blockの作成直後

 設定の種類は以下のものがあります。

  • Categories
  • 出力のカテゴリを表します。カテゴリに対して、任意の数のDestinationを指定できます。カテゴリのNameは、アプリケーション内でLogEntryに指定するものと一致させます。
  • Destination(Categoryの子として追加)
  • 出力を表します。FormatterとSinkを指定します。
  • Formatters
  • 出力する際の書式を表します。LogEntryオブジェクトを出力書式に変換する方法を指定します。
    • Text Formatter
    • 文字列に変換します。Templateで、変換後の文字列とLogEntryのプロパティを挿入する位置を指定するテンプレートを設定できます。
  • Sinks
  • 出力先を表します。
    • Database Sink
    • Data Access Application Blockを用いて、ストアドプロシージャを実行することによりデータベースに出力します。
    • Email Sink
    • e-mailを送信します。
    • Event Log Sink
    • イベントログに追加します。
    • Flat File Sink
    • ファイルに追加します。
    • MSMQ Sink
    • MSMQに追加します。
    • WMI Sink
    • WMIに出力します。

 なお、新規作成直後の既存の設定は、

  • Generalカテゴリの出力はEvent Log Destinationに対して行われ、Text Formatterを用いて書式化されて、Event Log Sinkを用いてイベント ログアプリケーション」(Application)に出力されます。
  • Traceカテゴリの出力はFlat File Sink Destinationに対して行われ、やはりText Formatterを用いて書式化されて、Flat File Sinkを用いてファイルtrace.log」に出力されます。

 となっています。設定を追加したい場合は、親要素を右クリックして[New]-[対象となる要素]で追加できます。

 変更を行ったら、保存を行います。メニューから[File]-[Save Application]を選択すると保存できます。

 エクスプローラなどで「app.config」のあったディレクトリを確認すると、「loggingconfiguration.config」と「loggingdistributionconfiguration.config」というファイルが作成されているのが確認できます。これらのファイルはApplication Block内の設定内容を記述しているため、Windowsアプリケーションの場合は実行ディレクトリにコピーする必要があります。このため、プロジェクトのオプションで、[ビルド イベント]-[ビルド後のコマンドライン]に以下のような記述を行います。

ビルド後のイベント コマンドラインの例
copy /y $(ProjectDir)loggingconfiguration.config $(TargetDir)
copy /y $(ProjectDir)loggingdistributorconfiguration.config
 $(TargetDir)

Application Blockの参照設定

 Visual Studio .NETに戻り、[参照設定]を右クリックして[参照の追加]を選択します。[参照]ボタンをクリックしてファイルダイアログを表示し、「Enterprise Libraryインストールディレクトリ\bin」にある、以下のファイルを選択します。

  • 「Microsoft.Practices.EnterpriseLibrary.Logging.dll」

Providerの取得

 Logging and Instrumentation Application Blockの場合は、Providerは内部的にのみ使用されますので、明示的に生成する必要はありません。

処理の実行

 ログを出力したい箇所で、以下のソースを記述します。

ログ出力のソース
// ログ1件に対応するオブジェクトを生成します。
Microsoft.Practices.EnterpriseLibrary.Logging.LogEntry entry =
    new Microsoft.Practices.EnterpriseLibrary.Logging.LogEntry();

// ログに出力する内容を設定します。
entry.Category = "Trace";
entry.Message = "メッセージの内容";
entry.Title = "タイトル";

// ログを出力します。
Microsoft.Practices.EnterpriseLibrary.Logging.Logger.Write(entry);

 まず、ログ1件に対応するオブジェクトを生成します。その後、生成したオブジェクトのプロパティを設定することにより、ログのカテゴリおよび出力する内容を指定します。

 例ではTraceカテゴリを指定していますので、構成ツールで変更を行っていなければ「trace.log」ファイルに内容が記述されます。

「trace.log」出力例
----------------------------------------
Timestamp: 2005/10/10 20:34:40
Message: メッセージの内容
Category: Trace
Priority: 0
EventId: 0
Severity: Unspecified
Title:タイトル
Machine: MachineName
Application Domain: LoggingTest.exe
Process Id: 73576
Process Name: c:\Develop\CodeZine\UsingEntLib\LoggingTest\bin\Debug
\LoggingTest.exe
Win32 Thread Id: 68388
Thread Name:
Extended Properties:
----------------------------------------
----------------------------------------
Timestamp: 2005/10/10 20:34:43
Message: メッセージの内容
Category: Trace
Priority: 0
EventId: 0
Severity: Unspecified
Title:タイトル
Machine: MachineName
Application Domain: LoggingTest.exe
Process Id: 73576
Process Name: c:\Develop\CodeZine\UsingEntLib\LoggingTest\bin\Debug
\LoggingTest.exe
Win32 Thread Id: 68388
Thread Name:
Extended Properties:
----------------------------------------

最後に

 本稿ではEnterprise Libraryの特徴と構成ツールを用いた設定の利点を示し、加えてApplication Blockの一つであるLogging and Instrumentation Application Blockの使用方法を示しました。

 今後は、既存のApplication Blockでは不足している機能を追加する方法などを扱っていきたいと思います。

参考資料

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

著者プロフィール

  • にしざき(にしざき)

    Team EntLib.jp - enterpriselibrary.jp を拠点として、国内における Enterprise Library の普及に向けて活動中。

All contents copyright © 2005-2018 Shoeisha Co., Ltd. All rights reserved. ver.1.5