0
我想在我的JDO安装中启用L2缓存。 Spring配置如下:JDO L2缓存SingleFieldIdentity
<prop key="datanucleus.cache.level2.type">spymemcached</prop>
<prop key="datanucleus.cache.level2.memcached.servers">localhost:11211</prop>
所以前缀是默认的 “DataNucleus将”。
问题是任何具有SingleFieldIdentity的对象都由键“datanucleus ###”表示,其中###是该键中的该标识WITHOUT类名的字符串表示形式。
Sample类:
@PersistenceCapable(detachable="true", table="sites", cacheable="true")
public class Site
implements Serializable {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
public Long id;
}
我还有另外一个缓存类,例如帐户。 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());
}
...
}
但是oid.toString()为SingleFieldIdentity(e.g LongIdentity)与无级信息的简单数。
所以问题是:我该如何改变这种行为?我应该重新实现SpymemcachedLevel2Cache使用
if (nucleusCtx.getApiAdapter().isSingleFieldIdentity(id))
{
String targetClassName = nucleusCtx.getApiAdapter().getTargetClassNameForSingleFieldIdentity(id);
...
你是如何让GAE与spymemcached一起工作的?我可以找到的唯一文档说使用javax.cache。 – eeeeaaii