写点什么

JSR-107(JCache)正在制定当中,将成为 Java EE 7 的一部分

  • 2011-09-11
  • 本文字数:2390 字

    阅读完需:约 8 分钟

分布式缓存在提升性能和可伸缩性时举足轻重,但 Java 目前还没有任何完整、标准的缓存机制。JSR-107(JCache API)正在紧锣密鼓的制定当中,以后会成为 Java EE 7 的一部分。 JSR-107 这些年有些声名狼藉,因为它是一个很老的规范,但到现在还没有完成,不过随着对缓存的需求越来越多,JSR-107 最终是要问世的。

Greg Luck 是 JSR-107 规范的共同牵头人,长期参与领先的开源 Java 缓存实现 Ehcache 的开发和维护。InfoQ有幸对 Greg 进行了采访。

InfoQ:JCache 真的会成为 Java EE 7 的一部分么?

是的,Java EE 7(JSR-342)已经把 JCache(JSR-107)引入为候选者了。 JSR-342 规范的领导者已经对 JSR-107 展开了评测。JSR-107 规范有一个强制的功能集和两个可选功能:注解和 JTA。我们想让 Java EE 7 引入的正是这个完整版本。同时,我们还和 Java EE 7 规范的领导者 Linda DeMichiel,以及 Oracle 的 Java EE 7 团队进行着密切的协调合作。

InfoQ:缓存对 Java EE 和 Java 来说,似乎是一个重要却缺失的功能,你觉得 JCache 为什么会花这么长时间呢?

JSR-107 的规范号比较小,从这可以看出来,这个规范十年前就被想到了。它最初由 Oracle 开始做,但后来被搁置了好几年。过去三年里我一直参与其中,Terracotta 和 Oracle 在去年加强了对 JSR-107 的投入。

缓存向来都不是规划在架构里,而是企业应用在生产环境里出问题之后才添加到企业应用里的。有一个例外是 ORM,因为它本身的方法就需要一个缓存。

Greg 接着说,Java EE 7 是针对云的,规范领导者也看到了缓存的价值。可以推断一下:一旦开发人员开始用缓存解决性能问题,他们就能看到缓存的价值。然后,认为缓存很不错的开发人员在新项目和解决方案一开始就会引入缓存,而不是等到出现性能问题的时候才加以引入。

这已经让缓存成为架构里公认的一部分,而不仅仅是性能补丁。Greg 对 NoSQL 和 Ehcache 等缓存解决方案进行了对比,Ehcache 这些缓存解决方案在很多方面都试图解决同样的伸缩性问题,只是采用了不同的方式。 Ehcahe 和 Java 里的 memcached ,以及整个行业内的缓存,两者的应用都急剧增长。比如说,Memcached 是个容错的分布式缓存,从消费者的注意力份额(Mindshare)来讲,2007 年它还相对默默无闻,现在则超越了位列第一的商业分布式缓存Oracle Coherence(Coherence 自身也在增长),这表明缓存的市场有很大潜力。

Greg 就职的 Terracotta 已经开始在 Ehcache 里实现规范,其中包括 BigMemory 、Cache 资源预留等功能,同时会支持独立模式和分布式模式。 Ehcache 是众所周知的开源 Java 缓存,尤其被使用过 Hibernate 的用户所熟知。

和大多数 Java 缓存实现一样,Ehcache 有一个本地内存复制模式,这种模式和纯粹的分布式版本相比具有显著的性能优势。虽然Memcached 激发了大家对缓存解决方案的兴趣和需求,但更快、符合标准的实现也会有一席之地。有了标准API,供应商就可以有自己的实现,开源实现也能在性能、易用性、对弹性云的支持、可伸缩性等更多方面和供应商的产品展开竞争。

缓存现在似乎愈发成为企业和云解决方案的特定组件,因此很多供应商目前都正在实现或是打算实现JCache,包括 Terracotta Oracle JBoss Caucho 、IBM、 Google App Engine 等。

针对 JSR-107 和几个月前才推出的 JSR-347(数据网格 JSR)大家似乎有一些争议

InfoQ:如果 JSR-107 和 JSP-347 有重叠的内容怎么办?JSR-107 和 JSR-347 的范围是怎样划定的?

JSR-347 定义为 JSR-107 的超集,它对 JSR-107 有一个依赖,额外增加了数据网格功能。JSR-107 进行了精心设计,同时支持独立缓存和分布式缓存,与分布式缓存实现的拓扑结构没有关系。JSR-107 已接近尾声,我们希望这对 JSR-347 的定义有所帮助。

JSR-347 定义了回收、复制、分发和事务的行为。JSR-347 花费了更多的精力去定义一套健壮的异步非阻塞 API,这对数据网格来说是很重要的。JSR-347 会增加更多的 API,也会同时支持 JSR-107 的 API。

InfoQ:JSR-107 是不是只关注 Java EE?对 Java SE 有关注么?

JCache 是针对 Java EE 的,但并不妨碍 Java SE 使用它。Ehcache 等实现在 Java SE、Java EE 和 Spring 上都能运行。

API 分成两部分:没有依赖的基本 Profile,这在 Java SE 上就可以使用;添加了 JTA 和缓存方法注解的完整 Profile。完整版本是针对 Java EE 6、Spring 和其他企业环境的,在现有的企业环境里都能工作。被纳入 Java EE 7 之后,Java 开发人员就会意识到可以使用它。我们希望 JSR 166 组能为 JDK 8 构建一个简单的进程内缓存。

InfoQ:JCache 的进展、过程和设计有哪些主要的变化和改进?

