在wildfly-8.1.0.Final中使用infinispan和jdbc-store

时间:2014-09-22 16:34:43

标签: java jboss infinispan wildfly-8

我在为infinispan配置jdbc-store时遇到了一些问题。 我已使用此配置定义了本地缓存:

<cache-container name="MyCacheContainer">
    <local-cache name="MyCache">
        <expiration max-idle="60000" interval="6000"/>
    </local-cache>
</cache-container>

我需要保留缓存,所以我尝试使用jdbc-store,使用此数据源

<datasource jta="true" jndi-name="java:jboss/datasources/MyDS" pool-name="MyDS" enabled="true" use-ccm="true">
    <connection-url>jdbc:h2:file:${jboss.server.data.dir}/db;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
    <driver-class>org.h2.Driver</driver-class>
    <driver>h2</driver>
    <security>
        <user-name>abc</user-name>
        <password>abc</password>
    </security>
</datasource>

当我尝试在wildfly Web控制台中配置jdbc-store时出现此错误:

Internal Server Error
{
    "outcome" => "failed",
    "result" => {"step-1" => undefined},
    "failure-description" => "JBAS014883: No resource definition is registered for address [
    (\"subsystem\" => \"infinispan\"),
    (\"cache-container\" => \"MyCacheContainer\"),
    (\"local-cache\" => \"MyCache\"),
    (\"jdbc-store\" => \"JDBC_STORE\")
]",
    "rolled-back" => true
}

如果我手动编辑standalone.xml,添加此配置

<cache-container name="MyCacheContainer">
    <local-cache name="MyCache">
        <expiration max-idle="60000" interval="6000"/>
        <string-keyed-jdbc-store preload="false" passivation="false" purge="false" datasource="java:jboss/datasources/MyDS"/>
    </local-cache>
</cache-container>

我在db上有常规的高速缓存序列化,但是它没有按预期工作,因为数据每60000毫秒从db(而不是从内存)中删除,无论它们是否空闲。因此,如果我重新启动wildfly,则缓存为空。 此外我注意到web控制台仍然说在disableb中的jdbc-store,如果我使用文件存储而不是jdbc-store一切正常,所以我怀疑我的配置中存在一些问题。

1 个答案:

答案 0 :(得分:0)

关于standalone.xml中的手动配置 - 您必须这样做,Infinispan应该知道哪个缓存(通常情况下)应该持久存储到此存储中?

关于最大空闲超时:你是对的,这是意料之外的。当条目持久存储到DB中时,将在那里写入到期日期。但是,当您读取条目时,此时间戳不会更新 - 然后,当触发数据库清除时,也会删除这些条目。

我认为没有任何简单的解决办法,但我想知道如何使用SingleFileStore。