I am trying to figure out how to configure JPA 2.0 to use Memcache as the Level 2 cache in Google App Engine 1.8.7.
I have found instructions that are a year old and they don't work now.
Here is the error(s) that I am getting:
When I use <property name="datanucleus.cache.level2.type" value="jcache" />
I get the following error:
With core 3.1.4
/ cache 3.1.2
:
[INFO] Caused by: net.sf.jsr107cache.CacheException: Could not find class: 'ri.cache.BasicCacheFactory'
With core 3.1.2
/ cache 3.1.2
:
[INFO] Caused by: org.datanucleus.exceptions.NucleusUserException: Level 2 Cache "jcache" is registered to use class "org.datanucleus.cache.jcache.JCacheLevel2Cache" yet this is not found. Please check your CLASSPATH and plugin specification.
I haven't been able to figure out what to add where to resolve either issue.
When I use <property name="datanucleus.cache.level2.type" value="javax.cache" />
I get the following error:
[INFO] Caused by: 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.
I have tried the following settings in my persistence.xml
and neither works:
Here are my relevant configuration settings:
persistence.xml
<property name="datanucleus.cache.level2.name" value="entitycache" />
<property name="datanucleus.cache.level2.type" value="javax.cache" />
and
<property name="datanucleus.cache.level2.name" value="entitycache" />
<property name="datanucleus.cache.level2.type" value="jcache" />
pom.xml
<properties>
<resteasy.version>3.0.5.Final</resteasy.version>
<jackson.version>2.2.3</jackson.version>
<gae.version>1.8.7</gae.version>
<gae-runtime.version>1.8.0</gae-runtime.version>
<gae.home>/Users/jhr/.m2/repository/com/google/appengine/appengine-java-sdk/1.8.7/appengine-java-sdk-1.8.7
</gae.home>
<datanucleus.version>3.1.2</datanucleus.version>
</properties>
<dependency>
<groupId>com.google.appengine.orm</groupId>
<artifactId>datanucleus-appengine</artifactId>
<version>2.1.2</version>
</dependency>
<dependency>
<groupId>org.datanucleus</groupId>
<artifactId>datanucleus-core</artifactId>
<version>${datanucleus.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.datanucleus</groupId>
<artifactId>datanucleus-api-jpa</artifactId>
<version>${datanucleus.version}</version>
</dependency>
<dependency>
<groupId>org.datanucleus</groupId>
<artifactId>datanucleus-cache</artifactId>
<version>${datanucleus.version}</version>
</dependency>
WEB-INF/lib
-rw-r--r-- 1 jhr staff 249K Nov 16 03:07 datanucleus-api-jpa-3.1.4.jar
-rw-r--r-- 1 jhr staff 338K May 17 2013 datanucleus-appengine-2.1.2.jar
-rw-r--r-- 1 jhr staff 44K Dec 4 00:24 datanucleus-cache-3.1.2.jar
-rw-r--r-- 1 jhr staff 1.7M Nov 16 03:07 datanucleus-core-3.1.4.jar
-rw-r--r-- 1 jhr staff 188K Mar 14 2013 datanucleus-enhancer-3.1.1.jar
-rw-r--r-- 1 jhr staff 7.9K Dec 4 01:22 jsr107cache-1.1.jar
As stated in the answer you referenced, App Engine implements the 'old' JSR107 interface, which Datanucleus 3.1+ supports by setting the following property in persistence.xml / jdoconfig.xml:
(See http://www.datanucleus.org/products/accessplatform/jpa/cache.html#jcache)
You also need to add the following Maven dependencies:
Based on the information you provided, you were probably lacking the second one?