重大飞跃:Spring Roo 1.1.0 发布!

工程 | Ben Alex | 2010年10月27日 | ...

经过十多个月的开发和近900项改进,Spring Roo 1.1.0 已经发布(在此下载)! 恰逢 Spring Roo 1.1.0 正式版发布,Google Web ToolkitSpringSource Tool SuiteAspectJAJDT 团队也完成了对正式版的支持,以便您可以享受这些工具的最新版本协同工作带来的便利。

我们在 Spring Roo 1.1.0 中引入了许多新功能,难以决定重点介绍哪些方面。 不过,让我们简要浏览一下为您的 Java 编程乐趣添加的一些好东西。

增量数据库反向工程

现在可以反向工程现有的关系数据库,并自动创建具有相应字段的 Roo 实体。 但是,使用 JPA 工具很久以前不就可以做到这一点了吗?是的,当然可以。关键的区别在于 Roo 的数据库反向工程是**增量式**的。这意味着当 Roo 反向工程数据库时,它会将发现的所有字段放入类型间声明 (ITD) 中。这与 Roo 的其余部分一致,并允许 Roo 轻松地实现反向工程实体的往返维护。特别是,您可以重复地重新内省数据库以识别任何更改,同时确保您在 .java 源代码中编写的任何代码都得以保留。Roo 甚至会删除不再存在的实体(除非您要求 Roo 不要这样做),并且 Roo 自动处理复合主键等复杂情况(包括标识符类的创建和维护)。最重要的是,Roo 的反向工程功能无需询问您任何问题即可完成。这项新功能将 Roo 的可用性体验提升到了一个新的高度,而这项任务在以前一直很繁琐、耗时,并且会产生杂乱的 .java 文件,这些文件无法提供增量刷新功能。

增量反向工程是我们收到的关于 Roo 的最受欢迎的功能请求(最受欢迎),获得了约 129 票社区投票。在 1.1.0 开发周期中,它进行了大量的测试,我们发现社区的反馈非常宝贵。我们甚至有人成功地反向工程了拥有超过 440 个表的架构,并且我们对 Roo 进行了调整以在这种情况下提供可靠的性能。

要创建一个新项目并反向工程关系数据库,只需要三个无需提问的命令(所有这些命令都提供 Roo 的普通制表符辅助功能以节省您的输入时间)

project --topLevelPackage com.foo.rootest
persistence setup --provider HIBERNATE --database POSTGRES --userName rootest --password rootest
database reverse engineer --package ~.domain --schema dbretest 

当然,您可以根据需要重复“数据库反向工程”命令,Roo 将仅使用对架构所做的更改来仔细更新您的实体。如果重复该命令,则无需重复“包”或“架构”选项,因为 Roo 会记住您在初始命令中使用的那些选项。

至于 Roo 需要连接到您的数据库以执行内省的 JDBC 驱动程序,我们在 Roo 发行版中提供了一些常用生产开源数据库(例如 Postgres、MySql)的驱动程序。如果您有其他数据库,只需键入“script install-jdbc-drivers.roo”并重新启动 Roo 即可访问 Oracle、Microsoft SQL Server、HSQLDB、H2、Derby 等。

Spring MVC 增强功能

我们结合了您对 Roo 1.0 的反馈,并显著增强了 Roo 1.1.0 中可用的 Spring MVC 功能。例如,现在可以自动往返 JSPX 文件。这意味着您现在可以随时以任何方式编辑脚手架 JSPX 文件,Roo 将自动检测您所做的更改。如果 Roo 需要出于某种原因编辑该文件(例如,您已向实体添加了新字段,删除了一个字段等),Roo 将自动安全地将其更改与您的任何更改合并。如果您对给定的 HTML 元素进行了任何编辑,Roo 将始终保留您的更改,并且您的更改将具有优先权——正如您所期望的那样。

JSPX 往返支持的另一个改进是更优雅地使用标签库来封装标记创建。这意味着 Roo 1.0 中的 200 行 JSPX 文件在 Roo 1.1.0 中现在只有 12 行。标记的重复现在已移入基于 JSPX 的标记中,使您可以轻松地进行影响应用程序中所有页面的编辑。因此,您现在拥有更轻松的维护、自动往返以及简洁、集中、无杂乱的 JSPX 页面!您可以在参考指南的Web MVC 附加组件部分中阅读有关所有这些工作原理的更多信息。

