<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    談笑有鴻儒,往來無白丁

    在恰當的時間、地點以恰當的方式表達給恰當的人...  閱讀的時候請注意分類,佛曰我日里面是談笑文章,其他是各個分類的文章,積極的熱情投入到寫博的隊伍中來,支持blogjava做大做強!向dudu站長致敬>> > 我的微博敬請收聽

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

    I、綜述
    用戶可以通過傳統的或者無線網絡的方式訪問portal。開發者可以通過SOAP、RMI和自己定義的通道類訪問暴露的API來操作portal。
    ?
    II、Portlet 應用接口(JSP168)
    Liferay設計成為部署符合(JSP168)Portlet 應用接口的Portlet。很多有用的Portlet(比如郵件、Liferay文檔、日立、公告版和其他)已經跟portal綁定,而且可以作為添加自定義的Portlet的范例。
    III、Struts 和 Tiles
    所有的HTTP和WAP請求都通過MainServlet響應,MailServlet擴展了Struts基類ActionServlet。 MainServlet處理所有的請求,使得每個請求都路由到合適的PortletAction。 想要更好的理解portal的web框架請參考Struts。
    Portal的布局信息通過定制的模板管理。想要更好的理解Tiles如何管理布局的,請參考Tile的相關文章。
    IV、Session EJBs、Spring和Hibernate
    Liferay不再依賴EBJ,可以部署在標準的servlet容器中。所有的業務邏輯都集中在可以被Spring查找和實例化的POJO實現中。這些實現都可以通過Spring的AOP和IOC修改或者強化。
    Portal 企業版使用Session EJB包裝POJO實現,以為大型網站提供所需的重量級擴展和事務支持。Portal 專業版調用POJO實現以提供輕量級的一致的外觀(fa?ade)。
    所有的數據都使用Hibernate持久化,供POJO實現調用。 Liferay原來使用CMP技術構建持久化, 因為Hibernate優秀的速度和彈性而轉換為Hibernate。 Liferay不依賴特定的數據庫,可以在多種流行的數據庫上運行。
    Liferay使用JAAS Web安全機制,當用戶登錄的時候,他們的信息會被傳送到相應的Servlet和EJB節點。遠程的Session EJB可以利用這一點,在EJB層級確認安全性和授權,防止它在其他地方被復制。本地Session EJB向其他Session EJB暴露業務邏輯,不需要明確的確認安全性,因為它們不會被遠程調用。信息也會被傳送到作為遠程Session EJB基礎類的POJO實現上。
    企業版使用Session EJB,允許部署者將Web服務器、EJB服務器、數據庫服務器分開,構建三層的架構。這是真正的N層部署,因為沒有人再關注單層的群,而且可以為大企業提供最大程度的彈性。
    大部分的EJB、HBM和Model都是用/portal-ejb目錄下service。xml中的ant任務build-service生成的。每個持久化數據的Portlet都有自己的service。xml。(搜索/portal-ejb目錄,你就可以得到一個列表)。當我們想要為portlet產生持久類的時候就可以復制這些文件到/portal-ejb目錄。這是一個構建在Xdoclet引擎上面的內部工具。
    比如,在讀取Bookmarks Portlet的service。xml時,下列模型類被生成。每個模型類映射數據庫中的一個表。不要編輯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層的架構。
    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
    生成的幫助類調用持久化方法。默認的,幫助類調用Hibernate持久化方法來更新數據庫。你可以在portal。properties中重寫,而且只要擴展了默認的持久化類就可以設置自己的持久化類。這意味著可以自定義在哪里保存你的數據。它可以是一個傳統的數據庫,或者LDAP服務器,或者其他。
    com.liferay.portlet.bookmarks.service.persistence.BookmarksEntryUtil
    com.liferay.portlet.bookmarks.service.persistence.BookmarksFolderUtil
    池類也被創建成最小的對象,行為也可以在portal。properties中修改。
    com.liferay.portlet.bookmarks.service.persistence.BookmarksEntryPool
    com.liferay.portlet.bookmarks.service.persistence.BookmarksFolderPool
    擴展了PrincipalBean的POJO實現持有業務邏輯,確認調用者信息,可以被遠程調用。調用getUserId()返回當前用戶id。調用getUser()返回代表當前用戶的用戶模型。擴展POJO實現的Session EJB實現了PrincipalSessionBean。
    比如,這些類允許你刪除一個書簽入口或者文件夾,當且僅當你是這個入口或者文件夾的創建者。
    這些類只有在它們不存在的時候才能被生成。
    com.liferay.portlet.bookmarks.service.impl.BookmarksEntryServiceImpl
    com.liferay.portlet.bookmarks.service.impl.BookmarksFolderServiceImpl
    幫助類是基于POJO實現生成的。它們幫助保存開發者的時間和顯示錯誤(polluted)的代碼。與其寫好幾行代碼來尋找合適的Session EJB包裝或者POJO實現,你可以簡單的使用BookmarksEntryServiceUril。addEntry來調用BookmarksEntryServiceImpl。addEntry中的等價方法。
    BookmarksEntryServiceUril 調用BookmarksFolderServiceFactory來查找實現BookmarksEntryService的類。BookmarksFolderServicesFactory根據Spring和portal。properties的配置來決定是否加載Session EJB包裝或者POJO實現。Session EJB擴展了POJO實現。
    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)類使得開發者可以通過80端口調用POJO實現。本文檔的V部分針對這個給出了一個例子。
    com.liferay.portlet.bookmarks.service.http.BookmarksEntryServiceHttp
    com.liferay.portlet.bookmarks.service.http.BookmarksFolderServiceHttp
    Soap類被生成,以便開發者通過80端口調用POJO實現。Soap比通道(tunneling)慢,因為tunneling請求流是二進制格式的。Soap比tunneling靈活,因為客戶端類不局限于Java。
    com.liferay.portlet.bookmarks.service.http.BookmarksEntryServiceSoap
    com.liferay.portlet.bookmarks.service.http.BookmarksFolderServiceSoap
    沒有擴展PrincipalBean的POJO實現類用來持有業務邏輯,不用確認調用者的信息,可以被本地調用。這些類的存在使得業務邏輯可以很容易的被其他工程集成。
    這些類只有在先前不存在的情況下才會被生成。
    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
    有一些用戶需要遠程調用本地的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因為它很重和需要大量的編碼。我們的構建腳本證明你可以在復用中保持Session EBJ的優勢,這樣可以在付出和回報上保持很好平衡。
    Spring給予Liferay額外的彈性。 開發者利用Liferay Portal,可以在一個Servlet容器中測試他們的POJO實現;而利用Liferay Portal企業版,可以在一個應用服務器部署成產品。
    V、SAOP、RMI和Tunneling
    所有的遠程POJO實現都通過SOAP、RMI和我們自己的通道(Tunneling)類暴露給外部世界。
    我們并不是簡單的這樣做因為Web Service還是一個困頓(buzz)的世界,但是我們發現它確實對集成有用。接下來是一個公司平衡這些資源的例子。
    3 sixteen是一家將快速創建和運作的T恤公司。他們看到Liferay,想利用集成的購物 portlet。但是他們認為Liferay作為一個處于時尚前沿的T恤公司站點太難看了。為了解決這個問題,他們決定將他們的網站分為兩個站點:一個手冊站點和一個購物站點。
    www。3sixteen。com 成為一個構建在Flash上面的漂亮的站點。my。3sixteen。com則是使用Liferay分發的購物站點。這兩個站點分別放在不同的Linux系統主機上,所有的目的放在不同的宿主上。
    他們還需要構建一個郵件列表來收集所有感興趣的客戶的郵件地址。為實現這個,他們再Flash站點增加了一個JSP彈出窗口(pop up box),這樣可以告訴Portal服務器在Address Book Portlet中將郵件地址增加到聯系列表(contact)。
    下面是一個JSP片斷,顯示3sixteen的用戶如何利用ABContactServiceHttp增加一個聯系列表。
    ?
    ABContactServiceHttp調用ABContactServiceUtil的addContact。這個調用通過80端口發送,被http://my。3sixteen。com/tunnel/servlet/AuthTunnelServlet接收。應用服務器確認認證匹配,然后處理ABContactServiceUtil,就好像ID為joe_bloggs的用戶在調用addContact。然后ABContactServiceUtil調用ABContactServiceImpl來完成實際工作。你可以通過查看JavaDocs里面的源代碼來查看這個邏輯。
    現在Joe Bloggs可以登錄到portal,在Address Book portlet可以看到他已經有一個新的聯系列表。所有被包含的portlet都有這個性能因為這些幫助類已經生成。這意味著你可以撰寫applet或者任何Java應用來操作那些包含你的業務邏輯的Session EJB。假如有人持有你的密碼那么這會是一個安全問題,所以你可以通過修改配置文件portal。properties來限制通道(Tunnel)Servlet只監聽特定的端口。
    你也可以通過SOAP和RMI操作Session EJB。我們將盡快提交更多這方面的例子。
    VI 應用服務器
    Liferay是從底層構建的,可以被應用服務器所用。下面是一個Portal例子列表,顯示portal連接數據庫以及展示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中沒有信息保留。他們用域名分隔開,根據公司編號存在于各自的空間內。
    查看Multiple Portal獲取細節信息,了解如何在一臺機器上部署多個Portal實例。

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

    posted on 2006-07-31 10:22 壞男孩 閱讀(1976) 評論(0)  編輯  收藏 所屬分類: Portal相關文檔

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 精品免费国产一区二区| 欧美三级在线电影免费| 大地影院MV在线观看视频免费| 在线观看片免费人成视频无码| 国产zzjjzzjj视频全免费| 中文字幕亚洲无线码a| 99久久亚洲精品无码毛片| 亚洲熟妇AV乱码在线观看| 噜噜噜亚洲色成人网站| 成在人线av无码免费高潮水| 国产成人yy免费视频| 亚洲第一页综合图片自拍| 91精品国产亚洲爽啪在线观看| 亚洲av无码兔费综合| 久久久久久一品道精品免费看| 国产在线观看片a免费观看| 亚洲人成网77777亚洲色| 亚洲乱妇老熟女爽到高潮的片| 久久精品国产这里是免费| 日韩亚洲国产二区| 亚洲熟妇无码爱v在线观看| 亚洲日韩在线观看免费视频| 少妇高潮太爽了在线观看免费| 国产精品亚洲精品日韩已满| 亚洲a∨无码一区二区| 亚洲国产av一区二区三区| 99re6在线视频精品免费| 五月婷婷亚洲综合| 成人免费一区二区三区| 亚洲国产综合精品中文第一区| 一级一级毛片免费播放| 99视频在线精品免费观看6| 美国毛片亚洲社区在线观看| 国产精品成人免费视频网站京东| 色婷婷亚洲一区二区三区| 亚洲男同帅GAY片在线观看| av无码免费一区二区三区| 日韩亚洲人成网站| 久久青青成人亚洲精品| 中文字幕乱码免费看电影| 亚洲娇小性xxxx色|