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