hengheng123456789

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  297 Posts :: 68 Stories :: 144 Comments :: 0 Trackbacks
Liferay 不再依赖于 EJB ,它完全可以单独装配到一个 servlet 容器(如: Tomcat,JBoss 等)中。而所有的业务逻辑都通过 Spring 管理的 POJO 来实现。这样的实现利益于 Spring AOP IOC 特性。

但在POJO的实现方法上Liferay的两个版本有所不同,企业版(enterprise)中通过EJB从而为大站点提供了高扩展性各良好的事务支持能力(如集群),而专业版(professiona)直接通过轻量级的接口完成。

所有的业务数据都通过Hibernate来实现并通过POJO来调用。Liferay曾经使用CMP技术.来实现持久层,但后来因速度及灵活性等原因改用Hibernate。在数据库方面,Liferay也完全兼容大多数主流类型DB

Liferay使用JAAS来完成用户认证安全管理,好处是当一个用户登录后,它的安全属性可以在ServletEJB层中沿用,真正作到系统级的SSO。具体讲,远程EJB可以沿用安全检查及权限属性,本地的EJB是为其它EJB提供业务逻辑服务的,不能被远程调用所以也不必做此类检查;安全原则也派生到POJO实现中,而这此实现其实是远程EJB的基础类。

企业版式使用EJB,所以系统分别可以在WEB服务器、EJB服务器、数据库服务器三层中实现集群。当然在n层的系统中,集群也保持优势,而且在每一层都并不强迫使用集群,这些都为大企业应用提供了极好的弹性选择权。

系统中的EJBHBM、以及模式Model者是ant执行build-ejb任务时,通过读取目录/portal-ejb下的ejb.xml文件,然后自动生成的。每个有持久层对象的门户单元(portlet)都有自己的ejb.xml文件(可以在/portal-ejb下搜索得到清单)。当需要生成持久层的类时,就把文件复制到/portal-ejb下,这生成工具是建立在XDoclet之上的。

例如:通过读取Bookmarks门户单元的ejb.xml文件配置后,自动生成下列的模式类。每个类对应数据库中的一个表。永远不要手工修改BookmarksEntryModel类,而要通过修改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类是根据模式(model)类对应生成的。这样就可以在多层系统中允许模式类是可作序列化处理的,而Hibernate类则不必。
com.liferay.portlet.bookmarks.ejb.BookmarksEntryHBM
com.liferay.portlet.bookmarks.ejb.BookmarksFolderHBM

持久层的方法如:add, update, delete, find, remove, 以及count,系统都默认自动生成。
com.liferay.portlet.bookmarks.ejb.BookmarksEntryPersistence
com.liferay.portlet.bookmarks.ejb.BookmarksFolderPersistence

也生成了专门的协助类(Helper classes),可以用来调用持久层方法。默认时,协助类调用Hibernate的方法来对数据库进行更新操作,但是也可以改写portal.properties中的配置,使用自己专用的类来完成,但这种类要求要继承默认的持久层类。换言之,用户完全可以定制自己的持久层数据,可以是一个正统的数据库,或者是LDAP服务器,其它什么的。
com.liferay.portlet.bookmarks.ejb.BookmarksEntryUtil
com.liferay.portlet.bookmarks.ejb.BookmarksFolderUtil

为了减少对象生成的成本,引入了对象池,可以通过修改portal.properties文件来控制池的基本动作。
com.liferay.portlet.bookmarks.ejb.BookmarksEntryPool
com.liferay.portlet.bookmarks.ejb.BookmarksFolderPool

用来实现业务逻辑的POJO类,通过继承PrincipalBean类,来实现有关调用者的方法,所以可以远程调用。如:调用getUserId()可以得到当前用户的ID;调用getUser()则返回当前用户的对象。EJB再继承这类POJO,实现远程调用。

例如:下面的类实现了,允许当且公当bookmark项目或目录的生成者可以删除它。这些对象只有在不存在时才可能被创建。

协助类(Helper classes)是在POJO的实现基础上生成的。它可以节约开发者的工作,不必书写很多行的代码,而只要简单的找到合适的EJB wrapperPOJO实现,通过调用BookmarksEntryManagerUtil.addEntry来间接调用相应的BookmarksEntryManagerImpl.addEntry方法就可以了。

