このタスクおよびそのサブタスクに記載の JRas フレームワークは、推奨されません。
しかし、Java ロギングを使用して、同様の結果を得ることができます。
一般的な考慮事項
WebSphere Application Server は、Java 2 セキュリティーを使用して、
ファイル・システムやソケットなどの保護リソースへのアクセスを制限するように構成することができます。
一般に、ユーザー作成拡張機能は、そのような保護リソースにアクセスするため、
ユーザー作成拡張機能には、AccessController doPrivileged 呼び出しを使用する適切なセキュリティー検査呼び出しが含まれていなければなりません。
さらに、ユーザー作成拡張機能には、
適切なポリシー・ファイルが含まれている必要があります。
通常、ユーザー作成拡張機能は別のパッケージに置くことをお勧めします。
ユーザー作成拡張機能へのアクセスを適切に制限するのは、プログラマーの責任です。
ハンドラーの作成
ユーザー作成ハンドラーは、
RASIHandler インターフェースを実装する必要があります。
RASIHandler インターフェースは、RASIMaskChangeGenerator インターフェースを拡張します。
この RASIMaskChangeGenerator インターフェースは RASIObject インターフェースを拡張します。
ここから、これらの各インターフェースによって導入されるメソッドについて簡単に説明し、実装におけるガイドを記載します。
特定のインターフェースまたはメソッドについての詳細な説明は、該当する製品の API 文書を参照してください。
RASIObject インターフェース
RASIObject インターフェースは、
スタンドアロンの JRas ロギング・ツールキット・クラスの基本インターフェースです。
これらのクラスには、ロガー、ハンドラー、フォーマッターなどがあり、ステートフルであるか、構成可能です。
- スタンドアロンの JRas ロギング・ツールキットは、
プロパティー・ファイルに基づく基本的な構成をサポートします。
この構成サポートを実装するために、
構成状態をキーと値のペアのセットとしてプロパティー・ファイルに保管します。
構成状態を取得および設定するには、public
Hashtable getConfig メソッドおよび public void setConfig(Hashtable ht) メソッドを使用します。
JRas 拡張は、プロパティーに基づく構成をサポートしていません。
これらのメソッドは、ノーオペレーションとして実装します。
これらのメソッドを使用して、プロパティーに基づく独自の構成を実装できます。
- ロガー、ハンドラーおよびフォーマッターは、名前付きオブジェクトにすることができます。
例えば、JRas 拡張では、ユーザーはマネージャーから検索するロガーに名前を指定する必要があります。
自分のハンドラーに名前を付けることもできます。public String
getName メソッドおよび public void setName(String name) メソッドは、名前フィールドを取得または設定するためのメソッドです。
現在、JRas 拡張は、ユーザーのハンドラーのメソッドを呼び出しません。
必要に応じて、ノーオペレーションを含め、これらのメソッドをインプリメントすることができます。
- ロガー、ハンドラー、およびフォーマッターには、説明フィールドを含むこともできます。
public String getDescription メソッドおよび public void setDescription(String desc) メソッドを使用すると、説明フィールドを取得または設定できます。
現在、JRas 拡張は、説明フィールドを使用しません。
必要に応じて、ノーオペレーションを含め、これらのメソッドをインプリメントすることができます。
- public String getGroup メソッドは、RASManager インターフェースで使用するために提供されています。
JRas 拡張には、独自の Manager クラスがあるため、このメソッドが呼び出されることはありません。これは、ノーオペレーションとして実装します。
RASIMaskChangeGenerator インターフェース
RASIMaskChangeGenerator インターフェースは、
マスク状態に基づいてイベントをフィルターに掛けるための実装メソッドを定義するインターフェースです。
現時点でこのインターフェースは、ロガーとハンドラーの両方によって実装されます。
定義により、このインターフェースをインプリメントするオブジェクトには、
メッセージ・マスクとトレース・マスクの両方が含まれますが、両方を使用する必要はありません。
例えば、メッセージ・ロガーにはトレース・マスクが含まれますが、
メッセージ・ロガーはトレース・イベントを生成しないため、トレース・マスクは使用されません。
ただし、ハンドラーは、積極的に両方のマスク値を使用します。
例えば、ハンドラーは単体で、メッセージ・イベントとトレース・イベントの両方を処理できます。
- public long getMessageMask メソッドおよび public void setMessageMask(long mask) メソッドは、メッセージ・マスクの値の取得または設定に使用されます。
public long
getTraceMask メソッドおよび public void setTraceMask(long mask) メソッドは、トレース・マスクの値の取得または設定に使用されます。
さらに、このインターフェースでは、マスクの状態が変化したときに、関係者へコールバック するという概念も導入されています。
コールバック・オブジェクトは、RASIMaskChangeListener インターフェースを実装する必要があります。
- public void addMaskChangeListener(RASIMaskChangeListener listener) メソッドおよび public void removeMaskChangeListener(RASIMaskChangeListener listener) メソッドは、ハンドラーにリスナーを追加したり、ハンドラーからリスナーを除去したりするために使用します。
public Enumeration
getMaskChangeListeners メソッドは、現在登録されているリスナーのリストの全項目についてその列挙型を戻します。
public void fireMaskChangedEvent(RASMaskChangeEvent
mc) メソッドを使用してすべての登録済みリスナーをコールバックし、それらのリスナーにマスク変更イベントを通知します。
効率を良くするため、JRas 拡張メッセージおよびトレース・ロガーは、RASIMaskChangeListener
インターフェースを実装しています。
ロガー実装は、ロガーのマスクのほかに、複合マスクを保守します。
ロガーの複合マスクは、そのロガーに登録されるすべてのハンドラーの該当するマスクを論理 OR 演算し、結果をロガーのマスクと AND 演算することによって形成されます。
例えば、メッセージ・ロガーの複合マスクは、そのロガーに登録されたすべてのハンドラーのメッセージ・マスクを OR 演算し、結果をロガーのメッセージ・マスクと AND 演算することにより形成されます。
これらのメソッドを正しく実装するためには、すべてのハンドラーが必要です。
さらに、ユーザー・ハンドラーのインスタンスが生成されるときに、追加されるロガーを、
addMaskChangeListener メソッドを使用してハンドラーに登録する必要があります。
ハンドラーのメッセージ・マスクまたはトレース・マスクのいずれかが変更されると、
ロガーをコールバックして、そのロガーにマスク変更を通知する必要があります。
このプロセスにより、ロガーは複合マスクを動的に保守することができます。
RASMaskChangedEvent クラスは、スタンドアロンの JRas ロギング・ツールキットによって定義されます。
このコンテキストでは、ユーザー・コードによりこのクラスを直接使用することがサポートされています。
さらに、RASIMaskChangeGenerator インターフェースでは、実装するオブジェクトによって処理されるすべてのメッセージ・イベント・クラスとトレース・イベント・クラスの名前をキャッシュするという概念が導入されています。
これらのメソッドの目的は、GUI などの管理プログラムが名前のリストを検索し、そのクラスをイントロスペクトして、クラスが処理する可能性のあるイベント・タイプを判別し、結果を表示できるようにするのをサポートすることです。
JRas 拡張はこれらのメソッドを呼び出さないため、これらのメソッドをノーオペレーションとして実装することができます。
- public void addMessageEventClass(String name) メソッドおよび public void removeMessageEventClass(String
name) メソッドを呼び出して、メッセージ・イベント・クラス名をリストに追加したり、リストから除去したりすることができます。
メソッド public Enumeration getMessageEventClasses は、メッセージ・イベント・クラス名のリストの全項目についてその列挙型を戻します。
同様に、public
void addTraceEventClass(String name) メソッドおよび public void removeTraceEventClass(String
name) メソッドを呼び出して、トレース・イベント・クラス名をリストに追加したり、リストから除去したりすることができます。
public Enumeration getTraceEventClasses メソッドは、トレース・イベント・クラス名のリストの全項目についてその列挙型を戻します。
RASIHandler インターフェース
RASIHandler インターフェースは、
ハンドラーの振る舞いに特有のメソッドを導入しています。
スタンドアロンの JRas ロギング・ツールキットにより提供される RASIHandler インターフェースは、同期モードまたは非同期モードのいずれかで実行されるハンドラーをサポートしています。
一般に、非同期モードでは、イベントは呼び出しスレッドによりキューに入れられ、
ワーカー・スレッドにより書き込まれます。
スレッドの作成は WebSphere Application Server 環境ではサポートされていないため、明示的に禁止されているわけではないものの、ハンドラーがイベントをキューに入れたり、バッチで実行したりすることはないと想定されています。
- public int getMaximumQueueSize() メソッドおよび public void setMaximumQueueSize(int size) メソッドは、IllegalStateException 例外を作成して、最大キュー・サイズを管理します。
実際のキュー・サイズを照会するための public int getQueueSize メソッドが提供されています。
- public int getRetryInterval メソッドおよび public void setRetryInterval(int interval) メソッドは、エラー再試行という概念をサポートしており、あるタイプのキューイングを意味しています。
- ハンドラーを構成するときに使用するフォーマッターのリストを管理するために、public void addFormatter(RASIFormatter formatter)、public void removeFormatter(RASIFormatter
formatter) および public Enumeration getFormatters の各メソッドが提供されています。
必要に応じて場合、異なるイベント・クラスには、異なるフォーマッターを提供することができます。
- ハンドラーが抽象化する基盤デバイスを管理するために、public void openDevice、public void closeDevice および public void stop の各メソッドが提供されています。
- イベントをハンドラーに渡して処理するために、public void logEvent(RASIEvent event) メソッドおよび public void writeEvent(RASIEvent
event) メソッドが提供されています。
フォーマッターの作成
ユーザー作成フォーマッターは、
RASIFormatter インターフェースを実装する必要があります。
RASIFormatter インターフェースは、RASIObject インターフェースを拡張しています。
RASIObject インターフェースの実装は、ハンドラーとフォーマッターのどちらの場合でも同じです。
RASIFormatter インターフェースによって導入されるメソッドについて簡単に説明します。
このインターフェースによって導入されるメソッドの詳細な説明については、該当する製品の API 文書を参照してください。
RASIFormatter インターフェース
- public void setDefault(boolean flag) メソッドおよび public boolean isDefault
メソッドは、特定のフォーマッターがデフォルトのフォーマッターであるかどうかを判別するために、
スタンドアロンの JRas ロギング・ツールキットに用意された具象 RASHandler クラスにより使用されます。
これらの RASHandler クラスは WebSphere Application Server 環境で使用することができないため、
これらのメソッドのセマンティックの重要度はユーザーが決定できます。
- フォーマッターがフォーマットできるイベント・クラスを判別するために、public void addEventClass(String name)、public void removeEventClass(String
name) および public Enumeration getEventClasses の各メソッドが提供されています。
適切な実装を用意することができます。
- public String format(RASIEvent event) メソッドは、ハンドラー・オブジェクトによって呼び出され、イベントのフォーマット済みの String 表現を戻します。