В этом посте рассказывается о 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 определяет интерфейсы, которые, конечно же, реализуются различными поставщиками, также называемыми провайдерами.
- Oracle Coherence
- Hazelcast
- Infinispan
- EHCache
- Эталонная реализация — это скорее для справочной цели, а не для реализации качества продукции. Это в соответствии со спецификацией, и вы можете быть уверены, что он действительно проходит TCK
С точки зрения приложения все, что требуется, — это реализация, присутствующая в пути к классам. 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-jcache.jar квалифицирует его как допустимую реализацию провайдера JCache.
Хотите узнать о Oracle Coherence?
- Страница быстрого стартера
- Документация
- Монтаж
- Дополнительная информация о Coherence и JCache combo — документация по Oracle Coherence
JCache на Java One 2014
Пара замечательных бесед, посвященных JCache на Java One 2014
- Приходите, код, кэш, вычисления! Стив Миллидж
- Используя Новый JCache Брайаном Оливером и Грегом Лаком
Надеюсь, это было весело ?
Ура!