最近,我开始使用Eclipse作为我的开发环境。这部分是由于它支持我开发时所使用的许多平台,部分是由于Eclipse是开放的可扩展环境的杰出代表,大家都可以为它的发展贡献自己的力量。我正开始调查人们已经提出的一些扩展。例如,我使用了一个叫做XMLBuddy的小插件来处理XML文件,它很有用。所以,我开始好奇是否有人已经编写了使用Hibernate的插件,最近在编写Developer's Notebook一书时,我做了大量这方面的工作。结果我了解到,这方面确实有一些工作正在进行,本文将探讨其中之一——Hibernate Synchronizer。
Hibernate Synchronizer
迄今为止,在我找到的插件中,Hibernate Synchronizer最令我感兴趣,因为看起来它对以映射为中心的工作流提供了最好的支持,而我的Developer's Notebook一书中就采用了这种工作流。(Hibernate可以用于多种用途,所以请查看可用的其他插件, 如果您的环境需要其他方法,这些插件将更有帮助。)事实上,Hibernate Synchronizer插件让您在修改映射文档时,无需考虑更新Java代码,它会在您进行编辑的时候以一种非常类似于Eclipse的方式自动更新 Java代码。通过为每个被映射的对象创建一对类,它比Hibernate的内置代码生成工具更为先进。它“拥有”一个基类,当您修改映射时,它可以随意 重写这个基类。它还提供一个扩展了这个基类的子类,可以在这个子类中加入业务逻辑和其他代码,而无需担心它会在您眼皮底下消失。
因为要适用于以Hibernate映射文档为中心的方法,Hibernate Synchronizer还包括一个用于Eclipse的新编辑器组件,为此类文档提供智能辅助和代码自动完成功能。优秀的DTD驱动的XML编辑器(比 如前面提到过的XMLBuddy)可以实现其中的一些功能,但是Hibernate Synchronizer利用对文档语义的理解做得更好。它还提供了一个映射中的属性和关系的图形化视图、创建新元素的“向导”界面,以及其他类似的优 点。而且如前所述,在其默认配置中,编辑器会在用户编辑映射文档时自动重新生成数据访问类。
Hibernate Synchronizer还有其他的功能。它在Eclipse的New菜单中加入了一个区域,为创建Hibernate配置和映射文件提供向导,并在包的 资源管理器和其他适当的位置中添加了上下文菜单项,使用户可以轻松访问相关的Hibernate操作。
好了,现在已经有了足够多的抽象描述,是时候开始实践了!毕竟,您很可能对此产生了兴趣,要不您就不会阅读本文。那么,如何安装与使用Hibernate Synchronizer呢?
安装可以使用Eclipse的内置Update Manager安装Hibernate Synchronizer。该插件为Eclipse 2.1和即将发布的Eclipse 3的用户提供独立的更新站点。因为我把Eclipse用于任务关键型的工作,所以我使用的仍然是生产版本,即2.1。在我撰写本文时,Eclipse 3已经进入了“发布候选(release candidate)”阶段。今年夏末,当我从JavaOne会议回来的时候,我非常希望能够升级到生产版本3。(我提及这一点的主要原因是强调下面的指 导是基于Eclipse 2而编写的;在Eclipse 3中,某些命令和界面无疑会有所不同,所以如果您准备使用它,确保在遵照这些步骤的同时还要加入自己的判断!我的印象是Hibernate Synchronizer自己的 安装指导 是针对Eclipse 3编写的,也许这对您会有所帮助。)
启动Eclipse,选择Help -> Software Updates -> Update Manager,便可以打开Update Manager。Install/Update透视图打开之后,在Feature Updates视图中右击(或者控件单击(control-click),如果您使用的是单按钮鼠标),选择New -> Site Bookmark,如图1所示。
图1. 向Update Manager添加Hibernate Synchronizer插件站点
在出现的对话框中,输入所需插件版本的URL。输入的URL取决于您的Eclipse版本:
- Eclipse 2.1: http://www.binamics.com/hibernatesync/eclipse2.1
- Eclipse 3: http://www.binamics.com/hibernatesync
还需为新的书签指定一个名称,“Hibernate Synchronizer”就很好。图2显示的对话框包括了我的Eclipse 2.1.2环境中的所有必需信息。
图2. Hibernate Synchronizer插件更新站点的书签
单击Finish之后,新的书签将出现在Feature Updates视图中,如图3所示。
图3. Hibernate Synchronizer站点现在可用了
为了实际安装插件,单击书签左侧的三角形展开符号,然后单击其中的下一个三角形展开符号,重复这个过程,直到出现插件的图标为止。单击该图标,Preview视图就会更新,从而显示一个允许安装插件的界面,如图4所示。
图4. 准备安装插件
单击Install Now,实际安装插件,让Eclipse引领您完成整个过程(图5-10)。
图5.安装Hibernate Synchronizer
图6. 插件许可证协议
可参见下面的权衡部分,其中有关于许可证协议的一些讨论。在决定在自己的项目中使用Hibernate Synchronizer之前,您可能想仔细阅读一下它。我认为这是很好的做法,但是令人困惑的是,它基于GPL,实际上并非是开源的。
图7. 选择安装插件的位置,使用默认的就可以
图8.对没有签名的插件发出的标准警告
图9.正在安装
图10.安装完毕
现在插件已经安装完毕,需要退出并重新运行Eclipse,以便使其生效。出现的对话框似乎暗示Eclipse将自动重启,但是根据我的经验,单击 Yes只会退出环境,必须手动重启。这可能是Eclipse 2.1的Mac OS X实现的一个局限性;Eclipse 3将成为首个承诺对OS X提供一流支持的版本。不管怎么说,这是一个小问题。如果需要重启Eclipse,现在就重启吧,因为应该开始配置插件了!
配置Eclipse重新启动之后,可以关闭Install/Update透视图。打开一个使用Hibernate的Java项目。如果您读过 Developer's Notebook 一书中的例子,那么有几个目录可供选择。我将选用第3章中的例子,因为这一章是可以 在线阅读 的样章。您还可以从该书的站点 下载 所有例子的源代码。
如果您准备创建一个新的Eclipse项目,以便使用示例源代码目录中的一 个,只需选择File -> New -> Project。选择创建一个Java项目,然后单击Next,为其命名(我使用的是“Hibernate Ch3”,如图11所示),取消对Use default复选框的选择,以便可以告诉Eclipse现有项目目录的位置,然后单击Browse按钮,定位它在驱动器上的具体位置。现在可以单击 Finish,创建该项目,但是我一般喜欢单击Next,然后再次检查Eclipse的选择。(当然,如果有什么出错,您始终可以返回并修改项目属性,但 是我发现,如果存在库丢失之类的错误,马上就会面对大量的错误和警告,这实在是一件麻烦的事情。)
图11. 创建一个使用Hibernate的新项目
此处我的警告是多余的。Eclipse清楚目录的架构及用法,还找出了我曾下载和安装过的所有第三方库,以便让Hibernate和HSQLDB数据库引擎能够运行。(该过程的详细情况可以参见Developer's Notebook一书的第1章。)这种智能适应性是Eclipse的重要特性之一。图12显示我们的新项目已经打开并准备好用于实验了。它还显示,Eclipse不喜欢把窗口缩到足够小以适应适当的屏幕快照。从现在起,我只能捕捉窗口的一部分。
图12. 第3章中的示例项目
接下来要创建一个Hibernate Synchronizer可以使用的Hibernate配置文件。src目 录中已经存在一个hibernate.properties文件,它说明了书中例子的配置,但是Hibernate Synchronizer只能使用Hibernate的基于XML的配置方法。所以,我们需要把hibernate.properties文件的内容复制 到一个新的hibernate.cfg.xml文件中去。从好的方面来说,这使我们可以见识Hibernate Synchronizer的一项特性,即配置文件向导。选择File -> New -> Other,单击新可用的Hibernate类别,选中Hibernate Configuration File,然后单击Next。
图13. 启动Hibernate Configuration File向导
当向导启动后,它所提供的用于放置文件的目录取决于当前在Eclipse中选中的文件。出于一致性方面的考虑,一定要把它和properties版本一起放在顶级的src目录中。填入向导所需的其余信息,匹配配置的properties版本,如图14所示。注意,与使用Ant控制Hibernate的执行(这是Developer's Notebook一 书中所使用的方法)不同,当调用Hibernate时,我们无法控制当前的工作目录,所以需要在URL中使用一条到数据库文件的完全限定路径。我使用的值 是(有点难看):jdbc:hsqldb: /Users/jim/Documents/Work/OReilly/Hibernate/Examples/ch03/data/music。(如果 有人能告诉我如何让Eclipse或Hibernate Synchironizer对一个项目使用特定的工作目录,我肯定会很感兴趣。我在Eclipse方面还是一个新手,所以如果知道这种情况是可能的,只是 我不知道如何去做,我肯定不会感到吃惊。)
图14. 填写配置文件的详细信息
填写Driver Class时有一点奇怪:需要单击Browse按钮,并开始输入驱动程序的类名。如果输入“jdbcD”,窗口将只会给出两个选择,很容易就可以找出正确的选择,如图15所示。如图15所示。
图15. 指定HSQLDB驱动程序类
按照图14所示设置适用于您自己的安装的值之后,就可以单击Finish来创建配置文件。Hibernate Synchronizer现在已经可以使用了。它打开了创建的文件,所以可以看到一个Hibernate的XML配置文件的结构和详细信息。