2009年5月,OperaMasks Studio 6.0正式发布。OperaMasks Studio 的前身是金蝶中间件公司的 Apusic Studio,在Apusic Studio发展到 v5版本时,金蝶中间件公司决定将 Apusic Studio更名为 OperaMasks Studio,与 OperaMasks SDK共同组成完整的Web开发解决方案。在其官方站点上,金蝶中间件公司将OperaMasks Studio定义成:全生命周期支持的集成式开发环境 。
此处所谓的全生命周期支持,一是指开发模型的全生命周期支持 ,一是指开发过程的全生命周期支持 。本文,将对“全生命周期支持”给予解读。
很多不同行业的信息化应用,是有其鲜明的行业特征的。但多数的、常规的应用系统,其开发模型可以简单抽象成以下三个层次:
-
数据持久层:数据持久层解决的是数据存取问题,目前,最流行的莫过于以Hibernate为代表的ORMapping解决方案。
-
业务逻辑层:业务逻辑层是用户业务逻辑的载体,通常解决事务完整性、Business Object的生命周期管理等问题,目前,Spring大行其道,基本上已经成为事实标准,而EJB 3则是一个比较有竞争力的挑战者。
-
UI 展现层:绝大部分的UI展现技术是基于浏览器的Web应用,开发人员通常要关注如何快速的搭建界面、更好的页面复用技术,以及为提高用户体验的AJAX特 性等。目前,这一领域的相关技术竞争的比较激烈,如Struts、JSF、WebWork等,但无疑,OperaMasks Studio所支持的自然是OperaMasks 技术。
针对上述的开发模型,OperaMasks Studio是怎样予以支持的呢?在 OperaMasks Studio 6.0 欢迎页中的一个流程图,能够比较直观的反应这一点:
概括来说,OperaMasks Studio对数据持久层的Hibernate、JPA技术,对业务逻辑层的Spring、EJB 3技术,对展现层的 OperaMasks 技术,都给予了非常好的支持。由于篇幅所限,本文无法详细展开介绍,仅罗列一二特性:
应该说 OperaMasks Studio对数据持久层的支持是非常不错的,包括这样几个挺有意思的特性:
-
以可视化的方式完成实体建模:
在OperaMasks Studio中,你可以通过简单的拖拽,完成实体建模,当模型保存时,会自动生成实体映射(可能是Hibernate,也可能是JPA,依赖于你的设 置)。这种图形与代码的转换,是双向的;你可以从图形建模生成代码,也可以先完成代码,再反向生成可视化的图形。生成的代码样式,也是基于模版可配置的。
-
可以在OperaMasks Studio中管理数据库资源,并方便的进行 Table 至 Entity 的映射,或者 Entity 至 Table的映射。
举个简单的例子,我们可以先以面向对象的角度,设计好实体,然后从实体生成数据库中的表;也可以先进行数据库建模,再把数据库中的表反向生成具备映射关系的实体。
-
OperaMasks Studio 还提供了一个很好玩的 HQL 编辑器,可以在 Studio中输入 HQL 语句,以面向对象的形式查询HQL的返回结果。
输入的HQL语句可以是任意复杂的,Studio可以将HQL语句转换成实际运行的SQL,更有意思的是,Studio还能够以对象的形式,返回HQL的执行结果,颇有点类似于Java对象调试器的感觉。
OperaMasks Studio对业务层的支持主要包括对 Spring 及 EJB 3的支持。这里简单的列举如下:
-
对 Spring 的支持:包括,对applicationContext.xml配置文件的代码辅助支持、Spring Library的集中式管理、基于模版的 Spring 框架代码生成等等。
-
对 EJB 3 的支持:事实上,EJB 3对于 EJB 2.x 的大幅改进,使目前的 EJB 3已经不再是什么洪水猛兽,它已经成为了一种轻量级的、平易近人的技术。而在 OperaMasks Studio中,完成一个 EJB 3 对象,更是简单之极,甚至连一些较复杂的 Annotation都无需记忆,通过 Studio提供的工具,能够轻松的对 EJB 3 对象予以配置。
OperaMasks Studio对UI展现层的支持,是最具特色的,也最值得笔者一提。
上世纪90年代,类似于 VB、Delphi的RAD工具大行其道,究其原因是:在UI设计上,基于C/S架构的UI,其运行期状态与设计期状态,保持着高度的一致性。但在B/S架构下,情形则完全不那么一回事了,由于在Web页面中嵌入了大量的可执行代码,使得Web UI的运行期与设计期经常是大相径庭。此时,Web UI的可视化设计,则成为了一种“吸引眼球”的幌子,但在实际使用效果上,作用不大。尤其是在面对复杂的Web UI开发时,程序员基本上是面向代码编程,此时的可视化设计,形同虚设。
OperaMasks Studio,则在“可视化编程”与“基于代码编程”这两者之间,把握了一个较好的平衡。
-
OperaMasks Studio的可视化支持,能够比较如实的反映运行期状态:下面两张图分别是 Studio对 Web 页面的设计期状态,以及该页面的运行期状态。可以看出,两者之间,保持着较好的匹配关系。究其原因:OperaMasks本身是基于组件编程,从而有效避免了页面运行期的不可预测性问题 。
-
相较于Web 页面的可视化设计,OperaMasks Studio更关注“页面源码编辑器”的可用性问题,提供了诸如语法加亮、代码辅助、快速纲要视图、IoVC智能导航等特性。事实上,笔者见过的许多 OperaMasks Studio 用户,往往是通过可视化设计器,了解Studio、学习OperaMasks相关组件技术,而到后期,更多的用户是通过源码编辑器来完成真正的开发工作。
上文分别从“数据持久层”、“业务逻辑层”、“UI展现层”三个方面,介绍了OperaMasks Studio对“开发模型的全生命周期支持”,下面,来探讨一下“开发过程的全生命周期支持”。
一个典型的J2EE应用,可能需要经历如下开发阶段:
在 这几个阶段中,最能引起程序员感触的恐怕是重启应用了。更改了某个配置文件,需要重启应用甚至重启服务器;更改了某段Java代码,也需要重启应用或者服 务器;总之,我个人感觉,程序员在等待应用部署就绪的时间,似乎比写程序的时间还要长一些,尤其在使用诸如WebSphere、WebLogic这种“重 量级”的应用服务器时,这可真具有一定的讽刺意味。
以下,简单介绍一下OperaMasks Studio对上述开发过程各个阶段的支持:
OperaMasks Studio 对开发的支持,似乎不用过多赘述,前文所介绍的内容通通都是开发过程的一部分,这里只简单提及的是,OperaMasks Studio基于Eclipse技术,你同样可以把你所喜欢的其它插件放到 OperaMasks Studio中,以达到功能扩展的目的。譬如,你可以把 Struts 的插件集成到 Studio中,在保留OperaMasks Studio对 Hibernate、Spring的功能外,获得对Struts的支持,从而开发基于SSH(Spring + Struts + Hibernate)的应用。
J2EE 应用配置的复杂度,是另一个让人诟病的地方。写一个EJB,要配置ejb-jar.xml;做一个Web应用,要配置web.xml,甚至打包成一个 ear,还需要配置application.xml,实在是让人颇有些抓狂。举个笔者的切身体会,作为一个从事J2EE研发近十年的老兵,我从来记不住在 web.xml中配置Listener和Servlet时,是Listener在前面,还是Servlet在前面?要知道顺序颠倒,应用是无法正常启动 的。
OperaMasks Studio对这些配置工作进行了大幅简化,你只需要通过可视化的界面进行操作即可。
![](http://www.operamasks.org/res/img/article/ART00089/config.png)
所有的应用服务器厂商都提供了部署工具,能够允许你方便的把你的应用部署到服务器上。但在OperaMasks Studio中,这一动作似乎是不存在的,或者说,你感觉不到。因为你在开发过程中,按CTRL + F11以访问其中的某个页面时,Studio会自动启动应用服务器;如果应用没有部署,会将应用自动部署上去;部署成功后,还会再自动打开浏览器,以访问你要运行的页面。
当然,如果你一定需要“部署”这个动作,可以对准工程点击右键,选择相应的菜单:
![](http://www.operamasks.org/res/img/article/ART00089/deploy.png)
甚至于,你还可以打开“Apusic 服务器管理”透视图,查看当前部署了哪些应用,并执行各种对Apusic应用服务器的管理操作。
![](http://www.operamasks.org/res/img/article/ART00089/admin.png)
还需要提及的是:OperaMasks Studio的部署行为,是基于文件目录形式的部署(没有打包、上传的动作),其部署过程是简单、轻量、快速的。
忽 然想起Sun公司某款基于NetBeans的开发工具,部署过程是用Ant完成的,在Ant执行过程中,除了进行正常的清理、编译外,还会将应用打包成 war或ear,然后再上传到目标服务器中进行部署,甚为耗时,笔者看完以后颇有些瞠目结舌。或许这才是所谓的“标准的J2EE部署过程”?再或者只是笔 者不会用的原因吧,感慨一下。
应用部署到服务器以后,自然就可以运行测试以检验你的工作成果了。这里笔者要介绍的是“调试”技术。并不是每一个程序员都需要调试,如袁红岗先生似乎就很少用到调试器:-),但笔者认为:拥有一个好的调试器,对程序员来说是一件幸事。
坦白说,OperaMasks Studio在调试上,和常规的Eclipse调试技术并没有什么不同。但这里,笔者忍不住要提醒的是:很多程序员用了OperaMasks作为Web展现层技术,就忘记JSP的存在了。要记住,OperaMasks 并非是要淘汰JSP或Servlet,相反,OperaMasks技术和JSP/Servlet相辅相承,互为补充;在同一个Web应用中,既可以使用OperaMasks技术,也可以继续保留你原有的 JSP/Servlet技术,诸如做个 Listener或者Filter之类的。下图列出 OperaMasks Studio对 JSP页面的调试功能:
![](http://www.operamasks.org/res/img/article/ART00089/debug.png)
如上文所述,写程序总是一个不断的开发、测试的循环过程。当发现Bug并予以修复,或者新增某个功能时,势必要重新部署应用。但笔者非常不欣赏的是:频繁的重新启动应用服务器,因为这是一种很奢侈的行为。笔者个人的开发经验如下:
-
在调试状态下,如果更改了程序代码,但不影响类的签名,当对程序代码进行保存时,OperaMasks Studio(确切说来是Eclipse)会自动进行代码的热替换(JPDA技术,请参考相关文档);如果改的程序代码影响了类的签名,那么,请重新启动应用,甚至要重新启动服务器。
-
在非调试状态下,无论改了什么东西,程序代码也好、配置文件也罢,要想使更改生效,只需重新启动应用,基本上无需重启服务器。
在OperaMasks Studio下,重启应用是非常简单的事情:点击工具栏的“Apusic”按钮,Studio会自动根据上下文,弹出和重启应用相关的菜单。并且,当你点击某个菜单后,Studio会记住你的选择,下次直接点击此按钮即可重复上一次动作。
一种并不科学但现实中却往往存在的情况是:程序上线时,才会发现许多没有暴露的问题,如数据库连接泄露、因应用写的不当而造成的数据库死锁等。
OperaMasks Studio提供了数据源连接监控、数据库死锁分析等工具,能够给用户提供一些上线期诊断的辅助手段。
![](http://www.operamasks.org/res/img/article/ART00089/db_monitor.png)
在上文中,我们分别从“开发模型的全生命周期支持 ”,以及“开发过程的全生命周期支持 ”两个层面,介绍了 OperaMasks Studio是如何让“全生命周期支持 ”这个特性落地的,希望通过本文的描述,能够使各位读者对OperaMasks Studio有一个感性认识,在本文的最后,不妨对 OperaMasks Studio的几个常见问题简单阐述一下:
是的,OperaMasks Studio建立在Eclipse技术之上(当前版本是Eclipse 3.3.1),我们从来没有否认过这一点。在这里也感谢Eclipse.org组织,倘若没有Eclipse,以金蝶中间件公司目前的实力,想凭一己之力完成一个集成式开发环境(IDE)的研发,恐怕要多费不少的周折。
目前,OperaMasks Studio是免费使用的,但还没有开源。在下一个阶段,我们可能会将OperaMasks Studio开源,具体时间与阶段,要看一些环境与条件的准备情况,笔者初步预期是下一个重要版本。
是的,OperaMasks Studio目前只支持金蝶Apusic应用服务器,我们也从来没有否认过这一点。但需要澄清的是:OperaMasks SDK(也就是常规意义的OperaMasks 技术)是支持各种J2EE应用服务器的(请参考 http://www.operamasks.org/topic/content/deploytopic.faces ),但目前的 OperaMasks Studio只支持 Apusic 应用服务器。这纯粹属于工作量的问题,和心态开不开放没有太大的关系,和所谓的“背后隐藏的不可见人的商业目的”更没有关系。同时,我们也从来没有否认 过,金蝶中间件公司是一家商业公司,作为商业公司,我们总会有自己的商业目的与合情合理的商业追求,但我们一旦决定了要把OperaMasks 开源,就会一直报以开放、积极的心态,长期的坚持下去。
在 OperaMasks Studio 6.0版本,内置了一个 Apusic 应用服务器的教学版,你完全可以在这上面开发测试,等你的应用开发完毕以后,如果你希望部署到其它的服务器,那么,你可以把应用拿出来单独打包,往其它的 服务器上部署,这也是完全没有问题的。但是,笔者忍不住向您推荐一下:为什么不保持一下您的好奇心,试试我们的Apusic应用服务器呢?
最后想说的是:无论是OperaMasks SDK,还是OperaMasks Studio,虽然已经比较成熟与稳定,但对于国内的开源环境来说,它依然是一朵温室里的小花,希望能够得到您的善意的批评、指正与建议,以使我们能够长期的坚持下去,真正为国内的开源事业做出点事情。
OperaMasks.org网站已经录制了若干关于 OperaMasks Studio的视频,可以从 http://www.operamasks.org/learning/index.faces 获得。
更多 OperaMasks Studio信息,请参考官方网站: www.operamasks.org