分享
 
 
 

Lifeary体系结构

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

Lifeary体系结构,这个文章是我自己翻译的,第一次翻译,自己都感觉不是很满意。请见谅。

I.

概述

II.

Portlet API (JSR 168)

III.

Struts and Tiles

IV.

Session EJBs and Hibernate

V.

SOAP, RMI, and Tunneling

VI.

Application Service Provider

I.

概述

Users 能够从商业和无线设备进入门户。开发者能够从开放的API通过SOAP、RMI和我们定制的渠道类来访问门户。

II.

Portlet API (JSR 168)

Liferay 是被设计来发布门户网站,门户网站是符合Portlet API(JSR 168)的。 许多实用的Portlet 捆绑了邮件、文件、日历、信息平台等门户,并且能够增加自己定制的门户来作为例子。.

III.

Struts and Tiles

所有的HTTP和WAP请求都通过MainServlet, MainServlet继承自基础Struts的ActionServlet. MainServlet 处理所有请求并且保证每一个请求都按照正确的PorletAction来发送。学习Struts能够更好的理解门户网站的框架功能。

门户的所有的规划信息都集中在两个文件当中:portal_layout.jsp 和portlet_layout.jsp。这些文件存放在

/portal-web/docroot/WEB-INF/html/tiles文件夹中。关于Tiles的文章能够更加方便的了解Tiles是如何作为规划管理器来工作的。

Funambol是一个很好的例子网站,这个网站修改了门户规划来支持独立的外观和感觉。

IV.

会话EJBs and Hibernate

Liferay是很少的门户中的一个,它建立了自己的Portlet container和支持会话EJB的Portlet。我们要支持EJB是因为我们的很多用户需要通过会话EJB的分布支持

会话EJB给Lifera提供了一个分布式的支持事务的逻辑层。是的,那是笨重的,而且对于小型项目是非常没有必要的。但是他对于我们很有有着大型网站的用户是非常重要的

业务逻辑集中在会话EJB中,持久性数据使用Hibernate。Liferay以前是依靠CMP技术来实现持久性。但是现在转变成Hibernate,因为它速度更快,弹性更好。Liferay具有数据库无关性,能够在各种流行的数据库中运行

Liferay使用JAAS网站安全,也就是说当一个用户登录的时候,他们的信息将传给Servlet和EJB层。在EJB层校对安全和授权可以是它不能在别处被复制,这对于远程的会话EJB是有益的。本地会话EJB把业务逻辑暴露给其他的会话EJB,它不需要特殊的核对安全,因为它不能被远程调用。

使用会话EJB永许我们把系统分成WEB服务器、EJB服务器和数据库服务器,能够建立三层集群。n层的发布是可以的,因为不能强行说集群就是任何的一层,能够允许大公司最大的可扩展性。

大部分的我们的EJB,HBM和模型都是通过ANT任务build-ejb生成的,可以阅读ejb.xml 在portal-ejb文件夹中。每一个持久数据的Portlet都有一个ejb.xml文件(搜索

/portal-ejb,你会找到的),当我们要为portlet生成持久的对象的时候我们会把这个文件拷别到

/portal-ejb文件夹中。这是一个内在的工具,这个工具在上面的Xdoclet引擎中建立。

例如,阅读在书签Portlet中找到的ejb.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对象不是,在这情况下就能够允许多层架构。

com.liferay.portlet.bookmarks.ejb.BookmarksEntryHBM

com.liferay.portlet.bookmarks.ejb.BookmarksFolderHBM

增加、修改、删除、查找、删除和计算得Hibernate入口的持久方法被生成做为默认的持久化机制。

com.liferay.portlet.bookmarks.ejb.BookmarksEntryPersistence

com.liferay.portlet.bookmarks.ejb.BookmarksFolderPersistence

生成Helper对象来调用持久化方法。Helper对象默认调用Hibernate的持久化方法来更新数据库,你能够在 portal.properties中修改它,使用你自己的持久化方法,只要他继承默认的持久化对象。这就意味着你在存储数据的时候能够定制。你能使用传统的数据库,LDAP服务甚至其他的东西。

