0

我试图弄清楚如何配置 JPA 2.0 以使用 Memcache 作为 Google App Engine 1.8.7 中的 2 级缓存。

我找到了一年前的说明,现在它们不起作用。

这是我得到的错误:

当我使用时,<property name="datanucleus.cache.level2.type" value="jcache" />我收到以下错误:

使用核心3.1.4/缓存3.1.2

[信息] 原因:net.sf.jsr107cache.CacheException:找不到类:'ri.cache.BasicCacheFactory'

使用核心3.1.2/缓存3.1.2

[INFO] 原因:org.datanucleus.exceptions.NucleusUserException:二级缓存“jcache”已注册为使用类“org.datanucleus.cache.jcache.JCacheLevel2Cache”但未找到。请检查您的 CLASSPATH 和插件规范。

我无法弄清楚要添加什么来解决这两个问题。

当我使用时,<property name="datanucleus.cache.level2.type" value="javax.cache" />我收到以下错误:

[INFO] 原因:org.datanucleus.exceptions.NucleusUserException:二级缓存“javax.cache”已注册为使用类“org.datanucleus.cache.JavaxCacheLevel2Cache”但未找到。请检查您的 CLASSPATH 和插件规范。

我已经尝试了以下设置,persistence.xml但都不起作用:

以下是我的相关配置设置:

持久性.xml

<property name="datanucleus.cache.level2.name" value="entitycache" />
<property name="datanucleus.cache.level2.type" value="javax.cache" />

<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/库

-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

我必须添加/删除/修改什么才能使其正常工作?

4

1 回答 1

3

如您引用的答案中所述,App Engine 实现了“旧”JSR107 接口,Datanucleus 3.1+ 通过在 persistence.xml / jdoconfig.xml 中设置以下属性来支持该接口:

<property name="datanucleus.cache.level2.type" value="jcache" />

(见http://www.datanucleus.org/products/accessplatform/jpa/cache.html#jcache

您还需要添加以下 Maven 依赖项:

<!-- JSR 107 API -->
<dependency>
    <groupId>net.sf.jsr107cache</groupId>
    <artifactId>jsr107cache</artifactId>
    <version>1.1</version>
</dependency>
<!-- App Engine Memcache JSR 107 implementation -->
<dependency>
    <groupId>com.google.appengine</groupId>
    <artifactId>appengine-jsr107cache</artifactId>
    <version>${appengine.target.version}</version>
</dependency>
<!-- Datanucleus cache extension to use a JSR 107 implementation as L2 cache -->
<dependency>
    <groupId>org.datanucleus</groupId>
    <artifactId>datanucleus-cache</artifactId>
    <version>3.1.3</version>
</dependency>

根据您提供的信息,您可能缺少第二个?

于 2014-01-10T09:57:39.863 回答