首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

案例研究:Eclipse富Ajax开发平台在CAS Software AG项目中的运用

2012-09-14 
案例研究:Eclipse富Ajax开发平台在CAS Software AG项目中的应用CAS Software AG是来自德国Karlsruhe的一家

案例研究:Eclipse富Ajax开发平台在CAS Software AG项目中的应用

CAS Software AG是来自德国Karlsruhe的一家软件公司,创建于1986年。该公司专注于CRM(客户关系管理)领域,尤其是在SME(中小企业)方面。近年来 CAS Software的软件产品在CRM领域获得了非常好的声誉,包括他们在特定领域诸如面向教育、自动代理权和基于会员的组织或者协会等的CRM产品。

CAS选用基于web的应用程序,从而使得用户可以不必担心安装、硬件成本和配置以及数据的安全。而且,基于web的应用可以使用户在任何地点来访问 CAS PIA,而不必在每台计算机上安装重客户端。作为web应用前端的表示层使用了Eclipse RAP来开发。RAP项目主页把它描述称为一个为开发人员提供了下述功能的框架:

通过使用Eclipse开发模型、基于Eclipse工作台扩展点的插件以及用SWT API(以及JFace)开发的组件工具箱来构建基于Ajax技术的富web应用 .... RAP非常像Eclipse RCP,但是它不是在桌面计算机上启动,而是运行在一台服务器上,可以被标准浏览器访问。这主要是因为它提供了一套特殊实现的SWT(一个SWT API的子集)。(http://www.eclipse.org/rap/about.php)

下面是Eclipse RCP和Eclipse RAP的一个简单架构对比图。

案例研究:Eclipse富Ajax开发平台在CAS Software AG项目中的运用

CAS PIA用Elipse RAP在表示层中构建用户界面有以下原因:

用户感观 - Elipse RAP可以构建出非常符合人体工程学而且可切换主题的富用户界面,已经非常类似于胖客户端的感受。开发效率 - AJAX和JavaScript被包装成对开发者透明的组件, 从而使得程序员可以用他们熟悉的Java类库和IDE来开发。易于扩展 - 尽管RAP使程序员可以不直接使用JavaScript、HTML和CSS来开发,但是它也提供了足够的可扩展性,使定制的组件和风格可以毫无问题的加入到应用当中。工程质量 - Elipse和它的产品族拥有最好的软件设计和体验,RAP也不例外。单一代码库 - RAP能够被编译为AJAX或者RCP应用程序。

表示层也包含了OSGi运行时环境,这为它在别的CAS产品中的使用提供了良好的模块性和复用性。CAS选择Eclipse Equinox项目作为他们实现OSGi的工具,定义如下:

...一个OSGi R4核心框架规范的实现,即一组实现了若干可选的OSGi服务和其它架构的软件包,可以运行在基于OSGi的系统上。

总的来说, Equinox 项目的目标是成为一流的OSGi社区和使Eclipse成为界面组件视觉化的开发工具。

通过利用Equinox提供的分离机制,CAS已实现了自己的核心模块,这些模块包含了许多软件包,这些包可以作为通用组件应用到不同的应用程序中。每个模块都提供了一些扩展点,通过这些点,根据所开发的不同应用的需求,可以实现不同的特定的行为。例如,用户管理组件可以用在许多应用程序当中,而联系人管理模块就比较特殊,只会被用到CRM相关的应用中。OSGi提供的这种扩展性使模块很容易被扩展,比如在构建和部署阶段。

CAS PIA的另一部分是商业逻辑和典型的服务器端相关功能,即服务核心或者EIM(企业信息管理)。设计和开发EIM是把它作为CAS整个产品线的核心。服务核心提供了通过Sun JAX-WS、RMI和REST服务来远程访问的功能,核心同样也利用Spring框架设计成组件化的风格,都是可以被扩展的。

持久层用了MySQL数据库,同时也包含了CAS特别开发的定制组件。定制组件包含了一个可扩展的数据模型、一套定制的查询语言(CAS-SQL)和一个权限管理组件。该权限管理组件利用ACEGI框架来进行用户鉴权,也对数据库层的每个对象都提供了ACL(访问控制列表)。这套权限管理系统和 Oracle的OLS比较类似,而该系统还支持MySQL之外的其它数据库,从而使CAS可以在别的产品上使用它。

RAP Eclipse RAP的单元测试

单元测试在任何软件开发中都是非常重要的一个环节,即使是在软件的客户端也不例外。很多时候,应用程序的界面开发人员发现很难对代码做单元测试。通常,这是因为表示层和应用逻辑紧密耦合从而使得单元测试代码的开发非常复杂和难于维护。CAS的程序员们设法把尽量多的逻辑都放在服务器端,从而使单元测试(代码)非常健壮。然而,不是所有的东西都可以放到服务器端,而这也是为什么好的UI设计成为一个很重要因素的原因。

通过用通用设计模式比如MVC、表示层模型(Presentation Model)、模型视图代理(Model View Presenter)等等来实现用户界面,将视图从逻辑当中解耦出来,从而使单元测试变得相对容易。即便进行了良好的设计,也还是有很多的问题需要面对,尤其是RAP用户界面的测试。首先,RAP UI组件包含了一个Java层和一个JavaScript层,这意味着有两个部分的代码需要测试。Qooxdoo,即RAP使用的Ajax应用程序框架,提供了类似于JUnit和JSUnit的单元测试工具。CAS利用这些工具来对组件的JavaScript层进行测试,用JUnit来测试Java层。下面是CAS提供的一个单元测试代码,展示了对定制组件JavaScript层的测试。

?

这个例子展示了如何测试一个实际的UI组件来验证可视视图的数量。而这也正展示了如何正确地测试基于RAP应用程序测试的一个步骤,然而,它并没有提供自动化用户驱动交互。通过模拟一个用户点击按钮或者在输入框中键入值这样的测试UI的能力将会是CAS在未来所研究的目标。

定制用户界面组件

除此而外,RAP还提供了还提供了用SWT构建的一个超大的组件子集,称为RAP控件工具箱,或者称为RWT,这套工具箱可以满足许多应用程序的需要。然而,当有“标准”以外的需求时,Eclipse RAP也支持开发和使用定制组件。开发定制组件的第一步是确定这是一种什么类型的控件,在RAP中,有两种控件,izhong是“复合”式 ("compound")另外一种是“自构建”式("owner drawn")。复合控件是把已有的RAP组件组合到一起来提供一种新的UI功能。而自构建式组件则源于JavaScript,通常需要许多重型开发,有时则需要第三方库。RAP开发向导提供了一个一步步教你如何创建“自构建”定制控件的教程,教程中用截屏和例子代码阐述了整个过程。对于定制组件的开发流程,教程中列出了四个主要的步骤:

为组件创建一个运行在服务器上的Java实现为组件创建一个运行在浏览器上的JavaScript实现用Java创建一个适配器,这个适配器把JavaScript组件和Java组件连接起来通过在org.eclipse.rap.ui.resources扩展点上增加插件的方式注册该JavaScript文件

CAS的开发人员必须开发一些自定义控件包括一个日历、日期选框、工具条和可折叠的导航控件,看起来像Microsoft Outook。这个日历和工具条就是用JavaScript加上CSS和HTML开发的“自构建”组件的例子,转化而成为CAS PIA所用的RAP组件。Qooxdoo提供了很多功能来开发控件,这些功能可以大大的降低开发的难度。下图是展示了一组“自构建”组件的截屏,特别是一个日历和一个工具条。

案例研究:Eclipse富Ajax开发平台在CAS Software AG项目中的运用

可以看到日历组件提供了很多功能比如左上角的一个迷你日历,中间的一个比较详细的日历,可以加入任务,而且可以定制视图来显示(例如,“所有的任务”)。这个特殊部件由大约20000行代码构成,实现它需要大量时间和精力。上图中所示的另一个“自构建”组件是一个工具条,它提供的功能类似于很多应用例如 Microsoft Office和Microsoft Outlook的工具条。组合组件的例子是一个时间选择器,我们可以在CAS PIA中看到它,如下图所示。

案例研究:Eclipse富Ajax开发平台在CAS Software AG项目中的运用

这个复合组件由一组控件包括一个对话框,若干按钮以及可选框构成, 他们一同构建了这个时间选择器。在CAS PIA的拷屏图中另外值得注意的一点是应用的整体样式或者说主题。RAP通过使用层叠式样式表(CSS)提供了主题功能,同时使应用可以接受加在org.eclipse.rap.ui.themes扩展点和plugin.xml file扩展点上的扩展。

开发定制的RAP组件时,在设计和开发阶段必须对下面几点加以考虑。首先,开发人员必须熟悉HTML、JavaScript、CSS和Qoodoo。我提到这个是因为RAP的一个优越之处就是开发人员可以用Java来编程而可以避开JavaScript,但是在开发定制组件时却不是这样。其次,开发人员必须设法使控件具有跨浏览器特性。写过RAP核心组件的开发人员竭尽全力来确保控件的浏览器兼容性,而在未来版本的Qooxdoo中有望在这方面得以增强从而使开发人员可以免于考虑浏览器兼容性问题。最后,另外一个需要注意的问题是在RAP中的Qooxdoo和你从网站上下载的不是同一个版本。极端情况下,对RAP的开发人员来说,这意味着一些特定功能和类可能不能使用,尽管它们出现在Qooxdoo的API中。

开发中遇到的问题

对开发人员来说任何新技术都一定要有一个学习曲线,发展过程中也会有很多问题。在CAS PIA的开发过程中开发团队陷入了一些与性能和部署相关的问题当中。

他们马上遇到的第一个问题就是客户端和服务器端都出现较低的性能和高的资源开销。CAS利用可以复用GUI控件而不是反复创建它们的对象池和缓存来提升一些性能。尽管CAS所做的努力有所帮助,但是对于完全解决他们在Internet Explorer上的性能问题还远远不够,这也使得CAS PIA不能支持IE。然而CAS对短期内Qooxdoo框架的性能提升和Internet Explorer8的即将发布对CAS PIA表现出可接受的性能和对IE的支持相当有信心。另一方面,在别的浏览器上特别是Firefox,都已经在近期取得性能和资源开销问题方面的提升。

另外一个令人头痛的问题是用一种连续累计的构建过程开发和部署整个应用程序的RAP组件。由于CAS选择将Eclipse Equinox部署到Tomcat中而不是将web服务器嵌入到Equinox,所以这是唯一的问题。CAS使用了Eclipse中的Releng- Tools,这个工具可以支持夜间自动构造,然而它们在使用Ant的过程中发现文档太少而且有很多奇怪的问题(比如,动态生成构建脚本)。最终确保夜间构建的正常运行花费了大量的监控和测试。

与此同时CAS不得不解决将Equinox部署到Tomcat中的问题。对这个配置问题提出的解决方案是,生成一个单独的WAR文件,这个文件中包含了所有的商业组件、运行时环境、Equinox和RAP。但是,CAS PIA也需要EIM这么一个非OSGi组件和RAP部分一起集成到应用程序当中,从而使得两个部件之间可以不通过web服务和RMI直接通信。解决这个问题需要分两步,首先必须把EIM服务器组件放到WAR文件的"lib"目录中。第二步涉及到对web.xml中servlet bridge的特殊配置。CAS用到了servlet桥中的“extendedFrameworkExports”参数,这个参数能使EIM和RAP组件根据需要集成在一起。

经验教训

CAS Software积极致力于开发和部署Eclipse RAP应用程序,即便在开始的时候碰到很多问题,他们仍然非常乐于使用Eclipse RAP来开发产品。他们发现用Eclipse RAP后开发人员的效率得到显著提高,这主要是因为Java程序员已经习惯于Eclipse的集成开发环境、调试工具和组件模型。

一旦CAS克服了以上提到过的问题而走过了陡峭的学习曲线,每个人都会乐于使用RAP来做开发。CAS希望RAP在未来产品中增加的唯一功能是从服务器端来触发客户端动作的能力。目前CAS PIA使用自主开发的一套方案,其实实际上称不上真正的解决方案,但CAS对RAP的未来充满信心。

未来发展方向

CAS Software AG目前在中小企业CRM市场上居于领导地位,他们计划到2010年时把这种领导地位拓展到整个欧洲。CAS PIA在2009年第一季度将会面试并且推广。最终目标是成为SaaS CRM产品欧洲地区供应商的前20位。

CAS会继续在使用和支持Eclipse RAP上发挥他们重要的作用,他们还将于2009年2月在匈牙利的赛格德大学开办有关RAP的课程。

参考链接CAS PIAEclipse RAP Book(2008年12月)http://rapblog.innoopract.com/2007/12/rap-deployment-part-2-deploying-your.htmlhttp://www.eclipse.org/equinox/server/http_in_container.phpGUI测试工具 QF-TestSquish for JavaQA Wizard Pro

阅读英文原文:Case study: Eclipse Rich Ajax Platform Use at CAS Software AG。

热点排行