亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Eclipse富Ajax開發平臺在CAS Software AG項目中

系統 1666 0
簡介

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的應用層和一個服務核心。應用層負責展示用戶界面和處理用戶請求,而服務核心則提供商業邏輯和數據庫訪問。

Eclipse富Ajax開發平臺在CAS Software AG項目中的應用

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層的測試。

/**
* 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的應用程序,它的內容是動態裝載的的而非改變整個頁面。

單元測試中有時也會遇到的一個問題是對服務器和/或數據層進行測試。通常單元測試代碼直接與服務器、數據庫等直接通信來完成它們的測試。這種類型的 測試有其缺陷,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提供了很多功能來開發控件,這些功能可以大大的降低開發的難度。下圖是展示了一組“自構建”組件的截屏,特別是一 個日歷和一個工具條。

Eclipse富Ajax開發平臺在CAS Software AG項目中的應用

可以看到日歷組件提供了很多功能比如左上角的一個迷你日歷,中間的一個比較詳細的日歷,可以加入任務,而且可以定制視圖來顯示(例如,“所有的任 務”)。這個特殊部件由大約20000行代碼構成,實現它需要大量時間和精力。上圖中所示的另一個“自構建”組件是一個工具條,它提供的功能類似于很多應 用例如 Microsoft Office和Microsoft Outlook的工具條。組合組件的例子是一個時間選擇器,我們可以在CAS PIA中看到它,如下圖所示。

這個復合組件由一組控件包括一個 對話框 ,若干 按鈕 以及 可選框構成 , 他們一同構建了這個時間選擇器。在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的課程。

參考鏈接

閱讀英文原文 Case study: Eclipse Rich Ajax Platform Use at CAS Software AG

Eclipse富Ajax開發平臺在CAS Software AG項目中的應用


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日日干夜夜操 | 国产精品日韩在线观看 | 四虎.com| 波多野结衣国产一区二区三区 | 爱搞逼综合 | 婷婷综合激情五月中文字幕 | 九九99香蕉在线视频美国毛片 | 99久久国产综合精品五月天 | 四虎在线永久视频观看 | 亚洲国产精品67194成人 | 日本一级毛片在线播放 | 亚洲天堂国产精品 | 久久久精品免费国产四虎 | 免费看国产精品久久久久 | 日韩综合| 成人国产精品免费网站 | 你懂得国产 | 久草视频在线网 | 俄罗斯一级成人毛片 | 日日夜夜精品视频 | 性欧美极品xxxx欧美一区二区 | 免费香蕉依人在线视频久 | 青青草久热精品视频在线观看 | 中国欧美一级毛片免费 | 中文字幕在线视频不卡 | 99在线免费播放 | 爱爱爱免费视频 | 久久精品夜夜夜夜夜久久 | 亚洲专区一路线二 | 啪啪毛片 | 亚洲精品国产成人中文 | 久久专区| 亚洲国产高清人在线 | 亚洲欧美色综合自拍 | 久久久久久久99久久久毒国产 | 精品免费久久久久久久 | 加勒比一本大道在线 | 狠狠色噜噜狠狠狠狠米奇777 | 亚洲精品成人在线 | 操操干 | 四虎国产精品永久在线看 |