[応用機能]ジャーナル

アプリケーション開発において、処理の流れや処理時間を出力する必要がある場合があります。
ログ出力の場合は、スレッド単位に纏めてログが出力される訳ではないため、マルチスレッドでログを出力すると、それぞれのスレッドの処理を追いかけるのは困難です。
そのため、ログ出力で処理の流れを追うのは、デバッグ目的までで、運用上のログ出力でマルチスレッドで動作するアプリケーションのログを出力することは、通常行いません。
そこで、そのような要件に応じ、スレッド毎の処理の流れや処理時間を出力する機能をジャーナルと呼びます。
ジャーナルを出力する機能を抽象化したのが、Journalです。

ジャーナルは、スレッドの処理が終わった段階で纏めて出力するため、都度出力要求されたオブジェクトは、不変な状態に変換して、スレッドの処理が終わるまで溜めこんでおく必要があります。
出力要求されたオブジェクトを不変な状態に変換する機能を抽象化したのが、JournalEditorです。

JournalEditorによるオブジェクトの編集は、オブジェクトの型毎に編集方法が異なります。
そこで、出力要求されたオブジェクトの型に対して、どのJournalEditorを使用するかを決定する機能が必要になります。
その機能を抽象化したのが、EditorFinderです。

関連するパッケージは、以下です。

アプリケーション向けインタフェース Journal

アプリケーション向けインタフェースJournalを使った簡単なアプリケーションのサンプルを示します。

  1. import jp.ossc.nimbus.core.ServiceManagerFactory;
  2. import jp.ossc.nimbus.service.journal.Journal;
  3. // Journalを取得
  4. Journal journal = (Journal)ServiceManagerFactory.getServiceObject("Journal");
  5. try{
  6. // ジャーナルを開始する
  7. journal.startJournal("Request");
  8. // ジャーナルに記録するオブジェクトを登録する
  9. journal.addInfo("Input", input);
  10. // アプリケーションの処理
  11. // ジャーナルに記録するオブジェクトを登録する
  12. journal.addInfo("Output", output);
  13. }finally{
  14. // ジャーナルを終了する
  15. journal.endJournal();
  16. }

実装サービスの一覧は以下のとおりです。

実装サービス実装概要
jp.ossc.nimbus.service.journal.ThreadManagedJournalServiceスレッド毎にジャーナルを出力する

Journal向けインタフェース JournalEditor

Journal実装サービスは、ジャーナルへ出力要求されたオブジェクトを、不変なオブジェクトに変換するために、JournalEditorに、オブジェクトの編集依頼を行います。

このインタフェースの実装サービスは、下位サービスで、以下の上位サービスから使用します。

上位サービスインタフェース用途
jp.ossc.nimbus.service.journal.Journalジャーナルを編集するために使用する。

実装サービスの一覧は以下のとおりです。

