Datanucleus JPA 2 Level 2 caché en Google AppEngine
¿Qué me falta en la siguiente configuración que mi caché de Datanucleus JPA 2 Nivel 2 no está utilizando el servicio Memcache de Google App Engine? Estoy utilizando el SDK de GAE 1.7.2.
En la persistencia.xml:
<persistence-unit name="transactions-optional">
<provider>org.datanucleus.api.jpa.PersistenceProviderImpl</provider>
<properties>
<property name="datanucleus.NontransactionalRead" value="true"/>
<property name="datanucleus.NontransactionalWrite" value="true"/>
<property name="datanucleus.ConnectionURL" value="appengine"/>
<property name="datanucleus.appengine.datastoreReadConsistency" value="EVENTUAL" />
<property name="javax.persistence.query.timeout" value="5000" />
<property name="datanucleus.datastoreWriteTimeout" value="10000" />
<property name="datanucleus.singletonEMFForName" value="true"/>
<property name="datanucleus.cache.level2.cacheName" value="someName"/>
<property name="datanucleus.cache.level2.type" value="javax.cache"/>
</properties>
</persistence-unit>
Las anotaciones de entidad contienen:
@Entity
@Cacheable(true)
Mi WEB-INF / lib tiene este aspecto:
-rw-r--r-- 1 501 20 27M Oct 3 16:13 appengine-api-1.0-sdk-1.7.2.jar
-rw-r--r-- 1 501 20 3.3M Oct 3 16:13 appengine-api-labs.jar
-rw-r--r-- 1 501 20 5.0M Oct 3 16:13 appengine-endpoints.jar
-rw-r--r-- 1 501 20 6.8K Oct 3 16:13 appengine-jsr107cache-1.7.2.jar
-rw-r--r-- 1 501 20 45K Oct 3 16:13 asm-4.0.jar
-rw-r--r-- 1 501 20 309K Oct 3 16:13 datanucleus-api-jdo-3.1.0-m3.jar
-rw-r--r-- 1 501 20 246K Oct 3 16:13 datanucleus-api-jpa-3.1.0-m3.jar
-rw-r--r-- 1 501 20 331K Oct 3 16:13 datanucleus-appengine-2.1.0-final.jar
-rw-r--r-- 1 501 20 1.6M Oct 3 16:13 datanucleus-core-3.1.0-m5.jar
-rw-r--r-- 1 501 20 112K Oct 3 16:13 geronimo-jpa_2.0_spec-1.0.jar
-rw-r--r-- 1 501 20 5.2M Oct 3 16:13 gwt-servlet.jar
-rw-r--r-- 1 501 20 196K Oct 3 16:13 jdo-api-3.0.1.jar
-rw-r--r-- 1 501 20 7.9K Oct 3 16:13 jsr107cache-1.1.jar
-rw-r--r-- 1 501 20 15K Oct 3 16:13 jta-1.1.jar
En el directorio WEB-INF / lib, ejecutando:
for i in *.jar; do echo $i; jar -tf $i | grep Level2; done
rendimientos
appengine-api-1.0-sdk-1.7.2.jar
appengine-api-labs.jar
appengine-endpoints.jar
appengine-jsr107cache-1.7.2.jar
asm-4.0.jar
datanucleus-api-jdo-3.1.0-m3.jar
datanucleus-api-jpa-3.1.0-m3.jar
datanucleus-appengine-2.1.0-final.jar
datanucleus-core-3.1.0-m5.jar
org/datanucleus/cache/WeakLevel2Cache.class
org/datanucleus/cache/Level2Cache$PinnedClass.class
org/datanucleus/cache/AbstractLevel2Cache.class
org/datanucleus/cache/SoftLevel2Cache.class
org/datanucleus/cache/Level2Cache.class
org/datanucleus/cache/NullLevel2Cache.class
org/datanucleus/cache/JavaxCacheLevel2Cache.class
geronimo-jpa_2.0_spec-1.0.jar
gwt-servlet.jar
jdo-api-3.0.1.jar
jsr107cache-1.1.jar
jta-1.1.jar
que muestra que org.datanucleus.cache.JavaxCacheLevel2Cache está presente en datanucleus-core-3.1.0-m5.jar. Sin embargo, cuando intento acceder a las entidades que se han conservado antes de habilitar esta memoria caché, aparece el siguiente error en el lado del servidor.
org.datanucleus.exceptions.NucleusUserException: Level 2 Cache "javax.cache" is registered to use class "org.datanucleus.cache.JavaxCacheLevel2Cache" yet this is not found. Please check your CLASSPATH and plugin specification.
Más abajo en el seguimiento de la pila de excepciones, encuentro:
Caused by: java.lang.NoClassDefFoundError: javax/cache/Caching
at org.datanucleus.cache.JavaxCacheLevel2Cache.<init>(JavaxCacheLevel2Cache.java:63)
Ahora, eso está claro, pero ¿dónde puedo encontrar este javax.cache.Caching? ¿Qué JAR debería necesitar incluir en el classpath? Una búsqueda rápida en Google no responde inmediatamente a mi pregunta.
Gracias.