2011-10-11 3 views
0

JDO 설치시 L2 캐시를 사용하려고합니다. 봄의 구성은 다음과 같습니다JDO L2 캐시 SingleFieldIdentity

<prop key="datanucleus.cache.level2.type">spymemcached</prop> 
<prop key="datanucleus.cache.level2.memcached.servers">localhost:11211</prop> 

그래서 접두사는 기본 "datanucleus"입니다.

문제는 SingleFieldIdentity가있는 모든 객체가 "datanucleus ###"키로 표시된다는 것입니다. ###은 해당 키에 클래스 이름이없는 ID의 문자열 표현입니다.

샘플 클래스 :

@PersistenceCapable(detachable="true", table="sites", cacheable="true") 
public class Site 
implements Serializable { 
    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    public Long id; 
} 

나는 예를 들어, 계정에 대한 또 다른 캐시 클래스가 있습니다. ID가 7 인 계정은 "datanucleus7"로 memecached에 저장되므로 id = 7 인 사이트를 캐시에서 가져 오면 모든 것이 엉망입니다. SingleFieldIdentity에 대한

public class SpymemcachedLevel2Cache extends AbstractLevel2Cache 
{ 
... 
    public CachedPC get(Object oid) 
    { 
     return (CachedPC) client.get(cacheName + oid.toString()); 
    } 
... 
} 

그러나 oid.toString() (. 예컨대 LongIdentity) 더 클래스 정보와 간단한 번호는 : datanucleus 캐시 패키지에서

클래스 SpymemcachedLevel2Cache (SpymemcachedLevel2Cache.java)가있다.

그래서 질문은 : 어떻게 그 행동을 바꿀 수 있습니까? SpymemcachedLevel2Cache를 다시 구현해야합니까?

if (nucleusCtx.getApiAdapter().isSingleFieldIdentity(id)) 
    { 
     String targetClassName = nucleusCtx.getApiAdapter().getTargetClassNameForSingleFieldIdentity(id); 
    ... 
+0

어떻게 spimecached에서 GAE를 사용할 수 있습니까? 찾을 수있는 유일한 문서는 javax.cache를 사용하는 것입니다. – eeeeaaii

답변

1

어제 DataNucleus의 기능이 포함되었습니다. SVN 트렁크가 있습니다