WildFly 10, JCache - метод кеширования
У меня есть простое приложение, используя Spring Boot. Я хотел разрешить метод кэширования с JSR107 - JCache. Итак, с помощью учебника я собрал этот код:
@CacheResult(cacheName = "testpoc")
public Country getCountry(Integer id){
System.out.println("---> Loading country with code '" + id + "'");
return new Country(id, "X", "Title");
}
с этим файлом POM
...
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.4.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
<version>1.4.0.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.cache</groupId>
<artifactId>cache-api</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
...
(зависимость 'spring-boot-starter-web' существует для простого сервиса REST, который вызывает метод getCountry)
Все работает так, как сказано в документации - метод вызывается только один раз.
Теперь я хотел попробовать это на сервере приложений WildFly 10
Я изменил файл POM:
- исключенный кот
- исключен spring-boot-starter-cache
- добавлен infinispan-jcache (потому что я хочу использовать кэш, настроенный / управляемый wildfly в standalone/domain.xml)
Проверьте файл pom здесь на pastebin.
Проблема в том, что я получаю следующую ошибку: Не удается найти кэш с именем "java:jboss/infinispan/app-cache"
(Я пытался использовать как назначенный JNDI, так и имя кэш-памяти Infispan, настроенной в wildfly).
Следующий код создал объект Cache (чтобы я мог его использовать):
CacheManager cacheManager = Caching.getCachingProvider().getCacheManager();
Cache<String, String> cache = cacheManager.createCache("testpoc", new MutableConfiguration<String, String>());
Вопрос:
- Можно ли использовать метод кэширования JCache на WildFly 10, используя Infinispan, управляемый WildFly?
- Или Infinispan следует использовать для кэширования методов, таких как JCache, следовательно, JCache обладает "большей функциональностью", чем Infinispan.
большое спасибо
PS: для меня не проблема поместить весь код на github и разместить ссылку - всего несколько строк кода...
1 ответ
Есть несколько проблем с вашим подходом, поэтому позвольте мне пройти их поэтапно.
Сначала вам нужно использовать правильную настройку Infinispan. Биты Infinispan, поставляемые с WF, следует рассматривать как внутренние или частные. Для правильного использования Infinispan в вашем приложении - либо добавьте org.infinispan:infinispan-embedded
в ваше развертывание или установить модули Infinispan Wildfly. Вы можете найти руководство по установке здесь (оно немного устарело, но, тем не менее, процедура точно такая же - распакуйте модули в WF и используйте Dependencies
MANIFEST.MF запись).
После того, как вы успешно установили Infinispan (или добавили его в свое приложение), вам необходимо решить, хотите ли вы использовать Spring Cache или JCache. Если вы заинтересованы только в использовании аннотаций - я бы порекомендовал первый, поскольку его гораздо проще настроить (все, что вам нужно сделать, это добавить @EnableCaching в одну из ваших конфигураций). Наконец, с Spring Cache вы создадите Infinispan CacheManager
боб. Пример можно найти здесь.
Последнее замечание - если вам все еще нужно использовать JCache - используйте это руководство для настройки Caching Provider.