隨筆-86  評論-767  文章-3  trackbacks-3

          Liferay Portal系統(tǒng)架構(gòu)點滴
          原文地址: http://www.liferay.com/web/guest/documentation/architecture
          目錄
          Liferay Portal系統(tǒng)架構(gòu)點滴?1
          目錄?1
          I、綜述?1
          II、Portlet 應(yīng)用接口(JSP168)?2
          III、Struts 和 Tiles?2
          IV、Session EJBs、Spring和Hibernate?3
          V、SAOP、RMI和Tunneling?5
          VI 應(yīng)用服務(wù)器?6

          I、綜述
          用戶可以通過傳統(tǒng)的或者無線網(wǎng)絡(luò)的方式訪問portal。開發(fā)者可以通過SOAP、RMI和自己定義的通道類訪問暴露的API來操作portal。
          ?
          II、Portlet 應(yīng)用接口(JSP168)
          Liferay設(shè)計成為部署符合(JSP168)Portlet 應(yīng)用接口的Portlet。很多有用的Portlet(比如郵件、Liferay文檔、日立、公告版和其他)已經(jīng)跟portal綁定,而且可以作為添加自定義的Portlet的范例。
          III、Struts 和 Tiles
          所有的HTTP和WAP請求都通過MainServlet響應(yīng),MailServlet擴展了Struts基類ActionServlet。 MainServlet處理所有的請求,使得每個請求都路由到合適的PortletAction。 想要更好的理解portal的web框架請參考Struts。
          Portal的布局信息通過定制的模板管理。想要更好的理解Tiles如何管理布局的,請參考Tile的相關(guān)文章。
          IV、Session EJBs、Spring和Hibernate
          Liferay不再依賴EBJ,可以部署在標準的servlet容器中。所有的業(yè)務(wù)邏輯都集中在可以被Spring查找和實例化的POJO實現(xiàn)中。這些實現(xiàn)都可以通過Spring的AOP和IOC修改或者強化。
          Portal 企業(yè)版使用Session EJB包裝POJO實現(xiàn),以為大型網(wǎng)站提供所需的重量級擴展和事務(wù)支持。Portal 專業(yè)版調(diào)用POJO實現(xiàn)以提供輕量級的一致的外觀(fa?ade)。
          所有的數(shù)據(jù)都使用Hibernate持久化,供POJO實現(xiàn)調(diào)用。 Liferay原來使用CMP技術(shù)構(gòu)建持久化, 因為Hibernate優(yōu)秀的速度和彈性而轉(zhuǎn)換為Hibernate。 Liferay不依賴特定的數(shù)據(jù)庫,可以在多種流行的數(shù)據(jù)庫上運行。
          Liferay使用JAAS Web安全機制,當用戶登錄的時候,他們的信息會被傳送到相應(yīng)的Servlet和EJB節(jié)點。遠程的Session EJB可以利用這一點,在EJB層級確認安全性和授權(quán),防止它在其他地方被復制。本地Session EJB向其他Session EJB暴露業(yè)務(wù)邏輯,不需要明確的確認安全性,因為它們不會被遠程調(diào)用。信息也會被傳送到作為遠程Session EJB基礎(chǔ)類的POJO實現(xiàn)上。
          企業(yè)版使用Session EJB,允許部署者將Web服務(wù)器、EJB服務(wù)器、數(shù)據(jù)庫服務(wù)器分開,構(gòu)建三層的架構(gòu)。這是真正的N層部署,因為沒有人再關(guān)注單層的群,而且可以為大企業(yè)提供最大程度的彈性。
          大部分的EJB、HBM和Model都是用/portal-ejb目錄下service。xml中的ant任務(wù)build-service生成的。每個持久化數(shù)據(jù)的Portlet都有自己的service。xml。(搜索/portal-ejb目錄,你就可以得到一個列表)。當我們想要為portlet產(chǎn)生持久類的時候就可以復制這些文件到/portal-ejb目錄。這是一個構(gòu)建在Xdoclet引擎上面的內(nèi)部工具。
          比如,在讀取Bookmarks Portlet的service。xml時,下列模型類被生成。每個模型類映射數(shù)據(jù)庫中的一個表。不要編輯BookmarksEntryModel,要通過編輯BookmarksEntry來增加手工維護的代碼。BookmarksEntry一次性生成,擴展了BookmarksEntryModel。這樣允許我們輕松的生成代碼,而且具備手工維護的彈性。
          com.liferay.portlet.bookmarks.model.BookmarksEntry
          com.liferay.portlet.bookmarks.model.BookmarksEntryModel
          com.liferay.portlet.bookmarks.model.BookmarksFolder
          com.liferay.portlet.bookmarks.model.BookmarksFolderModel
          Hibernate類生成針對各個模型類的映射。這樣當模型類跨層配置而Hibernate不是的時候允許一個N層的架構(gòu)。
          com.liferay.portlet.bookmarks.service.persistence.BookmarksEntryHBM
          com.liferay.portlet.bookmarks.service.persistence.BookmarksFolderHBM
          添加、更新、刪除、查找、移動和計算Hibernate entries的持久方法作為默認的持久化機制被生成。
          com.liferay.portlet.bookmarks.service.persistence.BookmarksEntryPersistence
          com.liferay.portlet.bookmarks.service.persistence.BookmarksFolderPersistence
          生成的幫助類調(diào)用持久化方法。默認的,幫助類調(diào)用Hibernate持久化方法來更新數(shù)據(jù)庫。你可以在portal。properties中重寫,而且只要擴展了默認的持久化類就可以設(shè)置自己的持久化類。這意味著可以自定義在哪里保存你的數(shù)據(jù)。它可以是一個傳統(tǒng)的數(shù)據(jù)庫,或者LDAP服務(wù)器,或者其他。
          com.liferay.portlet.bookmarks.service.persistence.BookmarksEntryUtil
          com.liferay.portlet.bookmarks.service.persistence.BookmarksFolderUtil
          池類也被創(chuàng)建成最小的對象,行為也可以在portal。properties中修改。
          com.liferay.portlet.bookmarks.service.persistence.BookmarksEntryPool
          com.liferay.portlet.bookmarks.service.persistence.BookmarksFolderPool
          擴展了PrincipalBean的POJO實現(xiàn)持有業(yè)務(wù)邏輯,確認調(diào)用者信息,可以被遠程調(diào)用。調(diào)用getUserId()返回當前用戶id。調(diào)用getUser()返回代表當前用戶的用戶模型。擴展POJO實現(xiàn)的Session EJB實現(xiàn)了PrincipalSessionBean。
          比如,這些類允許你刪除一個書簽入口或者文件夾,當且僅當你是這個入口或者文件夾的創(chuàng)建者。
          這些類只有在它們不存在的時候才能被生成。
          com.liferay.portlet.bookmarks.service.impl.BookmarksEntryServiceImpl
          com.liferay.portlet.bookmarks.service.impl.BookmarksFolderServiceImpl
          幫助類是基于POJO實現(xiàn)生成的。它們幫助保存開發(fā)者的時間和顯示錯誤(polluted)的代碼。與其寫好幾行代碼來尋找合適的Session EJB包裝或者POJO實現(xiàn),你可以簡單的使用BookmarksEntryServiceUril。addEntry來調(diào)用BookmarksEntryServiceImpl。addEntry中的等價方法。
          BookmarksEntryServiceUril 調(diào)用BookmarksFolderServiceFactory來查找實現(xiàn)BookmarksEntryService的類。BookmarksFolderServicesFactory根據(jù)Spring和portal。properties的配置來決定是否加載Session EJB包裝或者POJO實現(xiàn)。Session EJB擴展了POJO實現(xiàn)。
          com.liferay.portlet.bookmarks.service.ejb.BookmarksEntryServiceEJB
          com.liferay.portlet.bookmarks.service.ejb.BookmarksEntryServiceEJBImpl
          com.liferay.portlet.bookmarks.service.ejb.BookmarksEntryServiceHome

          com.liferay.portlet.bookmarks.service.spring.BookmarksEntryService
          com.liferay.portlet.bookmarks.service.spring.BookmarksEntryServiceFactory
          com.liferay.portlet.bookmarks.service.spring.BookmarksEntryServiceUtil

          com.liferay.portlet.bookmarks.service.ejb.BookmarksFolderServiceEJB
          com.liferay.portlet.bookmarks.service.ejb.BookmarksFolderServiceEJBImpl
          com.liferay.portlet.bookmarks.service.ejb.BookmarksFolderServiceHome

          com。Liferay.portlet.bookmarks.service.spring.BookmarksFolderService
          com。Liferay.portlet.bookmarks.service.spring.BookmarksFolderServiceFactory
          com。Liferay.portlet.bookmarks.service.spring.BookmarksFolderServiceUtil
          通道(Tunneling)類使得開發(fā)者可以通過80端口調(diào)用POJO實現(xiàn)。本文檔的V部分針對這個給出了一個例子。
          com.liferay.portlet.bookmarks.service.http.BookmarksEntryServiceHttp
          com.liferay.portlet.bookmarks.service.http.BookmarksFolderServiceHttp
          Soap類被生成,以便開發(fā)者通過80端口調(diào)用POJO實現(xiàn)。Soap比通道(tunneling)慢,因為tunneling請求流是二進制格式的。Soap比tunneling靈活,因為客戶端類不局限于Java。
          com.liferay.portlet.bookmarks.service.http.BookmarksEntryServiceSoap
          com.liferay.portlet.bookmarks.service.http.BookmarksFolderServiceSoap
          沒有擴展PrincipalBean的POJO實現(xiàn)類用來持有業(yè)務(wù)邏輯,不用確認調(diào)用者的信息,可以被本地調(diào)用。這些類的存在使得業(yè)務(wù)邏輯可以很容易的被其他工程集成。
          這些類只有在先前不存在的情況下才會被生成。
          com.liferay.portlet.bookmarks.service.impl.BookmarksEntryLocalServiceImpl
          com.liferay.portlet.bookmarks.service.impl.BookmarksFolderLocalServiceImpl
          幫助類也一并生成。
          com.liferay.portlet.bookmarks.service.ejb.BookmarksEntryLocalServiceEJB
          com.liferay.portlet.bookmarks.service.ejb.BookmarksEntryLocalServiceEJBImpl
          com.liferay.portlet.bookmarks.service.ejb.BookmarksEntryLocalServiceHome

          com.liferay.portlet.bookmarks.service.spring.BookmarksEntryLocalService
          com.liferay.portlet.bookmarks.service.spring.BookmarksEntryLocalServiceFactory
          com.liferay.portlet.bookmarks.service.spring.BookmarksEntryLocalServiceUtil

          com.liferay.portlet.bookmarks.service.ejb.BookmarksFolderLocalServiceEJB
          com.liferay.portlet.bookmarks.service.ejb.BookmarksFolderLocalServiceEJBImpl
          com.liferay.portlet.bookmarks.service.ejb.BookmarksFolderLocalServiceHome

          com.liferay.portlet.bookmarks.service.spring.BookmarksFolderLocalService
          com.liferay.portlet.bookmarks.service.spring.BookmarksFolderLocalServiceFactory
          com.liferay.portlet.bookmarks.service.spring.BookmarksFolderLocalServiceUtil
          有一些用戶需要遠程調(diào)用本地的Service類,所以遠程Service類的本地副本也一并被生成。
          com.liferay.portlet.bookmarks.service.ejb.BookmarksEntryRemoteServiceEJB
          com.liferay.portlet.bookmarks.service.ejb.BookmarksEntryRemoteServiceEJBImpl
          com.liferay.portlet.bookmarks.service.ejb.BookmarksEntryRemoteServiceHome

          com.liferay.portlet.bookmarks.service.spring.BookmarksEntryRemoteService
          com.liferay.portlet.bookmarks.service.spring.BookmarksEntryRemoteServiceFactory
          com.liferay.portlet.bookmarks.service.spring.BookmarksEntryRemoteServiceUtil

          com.liferay.portlet.bookmarks.service.ejb.BookmarksFolderRemoteServiceEJB
          com.liferay.portlet.bookmarks.service.ejb.BookmarksFolderRemoteServiceEJBImpl
          com.liferay.portlet.bookmarks.service.ejb.BookmarksFolderRemoteServiceHome

          com.liferay.portlet.bookmarks.service.spring.BookmarksFolderRemoteService
          com.liferay.portlet.bookmarks.service.spring.BookmarksFolderRemoteServiceFactory
          com.liferay.portlet.bookmarks.service.spring.BookmarksFolderRemoteServiceUtil
          很多人刻意避免Session EJB因為它很重和需要大量的編碼。我們的構(gòu)建腳本證明你可以在復用中保持Session EBJ的優(yōu)勢,這樣可以在付出和回報上保持很好平衡。
          Spring給予Liferay額外的彈性。 開發(fā)者利用Liferay Portal,可以在一個Servlet容器中測試他們的POJO實現(xiàn);而利用Liferay Portal企業(yè)版,可以在一個應(yīng)用服務(wù)器部署成產(chǎn)品。
          V、SAOP、RMI和Tunneling
          所有的遠程POJO實現(xiàn)都通過SOAP、RMI和我們自己的通道(Tunneling)類暴露給外部世界。
          我們并不是簡單的這樣做因為Web Service還是一個困頓(buzz)的世界,但是我們發(fā)現(xiàn)它確實對集成有用。接下來是一個公司平衡這些資源的例子。
          3 sixteen是一家將快速創(chuàng)建和運作的T恤公司。他們看到Liferay,想利用集成的購物 portlet。但是他們認為Liferay作為一個處于時尚前沿的T恤公司站點太難看了。為了解決這個問題,他們決定將他們的網(wǎng)站分為兩個站點:一個手冊站點和一個購物站點。
          www。3sixteen。com 成為一個構(gòu)建在Flash上面的漂亮的站點。my。3sixteen。com則是使用Liferay分發(fā)的購物站點。這兩個站點分別放在不同的Linux系統(tǒng)主機上,所有的目的放在不同的宿主上。
          他們還需要構(gòu)建一個郵件列表來收集所有感興趣的客戶的郵件地址。為實現(xiàn)這個,他們再Flash站點增加了一個JSP彈出窗口(pop up box),這樣可以告訴Portal服務(wù)器在Address Book Portlet中將郵件地址增加到聯(lián)系列表(contact)。
          下面是一個JSP片斷,顯示3sixteen的用戶如何利用ABContactServiceHttp增加一個聯(lián)系列表。
          ?
          ABContactServiceHttp調(diào)用ABContactServiceUtil的addContact。這個調(diào)用通過80端口發(fā)送,被http://my。3sixteen。com/tunnel/servlet/AuthTunnelServlet接收。應(yīng)用服務(wù)器確認認證匹配,然后處理ABContactServiceUtil,就好像ID為joe_bloggs的用戶在調(diào)用addContact。然后ABContactServiceUtil調(diào)用ABContactServiceImpl來完成實際工作。你可以通過查看JavaDocs里面的源代碼來查看這個邏輯。
          現(xiàn)在Joe Bloggs可以登錄到portal,在Address Book portlet可以看到他已經(jīng)有一個新的聯(lián)系列表。所有被包含的portlet都有這個性能因為這些幫助類已經(jīng)生成。這意味著你可以撰寫applet或者任何Java應(yīng)用來操作那些包含你的業(yè)務(wù)邏輯的Session EJB。假如有人持有你的密碼那么這會是一個安全問題,所以你可以通過修改配置文件portal。properties來限制通道(Tunnel)Servlet只監(jiān)聽特定的端口。
          你也可以通過SOAP和RMI操作Session EJB。我們將盡快提交更多這方面的例子。
          VI 應(yīng)用服務(wù)器
          Liferay是從底層構(gòu)建的,可以被應(yīng)用服務(wù)器所用。下面是一個Portal例子列表,顯示portal連接數(shù)據(jù)庫以及展示Liferay的性能。
          http://demo.liferay.net
          http://my.ccuc.net
          http://my.3sixteen.com
          http://portal.liferay.com
          http://www.gatewayfriends.org
          http://www.jasonandiris.com
          每個Portal中的用戶在其他Portal中沒有信息保留。他們用域名分隔開,根據(jù)公司編號存在于各自的空間內(nèi)。
          查看Multiple Portal獲取細節(jié)信息,了解如何在一臺機器上部署多個Portal實例。

          作者 : eamoi @ Aljoin Software
          Dev2dev ID: educhina
          Blog地址:
          http://spaces.msn.com/members/eamoi/
          http://blog.sina.com.cn/u/1183534285
          http://www.aygfsteel.com/eamoi/

          posted on 2005-10-08 11:42 eamoi 閱讀(7744) 評論(2)  編輯  收藏 所屬分類: Java

          評論:
          # re: [原創(chuàng)-翻譯]Liferay Portal系統(tǒng)架構(gòu)點滴 2006-08-21 11:33 | Spike Wang
          很好的翻譯,辛苦啦。

          希望共同交流Liferay

          我的 space:

          http://www.aygfsteel.com/hk2000c/

          MSN:hk2000c@hotmail.com


            回復  更多評論
            
          # re: [原創(chuàng)-翻譯]Liferay Portal系統(tǒng)架構(gòu)點滴 2006-11-02 14:00 | 高薪招聘若干名Java Portal開發(fā)高級工程師
          用友軟件工程有限公司(http://www.use.com.cn)高薪招聘若干名Java Portal開發(fā)高級工程師。本文信息一周內(nèi)有效。

          職責:
          1. 參與產(chǎn)品需求分析、定義。
          2. 參與產(chǎn)品設(shè)計和實現(xiàn)。

          技能要求:
          熟悉Liferay,有1年以上Java Portal and Portlet開發(fā)經(jīng)驗。對Hibernate和structs熟悉的優(yōu)先考慮

          待遇
          根據(jù)技能高低,至少8k

          聯(lián)系方式:
          郵件 xujian@use.com.cn
          電話 82373737-8016
          聯(lián)系人 徐先生

          有意者給我發(fā)郵件吧。
            回復  更多評論
            
          主站蜘蛛池模板: 武威市| 元谋县| 巨野县| 新营市| 青河县| 舞阳县| 五指山市| 彰化县| 曲阜市| 五寨县| 海城市| 牟定县| 富锦市| 巴彦淖尔市| 休宁县| 大埔县| 高尔夫| 万山特区| 博白县| 东宁县| 遂溪县| 高青县| 长宁县| 黄石市| 渭南市| 莎车县| 渝中区| 轮台县| 孟津县| 临颍县| 沙河市| 鹤岗市| 九龙坡区| 赤壁市| 开原市| 肇东市| 虞城县| 昌都县| 平江县| 荃湾区| 团风县|