Alfresco系統(tǒng)從很多方面來(lái)說(shuō)和ECM系統(tǒng)十分相似。(參見(jiàn)圖1-1)在核心部分是一個(gè)內(nèi)容庫(kù),她用來(lái)持久化內(nèi)容,元數(shù)據(jù),關(guān)聯(lián)關(guān)系和全文索引,該內(nèi)容庫(kù)的運(yùn)行由一個(gè)服務(wù)器所支持。Alfresco擁有一套編程接口能支持多種編程語(yǔ)言和協(xié)議,開(kāi)發(fā)人員可以基于該接口開(kāi)發(fā)定制化的應(yīng)用和解決方案。Alfresco現(xiàn)成的應(yīng)用程序能提供標(biāo)準(zhǔn)的解決方案,例如文檔管理,記錄管理和Web內(nèi)容管理。

然而,因?yàn)楹推渌鸈CM系統(tǒng)相比,Alfresco相對(duì)比較年輕,因此它更容易使用現(xiàn)代架構(gòu)。Alfresco系統(tǒng)完全基于Java,因此只要能運(yùn)行Java企業(yè)版的系統(tǒng)都能運(yùn)行Alfresco。它的核心是Spring平臺(tái),這使得Alfresco能模塊化各種功能如版本控制,安全和規(guī)則。Alfresco能自由的使用腳本以便簡(jiǎn)化新增功能以及接口的開(kāi)發(fā)。架構(gòu)中的該部分被稱作WebScripts它即用于數(shù)據(jù)層服務(wù)也能用于展現(xiàn)層服務(wù)。Alfresco盡可能保持架構(gòu)的輕量級(jí)以便下載和安裝,還能方便地利用新的打包和部署選項(xiàng),如云計(jì)算平臺(tái)。
內(nèi)容應(yīng)用服務(wù)器和內(nèi)容庫(kù)
Alfresco系統(tǒng)的核心是內(nèi)容應(yīng)用服務(wù)器(Content ApplicationServer),它管理和維護(hù)這內(nèi)容庫(kù)。內(nèi)容庫(kù)可以和數(shù)據(jù)庫(kù)做類比,除了它維護(hù)的不僅僅是結(jié)構(gòu)化數(shù)據(jù)。內(nèi)容的二進(jìn)制流保存在內(nèi)容庫(kù)中,相關(guān)的全文搜索索引由Lucene的索引維護(hù)。實(shí)際的二進(jìn)制流的內(nèi)容是以文件形式由內(nèi)容庫(kù)管理,雖然這些文件只能在系統(tǒng)內(nèi)部使用,和你在實(shí)際使用中打開(kāi)的文件并不一樣。內(nèi)容庫(kù)還維護(hù)著內(nèi)容條目,分類和文件夾/文件結(jié)構(gòu)間的關(guān)聯(lián)關(guān)系。文件夾/文件的結(jié)構(gòu)維護(hù)在數(shù)據(jù)庫(kù)中,和內(nèi)部文件存儲(chǔ)結(jié)構(gòu)并不對(duì)應(yīng)。
Lucene是Apache項(xiàng)目中的一個(gè)開(kāi)源全文搜索引擎。
內(nèi)容應(yīng)用服務(wù)器主要負(fù)責(zé)管理,訪問(wèn)和更新內(nèi)容庫(kù)中的內(nèi)容所涉及的業(yè)務(wù)邏輯。內(nèi)容應(yīng)用服務(wù)器允許你運(yùn)行WebScripts的應(yīng)用或是Java擴(kuò)展應(yīng)用。所有AlfrescoECM套件的應(yīng)用程序都是基于內(nèi)容應(yīng)用服務(wù)器構(gòu)建以及運(yùn)行的。本書中知識(shí)庫(kù)應(yīng)用的樣本程序是使用內(nèi)容應(yīng)用服務(wù)器和Alfresco共享應(yīng)用構(gòu)建的。
Alfresco應(yīng)用程序
Alfresco應(yīng)用程序建立在內(nèi)容應(yīng)用服務(wù)器之上并且依賴內(nèi)容應(yīng)用服務(wù)器來(lái)持久化,訪問(wèn),查詢和管理內(nèi)容。Alfresco應(yīng)用程序能提供基本的功能來(lái)滿足大部分用戶管理內(nèi)容的需求。其中2個(gè)最主要的應(yīng)用為Alfresco Share和Alfresco Explorer。
Alfresco Explorer是由Alfresco系統(tǒng)提供的最初的應(yīng)用程序,用來(lái)管理內(nèi)容。AlfrescoExplorer可以讓你瀏覽內(nèi)容庫(kù),設(shè)定規(guī)則和操作,并管理內(nèi)容和對(duì)應(yīng)的元數(shù)據(jù),關(guān)聯(lián)關(guān)系,和分類。AlfrescoExplorer使用的是JavaServer Faces并被集成入內(nèi)容應(yīng)用服務(wù)器中。目前,因?yàn)锳lfresco Share,AlfrescoExplorer將被逐步淘汰。但是,很多擴(kuò)展和語(yǔ)言包都是為Alfresco Explorer所開(kāi)發(fā)的。同時(shí)AlfrescoExplorer有著廣泛的功能來(lái)管理內(nèi)容庫(kù)并且他也被認(rèn)為是一個(gè)系統(tǒng)管理工具。
Alfresco Share是下一代用戶界面,完全使用Alfresco Webscript技術(shù)構(gòu)建,并可被用于擴(kuò)展應(yīng)用程序。AlfrescoShare提供了擁有簡(jiǎn)單用戶界面的內(nèi)容管理功能,它向用戶提供了各種工具包括:搜索和瀏覽內(nèi)容庫(kù)的工具;內(nèi)容縮略圖和相關(guān)的元數(shù)據(jù);使用flash預(yù)覽內(nèi)容的展現(xiàn);以及一套協(xié)作工具如Wikis,論壇和博客。Alfresco Share也是Alfresco記錄管理的基礎(chǔ)。AlfrescoShare被組織成一系列的站點(diǎn)用于協(xié)作時(shí)的相聚地點(diǎn)。
最重要的是,AlfrescoShare是一個(gè)可擴(kuò)展的應(yīng)用基礎(chǔ),通過(guò)對(duì)其擴(kuò)展能為某些垂直行業(yè)或?qū)<翌I(lǐng)域創(chuàng)建垂直的應(yīng)用。記錄管理就是最好的例子。本書中的KnowledgeBase樣例應(yīng)用就依賴于AlfrescoShare的核心內(nèi)容管理功能。沒(méi)有必要為了向你的最終用戶提供一般性的內(nèi)容控制功能而去重新發(fā)明Alfresco Share的內(nèi)容管理界面。
Alfresco Web層和Surf
Alfresco提供了ECM的功能如:數(shù)據(jù)服務(wù),用戶界面和用戶應(yīng)用。用戶界面的功能是由使用Alfresco的Web層–Surf的應(yīng)用程序和應(yīng)用組件提供的,Surf最初作為一種快速開(kāi)發(fā)內(nèi)容應(yīng)用程序的方法,它使用腳本和REST架構(gòu)。Surf大量使用Web腳本來(lái)構(gòu)建用戶界面組件和訪問(wèn)內(nèi)容應(yīng)用服務(wù)器的信息。在2009年,Alfresco將Surf作為一個(gè)項(xiàng)目貢獻(xiàn)給了Spring社區(qū),在那里Surf能和其他SpringWeb層組件集成起來(lái),如Spring MVC,Spring Webflow和Grails。
Web腳本在Alfresco 2.0版本中出現(xiàn),用于Alfresco中基于REST的開(kāi)發(fā)。Web腳本大量依賴Web2.0形式的腳本:解釋執(zhí)行運(yùn)行時(shí)配置的小段代碼。這使得系統(tǒng)能非常靈活并且提高開(kāi)發(fā)新功能的速度。原型法在此環(huán)境中非常流行。如果性能是一個(gè)問(wèn)題,那么可以使用Java,但是Web腳本的基礎(chǔ)架構(gòu)能像兼容Javascript一樣容易的兼容JavaBeans。Web腳本雖然增加了一些性能方面的開(kāi)銷,但是它提供巨大的彈性和開(kāi)發(fā)效率。在Web層中的Web腳本使得這一切成為可能,包括:使用Surf或簡(jiǎn)單的HTML快速建立用戶界面組件,并將其部署為Alfresco Share組件或Portlets或其他Web平臺(tái)如GoogleGadget。
Alfresco編程模型
使用Alfresco內(nèi)容應(yīng)用服務(wù)器來(lái)創(chuàng)建應(yīng)用時(shí),你有多種編程模型的選擇。最簡(jiǎn)單的模型是針對(duì)那些非編程人員的,就是使用現(xiàn)成的AlfrescoShare應(yīng)用程序的組件,和使用規(guī)則以及操作模型(Actionsmodel)–一系列的條件和操作來(lái)獲取內(nèi)容??赏ㄟ^(guò)使用向?qū)?lái)定義規(guī)則和操作,這些操作包括轉(zhuǎn)換內(nèi)容,移動(dòng)內(nèi)容或執(zhí)行簡(jiǎn)單的Javascript片段。知識(shí)庫(kù)例程應(yīng)用程序使用規(guī)則和操作對(duì)進(jìn)入知識(shí)庫(kù)的內(nèi)容進(jìn)行基本的處理。
對(duì)于不需要復(fù)雜編程的更高級(jí)的內(nèi)容處理方式,你可以使用Web腳本。事實(shí)上,Alfresco CMIS實(shí)現(xiàn)和LoutsQuickr集成都是通過(guò)Web腳本創(chuàng)建的。通過(guò)使用Javascript創(chuàng)建這些數(shù)據(jù)服務(wù),將很容易地在Alfresco系統(tǒng)中創(chuàng)建新的服務(wù)。如果你想為AlfrescoShare應(yīng)用創(chuàng)建新的用戶界面或擴(kuò)展,你同樣可以通過(guò)一種Web模板語(yǔ)言如FreeMarker來(lái)使用Web腳本。大部分的AlfrescoShare應(yīng)用程序都是通過(guò)Web腳本創(chuàng)建的。
如果你希望或需要使用Java來(lái)創(chuàng)建應(yīng)用或擴(kuò)展AlfrescoShare,你可以使用很多用來(lái)創(chuàng)建Alfresco系統(tǒng)的Java工具。Surf,一個(gè)WEB運(yùn)行時(shí)的框架,由Alfresco貢獻(xiàn)給Spring項(xiàng)目能擴(kuò)展Share應(yīng)用和創(chuàng)建你自己的Web應(yīng)用。因?yàn)镾hare是使用Surf創(chuàng)建的,因此即可以通過(guò)使用Java和Web腳本的組合或單獨(dú)使用Java來(lái)創(chuàng)建你自己的擴(kuò)展。你可以使用Java的Spring平臺(tái)來(lái)訪問(wèn)甚至是替換Alfresco,內(nèi)容應(yīng)用服務(wù)器,或AlfrescoShare中的所有部分。
最后,如果你希望你寫的Alfresco的應(yīng)用程序能移植到其他的ECM系統(tǒng),那么你可以使用內(nèi)容管理互操作服務(wù)(ManagementInteroperability Services — CMIS),它是一個(gè)用于訪問(wèn)內(nèi)容庫(kù)的OASIS標(biāo)準(zhǔn)(包括Alfresco, EMCDocumentum, IBM FileNet, and MicrosoftSharePoint這些廠商)。知識(shí)庫(kù)例程使用了一些CMIS的例子用來(lái)告訴我們?nèi)绾螛?gòu)建可移植的應(yīng)用程序。
<目錄>