2012-09-13 155 views
2

有什麼辦法可以將緩存對象持久化到緩存存儲到關係數據庫表?我試圖將其作爲Cacheloader來完成。如何將緩存存儲持久化到關係數據庫

<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> 

從該鍵和值是存儲在ISPN_STRING_TABLE_TEST_STORE其中< namedCache名稱= 「TEST_STORE」>。它將ID列中的鍵和DATA_COLUMN中的值保存爲Blob.I要將此Blob Contain數據放入關係數據庫(而不是Object)。例如,當我將一個Employee對象放入Cache中時,它應該將數據庫表作爲僱員表emplyee屬性作爲該表中的字段(僱員名稱,年齡..等)。是否有辦法做到這一點?

回答

3

Infinispan Data Grid Platform Book中有一個示例,它描述瞭如何使用MySQL作爲關係數據庫配置一個JdbcStringBasedCacheStore。在這個例子中,連接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

其實我想用Infinispan的高速緩存寫入裝載機JPA或休眠support.https://community.jboss.org/thread/149211。其支持高速緩存條目作爲BLOB寫入數據庫。如果您可以提供緩存加載器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

暗影爬行者,謝謝你的回答。我會爲它投票,但我沒有足夠的聲譽。我正在使用infinispan 5.3與postgresql數據庫,它的工作「connectionPool」。只需要將infinispan-cachestore-jdbc-5.3.0.Final.jar和c3p0-0.9.1.2.jar添加到我的版本中。 – MDHomem

相關問題