com.liferay.portlet.bookmarks.ejb.BookmarksEntryUtil

com.liferay.portlet.bookmarks.ejb.BookmarksFolderUtil

Pooling对象也能创建,用来最小化对象的新建。你也能在portal.properties中修改。

com.liferay.portlet.bookmarks.ejb.BookmarksEntryPool

com.liferay.portlet.bookmarks.ejb.BookmarksFolderPool

继承自PrincipalSessionBean的管理对象生成用来保存核对呼叫者信息的业务逻辑,它能够被远程调用。调用getUserId()返回当前用户的ID,调用getUser()返回代表当前用户的用户模型。例如,一些对象允许你删除一条书签和文件夹,当且仅当你是这个条目或者文件夹的创建者。

如果这些对象不存在,那么这些对象仅仅能能创建一次。

com.liferay.portlet.bookmarks.ejb.BookmarksEntryManagerEJB

com.liferay.portlet.bookmarks.ejb.BookmarksFolderManagerEJB

创建Helper对象反映了Manager对象。Helper对象帮助保存开发时间,阻止污染代码。而不是写几行代码仅仅是为了查找和创建合适的会话EJB。你调用BookmarksEntryManagerUtil.addEntry就是调用了BookmarksEntryManagerEJB.addEntry等同的方法。.

com.liferay.portlet.bookmarks.ejb.BookmarksEntryManager

com.liferay.portlet.bookmarks.ejb.BookmarksEntryManagerHome

com.liferay.portlet.bookmarks.ejb.BookmarksEntryManagerHomeUtil

com.liferay.portlet.bookmarks.ejb.BookmarksEntryManagerUtil

com.liferay.portlet.bookmarks.ejb.BookmarksFolderManager

com.liferay.portlet.bookmarks.ejb.BookmarksFolderManagerHome

com.liferay.portlet.bookmarks.ejb.BookmarksFolderManagerHomeUtil

com.liferay.portlet.bookmarks.ejb.BookmarksFolderManagerUtil

因为Tunneling对象被生成 ,所以开发者能够调用通过80端口来调用Manager对象,在这个文档的第五部分给出了一个例子。

com.liferay.portlet.bookmarks.ejb.BookmarksEntryManagerHttp

com.liferay.portlet.bookmarks.ejb.BookmarksFolderManagerHttp

本地的Manager对象继承自BasicSessionBean ,生成用来保存业务逻辑,它并不核对调用者的信息,能够被本地调用。因为这些对象存在,所以业务逻辑能够容易的和其他的项目进行整合。

如何这些对象不存在,能够被新建一次。

com.liferay.portlet.bookmarks.ejb.BookmarksEntryLocalManagerEJB

com.liferay.portlet.bookmarks.ejb.BookmarksFolderLocalManagerEJB

Helper对象也会被创建。

com.liferay.portlet.bookmarks.ejb.BookmarksEntryLocalManager

com.liferay.portlet.bookmarks.ejb.BookmarksEntryLocalManagerHome

com.liferay.portlet.bookmarks.ejb.BookmarksEntryLocalManagerHomeUtil

com.liferay.portlet.bookmarks.ejb.BookmarksEntryLocalManagerUtil

com.liferay.portlet.bookmarks.ejb.BookmarksFolderLocalManager

com.liferay.portlet.bookmarks.ejb.BookmarksFolderLocalManagerHome

com.liferay.portlet.bookmarks.ejb.BookmarksFolderLocalManagerHomeUtil

com.liferay.portlet.bookmarks.ejb.BookmarksFolderLocalManagerUtil

一些用户需要远程的调用本地的管理对象,所以和本地对象平行的对象也被生成了。com.liferay.portlet.bookmarks.ejb.BookmarksEntryRemoteManager

com.liferay.portlet.bookmarks.ejb.BookmarksEntryRemoteManagerEJB

com.liferay.portlet.bookmarks.ejb.BookmarksEntryRemoteManagerHome

com.liferay.portlet.bookmarks.ejb.BookmarksEntryRemoteManagerHomeUtil

com.liferay.portlet.bookmarks.ejb.BookmarksEntryRemoteManagerUtil

com.liferay.portlet.bookmarks.ejb.BookmarksFolderRemoteManager

com.liferay.portlet.bookmarks.ejb.BookmarksFolderRemoteManagerEJB

com.liferay.portlet.bookmarks.ejb.BookmarksFolderRemoteManagerHome

com.liferay.portlet.bookmarks.ejb.BookmarksFolderRemoteManagerHomeUtil

com.liferay.portlet.bookmarks.ejb.BookmarksFolderRemoteManagerUtil

很多人们通过会话EJB做外部接口,因为他们是沉重的,需要很多的代码。当我们最小化重复工作,以至于你能建立一个成绩与结果的最佳平衡。这些测试表明我们能够平衡会话EJB的优点。

V.

SOAP, RMI, and Tunneling

所有的远程EJB都能够通过SOAP、RMI和我们定制的通道对象来和外面的世界对接。

我们不能简单的处理它,因为Web服务已经逼近了。但是因为我们发现它对于整合是非常的有用,下面是一个公司整合这些资源的例子。

3sixteen 是一家T恤衫公司,他们需要快速建立,快速运行起来。他们看到了liferay,并且想使用整合的购物Portlet,他们认为liferay对于t恤衫公司来说是很难看的,他们为自己在时尚的尖端和自豪。为了解决这个问题,他们决定把他们的WEB表示曾分成两个网站,一个产品册子网站一个购物网站。

www.3sixteen.com使用Flash成为一个漂亮的网站,my.3sixteen.com成为了一个使用香子兰liferay发布的购物网站,这两个网站建立在两个不同的linux服务器上,因为意图和作用被放在不同的地方。

他们也必须建立一个邮件列表来收集他们感兴趣的客户的邮件列表。为了完成它,他们在Flas网站上增加了一个JSP弹出页面,这个页面能够通过门户服务器来增加email地址到Address Book portlet的联系中。

以下是JSP片段,这些片段显示了3sixteen 的小伙们如何通过ABContactManagerHttp 来增加联系信息。

String URL = "http://my.3sixteen.com";

HttpPrincipal httpPrincipal = new HttpPrincipal(URL, "joe_bloggs", "password");

ABContactManagerHttp.addContact(httpPrincipal, firstName, lastName, emailAddress);

ABContactManagerHttp调用了ABContactManagerUtil中的addContact 方法。这个调用能够通过80端口被http://my.3sixteen.com/tunnel/servlet/AuthTunnelServlet接收到。应用服务能够确保匹配鉴定,然后处理ABContactManagerUtil来判断是否id为 joe_bloggs的用户在调用ABContactManagerUtil 的addContact,然后调用ABContactManagerEJB 来处理实际该做的事情,你能够跟踪这些逻辑通过察看包含在生成的JAVADocs中的源代码。

现在Joe Bloggs能够记录进门户,并且察看他的地址簿门户看他有了一个新的联系人。因为Helper对象的生成,所有包含的portlet都有这样的能力。这就意味着我们能够编写Applet或者其他的JAVA应用来进入已经包含你的业务逻辑的会话EJB。这就能有一个安全的风险,如果有人有了你的密码,所以你能够调配来限制Tunnel Servlet 仅仅监听特定的端口,可以在portal.properties中调配。

你也能通过SOAP和RMI进入会话EJB,我们很快会发出更多的例子

VI.

应用服务提供商

Liferay 被建立在从后台一直到被应用服务提供者使用。下面是一些门户的例子,创建了一个连接一个数据库的门户的实例,展示了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

每一个这些门户中的用户都没有其他门户的信息,他们通过域分开,每一个门户都通过公司的ID存在于自己的空间中。

Multiple Portals 获得创建在一台机器上的多个liferay实例的详细信息

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有