Статьи

Проникнуть в API JCache (JSR 107)

В этом посте рассказывается о API JCache на высоком уровне и дается тизер — этого достаточно, чтобы вы (надеюсь) начали испытывать зуд ?

В этом посте…

  • Обзор JCache
  • JCache API, реализации
  • Поддерживаемые (Java) платформы для JCache API
  • Быстрый взгляд на Oracle Coherence
  • Забавные вещи — Project Headlands (RESTified JCache от Adam Bien), беседы по JCache на Java One 2014, ссылки на ресурсы для получения дополнительной информации о JCache

Что такое JCache?

JCache (JSR 107)  — это стандартный API-интерфейс для Java. Он предоставляет API для приложений, чтобы иметь возможность создавать и работать с кэшем в памяти объектов. Преимущества очевидны — не нужно концентрироваться на более тонких деталях реализации кэширования, а время лучше тратить на основную бизнес-логику приложения.

Компоненты JCache

Сама спецификация  очень компактна и удивительно интуитивна. API определяет высокоуровневые компоненты (интерфейсы), некоторые из которых перечислены ниже

  • Caching Provider  — используется для управления менеджерами кэширования и может работать с несколькими из них,
  • Cache Manager  — занимается созданием, чтением, уничтожением операций на кеше
  • Кэш  — хранит записи (фактические данные) и предоставляет интерфейсы CRUD для работы с записями.
  • Entry  — абстракция поверх пары ключ-значение, похожая на java.util.Map
JCache-высокоуровневые-компоненты

Иерархия компонентов JCache API

Реализации JCache

JCache определяет интерфейсы, которые, конечно же, реализуются различными поставщиками, также называемыми провайдерами.

С точки зрения приложения все, что требуется, — это реализация, присутствующая в пути к классам. API также предоставляет способ дальнейшей тонкой настройки свойств, специфичных для вашего провайдера, с помощью стандартных механизмов.

Вы должны иметь возможность отслеживать список реализаций ссылок JCache по ссылке на  сайте JCP.

public class JCacheUsage{
    public static void main(String[] args){
        //bootstrap the JCache Provider
        CachingProvider jcacheProvider = Caching.getCachingProvider();
        CacheManager jcacheManager = jcacheProvider.getCacheManager();
        //configure cache
        MutableConfiguration<String, Integer> jcacheConfig = new MutableConfiguration<>();
        jcacheConfig.setTypes(String.class, MyPreciousObject.class);
        //create cache
        Cache<String, MyPreciousObject> cache = jcacheManager.createCache("PreciousObjectCache", jcacheConfig);
        //play around
        String key = UUID.randomUUID().toString();
        cache.put(key, new MyPreciousObject());
        MyPreciousObject inserted = cache.get(key);
        cache.remove(key);
        cache.get(key); //will throw javax.cache.CacheException since the key does not exist
    }
}

Обнаружение провайдера JCache

  • Обнаружение поставщика JCache происходит автоматически, когда у вас есть только один поставщик JCache в пути к классам
  • Вы также можете выбрать один из следующих вариантов
//set JMV level system property
-Djavax.cache.spi.cachingprovider=org.ehcache.jcache.JCacheCachingProvider
 
//code level config
System.setProperty("javax.cache.spi.cachingprovider","org.ehcache.jcache.JCacheCachingProvider
 
//you want to choose from multiple JCache providers at runtime
CachingProvider ehcacheJCacheProvider = Caching.getCachingProvider("org.ehcache.jcache.JCacheCachingProvider");
 
//which JCache providers do I have on the classpath?
Iterable<CachingProvider> jcacheProviders = Caching.getCachingProviders();

Поддержка платформы Java

  • Соответствует Java SE 6 и выше
  • Не определяет никаких деталей с точки зрения интеграции Java EE. Это не означает, что его нельзя использовать в среде Java EE — он просто еще не стандартизирован.
  • Не может быть подключен к  Java EE 7  в качестве испытанного стандарта
  • Кандидат на  Java EE 8

Headlands проекта : Java EE и JCache в тандеме

  • Никто иной, как   сам Адам Бин !
  • Java EE 7, Java SE 8 и JCache в действии
  • Предоставляет API JCache через JAX-RS (REST)
  • Использует Hazelcast в качестве провайдера JCache
  • Настоятельно рекомендуется !

Oracle Coherence

Этот пост посвящен высокоуровневым вещам относительно JCache. Тем не менее, несколько строк об Oracle Coherence в целом помогут в перспективе

когерентность-логотип

  • Oracle Coherence является частью  стека Oracle  Cloud Application Foundation.
  • Это в первую очередь решение для сетки данных в памяти
  • Направлена ​​на то, чтобы сделать приложения в целом более масштабируемыми
  • Важно знать, что начиная с версии  12.1.3  , Oracle Coherence включает эталонную реализацию для JCache (подробнее в следующем разделе)

Поддержка JCache в Oracle Coherence

  • Поддержка JCache подразумевает, что приложения теперь могут использовать стандартный API для доступа к возможностям Oracle Coherence.
  • Это стало возможным благодаря Coherence, просто предоставив абстракцию поверх существующих интерфейсов (NamedCache и т. Д.). Приложение имеет дело со стандартным интерфейсом (JCache API), а вызовы API делегируются существующей реализации базовой библиотеки Coherence.
  • Поддержка JCache API также означает, что не нужно использовать специфичные для Coherence API в приложении, что приводит к независимому от поставщика коду, что равнозначно переносимости.
    Как иронично — поддержка стандартного API и постоянная охота на конкурентов ? Но эй! Вот что такое здоровая конкуренция и качественное программное обеспечение!
  • Говоря о здоровой конкуренции — Oracle Coherence поддерживает  множество других функций  в дополнение к стандартным возможностям, связанным с JCache.
  • Распределение Oracle Coherence содержит все библиотеки для работы с реализацией JCache.

coherence_lib

  • Файл определения сервиса в coherence-jcache.jar квалифицирует его как допустимую реализацию провайдера JCache.

сервис определения

Хотите узнать о Oracle Coherence?

JCache на Java One 2014

Пара замечательных бесед, посвященных JCache на Java One 2014

Надеюсь, это было весело ?

Ура!