我们已经构建了 API、RI(参考实现)和 TCK(技术兼容性套件),正在把它们发布到 oss.sonatype.org 上。所有的源代码都放在 GitHub 上。GitHub 上的 Readme 给出了完整的介绍和链接。整个过程和规范都是开放的,源代码和社区也都是开放的。

从设计的角度看,基本组成部分有一个 CacheManager,用来持有、控制缓存集合。缓存有一些条目。我们还有一个类似 API 的映射,可以和以下附加功能进行交互:

  1. 原子操作
  2. 通过缓存读取
  3. 通过缓存写入
  4. 缓存事件监听器
  5. 统计
  6. 事务
  7. 注解

缓存很多地方都用了泛型。我们不限制分布式缓存的拓扑结构,处理分布式缓存时也比较谨慎。Terracotta 和 Oracle 都出售分布式缓存产品,我们打算让这套 API 有助于这些产品的应用。

开发人员会发现这套 API 简单而强大,并且涵盖了大多数情况。

JSR-107 公开了它的邮件列表,把规范也发布为公开的 Google 文件,对 JSR 如何公开来说,这已经达到一定高的标准了。和过去的一些 JSR 相比,JSR-107 的做法是一个里程碑。

JSR-107 姗姗来迟,但最终会问世。分布式缓存在提升性能和可伸缩性时举足轻重,好在 Java 将有用于缓存的标准 API。Java 世界里,分布式缓存的需求有非常大的潜力,JSR-107 最有可能为 Java 的前景锦上添花。

查看英文原文: JSR-107, JCache: Alive and Going to be Part of Java EE 7

2011-09-11 10:173989
用户头像

发布了 151 篇内容, 共 61.8 次阅读, 收获喜欢 18 次。

关注

评论

发布
暂无评论
发现更多内容

架构实战营模块 5 作业

白杨

如何清理优化你的Mac?MacCleaner Pro系统综合清理释放磁盘空间!

Rose

磁盘清理 mac系统清理优化软件 MacCleaner Pro下载 如何清理苹果电脑

TypeScript常用代码块

青柚1943

TCP协议中的粘包和半包问题

做梦都在改BUG

TCP TCP协议 粘包 半包

失真的概念和定义

timerring

信息论 信息论与编码

Web & WebDav Server在Mac上创建Web服务器

Rose

Web 服务器 mac软件下载 Web & WebDav Server破解

VMware fusion pro13下载 VM虚拟机安装教程

理理

VMware Fusion Pro 13 VMware Fusion虚拟机 VM虚拟机破解版

Django笔记三之使用model对数据库进行增删改查

Hunter熊

Python django model 增删改查

Github标星42K!不愧是腾讯云大神亲码的“redis深度笔记”

采菊东篱下

Java redis 面试

DDD洋葱架构才是 yyds!阿里大牛手记(DDD)领域驱动设计应对之道

做梦都在改BUG

Java 领域驱动设计 DDD 架构师

前端面试实录HTTP篇

Immerse

https HTTP 前端面试 前端已死

在Vue中,为什么从 props 中解构变量之后再watch它,无法检测到它的变化?

Lee Chen

JavaScript Vue3

Vue3常用代码块

青柚1943

Mac 无线网络扫描工具:WiFi Explorer 3.4.2 (57)激活汉化版

真大的脸盆

无线管理 wifi工具

QEMU事件循环机制

Linux内核拾遗

Linux Kenel 虚拟化 事件和事件循环 qemu kvm

千亿流量并发治理!Alibaba实战Sentinel笔记,为微服务保驾护航

做梦都在改BUG

Java 微服务 sentinel 高并发 流量治理

Photoshop如何更改语言?最新版PS2023自带中英文语言切换

理理

Photoshop 2023下载 Photoshop 2023破解版 PS2023下载 如何切换PS语言

OpenTiny 的这些特色组件,很实用,但你应该没见过

Kagol

开源 前端 Vue3 组件库

macOS 网站下载和离线浏览工具:SiteSucker Pro中文版

Rose

苹果软件资源站 SiteSucker Pro中文 整站下载工具 SiteSucker Pro Mac版

LED显示屏近年来在中国的发展趋势

Dylan

LED显示屏 全彩LED显示屏 led显示屏厂家

5分钟搞懂NESAS

俞凡

安全 网络 通信

MacOS SVN 客户端:Cornerstone 4永久许可证

理理

Mac 系统 SVN客户端 Cornerstone for Mac Cornerstone下载 Cornerstone 4

阿里云可观测 2023 年 3 月产品动态

阿里巴巴云原生

阿里云 云原生 可观测

王者荣耀商城异地多活架构设计

白杨

intellijidea卸载重装无法打开怎么办?IntelliJ IDEA彻底卸载教程

Rose

IntelliJ IDEA 2023下载 IntelliJ IDEA 2023破解 IntelliJ IDEA 2023最新 IntelliJ IDEA卸载

了解5G安全标准,看这一篇就够了

俞凡

安全 网络 通信

AI日课@20230407:别为下一代过虑;现在多多体验产品

无人之路

ChatGPT

PreSonus Studio One 6 Pro最新版v6.1.1中文下载 (音乐创作编辑软件)

Rose

Studio One6 Studio One 许可证 Studio One 破解 音乐制作软件

LG电视如何投屏?Mirror for LG TV智能投屏工具轻松解决

Rose

mac软件下载 LG电视 投屏软件 Mirror for LG TV

D-ONE计划解读|得帆云DeCode持续引领低代码产品演进!

得帆信息

新产品 低代码平台 aPaaS

Bettertouchtool for Mac(触摸板增强神器)使用教程

理理

BetterTouchTool破解 BetterTouchTool教程 Mac触控板增强

JSR-107(JCache)正在制定当中,将成为Java EE 7的一部分_Java_Rick Hightower_InfoQ精选文章