快人一步
VMware 提供培训和认证,助力您的快速进步。
了解更多经过十多个月的开发和近 900 项独立改进,Spring Roo 1.1.0 已经发布(点击此处下载)!恰逢 Spring Roo 1.1.0 GA 版本发布,Google Web Toolkit、SpringSource Tool Suite、AspectJ 和 AJDT 团队也完成了相应的 GA 版本发布,以便您可以愉快地使用这些工具的最新版本协同工作。
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 张表的 Schema 进行了逆向工程,并且我们调整了 Roo 以在此类情况下提供稳定的性能。
要创建一个新项目并对关系型数据库进行逆向工程,只需要三个无需提问的命令(这些命令都提供了 Roo 通常的 Tab 辅助功能,以节省您的输入):
project --topLevelPackage com.foo.rootest
persistence setup --provider HIBERNATE --database POSTGRES --userName rootest --password rootest
database reverse engineer --package ~.domain --schema dbretest
当然,您可以随意重复“database reverse engineer”命令,Roo 将会仔细地只更新您的实体,只包含对 Schema 发生的更改。如果重复此命令,您无需重复“package”或“schema”选项,因为 Roo 会记住您首次命令中的这些设置。
关于 Roo 连接您的数据库进行内省所需的 JDBC 驱动程序,我们在 Roo 发行版中捆绑了一些常见的生产环境开源数据库(例如 Postgres、MySql)的驱动程序。如果您有其他数据库,只需输入 "script install-jdbc-drivers.roo" 并重新启动 Roo,即可访问 Oracle、Microsoft SQL Server、HSQLDB、H2、Derby 等数据库。
我们吸取了您在 Roo 1.0 中的反馈,并显著增强了 Spring 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 Video、Vimeo、Viddler、Screenr、UStream、LiveStream、Flickr、Picasa、Google Presentations、Scribd、SlideShare、Google Maps、Google Wave、Twitter 和 Wikinvest 等网站的内容。
这些对 Spring MVC 功能的广泛改进的最后一部分是自动 JSON REST 支持。要查看实际效果,请运行“script clinic.roo”命令,然后运行“json all”命令,使用 Web UI 创建一个所有者,然后使用此命令列出所有所有者:curl -v -H 'Accept: application/json' -X GET http://localhost:8080/petclinic/owners/
。
我们于 2009 年底开始与 Google 合作,我们的工程团队一直在紧密合作,以提供一套集成的开发者技术。在 2010 年 5 月的Google I/O 第一天主题演讲中,我们展示了我们在 Spring Roo 和 Google Web Toolkit 互操作性方面的早期工作。我们持续增强这种互操作性,现在您可以使用 Roo 构建完整的 GWT 应用程序,这些应用程序使用了最新的 GWT 2.1 功能,例如 RequestFactory、MVP 框架、数据绑定组件等。
与这些功能相关的是 SpringSource Tool Suite 2.5.0 中新的 Google 插件支持。SpringSource Tool Suite 不仅拥有广泛的 Spring Roo 1.1.0 支持(例如嵌入式 Roo shell),还通过包含 Google Plugin for Eclipse 提供了开箱即用的 Google Web Toolkit 开发支持。
您可以通过使用我们的 expenses 示例来尝试最新的 GWT 支持。您可以在 Spring Roo 下载包的 /samples 目录中找到它。或者您可以简单地创建项目并运行它,通过以下命令:
mkdir expenses
cd expenses
roo
roo> script expenses.roo
roo> quit
mvn gwt:run
同样作为前述与 Google 合作的一部分,我们确保 Roo 应用程序可以构建并部署到 Google App Engine。GAE 提供了一种可扩展的应用构建方法,并包含诸如免费使用配额和Google App Engine for Business等选项。
SpringSource Tool Suite 也进行了一些增强,以更好地支持 Roo 创建的 Google App Engine 项目。例如,STS 管理 Data Nucleus 1 enhancer 插件的生命周期,该插件对于 GAE 持久化是必需的。所有这些都与内置的 m2eclipse 支持集成,m2eclipse 是在 STS 等基于 Eclipse 的 IDE 中管理 Roo 项目的典型方式。
您可以使用 expenses-gae.roo 示例脚本来试用最新的 GAE 支持。您同样可以在 Roo 的 /samples 发行版目录中找到它。在即将发布的 Roo 1.1.1 中,您会看到我们对 GAE 支持的进一步改进。
Apache Solr 是一个基于 Apache Lucene 的搜索服务器。Solr 允许您拥有一个专用的搜索服务器,对您的对象进行索引并通过 REST API 查询它们(也支持 JSONP)。
Roo 1.1.0 增加了 Solr 集成,确保每当实体被创建、更新或删除时,Solr 搜索服务器都会自动收到通知。它还为您的实体添加了各种与 Solr 相关的便捷方法,例如一个 search(String)
方法,该方法会自动将自由文本搜索查询发送到您的 Solr 服务器并定位匹配的实体。通过 Roo ITD,还会向实体添加其他类似的搜索和索引管理相关方法。
要了解如何设置您的 Solr 服务器并在基于 Roo 的应用程序中使用它,只需访问参考指南的 Solr 部分。
JavaScript Object Notation (JSON) 是一种具有吸引力的序列化格式,原因众多,例如其优化的浏览器“eval”支持、轻量级人类可读编码格式以及广泛的跨平台库支持。
在 Roo 1.1.0 中,我们添加了支持,允许任何 Java 对象轻松地转换为 JSON 表示形式或从 JSON 表示形式转换。通过 Roo ITD 自动管理新方法,例如 toJson()
、fromJson(String)
以及与数组相关的 JSON 处理方法。只需在您的 Java 类中添加 @RooJson 注解,您就会自动获得此支持。
大多数 Java 开发者都经历过维护 java.io.Serializable 类中 serialVersionUID
的繁琐任务。
使用 Roo 1.1.0,您无需担心序列化警告。只需在您的 Java 类上添加 @RooSerializable 注解,然后就不用管了。Roo 将为您实现 Serializable 接口,并且自动为您维护版本 UID。
自然,我们紧跟最新的库版本,因此您的基于 Roo 的项目始终能够访问最新的功能和错误修复。基于 Roo 的项目现在默认使用新版本的:
我们持续改进易用性,旨在让您的开发变得有趣且轻松。我们最新的一些易用性增强功能包括:
Roo 1.0 和 1.1.0 之间一个重大的(但很大程度上不易察觉的)变化是过渡到 OSGi 基础。我们使用 Apache Felix 作为我们的 OSGi 框架,并结合 服务组件运行时 (SCR) 进行组件管理,以及 OSGi Bundle 仓库 (OBR) 进行 Bundle 解析。发生这些关键变化是为了确保 Roo 的插件基础设施能够基于一个模块化、经过验证、可远程解析依赖的 classpath 管理模型。Eclipse 等现代 IDE 也构建在 OSGi 之上,因此这种工具模块化和可扩展性的方法已经非常成熟。
与此变化相关的是,我们需要“封装”Roo 自身运行所需的许多依赖项。因此,我们建立了一个封装模块来满足此需求,同时也为 Roo 插件开发者提供了一个示例技术。
对于那些有兴趣深入研究 Roo OSGi 内部机制的人,可以通过输入“osgi”并按 TAB 键进行交互式操作。Roo 中现在包含许多新的 OSGi 命令。其中大多数对插件开发者更感兴趣,而不是普通 Roo 用户。您甚至可以通过输入 "osgi framework command" 然后输入普通的 Felix 命令,将命令直接分发到 Felix 运行时。
我们添加 OSGi 支持的原因之一是为了支持围绕 Roo 发展的第三方插件社区。编写插件是一回事,但您还需要一种简单的方式让社区找到感兴趣的插件并安装它。您还需要一个强大且经过验证的安全模型,以便只有您信任的开发者才能编写安装到您计算机上的插件。您还需要一种方式,让插件开发者可以在他们喜欢的任何地方开发和托管插件,同时仍然提供一些合理的默认设置,以便他们可以快速获得结果。
为了帮助人们快速开始开发插件,我们在 Roo 中添加了一个插件创建器。只需使用新的 "addon create" 命令。这个命令不仅会为您创建一个插件骨架,还会配置它以便在 Google Code 上开箱即用地进行托管,并确保当您使用部署目标时,您的项目的 OSGi Bundle Repository (OBR) 文件会自动更新。OBR 文件甚至使用 "httppgp://" 作为协议,以便您的插件可以与我们基于去中心化 PGP 的安全基础设施关联起来。因此,您只需几分钟就可以从一个空目录转变为一个正确托管、OBR 列出、兼容安全模型的插件。
当然,您可以将 OBR 仓库 URL 分发给您的朋友和粉丝,他们可以使用“osgi obr url add”命令将其添加。然而,还有一种更好的方法。只需将带有 OBR 仓库 URL 的电子邮件发送到 [email protected]。我们的 RooBot 服务器将访问您的 OBR 文件并定期监控其更改。然后,它将使用有效且兼容安全模型的插件更新 http://spring-roo-repository.springsource.org 上的 roobot.xml 文件。所有 Roo 实例在运行时都会下载一份 roobot.xml 文件,因此它们将发现您的插件。
然后,Roo 用户只需输入 "addon install" 命令即可安装您的插件。TAB 辅助甚至可以自动补全您的插件名称。一旦他们按下回车键,您的 OBR 文件将被添加到他们的 Roo 安装中,并尝试进行下载。然而,由于使用了 httppgp:// 协议,只有当用户信任您的 PGP 密钥(或者如果他们信任所有人,他们输入了“pgp automatic trust”)时,Roo 才会允许下载完成。
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 中包含一些小的改进,所以请尽快回来查看。关注 Twitter 上的 @SpringRoo 和工程团队是了解开发和新版本的最简单方式。我们也鼓励您参与Spring Roo 论坛,获取与 Roo 相关的建议和解答疑问。在论坛上,您将获得友好 Roo 社区以及 Roo 和 GWT 团队工程师的帮助。
我们希望您在使用 Spring Roo 1.1.0 时获得的乐趣,就像我们构建它时一样多。