BookmarksEntryManagerUtil通过调用BookmarksFolderManagerFactory来查找实现BookmarksEntryManager的类。也正是通过BookmarksFolderManagerFactory来识别Springportal.properties中的配置来决定要是载入EJB wrapper还是POJO实现。
com.liferay.portlet.bookmarks.ejb.BookmarksEntryManager
com.liferay.portlet.bookmarks.ejb.BookmarksEntryManagerEJB
com.liferay.portlet.bookmarks.ejb.BookmarksEntryManagerEJBImpl
com.liferay.portlet.bookmarks.ejb.BookmarksEntryManagerFactory
com.liferay.portlet.bookmarks.ejb.BookmarksEntryManagerHome
com.liferay.portlet.bookmarks.ejb.BookmarksEntryManagerUtil
com.liferay.portlet.bookmarks.ejb.BookmarksFolderManager
com.liferay.portlet.bookmarks.ejb.BookmarksFolderManagerEJB
com.liferay.portlet.bookmarks.ejb.BookmarksFolderManagerEJBImpl
com.liferay.portlet.bookmarks.ejb.BookmarksFolderManagerFactory
com.liferay.portlet.bookmarks.ejb.BookmarksFolderManagerHome
com.liferay.portlet.bookmarks.ejb.BookmarksFolderManagerUtil

隧道类(Tunneling classes)是用来实现通过80端口来调用POJO的。
com.liferay.portlet.bookmarks.ejb.BookmarksEntryManagerHttp
com.liferay.portlet.bookmarks.ejb.BookmarksFolderManagerHttp

Soap类也是用来实现通过80端口来调用POJO的。虽然与隧道类相比Soap类在速度上要差一点,原因是隧道类使用二进制数据流。但Soap类用灵活,可以适用各种客户端(不局限于Java)。
com.liferay.portlet.bookmarks.ejb.BookmarksEntryManagerSoap
com.liferay.portlet.bookmarks.ejb.BookmarksFolderManagerSoap

Soap类也是用来实现通过80端口来调用POJO的。虽然与隧道类相比Soap类在速度上要差一点,原因是隧道类使用二进制数据流。但Soap类用灵活,可以适用各种客户端(不局限于Java)。这些类只有在检验到不存在时才会被创建。同时协助类也生成了。
com.liferay.portlet.bookmarks.ejb.BookmarksEntryLocalManager
com.liferay.portlet.bookmarks.ejb.BookmarksEntryLocalManagerEJB
com.liferay.portlet.bookmarks.ejb.BookmarksEntryLocalManagerEJBImpl
com.liferay.portlet.bookmarks.ejb.BookmarksEntryLocalManagerFactory
com.liferay.portlet.bookmarks.ejb.BookmarksEntryLocalManagerHome
com.liferay.portlet.bookmarks.ejb.BookmarksEntryLocalManagerUtil
com.liferay.portlet.bookmarks.ejb.BookmarksFolderLocalManager
com.liferay.portlet.bookmarks.ejb.BookmarksFolderLocalManagerEJB
com.liferay.portlet.bookmarks.ejb.BookmarksFolderLocalManagerEJBImpl
com.liferay.portlet.bookmarks.ejb.BookmarksFolderLocalManagerFactory
com.liferay.portlet.bookmarks.ejb.BookmarksFolderLocalManagerHome
com.liferay.portlet.bookmarks.ejb.BookmarksFolderLocalManagerUtil

但总有一些用户需要调用引种当地类,于是完全相对应的远程类也应用而生了。
com.liferay.portlet.bookmarks.ejb.BookmarksEntryRemoteManager
com.liferay.portlet.bookmarks.ejb.BookmarksEntryRemoteManagerEJB
com.liferay.portlet.bookmarks.ejb.BookmarksEntryRemoteManagerEJBImpl
com.liferay.portlet.bookmarks.ejb.BookmarksEntryRemoteManagerFactory
com.liferay.portlet.bookmarks.ejb.BookmarksEntryRemoteManagerHome
com.liferay.portlet.bookmarks.ejb.BookmarksEntryRemoteManagerUtil
com.liferay.portlet.bookmarks.ejb.BookmarksFolderRemoteManager
com.liferay.portlet.bookmarks.ejb.BookmarksFolderRemoteManagerEJB
com.liferay.portlet.bookmarks.ejb.BookmarksFolderRemoteManagerEJBImpl
com.liferay.portlet.bookmarks.ejb.BookmarksFolderRemoteManagerFactory
com.liferay.portlet.bookmarks.ejb.BookmarksFolderRemoteManagerHome
com.liferay.portlet.bookmarks.ejb.BookmarksFolderRemoteManagerUtil


许多人避免使用EJB,因为它的重量级,需要大量的代码工作。Liferay的自动生成脚本可以使得,既不损失EJB的优点,而且还最小化重复的代码等工作,从而你可以在努力与结果之间找到一个良好的平衡点。

Spring也给Liferay带来了更多的好处。开发者既可以利用专业版在一个servlet容器中测试POJO的实现,也可以通过企业版在应用服务器上装载要上线的产品。


posted on 2007-02-10 13:10 哼哼 阅读(1184) 评论(1)  编辑  收藏 所属分类: JAVA-Web

Feedback

# re: Liferay Portal 技术理解之 概述 2008-07-04 21:28 Beijing_M
Hi ,好消息和大家分享:

Liferay 大连的联系方式:
MSN: eonpeter@gmail.com
大家可以和peter联系,可以从他那得到足够帮助  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: