Java 在wildfly-8.1.0.Fianl中将infinispan与jdbc存储一起使用

Java 在wildfly-8.1.0.Fianl中将infinispan与jdbc存储一起使用,java,jboss,infinispan,wildfly-8,Java,Jboss,Infinispan,Wildfly 8,我在为infinispan配置jdbc存储时遇到一些问题。 我已使用以下配置定义了本地缓存: <cache-container name="MyCacheContainer"> <local-cache name="MyCache"> <expiration max-idle="60000" interval="6000"/> </local-cache> </cache-container> 如果我手

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

<cache-container name="MyCacheContainer">
    <local-cache name="MyCache">
        <expiration max-idle="60000" interval="6000"/>
    </local-cache>
</cache-container>
如果我手动编辑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>

我在数据库上有常规的缓存序列化,但它不能像预期的那样工作,因为数据每60000毫秒就从数据库(而不是内存)中删除一次,不管它们是空闲的。因此,如果我重新启动wildfly,缓存将为空。
此外,我注意到web控制台仍然说jdbc存储在disableb中,如果我使用file store而不是jdbc store,则一切正常,因此我怀疑我的配置中存在一些问题。

关于standalone.xml中的手动配置,您必须这样做,否则Infinispan如何知道哪个缓存(一般情况下)是否应该持久化到此存储中

关于最大空闲超时:您是对的,这是意外的。当条目被持久化到数据库中时,过期日期被写入其中。但是,当您读取一个条目时,这个时间戳不会被更新——然后,当启动DB purge时,这些条目也会被删除


我不认为会有任何简单的解决方法,但我想知道这如何与SingleFileStore一起工作。

快速注意:我可以看到您已经配置了选项preload=“false”。如果重新启动Wildfly(使用缓存),则不会从存储中预加载数据,因此缓存将为空。如果存储中有一些持久化条目,则应在请求时延迟加载这些条目。尝试在重新启动的缓存上获取(一些密钥)。你使用什么版本的Infinispan?@tsykora谢谢你的回复。我试图获取一个条目,但缓存为空。相同的配置,但具有文件存储,按预期工作。我使用infinispan 6.0.2.finalhmm奇怪。可能是个虫子。您是否也尝试过二进制密钥存储?+尝试删除过期设置以查看接下来会发生什么。谢谢你的信息!非常感谢。关于“手动配置”,我指的是编辑standalone.xml,尽管使用的是wildfly web控制台。对于文件存储,我可以使用web控制台,但对于jdbc存储,我有我在文章中描述的错误。此外,在standalone.xml中添加jdbc存储不会反映在web控制台中。不过,我将再次尝试使用文件存储,因为我认为它工作正常(报告的错误与5.2.6.Final版本相关)好的,我错了…文件存储不工作。也许我考砸了。无论如何,我认为这样的错误对于具有过期功能的“NoSQL键/值存储或对象数据库”来说是非常糟糕的
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
}
<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>