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);
...
Comment avez-vous réussi à utiliser GAE avec spymemcached? La seule documentation que je peux trouver dit d'utiliser javax.cache. – eeeeaaii