javax.cache
它如何适应Java生态系统
该标准由JSR107开发,作者是共同规范负责人。 JSR107包含在JSR342开发的Java EE 7中。 Java EE 7将于2012年底完成。但是与此同时,javax.cache将在Java SE 6和更高版本以及Java EE 6环境以及Spring和其他流行环境中运行。
JSR107具有草稿状态。 目前,我们的API版本为0.3,参考实现和TCK。 本文中的代码示例适用于此版本。
采用
作为专家组的活跃成员或对实施该规范表示出兴趣的供应商是:
- 兵马俑– Ehcache
- Oracle –一致性
- JBoss – Infinispan
- IBM – ExtemeScale
- SpringSource – Gemfire
- 电网增益
- 最高温度
- Google App Engine Java
Terracotta将为Ehcache发布一个模块,使其与最终草案一致,然后在最终版本需要时对其进行更新。
特征
从设计的角度来看,基本概念是CacheManager,用于保存和控制Cache的集合。 缓存具有条目。 基本的API可以像地图一样,具有以下附加功能:
- 原子操作,类似于java.util.ConcurrentMap
- 直读缓存
- 直写式缓存
- 缓存事件监听器
- 统计
- 交易,包括所有隔离级别
- 缓存注释
- 具有定义的键和值类型的通用缓存
- 按引用定义存储(仅适用于堆缓存)和按值存储
可选功能
我们没有采用针对不同用户群体(例如Java SE和Spring / EE)的规范,而是采用了不同的方法。
首先,对于Java SE样式缓存,没有依赖性。 对于Spring / EE,您可能希望使用注释和/或事务,这些框架将满足相关性。
其次,我们通过ServiceProvider.isSupported(OptionalFeature功能)具有功能API,因此您可以在运行时确定实现的功能。 可选功能包括:
- storeByReference-storeByValue是默认值
- 交易性的
- 注解
这使得实现有可能在不必支持所有功能的情况下支持规范,并允许最终用户和框架发现功能是什么,以便他们可以动态配置适当的用法。
适用于独立和分布式缓存
尽管该规范没有强制要求特定的分布式缓存拓扑,但是可以意识到缓存很可能是分布式的。 我们有一个API涵盖了这两种用法,但它对分布式问题很敏感。 例如,CacheEntryListener具有侦听事件的NotificationScope,以便可以将事件限制为本地传递。 我们没有像keySet()和values()这样的网络成本