nimbus (1.2.4) | 2018-01-25 20:02 |
nimbus-sample (1.2.4) | 2018-01-26 17:06 |
アプリケーション開発において、処理の流れや処理時間を出力する必要がある場合があります。
ログ出力の場合は、スレッド単位に纏めてログが出力される訳ではないため、マルチスレッドでログを出力すると、それぞれのスレッドの処理を追いかけるのは困難です。
そのため、ログ出力で処理の流れを追うのは、デバッグ目的までで、運用上のログ出力でマルチスレッドで動作するアプリケーションのログを出力することは、通常行いません。
そこで、そのような要件に応じ、スレッド毎の処理の流れや処理時間を出力する機能をジャーナルと呼びます。
ジャーナルを出力する機能を抽象化したのが、Journalです。
ジャーナルは、スレッドの処理が終わった段階で纏めて出力するため、都度出力要求されたオブジェクトは、不変な状態に変換して、スレッドの処理が終わるまで溜めこんでおく必要があります。
出力要求されたオブジェクトを不変な状態に変換する機能を抽象化したのが、JournalEditorです。
JournalEditorによるオブジェクトの編集は、オブジェクトの型毎に編集方法が異なります。
そこで、出力要求されたオブジェクトの型に対して、どのJournalEditorを使用するかを決定する機能が必要になります。
その機能を抽象化したのが、EditorFinderです。
関連するパッケージは、以下です。
アプリケーション向けインタフェースJournalを使った簡単なアプリケーションのサンプルを示します。
- import jp.ossc.nimbus.core.ServiceManagerFactory;
- import jp.ossc.nimbus.service.journal.Journal;
- // Journalを取得
- Journal journal = (Journal)ServiceManagerFactory.getServiceObject("Journal");
- try{
- // ジャーナルを開始する
- journal.startJournal("Request");
- :
- // ジャーナルに記録するオブジェクトを登録する
- journal.addInfo("Input", input);
- :
- // アプリケーションの処理
- :
- // ジャーナルに記録するオブジェクトを登録する
- journal.addInfo("Output", output);
- }finally{
- // ジャーナルを終了する
- journal.endJournal();
- }
実装サービスの一覧は以下のとおりです。
実装サービス | 実装概要 |
jp.ossc.nimbus.service.journal.ThreadManagedJournalService | スレッド毎にジャーナルを出力する |
Journal実装サービスは、ジャーナルへ出力要求されたオブジェクトを、不変なオブジェクトに変換するために、JournalEditorに、オブジェクトの編集依頼を行います。
このインタフェースの実装サービスは、下位サービスで、以下の上位サービスから使用します。
上位サービスインタフェース | 用途 |
jp.ossc.nimbus.service.journal.Journal | ジャーナルを編集するために使用する。 |
実装サービスの一覧は以下のとおりです。
Journal実装サービスは、ジャーナルへ出力要求されたオブジェクトを、不変なオブジェクトに変換するために、出力要求されたオブジェクトの型に対応したJournalEditorを見つけるためにEditorFinderを呼び出します。
このインタフェースの実装サービスは、下位サービスで、以下の上位サービスから使用します。
上位サービスインタフェース | 用途 |
jp.ossc.nimbus.service.journal.Journal | ジャーナルを編集するJournalEditorを見つけるために使用する。 |
実装サービスの一覧は以下のとおりです。
実装サービス | 実装概要 |
jp.ossc.nimbus.service.journal.editorfinder.ObjectMappedEditorFinderService | オブジェクトの型に該当するJournalEditorを見つける |
jp.ossc.nimbus.service.journal.editorfinder.RegexClassMappedEditorFinderService | オブジェクトの型に該当するJournalEditorを正規表現でマッチングして見つける |
サンプルは、以下。