2011-10-11 53 views
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); 
    ... 
+0

你是如何讓GAE與spymemcached一起工作的?我可以找到的唯一文檔說使用javax.cache。 – eeeeaaii

回答

1

昨天在DataNucleus中包含該功能。 SVN中繼有它

相關問題