Java

本类阅读TOP10

·使用MyEclipse开发Struts框架的Hello World!(录像1)
·hibernate配置笔记
·AOP编程入门--Java篇
·linux下Tomcat 5.0.20 与 Apache 2 安装/集成/配置
·在win2003下整合了整合Tomcat5.5+ apache_2.0.53+ mod_jk_2.0.47.dll
·构建Linux下IDE环境--Eclipse篇
·Jsp 连接 mySQL、Oracle 数据库备忘(Windows平台)
·ASP、JSP、PHP 三种技术比较
·Tomcat5.5.9的安装配置
·AWT GUI 设计笔记(二)

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
Lifeary体系结构

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

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通过SOAPRMI和我们定制的渠道类来访问门户。



II.

 

Portlet API (JSR 168)

 

 

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

 

III.

 

Struts and Tiles

 

 

所有的HTTPWAP请求都通过MainServlet, MainServlet继承自基础StrutsActionServlet. 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和支持会话EJBPortlet。我们要支持EJB是因为我们的很多用户需要通过会话EJB的分布支持


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

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

 

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


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

大部分的我们的EJBHBM和模型都是通过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都能够通过SOAPRMI和我们定制的通道对象来和外面的世界对接。

 

我们不能简单的处理它,因为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中调配。

 

你也能通过SOAPRMI进入会话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实例的详细信息

 




相关文章

相关软件