我正在尝试在JDO安装中启用L2缓存。 Spring配置是:
<prop key="datanucleus.cache.level2.type">spymemcached</prop>
<prop key="datanucleus.cache.level2.memcached.servers">localhost:11211</prop>
所以前缀是默认的“datanucleus”。
问题是具有SingleFieldIdentity的任何对象都由键“datanucleus ###”表示,其中###是该标识的字符串表示,该键在该键中没有类名。
示例类:
@PersistenceCapable(detachable="true", table="sites", cacheable="true")
public class Site
implements Serializable {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
public Long id;
}
我有另一个可缓存的类,例如Account。 id为7的帐户存储为memecached“datanucleus7”,因此当从缓存中提取id = 7的网站时,所有内容都被搞砸了。
在datanucleus缓存包中有一个类SpymemcachedLevel2Cache(SpymemcachedLevel2Cache.java):
public class SpymemcachedLevel2Cache extends AbstractLevel2Cache
{
...
public CachedPC get(Object oid)
{
return (CachedPC) client.get(cacheName + oid.toString());
}
...
}
但SingleFieldIdentity的oid.toString()(例如LongIdentity)是一个没有类信息的简单数字。
所以问题是:我怎样才能改变这种行为?我应该使用
重新实现SpymemcachedLevel2Cacheif (nucleusCtx.getApiAdapter().isSingleFieldIdentity(id))
{
String targetClassName = nucleusCtx.getApiAdapter().getTargetClassNameForSingleFieldIdentity(id);
...
答案 0 :(得分:1)
昨天在DataNucleus中包含了该功能。 SVN主干有它