
JBoss Datagrid 퍼시스턴스 구성

Persistence 캐시 스토어 컴포넌트
Infinispan의 In-Memory 에 저장된 데이터를 영구히 저장하고 읽어 오는 방법으로 Persistence와 캐시 스토어를 설정할 수 있습니다.
persistence – 캐시에 데이터가 없는 경우 Persistence 데이터 저장소로 부터 데이터를 로드합니다.
캐시 스토어 ( Cache Store) – 캐시 로더를 확장 한 것으로 Persistence 데이터 저장소에 데이터를 저장하는 기능을 합니다.
캐시 저장소 유형 – 캐시 저장소 타입에는 다음과 같은 것들이 있습니다.
- File System Based Cache Stores : 파일 기반 캐시 스토어
- Remote Cache Stores : 리모트 캐시 스토어
- Custom Cache Stores : 사용자 정의형 캐시 스토어
- LevelDB Cache Store : LevelDB 캐시 스토어
- JDBC 기반 캐시 스토어 : JdbcBinaryCacheStore, JdbcStringBasedCacheStore, JdbcMixedCacheStore
이 예제에서는 stringKeyedJdbcStore 를 이용하여 PostgreSQL DB로 Persistence 저장합니다.
실습 – Infinispan 6.0.1 ( JBoss Data Grid 6.2) 에서 Persistence 를 위한 캐시 로더와 캐시 스토어 설정하기
1. 개발 환경 구성
1-1. Eclipse 개발 환경

