2012-09-13 4 views
2

캐시 된 개체를 영구 보존하는 방법이 있습니까? 관계형 데이터베이스에 캐시 된 저장소 테이블? 캐시 로더로 캐시를 만들려고합니다. 이 키와 값에서 캐시 저장소를 관계형 데이터베이스에 유지하는 방법

<loader class="org.infinispan.loaders.jdbc.stringbased.JdbcStringBasedCacheStore" fetchPersistentState="true" ignoreModifications="false" purgeOnStartup="false"> 
    <properties> 
    <property name="stringsTableNamePrefix" value="ISPN_STRING_TABLE"/> 
    <property name="idColumnName" value="ID_COLUMN"/> 
    <property name="dataColumnName" value="DATA_COLUMN"/> 
    <property name="timestampColumnName" value="TIMESTAMP_COLUMN"/> 
    <property name="timestampColumnType" value="BIGINT"/> 
    <property name="connectionFactoryClass" value="org.infinispan.loaders.jdbc.connectionfactory.PooledConnectionFactory"/> 
    <property name="connectionUrl" value="jdbc:derby://localhost:1527/DB;create=true"/> 
    <property name="userName" value="user"/> 
    <property name="password" value="password"/> 
    <property name="driverClass" value="org.apache.derby.jdbc.ClientDriver"/> 
    <property name="idColumnType" value="VARCHAR(255)"/> 
    <property name="dataColumnType" value="BLOB"/> 
    <property name="dropTableOnExit" value="false"/> 
    <property name="createTableOnStart" value="true"/> 

    </properties> 
</loader> 

어디 < namedCache 이름 = "TEST_STORE"> ISPN_STRING_TABLE_TEST_STORE에 저장됩니다. ID 열에 키를 저장하고 DATA_COLUMN의 값을 Blob로 저장합니다.이 Blob 포함 데이터를 관계형 데이터베이스 (객체가 아님)에 저장합니다. 예를 들어 캐시에 Employee 객체를 넣을 때 데이터베이스 테이블을 해당 테이블의 필드로 emplyee 속성이있는 Employee 테이블 (Emp 이름, Age .. 등).이 작업을 수행 할 수있는 방법이 있습니까?

답변

3

JdbcStringBasedCacheStore을 관계형 데이터베이스로 사용하는 방법을 설명하는 Infinispan Data Grid Platform Book에 예제가 있습니다. 이 예에서는 연결 URL에 데이터 소스가 사용되지만 필요에 따라 데이터 소스를 적용하는 것이 어렵지 않습니다. 도움이되기를 바랍니다.
감사

<loaders> 
    <loader 
     class="org.infinispan.loaders.jdbc.stringbased.JdbcStringBasedCacheStore" 
     fetchPersistentState="true" ignoreModifications="false" 
     purgeOnStartup="false"> 
     <properties> 
      <property name="stringsTableNamePrefix" value="ISPN_STRING_TABLE" /> 
      <property name="idColumnName" value="ID_COLUMN" /> 
      <property name="idColumnType" value="VARCHAR(255)" /> 
      <property name="dataColumnName" value="DATA_COLUMN" /> 
      <property name="dataColumnType" value="TRUE" /> 
      <property name="timestampColumnName" value="TIMESTAMP_COLUMN" /> 
      <property name="timestampColumnType" value="BIGINT" /> 
      <property name="connectionFactoryClass" 
       value="org.infinispan.loaders.jdbc. 
    connectionfactory.PooledConnectionFactory" /> 
      <property name="connectionUrl" value="java:jboss/datasources/MySQLDS" /> 
      <property name="userName" value="xxxx" /> 
      <property name="password" value="xxxx" /> 
      <property name="driverClass" value="com.mysql.jdbc.Driver" /> 
      <property name="dropTableOnExit" value="true" /> 
      <property name="createTableOnStart" value="true" /> 
     </properties> 
    </loader> 
</loaders> 
+0

는 사실 내가 캐시 로더 쓰기 JPA로 infinispan 사용하거나 support.https 최대 절전 할를 사용 : .Its 지원 캐시 //community.jboss.org/thread/149211 항목은 BLOB으로 DB에 기록됩니다. 캐시 로더를 제공 할 수 있다면 JPA는 많은 도움을 준 지원을 작성합니다. – Kalla

2

상황이 변화 한 것 같다. 이것은 Infinispan 5.2 및 5.3에서 작동하는 것 같습니다.

<loaders [...]> 
     <stringKeyedJdbcStore 
      xmlns="urn:infinispan:config:jdbc:5.2" 
      fetchPersistentState="false" 
      ignoreModifications="false" 
      purgeOnStartup="false"> 
     <dataSource jndiUrl="java:jboss/datasources/MySQLDS" /> 
<!-- 
     <connectionPool connectionUrl="jdbc:mysql://[host][:port]/[database]" 
         username="xxxx" 
         password="xxxx" 
         driverClass="com.mysql.jdbc.Driver"/> 
--> 
     <stringKeyedTable dropOnExit="true" 
          createOnStart="true" 
          prefix="ISPN_STRING_TABLE"> 
      <idColumn name="ID_COLUMN" type="VARCHAR(255)" /> 
      <dataColumn name="DATA_COLUMN" type="BINARY" /> 
      <timestampColumn name="TIMESTAMP_COLUMN" type="BIGINT" /> 
     </stringKeyedTable> 
     </stringKeyedJdbcStore> 
    </loaders> 

는 XMLNS에게 urn:infinispan:config:jdbc:5.2 (링크에서의 schemaLocation)

+0

Shadow Creeper, 답변 해 주셔서 감사합니다. 나는 그것을 투표 할 것이지만 나는 그것에 대한 충분한 평판이 없다. 나는 postgresql 데이터베이스로 infinispan 5.3을 사용하고 있으며 "connectionPool"을 사용하고 있습니다. 단지 infinispan-cachestore-jdbc-5.3.0.Final.jar와 c3p0-0.9.1.2.jar를 빌드에 추가해야했습니다. – MDHomem

관련 문제