
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 – ![]() 전준식 엮음/지&선(지앤선) |