1-2. pom.xml 작성
Maven 프로젝트에 대한 artifact는 MyFirstDatagrid 라는 이름으로 버전 0.0.1-SNAPSHOT으로 생성하였습니다.
pom.xml 파일 내용은 아래와 같습니다.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>MyFirstDatagrid</groupId>
<artifactId>MyFirstDatagrid</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<version.org.infinispan>6.0.1.Final</version.org.infinispan>
<version.org.postgresql>9.1-901.jdbc4</version.org.postgresql>
</properties>
<dependencies>
<dependency>
<groupId>org.infinispan</groupId>
<artifactId>infinispan-core</artifactId>
<version>${version.org.infinispan}</version>
</dependency>
<dependency>
<groupId>org.infinispan</groupId>
<artifactId>infinispan-cachestore-jdbc</artifactId>
<version>${version.org.infinispan}</version>
</dependency>
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>${version.org.postgresql}</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
</dependencies>
</project>
2. XML 로 namedCache 정의하기
JdbcStoreTest.xml 파일에 캐시로더와 캐시스토어로 stringKeyedJdbcStore 를 사용하며 PostgreSQL DB 에 저장하고 로드하게 됩니다.
<?xml version="1.0" encoding="UTF-8"?>
<infinispan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:infinispan:config:6.0 http://www.infinispan.org/schemas/infinispan-config-6.0.xsd
urn:infinispan:config:jdbc:6.0 http://www.infinispan.org/schemas/infinispan-cachestore-jdbc-config-6.0.xsd"
xmlns="urn:infinispan:config:6.0">
<namedCache name="persistentCache">
<persistence passivation="false">
<stringKeyedJdbcStore xmlns="urn:infinispan:config:jdbc:6.0"
fetchPersistentState="false" ignoreModifications="false"
purgeOnStartup="false">
<connectionPool connectionUrl="jdbc:postgresql://localhost:5432/postgres"
driverClass="org.postgresql.Driver" username="infinispan" password="infinispan" ></connectionPool>
<stringKeyedTable prefix="ISPN_STRING_TABLE"
createOnStart="true" dropOnExit="false">
<idColumn name="ID_COLUMN" type="VARCHAR(255)" ></idColumn>
<dataColumn name="DATA_COLUMN" type="bytea" ></dataColumn>
<timestampColumn name="TIMESTAMP_COLUMN" type="BIGINT" ></timestampColumn>
</stringKeyedTable>
</stringKeyedJdbcStore>
</persistence>
<transaction
transactionManagerLookupClass="org.infinispan.transaction.lookup.DummyTransactionManagerLookup"
transactionMode="TRANSACTIONAL" lockingMode="OPTIMISTIC" ></transaction>
</namedCache>
</infinispan>
3. 캐시를 사용하는 자바 애플리케이션 코드 작성하기
코드의 내용은 “JdbcStoreTest.xml” 파일에서 “persistentCache”에 대한 정의 내용을 읽고 stringKeyedJdbcStore 로 정의된 PostgreSQL 에 저장된 데이터를 로딩하게 됩니다.
최초 실행 시에는 데이터베이스에 저장된 데이터가 없기 때문에 “cache.get()” 실행 시 “null” 이 출력 됩니다. 다음 로직이 1~100 까지 “cache.put”을 수행하게 되고
cache 에 데이터가 저장됨과 동시에 JDBC 를 통하여 PostgreSQL DB 에도 데이터가 저장되게 됩니다.
애플리케이션을 두 번째 실행하게 되면 첫 번째 실행 시 DB 캐시 스토어에 저장되었던 데이터가 출력되어 최초 “null” 값이 아닌 “value99” 형태로 순차적으로 값이 출력됩니다.
JdbcStoreTest.java 코드는 아래와 같습니다.
package infinispan.sample;
import org.infinispan.Cache;
import org.infinispan.manager.DefaultCacheManager;
public class JdbcStoreTest {
public static void main (String args []) throws Exception {
Cache cache = new DefaultCacheManager ( "JdbcStoreTest.xml").getCache("persistentCache");
for (int i = 1; i <= 100; i++) {
System.out.println ( "Key ="+ java.lang.Integer.toString (i) + ", Value ="+ cache.get (java.lang.Integer.toString (i)));
}
for (int i=1; i<=100; i++) {
cache.put (java.lang.Integer.toString (i), "value"+ java.lang.Integer.toString (i));
}
}
}
[/code]
[/av_textblock]
[/av_one_full]
[av_one_full first min_height='' vertical_alignment='' space='' custom_margin='' margin='0px' padding='0px' border='' border_color='' radius='0px' background_color='' src='' background_position='top left' background_repeat='no-repeat' animation='' mobile_display='']
[av_heading tag='h3' padding='10' heading='4. 작성된 애플리케이션 실행하기 ' color='' style='' custom_font='' size='' subheading_active='' subheading_size='15' custom_class='' admin_preview_bg=''][/av_heading]
[av_heading heading=' 4-1. Eclipse 에서 실행하기' tag='h4' style='' size='' subheading_active='' subheading_size='15' padding='10' color='' custom_font='' admin_preview_bg=''][/av_heading]
[av_textblock size='' font_color='' color='' admin_preview_bg='']
JdbcStoreTest 클래스를 Java Application 으로 실행합니다.
[code language="bash"]
3월 17, 2014 10:24:15 오후 org.infinispan.factories.GlobalComponentRegistry start
INFO: ISPN000128: Infinispan version: Infinispan 'Infinium' 6.0.1.Final
3월 17, 2014 10:24:16 오후 com.mchange.v2.log.MLog <clinit>
... 중략
3월 17, 2014 10:24:17 오후 org.infinispan.jmx.CacheJmxRegistration start
INFO: ISPN000031: MBeans were successfully registered to the platform MBean server.
Key =1, Value =value1
Key =2, Value =value2
... 중략
4-2. Postgres 에 저장된 데이터 확인해 보기

각 레코드는 아래의 그림과 같이 저장됩니다.

References & Related Links
- Red Hat JBoss Data Grid 6.2 Administration and Configuration Guide – https://access.redhat.com/site/documentation/en-US/Red_Hat_JBoss_Data_Grid/6.2/html-single/Administration_and_Configuration_Guide/index.html#sect-JdbcStringBasedStores
- Red Hat JBoss Data Grid Version Information – https://access.redhat.com/site/documentation/en-US/Red_Hat_JBoss_Data_Grid/6.2/html/Getting_Started_Guide/Red_Hat_JBoss_Data_Grid_Version_Information.html
- JBoss Datagrid download – https://access.redhat.com/jbossnetwork/restricted/listSoftware.html?downloadType=distributions&product=data.grid&productChanged=yes
![]() |
거침없이 배우는 JBoss – ![]() 전준식 엮음/지&선(지앤선) |