对 Spring MVC 支持的其他增强包括消除 URL 重写过滤器,因为此功能现在已集成到 Spring 本身中。现在可以使用“web mvc install language”命令从第三方附加组件安装额外的本地化包。这尤其有用,因为它允许外部开发人员维护本地化(我们甚至创建了一个附加组件创建命令来简化这些本地化附加组件的生成)。

Spring MVC 脚手架现在还支持嵌入来自 16 个社交媒体网站的内容。使用新的“web mvc embed”命令添加来自 YouTube、Google 视频、Vimeo、Viddler、Screenr、UStream、LiveStream、Flickr、Picasa、Google 演示文稿、Scribd、SlideShare、Google 地图、Google Wave、Twitter 和 Wikinvest 等网站的内容非常简单。

对 Spring MVC 功能的这些广泛改进的补充是自动 JSON REST 支持。要查看它的实际效果,请运行“script clinic.roo”命令,然后运行“json all”命令,使用 Web UI 创建所有者,然后使用此命令列出所有所有者:curl -v -H 'Accept: application/json' -X GET https://127.0.0.1:8080/petclinic/owners/

Google Web Toolkit (GWT) 2.1

我们于 2009 年底开始与 Google合作,我们的工程团队一直在紧密合作以提供一套集成的开发人员技术。在 2010 年 5 月的Google I/O 第一天主题演讲中,我们展示了我们在 Spring Roo 和Google Web Toolkit互操作性方面的早期工作。我们继续增强这种互操作性,现在您可以使用 Roo 构建使用最新 GWT 2.1 功能(例如RequestFactoryMVP 框架数据绑定小部件等)的完整 GWT 应用程序。

与这些功能相关的是 SpringSource Tool Suite 2.5.0 中新的 Google 插件支持。SpringSource Tool Suite 不仅具有广泛的 Spring Roo 1.1.0 支持(例如嵌入式 Roo shell),还通过包含Google Plugin for Eclipse提供了开箱即用的 Google Web Toolkit 开发支持。

您可以通过使用我们的费用示例来试用最新的 GWT 支持。您可以在 Spring Roo 下载的 /samples 目录中找到它。或者,您可以简单地创建项目并通过以下命令运行它

mkdir expenses
cd expenses
roo
roo> script expenses.roo
roo> quit
mvn gwt:run

Google App Engine (GAE)

同样作为上述与 Google 合作的一部分,我们确保可以构建 Roo 应用程序以部署到Google App Engine。GAE 提供了一种构建应用程序的可扩展方法,并包括诸如免费使用配额Google App Engine for Business之类的选项。

SpringSource Tool Suite 中也进行了增强,以更好地支持 Roo 创建的 Google App Engine 项目。例如,STS 管理 GAE 持久性所需的Data Nucleus 1 enhancer插件的生命周期。所有这些都与m2eclipse的内置支持集成在一起,这是在基于 Eclipse 的 IDE(如 STS)中管理 Roo 项目的典型方式。

您可以通过使用 expenses-gae.roo 示例脚本试用最新的GAE 支持。您同样可以在 Roo 的 /samples 分发目录中找到它。您将在即将发布的 Roo 1.1.1 中看到对我们的 GAE 支持的进一步改进

Apache Solr 搜索服务器

Apache Solr 是基于 Apache Lucene 的搜索服务器。Solr 允许您拥有一个专用的搜索服务器来索引您的对象并通过 REST API(也支持 JSONP)查询它们。

Roo 1.1.0 添加了 Solr 集成,确保每当创建、更新或删除实体时,都会自动通知 Solr 搜索服务器。它还在您的实体中添加了各种与 Solr 相关的便捷方法,例如一个 `search(String)` 方法,该方法将自动向您的 Solr 服务器分派自由文本搜索查询并查找匹配的实体。通过 Roo ITD 向实体添加了其他类似的搜索和索引管理相关方法。

要了解如何在 Roo 基于应用程序中设置 Solr 服务器并使用它,只需访问参考指南的Solr 部分

