// ======================================================================== // Copyright (C) zeroth Project Team. All rights reserved. // GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007 // http://www.gnu.org/licenses/agpl-3.0.txt // ======================================================================== package zeroth.framework.enterprise.shared; import javax.cache.Cache; import javax.cache.CacheBuilder; import javax.cache.CacheManager; import javax.cache.Caching; import javax.cache.transaction.IsolationLevel; import javax.cache.transaction.Mode; /** * キャッシュのユーティリティ * @author nilcy */ public final class CacheUtils { /** キャッシュマネージャ */ private static final CacheManager MANAGER = Caching.getCacheManager(); /** 非公開コンストラクタ */ private CacheUtils() { } /** * キャッシュの作成 * <p> * 最後に {@link CacheUtils#removeCache(String)} を実行すること。 * </p> * @param <K> キーオブジェクト型 * @param <V> バリューオブジェクト型 * @param cacheName キャッシュ名 * @return cache キャッシュ * @see javax.cache.Cache */ public static <K, V> Cache<K, V> createCache(final String cacheName) { final CacheBuilder<K, V> builder = MANAGER.createCacheBuilder(cacheName); builder.setStoreByValue(true); builder.setStatisticsEnabled(true); return builder.build(); } /** * キャッシュの取得 * @param <K> キーオブジェクト型 * @param <V> バリューオブジェクト型 * @param cacheName キャッシュ名 * @return cache キャッシュ * @see javax.cache.Cache */ public static <K, V> Cache<K, V> getCache(final String cacheName) { return MANAGER.getCache(cacheName); } /** * デフォルトキャッシュの取得 * @param <K> キーオブジェクト型 * @param <V> バリューオブジェクト型 * @return cache キャッシュ * @see javax.cache.Cache */ public static <K, V> Cache<K, V> getCache() { return getCache("application"); } /** * キャッシュの削除 * @param aCacheName キャッシュ名 * @return キャッシュ削除の成否 * @see javax.cache.CacheManager#removeCache(String) */ public static boolean removeCache(final String aCacheName) { return MANAGER.removeCache(aCacheName); } /** * 読込専用キャッシュの作成 * @param <K> キーオブジェクト型 * @param <V> バリューオブジェクト型 * @param cacheName キャッシュ名 * @return cache キャッシュ * @see javax.cache.Cache */ public static <K, V> Cache<K, V> createReadCache(final String cacheName) { final CacheBuilder<K, V> builder = MANAGER.createCacheBuilder(cacheName); builder.setStatisticsEnabled(true); builder.setReadThrough(true); builder.setWriteThrough(false); builder.setTransactionEnabled(IsolationLevel.READ_COMMITTED, Mode.LOCAL); return builder.build(); } }