2014-09-22 50 views
0

我在为infinispan配置jdbc-store时遇到了一些问题。 我已经定义了一个本地缓存与此配置:在wildfly-8.1.0中使用jdbc-store的infinispan .Fianl

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

我需要坚持的缓存,所以我尝试使用JDBC的存储,使用此数据源

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

当我尝试配置JDBC店在wildfly Web控制台我有这个错误:

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添加此CONFIGS

<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控制台仍然说在disableb中的jdbc-store,如果我使用文件存储而不是jdbc-store所有工作正常,所以我怀疑在我的配置中存在一些问题。

+0

快速提示:我可以看到您已经配置了选项preload =“false”。如果您重新启动Wildfly(使用您的缓存),那么数据将不会从商店预加载,因此缓存将为空。如果您的商店中有一些持久条目,则应在请求时延迟加载。尝试在重新启动的缓存中获取(some_key)。你使用什么版本的Infinispan? – tsykora 2014-09-24 08:08:13

+0

@tsykora谢谢你的回复。我试图获得一个条目,缓存是空的。按照预期,配置文件相同,但文件存储工作正常。我使用infinispan 6.0.2.Final – codadilupo 2014-09-24 09:09:23

+0

嗯奇怪。可能是一个错误。你也尝试过二进制密钥存储吗? +尝试删除到期设置,看看会发生什么。并感谢您的信息! – tsykora 2014-09-24 09:44:28

回答

0

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

关于最大空闲超时:你说得对,它是意想不到的。当条目被保存到数据库时,到期日期被写入那里。但是,读取条目时,此时间戳不会更新 - 然后,在清除DB清除时,这些条目也会被删除。

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

+0

已经提交:https://issues.jboss.org/browse/ISPN-3202 – 2014-09-24 10:24:27

+0

谢谢!关于“手动配置”,我的意思是编辑standalone.xml,尽管使用wildfly web控制台。对于文件存储,我可以使用Web控制台,但对于jdbc存储,我有错误,正如我在文章中所述。而且,在standalone.xml中添加jdbc-store并不反映在Web控制台中。不过,我会再次尝试使用文件存储,因为我认为它工作正常(报告的错误是相对于版本5.2.6.Final) – codadilupo 2014-09-24 12:17:55

+0

好吧,我错了...文件存储不起作用。也许我在测试过程中搞砸了。无论如何,我认为像这样的错误对于具有到期功能的“NoSQL密钥/值存储或对象数据库”是非常非常糟糕的 – codadilupo 2014-09-24 13:06:09