JSON 支持

JavaScript 对象表示法 (JSON) 是一种具有吸引力的序列化格式,原因有很多,例如其优化的浏览器“eval”支持、轻量级易于阅读的编码格式以及大量跨平台库支持。

在 Roo 1.1.0 中,我们添加了支持,允许任何 Java 对象轻松地转换为 JSON 表示形式并从 JSON 表示形式转换。新的方法,如 `toJson()`、`fromJson(String)` 和数组相关的 JSON 处理方法,都是通过 Roo ITD 自动管理的。只需在您的 Java 类中添加 `@RooJson` 注解,您就可以自动获得此支持。

可序列化附加组件

大多数 Java 开发人员都经历过维护 `serialVersionUID` 的繁琐任务 `java.io.Serializable` 类。

使用 Roo 1.1.0,您无需担心序列化警告。只需在您的 Java 类上添加 `@RooSerializable` 注解即可,无需其他操作。Roo 将为您实现 Serializable 接口,并自动维护版本 UID。

库更新

当然,我们已经更新到最新的库版本,以便您的基于 Roo 的项目始终能够访问最新的功能和错误修复。基于 Roo 的项目现在默认使用以下新版本:

  • JPA 2(以及对 JPA 实现的相应更新)
  • Spring Framework
  • Spring Security
  • Spring Web Flow
  • Log4j
  • Apache ActiveMQ
  • AspectJ
  • GWT

可用性

我们持续改进可用性,旨在让您的开发过程更轻松愉快。我们最新的可用性增强功能包括:

  • 控制台消息现在更有意义,例如,会告诉您哪些依赖项正在添加到您的 pom.xml 文件中。
  • 命令选项现在不区分大小写,确保您可以更轻松地输入(当然,如果您使用 TAB 键,大小写将始终正确)。
  • 我们现在尽可能地使用来自Maven Central的依赖项标识符(不再像 Roo 1.0 中那样使用企业捆绑包存储库 ID)。
  • 升级现在更容易,因为 Roo 将自动更新 Roo 注解 JAR到当前的 Roo 版本。
  • 现在有一个新的闪现消息区域,用于在 Roo 命令窗口顶部显示长时间运行操作的状态更新(在操作系统支持的情况下;我们建议使用任何 Linux、Windows 或 OSX 的 iTerm shell 以获得最佳体验)。
  • 您的操作系统的窗口标题将自动显示 Roo 版本或项目标识符(目前 Windows 上不可用,但很快就会实现)。
  • 与 OSGi 相关的消息现在已记录,以便于调试。
  • 注释现在可以以""开头,与配置文件和 shell 脚本约定一致。
  • 现在为"提示"主题提供 TAB 辅助。
  • AspectJ ITD 文件中现在有提醒不要编辑它们。
  • 增强了对Cygwin原生 Windows 启动脚本的 Windows 支持。

Roo 现在基于 OSGi。

Roo 1.0 和 1.1.0 之间一个主要的——但很大程度上难以察觉的——变化是转向OSGi 基础。我们使用Apache Felix作为我们的 OSGi 框架,以及服务组件运行时 (SCR)用于组件管理,以及OSGi 捆绑包存储库 (OBR)用于捆绑包解析。这些关键变化的发生是为了确保 Roo 的附加组件基础架构基于模块化、经过验证的、远程依赖项可解析的类路径管理模型。像 Eclipse 这样的现代 IDE 也基于 OSGi,因此这种用于工具模块化和可扩展性的方法已经很好地确立。

与此更改相关的是,我们需要“包装”Roo 自身运行所需的许多依赖项。因此,我们创建了一个包装模块来满足此要求,同时也为 Roo 附加组件开发人员提供了一个示例技术。

那些有兴趣深入研究 Roo 的 OSGi 内部机制的人可以通过键入“osgi”并按 TAB 键来交互式地进行操作。Roo 中现在包含许多新的 OSGi 命令。这些命令中的大多数都对附加组件开发人员而不是普通的 Roo 用户感兴趣。您甚至可以通过键入osgi 框架命令,然后是正常的 Felix 命令,直接向 Felix 运行时分派命令。

