2011-10-11 6 views
0

J'essaie d'activer le cache L2 dans mon installation JDO. configuration Spring est:JDO L2 Cache SingleFieldIdentity

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

donc préfixe est par défaut "DataNucleus". Le problème est que tout objet avec SingleFieldIdentity est représenté par la clé "datanucleus ###" où ### est une représentation sous forme de chaîne de cette identité SANS nom de classe dans cette clé.

classe Sample:

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

J'ai une autre classe cacheable, par exemple compte. Compte avec id 7 est stocké à memecached comme "datanucleus7", donc quand un site avec id = 7 est tiré de la mémoire cache tout est foutu.

Il y a dans DataNucleus package cache une classe SpymemcachedLevel2Cache (SpymemcachedLevel2Cache.java):

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

Mais oid.toString() pour SingleFieldIdentity (. LongIdentity par exemple) est un simple numéro sans information de classe. Donc, la question est: comment puis-je changer ce comportement? Dois-je réimplémenter SpymemcachedLevel2Cache en utilisant

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

Comment avez-vous réussi à utiliser GAE avec spymemcached? La seule documentation que je peux trouver dit d'utiliser javax.cache. – eeeeaaii

Répondre

1

Inclus cette fonctionnalité dans DataNucleus hier. Le tronc SVN l'a-t-il?

Questions connexes