Eclipse富Ajax开拓平台在CAS Software AG项目中的应用
副标题#e#
简介
CAS Software AG是来自德国Karlsruhe的一家软件公司,建设于1986年。该 公司专注于CRM(客户干系打点)规模,尤其是在SME(中小企业)方面。连年来 CAS Software的软件产物在CRM规模得到了很是好的声誉,包罗他们在特定规模 诸如面向教诲、自动署理权和基于会员的组织可能协会等的CRM产物。
迩来CAS Software正在开拓被称为CAS PIA(小我私家书息助理)的一个产物,这 个产物会以SaaS(软件即处事)的方法宣布,这也是他们首个以这种方法宣布的 产物。该产物利用了很多技能,我们会在今后作具体先容。这篇案例研究的重点 将会放在Eclipse RAP(富Ajax平台)以及它是如何应用到CAS PIA架构中的,同 时也会涉及到RAP的一些有趣的应用、CAS在利用它的进程中的一些个履历教导以 及将来他们的产物的成长偏向。
范畴
CAS Software AG为自由职业者以及中小企业开拓CRM(客户干系打点)软件 。对CAS来说,他们把软件的受众定位在那些不利用特定CRM应用、而是更倾向于 用东西和应用的组合来跟踪他们的客户、市场等的用户。CAS认为对那些可会合 而易于会见的客户信息打点软件,市场将会有很大的需求。在特定行业内,已经 有基于桌面的应用,然而这些应用仅仅提供范围于CRM专有的成果。通过利用诸 如Eclipse RAP和Eclipse Equinox之类的技能,CAS PIA可以开拓出不只提供“ 尺度”的CRM成果,并且还可以有打点市场计谋、电子邮件整合以及本性化信件 等成果的应用,而所有这些都被放入一个清洁而模块化的软件包之内。
通过在用户界面开拓中利用Eclipse RAP,CAS PIA提供了一个利用户感受非 常友好的桌面气势气魄的界面体验。用户界面按照人类工程学(ergonomics)来开拓 ,利用了人们熟悉的窗体部件和行为,好比拖放等等用户对web应用措施所期望 的许多对象。别的,在线成果使所有同一公司内的同事可以通过该应用来打点委 派、任务和文档,也可以举办其他的重要事情流程好比地点转换和路径打算。在 下一章中,我们将深入到CAS PIA的开拓架构中来看看开源软件在傍边如何起到 至关重要的浸染。
办理方案概述
CRM办理方案已经呈现好几年了,桌面的和在线的都有,在最近一段时间里功 能变得很是强大。用户在利用它们时的期望远远超出了根基成果,诸如报表、安 全、亲和的外观和体验以及回响迅速的用户界面。基于很多用户对CRM应用的期 望和需求,CAS选用开源软件作为他们整个办理方案的基本。
从设计角度来讲,CAS PIA是一款易于扩展的web应用措施,它可以操作多个 处事历程,而这些处事历程可以分管会见压力和提供冗余。每一个处事历程都运 行在作为应用措施处事器的Apache Tomcat之上,包括了基于RAP的应用层和一个 处事焦点。应用层认真展示用户界面和处理惩罚用户请求,而处事焦点则提供贸易逻 辑和数据库会见。
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的一个简朴架构比拟图。
#p#副标题#e#
CAS PIA用Elipse RAP在暗示层中构建用户界面有以下原因:
用户感观 – Elipse RAP可以构建出很是切合人体工程学并且可切换主题的富 用户界面,已经很是雷同于胖客户端的感觉。
开拓效率 – AJAX和JavaScript被包装成对开拓者透明的组件, 从而使得措施 员可以用他们熟悉的Java类库和IDE来开拓。
易于扩展 – 尽量RAP使措施员可以不直接利用JavaScript、HTML和CSS来开拓 ,可是它也提供了足够的可扩展性,使定制的组件和睦势气魄可以毫无问题的插手到 应用傍边。
工程质量 – Elipse和它的产物族拥有最好的软件设计和体验,RAP也不破例 。
单一代码库 – RAP可以或许被编译为AJAX可能RCP应用措施。
#p#分页标题#e#
暗示层也包括了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层的测试。
/**
* Memory leak test.
* * Creates and disposes an objects, and checks if there are some leaking instances.
*
* @type member
* @return {void}
*/
testMemoryLeak : function() {
var ms1 = de.tests.MemoryLeakUtil.getMemorySnapshot();
// create
var dc = new de.cas.qx.ui.widget.calendar.datechooser.DateChooser();
qx.ui.core.Widget.flushGlobalQueues();
// dispose
dc.dispose();
var ms2 = de.tests.MemoryLeakUtil.getMemorySnapshot();
var msg = de.tests.MemoryLeakUtil.checkMemoryLeak(ms1, ms2);
this.assertEquals("", msg, "There are some leaking objects!");
},
这个特定测试试图找到由DateChooser组件引起的潜在的内存泄露 (DateChoose是CAS开拓的定制组件中的一个)。 MemoryLeakUtil类是一个CAS 建设的定制东西类,它利用了Qooxdoo提供的一些成果,好比列出内存中的所有 工具。通过Qooxoo提供的成果,他们可以等闲的对内存泄露问题来做测试,而这 类问题是在JavaScript组件开拓中很常见的。在测试RAP用户界面时需要面临的 别的一个问题是处理惩罚UI的异步和动态的状态。有一些东西可以用来记任命户界面 而且可以把这个进程存储起来,从而可以重复运行。这种范例的测试有助于查抄 UI的行为和交互,似乎是有用户在真正利用它,可是它们也有范围性。在CAS对 web应用措施测试东西做的大抵评估中,他们还没有发明一款东西可以处理惩罚异步 和非基于页面的用户界面,如碰着基于Ajax的应用措施,它的内容是动态装载的 的而非改变整个页面。
#p#分页标题#e#
单位测试中有时也会碰着的一个问题是对处事器和/或数据层举办测试。凡是 单位测试代码直接与处事器、数据库等直接通信来完成它们的测试。这种范例的 测试有其缺陷,CAS的开拓者们也碰着过,单位测试由于需要和其他层的通信而 变得很慢。一个凡是的的办理步伐是用假工具,在测试顶用假工具来取代“真对 象”。在 java中有许多假工具的框架,包罗Mockito、EasyMock和JMock,它们 用来简化假工具的建设进程。对JavaScript来说,也有这样的假工具框架好比 JSMock和Mock4JS。
之前您看到了用于测试JavaScript层的单位测试代码,之后您将会看到一段 测试Java层的例子。对Eclipse 1.1来说,这个框架框架根基上包括了相当于 JUnit的测试的成果,差异的是它可以使需要OSGi情况的测试正常运行。假如您 需要执行期间更新UI的单位测试,您可以很是简朴地从 org.eclipse.rap.junit.RAPTestCase扩展。可是,假如对单位测试来说不需要 更新用户界面,那么相应地,你可以扩展JUnit的org.junit.TestCase类。下面 是一个关于包括了用户界面交互的RAP的测试用例:
public class RapJUnitTest extends RAPTestCase {
public void testOpenView() {
try {
IWorkbenchPage page = getPage();
page.showView ( "org.eclipse.rap.demo.DemoTreeViewPartI" );
} catch( PartInitException e ) {
e.printStackTrace();
}
assertEquals( 1, getPage().getViewReferences().length );
getPage().hideView( getPage().getViewReferences()[ 0 ] );
assertEquals( 0, getPage().getViewReferences().length );
}
private IWorkbenchPage getPage() {
IWorkbench workbench = PlatformUI.getWorkbench();
IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
return window.getActivePage();
}
}
这个例子展示了如何测试一个实际的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提供了许多成果来开拓控件,这些成果可以大大的低落开 发的难度。下图是展示了一组“自构建”组件的截屏,出格是一个日历和一个工 具条。
可以看到日历组件提供了许多成果好比左上角的一个迷你日历,中间 的一个较量具体的日历,可以插手任务,并且可以定制视图来显示(譬喻, “所有的任务”)。这个非凡部件由约莫20000行代码组成,实现它 需要大量时间和精神。上图中所示的另一个“自构建”组件是一个工 具条,它提供的成果雷同于许多应用譬喻 Microsoft Office和Microsoft Outlook的东西条。组合组件的例子是一个时间选择器,我们可以在CAS PIA中看 到它,如下图所示。
#p#分页标题#e#
这个复合组件由一组控件包罗一个对话框,若干按钮以及可选框组成 , 他们一同构建了这个时间选择器。在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的课程。