附加组件创建、发布、RooBot 和 PGP 签名安全

我们添加 OSGi 支持的原因之一是,我们可以支持围绕 Roo 进行开发的第三方附加组件社区。编写附加组件是一回事,但您还需要一种简单的方法让社区找到感兴趣的附加组件并安装它。您还需要一个强大且经过验证的安全模型,以便只有您信任的开发人员才能编写安装到您计算机上的附加组件。您还需要一种方法让附加组件开发人员能够在他们喜欢的任何地方开发和托管附加组件,同时仍然为他们提供一些合理的默认值,以便他们能够快速获得结果。

为了帮助人们快速开始开发附加组件,我们在 Roo 中添加了一个附加组件创建器。只需使用新的addon create命令。此命令不仅会为您创建一个附加组件框架,还会将其配置为在Google Code上开箱即用地托管,并确保您的项目的OSGi 捆绑包存储库 (OBR)文件在您使用部署目标时自动更新。OBR 文件甚至使用“httppgp://”作为协议,因此您的附加组件与我们基于PGP的分散式安全基础架构相结合。因此,您只需几分钟即可从空目录创建一个正确托管的、OBR 列表中的、安全模型兼容的附加组件。

当然,您可以将 OBR 存储库 URL 分发给您的朋友和粉丝,他们可以使用“osgi obr url add”命令来添加它。但是,还有更好的方法。只需将 OBR 存储库 URL 发送电子邮件到[email protected]。我们的 RooBot 服务器将访问您的 OBR 文件并定期监控其更改。然后,它将使用有效且安全模型兼容的附加组件更新roobot.xml文件,该文件位于http://spring-roo-repository.springsource.org上。所有 Roo 实例都将发现您的附加组件,因为它们在运行时将下载 roobot.xml 的副本。

然后,Roo 用户可以通过键入addon install命令来安装您的附加组件。TAB 辅助甚至可以完成您的附加组件的名称。一旦他们按下 ENTER 键,您的 OBR 文件将被添加到他们的 Roo 安装中,并将尝试下载。但是,由于httppgp://协议,Roo 只有在用户的 PGP 密钥受到信任(或者他们键入了“pgp automatic trust”如果他们信任所有人)的情况下,才会允许下载完成。

Roo 用户发现您的附加组件的另一种方法是简单地键入您的附加组件提供的命令。Roo 将自动列出提供该命令的所有已知附加组件。“addon list”命令也可以帮助人们找到您的附加组件。

在 Roo 1.1.0 中,编写附加组件也变得更容易。我们添加了新的“Joey”基础架构和更好的抽象,以帮助您编辑公共文件

项目更改

我们在 Roo 1.1.0 中所做的其他更改包括:

结论

如果您是 Spring Roo 的新手,并希望利用所有这些功能,只需下载 Roo并遵循参考指南的入门章节。我们还为希望将其项目升级到此新版本的现有用户准备了升级说明。您可能还需要考虑下载 SpringSource Tool Suite 2.5.0 (STS),因为它具有许多 Roo 和 Google 特定的功能,可以使您的开发生活更轻松。事实上,如果您下载 STS,您可以跳过下载 Roo,因为 STS 2.5.0 为您的方便集成了 Roo 1.1.0。

下个月我们将发布 Roo 1.1.1。我们目前正在完成并包含在 Roo 1.1.1 中的许多小的改进,因此请尽快查看。关注@SpringRoo工程团队的 Twitter 是了解开发和新版本的 easiest 方法。我们还鼓励您参与Spring Roo 论坛,以获取与 Roo 相关的建议和问题。在论坛上,您可以获得来自友好的 Roo 社区以及 Roo 和 GWT 团队工程师的帮助。

我们希望您像我们开发它一样享受使用 Spring Roo 1.1.0。

获取 Spring 新闻通讯

与 Spring 新闻通讯保持联系

订阅

领先一步

VMware 提供培训和认证,以加快您的进度。

了解更多

获取支持

Tanzu Spring在一个简单的订阅中提供对OpenJDK™、Spring和Apache Tomcat®的支持和二进制文件。

了解更多

即将举行的活动

查看 Spring 社区中所有即将举行的活动。

查看全部