nimbus (1.2.4) | 2018-01-25 20:02 |
nimbus-sample (1.2.4) | 2018-01-26 17:06 |
アプリケーション開発において、アプリケーションが使用する様々なマスターが必要になります。
マスターは、通常データベースやファイルなど、I/Oの遅いディスク上に存在します。
頻繁に参照されるため、できるだけ高速にアクセスできるようにメモリ中に置いておきたいです。
しかしながら、頻度は低いものの更新される場合があります。その場合、メモリ中のデータも書き換える必要があります。
ここで、もう一つ問題になるのが、読み取り一貫性です。アプリケーションが一連の処理中にマスタを複数回参照する場合に、途中で値が変わると問題になるケースがあります。
これらの要件を、満たす機能がCodeMasterFinderです。
関連するパッケージは、以下です。
アプリケーション向けインタフェースCodeMasterFinderを使った簡単なアプリケーションのサンプルを示します。
- import java.util.Map;
- import jp.ossc.nimbus.core.ServiceManagerFactory;
- import jp.ossc.nimbus.service.codemaster.CodeMasterFinder;
- import jp.ossc.nimbus.beans.dataset.RecordList;
- import jp.ossc.nimbus.beans.dataset.Record;
- // CodeMasterFinderを取得
- CodeMasterFinder finder = (CodeMasterFinder)ServiceManagerFactory.getServiceObject("CodeMasterFinder");
- // マスターの一覧を取得する
- Map masters = finder.getCodeMasters();
- // 使用するマスタを取得する
- RecordList jobTypeMaster = masters.get("JOB_TYPE_MST");
- // 検索キーを生成する
- Record searchKey = jobTypeMaster.createRecord();
- searchKey.setProperty("typeCode", "01");
- // 検索する
- Record record = jobTypeMaster.primaryKeySearch(searchKey);
- // 値を取得する
- String jobName = record.getStringProperty("jobName");
読み取り一貫性を保証したい場合には、アスペクト指向/interceptor/ThreadContextInitializeInterceptorServiceやアスペクト指向/interceptor/servlet/ThreadContextInitializeInterceptorServiceと組み合わせる事で、コンテキスト/ThreadContextService上に、マスターの一覧であるMapを紐付ける事ができます。
その場合のアプリケーションのサンプルを示します。
- import java.util.Map;
- import jp.ossc.nimbus.core.ServiceManagerFactory;
- import jp.ossc.nimbus.service.context.Context;
- import jp.ossc.nimbus.service.aop.interceptor.ThreadContextKey;
- import jp.ossc.nimbus.beans.dataset.RecordList;
- // Contextを取得
- Context context = (Context)ServiceManagerFactory.getServiceObject("ThreadContext");
- // マスターの一覧を取得する
- Map masters = (Map)context.get(ThreadContextKey.CODEMASTER);
- // 使用するマスタを取得する
- RecordList jobTypeMaster = masters.get("JOB_TYPE_MST");
実装サービスの一覧は以下のとおりです。
実装サービス | 実装概要 |
jp.ossc.nimbus.service.codemaster.CodeMasterService | デフォルト実装。 |
jp.ossc.nimbus.service.codemaster.CodeMasterFinderGroupService | 複数のCodeMasterFinderサービスをグルーピングする。 |