Apache Cayenne 3.0 支持远程对象持久化和 ORM 建模工具了

  • Srini Penchikala
  • 王丽娟

2010 年 10 月 12 日

话题:JavaDevOps语言 & 开发架构

Apache Cayenne是一个开源的 Java 框架,主要用来进行对象关系映射和持久化。Cayenne 的新版本支持远程对象持久化和 ORM 建模工具。该框架早在五月份就发布了 3.0 版本。使用 Cayenne 的远程对象持久化特性,Java 对象可以通过 Web Service 持久化到客户端。此外,Cayenne 还支持数据库逆向工程和生成,以及基于 Velocity 的类生成引擎。

InfoQ 有幸联系到了 Cayenne 的副总裁 Andrus Adamchik 和项目管理委员会成员 Aristedes Maniatis,就新版本的功能和框架以后的路线图对他们进行了采访。

InfoQ:Apache 已经有OpenJPA项目了,为何还要开发另一个 ORM 框架?

Cayenne 实际上比 OpenJPA 更早一些。Cayenne 在 2002 年 7 月就发布了第一个版本,在 2006 年移到了 Apache 中。Apache 的一些项目往往是重叠的、有着类似的目标,不管怎样,最终用户的选择变多了。每个 ORM 都有不同的侧重点,并为类似的问题提供不同的解决方案。借助有效的选择,我们的功能才日渐丰富起来。

InfoQ:Cayenne 支持JPA 2.0 规范么?

不支持。我们当初做了很多工作才实现了 JPA 规范的第一个版本,但 2008 年我们决定不这么做了。实现规范不仅费工,还约束了 Cayenne 的手脚,不能实现更具创新性的方法。用户非常支持我们,我们也相信开发人员选择 Cayenne 是因为它简洁的 API 和它提供的附加功能。这些内容都不是严格遵循标准的。一直以来,Cayenne 都支持几乎所有的 JPA 概念,包括能够执行 EJBQL。

InfoQ:Cayenne 框架提供超出 JPA 规范定义的功能么?

提供。Cayenne 提供了很多创新型的功能,比如说(1)ROP(远程对象持久化),它允许远程 Java 应用访问 Cayenne Web Service,而不是直接访问数据库。这能实现多个应用层之间业务逻辑的分离,每一层都使用相同的持久化 API;(2)通用的对象映射,可以在运行时动态实例化映射关系,而不是在编译时进行;(3)嵌套的 ObjectContexts。Cayenne 还包含一个建模应用,这个应用能简化数据库和 Java 层次结构的可视化,而且一直与框架的最新版本保持同步。

InfoQ:Cayenne 框架支持哪种监控方式,以方便开发人员和操作人员查看持久化和缓存的详细信息?

Cayenne 支持类似于 JPA 的回调 / 监听器机制,还有大量内置的日志。现在已经实现了监控底层堆栈的 JMX 扩展原型,这些 JMX 扩展将纳入即将发布的 3.1 版本。此外,由于 Cayenne 查询的缓存是可插拔的,用户可以利用自己缓存提供者的事件机制去实现缓存的 JMX 监控,而不必依赖于 Cayenne。有些项目实际上已经这样去做了。

InfoQ:依赖注入(DI)容器将是后续版本的一个新特性,能否谈谈这一新特性呢?

Cayenne 的 DI 容器规模小(大约是 35K)、无 XML、易用、而且没有外部依赖(甚至不依赖于 Cayenne)。它的目标是装载、管理 Cayenne 的运行时,但在其他方面都尽量不作为。这就意味着它不会影响应用使用 Spring、Guice 等。它只会对 Cayenne 进行处理,并为用户提供扩展点,以便自定义 Cayenne 的行为。

至于实现,Cayenne 的 DI 容器受到了 Google Guice 的影响。依赖关系通过构造函数或属性注解进行配置。Cayenne 的 DI 容器支持大部分最常见的 DI 特性——绑定类、实例或实例提供者,绑定指定的 Map 和 List,启动时将多个模块合并到一个容器中,绑定作用域,平滑绑定 API,还有懒实例化。与 Guice 不同的是,我们的 DI 有作用域生命周期的概念,这个概念对 Cayenne 这样的框架来说非常重要。DI 管理的对象可以对自身的方法进行注解,以接受作用域事件,最常见的用法就是在作用域结束时释放资源。用户可以毫不费力地创建出自己的作用域和自定义事件(比如 Web 请求的作用域)。对 DI 很小的 jar 包来说,这些功能特性已经很多了。DI 现在缺少的重要功能只有动态代理和拦截器了。以后我们可能会添加进去。

InfoQ:在新特性和增强方面,Apache Cayenne 项目未来的路线图是怎样的?

最近讨论和进行的工作包括:全新的、支持泛型的查询 API,让 JPA 风格的 EJBQLQuery 和 Cayenne 传统的 SelectQuery 保持一致;在运行时能够将多个映射工程合并为一个,以提高模块化程度;继续处理不同数据库的特性;利用 DI 功能重构核心服务,以便更容易地进行扩展(这也包括上面提到的 JMX 扩展);增强 Cayenne 建模工具的功能和易用性。

但是和其他开源项目一样,开发内容都是由用户需求驱动的,而在什么情况下能取得最富有成效的进展也取决于既定的开发人员资源。

查看英文原文:Apache Cayenne 3.0 Supports Remote Object Persistence and ORM Modeling Tools

JavaDevOps语言 & 开发架构