JFoxPortal(JFox門戶)開發(fā)計(jì)劃1.概述JSR-168 規(guī)范說明:JSR-168 (Enterprise Portlet Specification 1.0 Final Draft 發(fā)表于2003-09-03,將于2003-10-06 Final Approval Ballot)是用于portlet級別開發(fā)的新Java portlet標(biāo)準(zhǔn)。依循于 JSR-168的Portlet可以移植于其他的Portal Container上。 JSR-168規(guī)范的站點(diǎn): http://www./en/jsr/detail?id=168 Portlet 說明: 在滿足門戶可定制性的需求上,引入了門戶組件概念Portlet,Portlet是一個可插拔的組件,關(guān)于Portlet有各種定義, JetSpeed在提交的JSR-168 portlet API specifications對Portlet的定義如下: Portlet是一個Web組件,可以被容器管理,可以產(chǎn)生動態(tài)內(nèi)容。 Portlet可以很容易地被插入并且運(yùn)行于一個Web應(yīng)用中,Portlet是被設(shè)計(jì)成聚合大量內(nèi)容的組合頁面,舉例:同樣一個Portlet,根據(jù)不同的用戶,可以產(chǎn)生不同的實(shí)例,這些實(shí)例中是根據(jù)用戶設(shè)置包含不同的內(nèi)容,也就是滿足用戶的可定制性。 2.第一階段:需求分析及相關(guān)文檔收集階段當(dāng)前一些 OpenSource Enterprise Portal 分析JetSpeed JetSpeed是Apache (http://jakarta./jetspeed) 組織的一個開源項(xiàng)目,IBM的WebSphere Portal Server正是基于 JetSpeed進(jìn)行二次開發(fā)。 為了實(shí)現(xiàn)門戶內(nèi)容的有效管理和監(jiān)控,JetSpeed的重要內(nèi)容組件Slide引入了Domain和Namespace方面的概念,對所有資源進(jìn)行樹形結(jié)構(gòu)的控制,在Slide中,Domain是一系列Namespace的聚合,它類似文件系統(tǒng)中的"/"根目錄, domain 可以控制在其中登記的 Namespace的訪問權(quán)限以及執(zhí)行Namespace的初始化和連接等管理工作。 Namespace是個自我獨(dú)立的有實(shí)體內(nèi)容的容器,它不能包含指向或連接到其它namespace,每個應(yīng)用系統(tǒng)可以是一個NameSpace, Namespace包含獨(dú)立的數(shù)據(jù)和這些數(shù)據(jù)的安全訪問機(jī)制。 JetSpeed雖然提供了豐富的Portal技術(shù)功能,但是其可定制性比較差,其重要的內(nèi)容組件Slide也比較難以讓人理解,它的安全控制框架與通用的J2EE使用JAAS不相融合,所有這些都造成了在其基礎(chǔ)上進(jìn)行二次開發(fā)的難度。 Liferay Liferay (http://www.) 代表了完整的J2EE應(yīng)用,使用了Web、EJB以及JMS等技術(shù),特別是其前臺界面部分使用Struts 框架技術(shù),基于XML的portlet配置文件可以自由地動態(tài)擴(kuò)展,使用了Web Services來支持一些遠(yuǎn)程信息的獲取,使用 Apahce Lucene實(shí)現(xiàn)全文檢索功能。 Liferay的缺點(diǎn)是它缺乏一個簡單清晰可拓展的架構(gòu)設(shè)計(jì),portlet設(shè)計(jì)顯得比較凌亂,進(jìn)行二次開發(fā)有一定的難度。 JPortal JPortal (http://jportal.) 是目前最為符合JSR-168 Spec的Portal實(shí)現(xiàn)。他使用了攔截器技術(shù)和 Dynamic Proxy來實(shí)現(xiàn)Portlet的可插入設(shè)計(jì)。他目前只是一個原型的實(shí)現(xiàn)并且之關(guān)注于實(shí)現(xiàn) Portal Container,并沒有過多的 Portlet實(shí)現(xiàn)和設(shè)計(jì)。 優(yōu)點(diǎn)在于其的架構(gòu)清晰,易于擴(kuò)展,但在Portal的工業(yè)強(qiáng)度上需求的差距是比較大的,沒有分布式的概念是他目前架構(gòu)的一個致命的地方。 3.第二階段:技術(shù)選型階段目標(biāo): 努力克服 Liferay 結(jié)構(gòu)性混亂的問題,實(shí)現(xiàn) Portlet 組件 jar HotSpot 特性。完全符合JSR-168規(guī)范。具有工業(yè)強(qiáng)度的Portal Container設(shè)計(jì)。Portal的難點(diǎn)和要點(diǎn)都是將動態(tài)功能最大化以及界面的最大可選擇性。MVC層和表述層的技術(shù)選型: Jarkarta Struts 1.1 : http://jakarta./struts 說明: MVC B/S 構(gòu)架實(shí)現(xiàn) Jarkarta Velocity 1.3.1 : http://jakarta./velocity 說明: 替代JSP的表述層方案 邏輯層的技術(shù)選型: EJB (Enterprise Java Bean) : 符合 EJB 2.1規(guī)范。 說明: 使用EJB的SessionBean和MessageDrivenBean機(jī)制,以實(shí)現(xiàn)分布式的功能需求。 EJB 服務(wù)器 : JBoss Enterprise Server 3.2.x 說明: 開源的J2EE應(yīng)用服務(wù)器,系統(tǒng)會通過XDoclet來實(shí)現(xiàn)不同J2EE應(yīng)用服務(wù)器的實(shí)現(xiàn)。 數(shù)據(jù)持久層的技術(shù)選型: Hibernate 2.0.1 : http://www. 說明: 符合JDO 2.0規(guī)范的數(shù)據(jù)持久性技術(shù)的實(shí)現(xiàn)方案,使用了O/R Mapping技術(shù)。 Portlet 實(shí)現(xiàn)的技術(shù)選型: JMX (Java Management Extension) 1.3 : http://java./products/JavaManagement/ 說明: Java管理擴(kuò)展,是一個為應(yīng)用程序、設(shè)備、系統(tǒng)等植入管理功能的框架。 Jakarta Commons Modeler : http://jakarta./commons/modeler.html 說明: 配置組件的模型MBean元信息,還利用一種算法為復(fù)雜資源類提供MBean類的基本實(shí)現(xiàn)。 日志技術(shù)選型: Jakarta Log4j : http://jakarta./log4j 說明: 系統(tǒng)日志的紀(jì)錄包。 Jakarta Commons Logging : http://jakarta./commons/logging.html 說明: 增強(qiáng)系統(tǒng)日志的記錄包工具。 測試框架選型: Junit : http://www. 說明: 系統(tǒng)代碼測試工具。 Jakarta Cactus 1.6 Dev : http://jakarta./cactus 說明: J2EE測試框架,測試服務(wù)器端的代碼。 Web Service 技術(shù)選型: Apache Soap : http://ws./soap 說明: Web Service Soap的開源實(shí)現(xiàn),系統(tǒng)基于他來實(shí)現(xiàn)相應(yīng)的Web Service功能。 Apache Axis : http://ws./axis 說明: Web Service 框架,是Soap的進(jìn)一步實(shí)現(xiàn)。 其他技術(shù)選型: XDoclet 1.2 Beta 2 : http://xdoclet./ 說明: AOP(Attribute Oriented Programming)面向?qū)傩跃幊虂砗喕M件之間的連續(xù)集成。通過生成部署描述符和支持代碼,大大地減少開發(fā)時間,是開發(fā)人員把重點(diǎn)放在應(yīng)用程序邏輯代碼上。 Ant 1.5.4 : http://ant. 說明: 源代碼批量編譯工具。 JDom Beta 9 : http://www. 說明: XML 解析工具。 Lucene 1.2 : http://jakarta./lucene 說明: 全文本搜索工具包,具有的索引機(jī)制。 4.第三階段:Portal Container 架構(gòu)設(shè)計(jì)異地 Caching 機(jī)制構(gòu)架:由于Portal技術(shù)非常多的依賴于Web Service,而Web Service的網(wǎng)絡(luò)開銷是非常大的。如果每個request都進(jìn)行網(wǎng)絡(luò)通訊,無疑性能是很低的。我們需要將一些經(jīng)常反復(fù)使用的狀態(tài)數(shù)據(jù)一直保存在內(nèi)存中,在有效期內(nèi)供客戶端不斷反復(fù)訪問。使用HashMap保存對象是實(shí)現(xiàn)的最基本思路,但是這只能實(shí)現(xiàn)單機(jī)系統(tǒng)的緩沖機(jī)制,一旦Portal的數(shù)據(jù)量級達(dá)到一定的程度就必須實(shí)現(xiàn)多臺服務(wù)器的"集群"Caching機(jī)制。 One Point Login(單點(diǎn)登陸)和權(quán)限管理: 單點(diǎn)登陸是Portal的重要技術(shù),權(quán)限管理的粒度問題。 5.第四階段:Portlet 功能性設(shè)計(jì)JFox Enterprise Portal Architect Analysis1.總體結(jié)構(gòu)分析 Portal 是基于 Web 的應(yīng)用,一般來說,提供個人化、單點(diǎn)登陸、不同來源的內(nèi)容集合和掛接信息系統(tǒng)的表述層。集合是指在一個Web 頁面中集成不同來源的內(nèi)容的動作。一個Portal必須提供成熟的個人化特性來為用戶提供客戶化的內(nèi)容。Portal 也可以有不同類型的portlet來為不同得用戶創(chuàng)建相關(guān)內(nèi)容。 2.Portal Container實(shí)現(xiàn)分析 Portal 容器運(yùn)行相應(yīng)的Portal并提供給他們必須的運(yùn)行期環(huán)境。一個Portlet容器承載Portlet并管理他們的運(yùn)行期,它同樣為Portlet引用提供持久性儲存。Portlet容器從Portal獲得相應(yīng)的請求并在Portlet中執(zhí)行它的請求。 3.良好的EJB設(shè)計(jì)構(gòu)架 考慮方面: JNDI 效率的考量。 4.Portlet 實(shí)現(xiàn)分析 基于動態(tài)代理技術(shù)(Dynamic Proxy)來實(shí)現(xiàn)相應(yīng)的Portlet插入技術(shù)。 5.Portal Caching 實(shí)現(xiàn) 核心類是org.noah.cache.model.cache,通過構(gòu)造一個new cache(Object obj),將需要cache的對象賦值進(jìn)去,就能達(dá)到cache的目的,以后通過cache.getObject()可以得到這個對象。為了達(dá)到分布式cache目的,多態(tài)Server能共享同樣的Cache,使用了數(shù)據(jù)庫來持久化這些cache。 6.考慮做一個Service Framework來提供系統(tǒng)所需要的各種不同的服務(wù),類似于Turbine的Service Framework。 |
|