YUKI'S BLOG

HCCソフト社長の日常をたまにお知らせします。

JCS(Java Caching System)で簡単なサンプル

2011-11-07 23:43:34 | 技術情報

Javaでキャッシュを実現するためのライブラリとして、Apache JakartaプロジェクトのJCS(Java Caching System)があります。Java言語を用いたWEBアプリケーションやスタンドアロンシステムで使えそうなので、簡単なサンプルプログラムを作成してみました。

JCSの概要については、下記URLに解説記事がありました。

http://www.ibm.com/developerworks/jp/java/library/j-jcs.html

 

JCSはこちらからダウンロードできます。

http://commons.apache.org/jcs/DownloadPage.html

 

依存するライブラリとして、concurrentパッケージが必要です。

http://g.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html

 

サンプルですが、まず、JCSの構成ファイル(cache.ccf)を作成して実行時のカレントディレクトリに配置します。まずは基本的な構成として、純粋にメモリーを利用してキャッシュを構成してみました。

# DEFAULT CACHE REGION
jcs.default=
jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
jcs.default.cacheattributes.MaxObjects=10
jcs.default.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache

MaxObjectsにオブジェクト最大保持数を指定します。ここではテストのため、10を設定しました。

実際に簡単なオブジェクトを11個キャッシュに保存して、どうなるか試してみました。実行すると、古いキャッシュから2個が消えていました。つまりオブジェクト最大保持数-1個のオブジェクトがキャッシュに保存されている、ということになりそうです。キャッシュを見てなければファイルやDBから取得する、という使い方ができそうです。

以下、サンプルソースと実行結果です。

------ サンプルソース ------


package com.hcc_soft.geo.test;

import java.io.Serializable;

import org.apache.jcs.JCS;
import org.apache.jcs.access.exception.CacheException;

public class JCSTest {
	
	// キャッシュ領域名
	private static final String CACHE_REGION_NAME = "hcc";
	
	// キャッシュオブジェクト
	private JCS cache = null;

	public void test() {
		
		try {
			// キャッシュ初期化
            setCache(JCS.getInstance(CACHE_REGION_NAME));
            
            // 11人分のオブジェクトをキャッシュに入れる
            for(int i = 0; i < 11; i++) {
        		Person person = new Person("大川"+(i+1), "栃木", "000-0000");
        		cache.put("ohkawa"+(i+1), person);
            }
    		
            // 11人分のオブジェクトをキャッシュから読む
            for(int i = 0; i < 11; i++) {
            	Person person1 = (Person)cache.get("ohkawa"+(i+1));
        		System.out.println(person1 == null? "null":person1.toString());
            }
    		
        } catch (CacheException e) {
            e.printStackTrace();
        }
	}
	
	public static void main(String args[]){
		JCSTest s = new JCSTest();
		s.test();
	}

	public JCS getCache() {
		return cache;
	}

	public void setCache(JCS cache) {
		this.cache = cache;
	}
	
	protected class Person implements Serializable {
		protected String name_;
		protected String address_;
		protected String phone_;
		public Person(String name, String address, String phone) {
			name_ = name;
			address_ = address;
			phone_ = phone;
		}
		public String toString() {
			return "名前:"+name_+" 住所:"+address_+" 電話番号:"+phone_;
		}
	}

}

------ 実行結果 ------

null   ←古くて消えたキャッシュ
null   ←古くて消えたキャッシュ
名前:大川3 住所:栃木 電話番号:000-0000
名前:大川4 住所:栃木 電話番号:000-0000
名前:大川5 住所:栃木 電話番号:000-0000
名前:大川6 住所:栃木 電話番号:000-0000
名前:大川7 住所:栃木 電話番号:000-0000
名前:大川8 住所:栃木 電話番号:000-0000
名前:大川9 住所:栃木 電話番号:000-0000
名前:大川10 住所:栃木 電話番号:000-0000
名前:大川11 住所:栃木 電話番号:000-0000


最新の画像もっと見る

コメントを投稿