intra mart でメモリキャッシュを利用する場合の注意点 | 株式会社アースリンク

Engineer Blog開発者ブログ

2017.9.12

intra mart でメモリキャッシュを利用する場合の注意点

Icons made by Good Ware from www.flaticon.com is licensed by CC 3.0 BY

 

 

intra mart でメモリキャッシュを利用する場合の注意点をご紹介します。

 

メモリキャッシュは無駄なDBアクセスやファイルアクセスを無くし、メモリ上に保存するこで
パフォーマンスが大幅に上がるよく利用する手段かと思います。

 

そこでintra-martでは標準として「EHCache」というキャッシュモジュールが搭載されています。

 

■Cacheサービス
https://www.intra-mart.jp/download/product/iap/development/script_programming_guide/texts/application/cache/index.html
※スクリプト開発モデルのプログラミングガイドですが、Javaでも利用可能です。

 

しかし、注意として場所によっては利用できません。

例えば、SSOユーザコードプロバイダ等のログイン前に動作する箇所ではテナントIDが取得できないため、利用することができません。

■Javaコード例(SSOユーザコードプロバイダ内で実行)

import jp.co.intra_mart.foundation.cache.Cache;
import jp.co.intra_mart.foundation.cache.CacheManager;
import jp.co.intra_mart.foundation.cache.CacheManagerFactory;
final CacheManager manager = CacheManagerFactory.getCacheManager();
final Cache<String, String> cache = manager.getCache(キャッシュ名);

 

すると、以下のエラーが発生します。

 

 java.lang.IllegalStateException: [E.IWP.CACHE.00005] テナントが指定されていません。

 

どうやら内部ではテナント毎にEhcacheManagerが管理されているようです。

 

この場合、テナントIDを取得できないような場所では手立てはありませんので、

「EHCache」モジュールを純正のまま利用することも可能です。
※利用の際は十分な検証をお願いします。

 

■純正のEHCacheをインポートする

import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;

 

■Javaコード例

final CacheManager manager = CacheManager.getInstance();
final Cache cache = manager.getCache(キャッシュ名);

 

純正のEHCacheを利用した場合は、ガイドに記載のim-ehcache-config配下に配置した設定ファイルは読み込まれません。
※IMのEHCacheと純正のEHCacheで微妙に設定可能な項目が異なる為、EHCacheのドキュメントを参照してください。

 

以下の様に設定ファイルを明示的に指定することも可能です。

final CacheManager cacheManager = CacheManager.newInstance(getClass().getResource(XMLファイルのパス));

Contact
お問い合わせ

電話番号0120 - 889 - 236

受付時間:平日 9:00-18:00