Каковы правильные настройки для включения кэширования JPA уровня 2?

Я пытаюсь выяснить, как настроить JPA 2.0 для использования Memcache в качестве кеша уровня 2 в Google App Engine 1.8.7.

Я нашел инструкции годовой давности и они сейчас не работают.

Вот ошибки, которые я получаю:

Когда я использую <property name="datanucleus.cache.level2.type" value="jcache" />, я получаю следующую ошибку:

С ядром 3.1.4/кешем 3.1.2:

[INFO] Причина: net.sf.jsr107cache.CacheException: не удалось найти класс: ri.cache.BasicCacheFactory.

С ядром 3.1.2/кешем 3.1.2:

[INFO] Причина: org.datanucleus.exceptions.NucleusUserException: Кэш уровня 2 «jcache» зарегистрирован для использования класса «org.datanucleus.cache.jcache.JCacheLevel2Cache», но он не найден. Пожалуйста, проверьте свой CLASSPATH и спецификацию плагина.

Я не смог понять, что добавить, где решить любую проблему.

Когда я использую <property name="datanucleus.cache.level2.type" value="javax.cache" />, я получаю следующую ошибку:

[INFO] Причина: org.datanucleus.exceptions.NucleusUserException: Кэш уровня 2 «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" />

пом.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

Что мне нужно добавить/удалить/изменить, чтобы это заработало?


person Community    schedule 04.12.2013    source источник
comment
Вы не публикуете трассировки стека, поэтому понятия не имеете, откуда берутся эти исключения. Класс JCache явно находится в банке datanucleus-cache, а класс sourceforge.net/p/datanucleus/code/HEAD/tree/platform/cache/ Все это определено в документации по адресу datanucleus.org/products/accessplatform_3_1/jpa/ В журнале также будет указано что прописано в CLASSPATH и т.д.   -  person DataNucleus    schedule 04.12.2013


Ответы (1)


Как указано в ответе, на который вы ссылались, 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>

Судя по предоставленной вами информации, вам, вероятно, не хватало второго?

person David Geiger    schedule 10.01.2014