実装サービス編集するオブジェクトの型編集結果
jp.ossc.nimbus.service.journal.editor.SimpleRequestJournalEditorServiceRequestJournaljava.lang.String
jp.ossc.nimbus.service.journal.editor.SimpleRequestCSVJournalEditorServiceRequestJournalCSV形式のjava.lang.String
jp.ossc.nimbus.service.journal.editor.RequestJournalJSONJournalEditorServiceRequestJournalJSON形式のjava.lang.String
jp.ossc.nimbus.service.journal.editor.SimpleRequestMapJournalEditorServiceRequestJournaljava.util.Map
jp.ossc.nimbus.service.journal.editor.ByteArrayJournalEditorServicebyte[]java.lang.String
jp.ossc.nimbus.service.journal.editor.ClassJournalEditorServicejava.lang.Classjava.lang.String
jp.ossc.nimbus.service.journal.editor.DateJournalEditorServicejava.util.Datejava.lang.String
jp.ossc.nimbus.service.journal.editor.EnumerationJournalEditorServicejava.util.Enumerationjava.lang.String
jp.ossc.nimbus.service.journal.editor.MapJournalEditorServicejava.util.Mapjava.lang.String
jp.ossc.nimbus.service.journal.editor.ThrowableJournalEditorServicejava.lang.Throwablejava.lang.String
jp.ossc.nimbus.service.journal.editor.ObjectJournalEditorService任意のObject及びその配列java.lang.String
jp.ossc.nimbus.service.journal.editor.ObjectKeyMapEditorService任意のObject及びその配列java.lang.String
jp.ossc.nimbus.service.journal.editor.ObjectArrayJournalEditorService任意のObject配列java.lang.String
jp.ossc.nimbus.service.journal.editor.MutableObjectJournalEditorService任意のObject及びその配列変換しない
jp.ossc.nimbus.service.journal.editor.BeanJournalEditorService任意のBean及びその配列java.lang.String
jp.ossc.nimbus.service.journal.editor.JSONJournalEditorService任意のBean及びその配列JSON形式のjava.lang.String
jp.ossc.nimbus.service.journal.editor.ServletRequestJournalEditorServicejavax.servlet.ServletRequestjava.lang.String
jp.ossc.nimbus.service.journal.editor.ServletRequestCSVJournalEditorServicejavax.servlet.ServletRequestCSV形式のjava.lang.String
jp.ossc.nimbus.service.journal.editor.ServletRequestJSONJournalEditorServicejavax.servlet.ServletRequestJSON形式のjava.lang.String
jp.ossc.nimbus.service.journal.editor.ServletRequestMapJournalEditorServicejavax.servlet.ServletRequestjava.util.Map
jp.ossc.nimbus.service.journal.editor.ServletResponseJournalEditorServicejavax.servlet.ServletResponsejava.lang.String
jp.ossc.nimbus.service.journal.editor.ServletResponseCSVJournalEditorServicejavax.servlet.ServletResponseCSV形式のjava.lang.String
jp.ossc.nimbus.service.journal.editor.ServletResponseJSONJournalEditorServicejavax.servlet.ServletResponseJSON形式のjava.lang.String
jp.ossc.nimbus.service.journal.editor.ServletResponseMapJournalEditorServicejavax.servlet.ServletResponsejava.util.Map
jp.ossc.nimbus.service.journal.editor.ServletResponseWrapperJournalEditorServicejavax.servlet.ServletResponseをラップするJournalServletResponseWrapperjava.lang.String
jp.ossc.nimbus.service.journal.editor.ServletResponseWrapperCSVJournalEditorServicejavax.servlet.ServletResponseをラップするJournalServletResponseWrapperCSV形式のjava.lang.String
jp.ossc.nimbus.service.journal.editor.JournalServletResponseWrapperJSONJournalEditorServicejavax.servlet.ServletResponseをラップするJournalServletResponseWrapperJSON形式のjava.lang.String
jp.ossc.nimbus.service.journal.editor.ServletResponseWrapperMapJournalEditorServicejavax.servlet.ServletResponseをラップするJournalServletResponseWrapperjava.util.Map
jp.ossc.nimbus.service.journal.editor.HttpServletRequestJournalEditorServicejavax.servlet.http.HttpServletRequestjava.lang.String
jp.ossc.nimbus.service.journal.editor.HttpServletRequestCSVJournalEditorServicejavax.servlet.http.HttpServletRequestCSV形式のjava.lang.String
jp.ossc.nimbus.service.journal.editor.HttpServletRequestJSONJournalEditorServicejavax.servlet.http.HttpServletRequestJSON形式のjava.lang.String
jp.ossc.nimbus.service.journal.editor.HttpServletRequestMapJournalEditorServicejavax.servlet.http.HttpServletRequestjava.util.Map
jp.ossc.nimbus.service.journal.editor.HttpServletResponseWrapperJournalEditorServicejavax.servlet.http.HttpServletResponseをラップするJournalHttpServletResponseWrapperjava.lang.String
jp.ossc.nimbus.service.journal.editor.HttpServletResponseWrapperCSVJournalEditorServicejavax.servlet.http.HttpServletResponseをラップするJournalHttpServletResponseWrapperCSV形式のjava.lang.String
jp.ossc.nimbus.service.journal.editor.JournalHttpServletResponseWrapperJSONJournalEditorServicejavax.servlet.http.HttpServletResponseをラップするJournalHttpServletResponseWrapperJSON形式のjava.lang.String
jp.ossc.nimbus.service.journal.editor.HttpServletResponseWrapperMapJournalEditorServicejavax.servlet.http.HttpServletResponseをラップするJournalHttpServletResponseWrapperjava.util.Map
jp.ossc.nimbus.service.journal.editor.HttpSessionJournalEditorServicejavax.servlet.http.HttpSessionjava.lang.String
jp.ossc.nimbus.service.journal.editor.HttpSessionCSVJournalEditorServicejavax.servlet.http.HttpSessionCSV形式のjava.lang.String
jp.ossc.nimbus.service.journal.editor.HttpSessionJSONJournalEditorServicejavax.servlet.http.HttpSessionJSON形式のjava.lang.String
jp.ossc.nimbus.service.journal.editor.HttpSessionMapJournalEditorServicejavax.servlet.http.HttpSessionjava.util.Map
jp.ossc.nimbus.service.journal.editor.DataSetJournalEditorServicejp.ossc.nimbus.beans.dataset.DataSetjava.lang.String
jp.ossc.nimbus.service.journal.editor.DataSetJSONJournalEditorServicejp.ossc.nimbus.beans.dataset.DataSetJSON形式のjava.lang.String
jp.ossc.nimbus.service.journal.editor.RecordJournalEditorServicejp.ossc.nimbus.beans.dataset.Recordjava.lang.String
jp.ossc.nimbus.service.journal.editor.HeaderJournalEditorServicejp.ossc.nimbus.beans.dataset.Headerjava.lang.String
jp.ossc.nimbus.service.journal.editor.RecordListJournalEditorServicejp.ossc.nimbus.beans.dataset.RecordListjava.lang.String
jp.ossc.nimbus.service.journal.editor.MethodJournalEditorServicejp.ossc.nimbus.service.journal.editor.MethodJournalDatajava.lang.String
jp.ossc.nimbus.service.journal.editor.MethodJournalJSONJournalEditorServicejp.ossc.nimbus.service.journal.editor.MethodJournalDataJSON形式のjava.lang.String
jp.ossc.nimbus.service.journal.editor.MethodCallJournalEditorServicejp.ossc.nimbus.service.journal.editor.MethodCallJournalDatajava.lang.String
jp.ossc.nimbus.service.journal.editor.MethodCallCSVJournalEditorServicejp.ossc.nimbus.service.journal.editor.MethodCallJournalDataCSV形式のjava.lang.String
jp.ossc.nimbus.service.journal.editor.MethodCallJournalJSONJournalEditorServicejp.ossc.nimbus.service.journal.editor.MethodCallJournalDataJSON形式のjava.lang.String
jp.ossc.nimbus.service.journal.editor.MethodReturnJournalEditorServicejp.ossc.nimbus.service.journal.editor.MethodReturnJournalDatajava.lang.String
jp.ossc.nimbus.service.journal.editor.MethodReturnCSVJournalEditorServicejp.ossc.nimbus.service.journal.editor.MethodReturnJournalDataCSV形式のjava.lang.String
jp.ossc.nimbus.service.journal.editor.MethodThrowJournalEditorServicejp.ossc.nimbus.service.journal.editor.MethodThrowJournalDatajava.lang.String
jp.ossc.nimbus.service.journal.editor.MethodThrowJournalJSONJournalEditorServicejp.ossc.nimbus.service.journal.editor.MethodThrowJournalDataJSON形式のjava.lang.String
jp.ossc.nimbus.service.journal.editor.FacadeValueJournalEditorServicejp.ossc.nimbus.ioc.FacadeValuejava.lang.String
jp.ossc.nimbus.service.journal.editor.UnitOfWorkJournalEditorServicejp.ossc.nimbus.ioc.UnitOfWorkjava.lang.String
jp.ossc.nimbus.service.journal.editor.CommandJournalEditorServicejp.ossc.nimbus.ioc.Commandjava.lang.String
jp.ossc.nimbus.service.journal.editor.DynaBeanJournalEditorServiceorg.apache.commons.beanutils.DynaBeanjava.lang.String
jp.ossc.nimbus.service.journal.editor.DynaBeanCSVJournalEditorServiceorg.apache.commons.beanutils.DynaBeanCSV形式のjava.lang.String
jp.ossc.nimbus.service.journal.editor.DynaBeanMapJournalEditorServiceorg.apache.commons.beanutils.DynaBeanjava.util.Map
jp.ossc.nimbus.service.journal.editor.DynaClassJournalEditorServiceorg.apache.commons.beanutils.DynaClassjava.lang.String
jp.ossc.nimbus.service.journal.editor.DynaClassCSVJournalEditorServiceorg.apache.commons.beanutils.DynaClassCSV形式のjava.lang.String
jp.ossc.nimbus.service.journal.editor.DynaClassMapJournalEditorServiceorg.apache.commons.beanutils.DynaClassjava.util.Map
jp.ossc.nimbus.service.journal.editor.DynaPropertyJournalEditorServiceorg.apache.commons.beanutils.DynaPropertyjava.lang.String
jp.ossc.nimbus.service.journal.editor.DynaPropertyCSVJournalEditorServiceorg.apache.commons.beanutils.DynaPropertyCSV形式のjava.lang.String
jp.ossc.nimbus.service.journal.editor.DynaPropertyMapJournalEditorServiceorg.apache.commons.beanutils.DynaPropertyjava.util.Map

Journal向けインタフェース EditorFinder

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を正規表現でマッチングして見つける

サンプルは、以下。