对Liferay进行瘦身
原文引用自:http://blog.csdn.net/wzlas111/article/details/5839821
?
Liferay的体系是很庞杂的,居然有些文章对外宣称Liferay是微内核,我想写这文章的哥们没有搞清楚什么是“微内核”。
???????? Liferay 受其企业版本影响不小,毕竟Liferay公司主要还是“企业行为”,而不是一个单纯的一个“开源团体”行为。所以Liferay Portal本身内嵌了大量的Portlet,而且这些Portlet和Liferay Portal Framework甚至还有些交融。这就是为什么liferay portal-ejb.jar会有3M多。??
?????? 虽然我们可以通过修改system.properties,portlet.properties,protal-spring这些基础配置文件来修改声 明哪些服务不需要加载,也可以通过修改 WEB-INF目录下的portlet.xml,liferay-portlet.xml以及liferay-display.xml这些文件来删除一些 不需要的portlet。??
?
?????? 但是,我想真正敢真么干的,估计很少。这是为什么呢,就是应为Liferay内部实现的结构和代码,并不是非常良好。而对于这一块的优化,也没有很详细的 帮助使用手册。在Liferay的网站上,只有一些教开发人员如何部署在不同服务器和数据库,如何新增一些portlet和theme,以及如何修改权限 方面的浅显参考手册。
???????? 接下来就讲一讲对Liferay的瘦身操作,让Liferay变成一个只提供最基本的Portal框架和部署机制的portal context,而去掉那些多余的portlet。—— 因为这些多余的portlet大多国内的项目没有任何利用价值,但是如果需要部署的话,则会大大影响系统响应性能,而且让开发也变得比较麻烦。
???????? 当然,是否按照我今天说的方式对Liferay进行瘦身,这全凭习惯。有些朋友不愿改变Liferay的结构,只希望单纯通过配置来加载,也是可以的。
??(1)保留Liferay最基本的一些组件???
?????? Liferay提供了一些基本组件,这些组件不属于Portal框架之内,但是整个portal服务是基于这些组件。
包结构
说明
com.liferay.counter
主要提供主建操作服务,?Liferay?内部的提供的组织结构表维护,就是采用?counter?提供的主建自增机制
com.liferay.filters
提供一些基础的基于?servlet filter?的过滤器
com.liferay.taglib
提供最基本的?web?展示标签
com.liferay.util
提供最基本的一些公共组件
???????以上这四个组件是必须保留的,另外还有两个基本组件:com.liferay.mail(提供邮件服务)和com.liferay.wsrp(提供webservice服务)。这个实际上应该属于可选的,如果觉得需要的话,也可以纳入。
(2)保留Liferay的Portal基础服务
?????? Liferay的基础服务是以com.liferay.portal作为基础的,基本属于此包内的都尽量保留。目前其子package说明如下:
?
包结构
说明
com.liferay.portal
此包下放置了?portal?服务相关的一些异常
com.liferay.portal.action
负责一些?struts action?处理,比如?Login?等
com.liferay.portal.definitions
此包不是类包,而是负责放置一些定义相关的?dtd?文件资源。具体需要哪些?dtd?,可以参考?com.liferay.portal.util. EntityResolver?类
com.liferay.portal.dependencies
此包也不是类包,而是负责一些依赖性的资源文件。
com.liferay.portal.deploy
负责自动部署和热部署
com.liferay.portal.events
这个包内主要是一些行为处理类
com.liferay.portal.im
即时消息的支持
com.liferay.portal.jcr
提供?JSR-170 JCR?的支持,并内部提供?Jackrabbit?的实现支持
com.liferay.portal.job
对一些时间调度性?Job?的支持
com.liferay.portal.language
对语言的支持包
com.liferay.portal.lucene
对全文检索的支持
com.liferay.portal.model
一些模型对象的集合
com.liferay.portal.security
?com.liferay.portal.servlet
?com.liferay.portal.spring
?com.liferay.portal.struts
?com.liferay.portal.theme
提供对“主题”,也就是界面风格的支持
com.liferay.portal.tools
?com.liferay.portal.util
?com.liferay.portal.velocity
?com.liferay.portal.wsrp
??
???????其实我们可以把?Liferay?这些?portal?服务再缩简一些,但刚开始建议大家不要随便的删减,保留原始的即可。
?
(?3?)缩减?portlet?应用
???????Liferay?提供了大量的?portlet?应用,有大概七八十个。正应为这些?portlet?的加载和部署,让?Liferay?启动缓慢,消耗系统资源多。实际上,保持?Liferay Portal?正常运行,只需要其中几个就可以了,剩下的,我们可以根据需要进行删减。
?
???????下面列出了一些最基本的?portlet?,只需要保留如下的这些?portlet?即可保证?liferay?的正常启动和运行
包结构
说明
com.liferay.portlet
Liferay Portlet?的一些基础类
com.liferay.portlet.admin
管理?portlet
com.liferay.portlet.calendar
日期?portlet?虽然可以不需要,但是其内部提供对?job?的调度。
com.liferay.portlet.communities
这个是负责配置用户其所在的?group?,利用可以配置用户所拥有的工作区。
com.liferay.portlet.enterpriseadmin
?com.liferay.portlet.language
?com.liferay.portlet.layoutconfiguration
?com.liferay.portlet.login
?com.liferay.portlet.myaccount
用于配置用户信息
com.liferay.portlet.myplaces
用于控制用户的工作区选择
com.liferay.portlet.portletconfiguration
?com.liferay.portlet.themegallery
用于控制主题风格
com.liferay.portlet.translator
这个包必须要,虽然?portlet?可以不用,但是被portal.language?包引入了
com.liferay.portlet.wsrp
这个包必须要。
?
???????只需要保证如上的?portlet?在系统中,即可保证?Liferay?的正常运行。
?
???????但是,不以为只需要简单得讲起他的?Porlet?删除即可,那就大错特错了。?Liferay?在这一层面做的非常不友善,内部代码由一点点地耦合。很多地方依靠写?if else?来判断,所以造成了在?portal?这个服务包中,竟然存在很多地方引用?portlet?中的类。
???????不过这个倒不难修改,只需要花费一点点时间,简单修改一下就可以了。比较容易,此处就不多说。
?
(?4?)从配置文件中删除无用?portlet?的部署
??????
???????这个主要是修改?WEB-INF?目录下的?portlet.xml?,?liferay-portlet.xml?以及?liferay-display.xml?这些文件。只需要依次把那些不需要的?portlet?删除即可。没有什么难度,细心点就可以了。
?
(?5?)修改服务配置文件
?
???????Liferay?的配置文件也是很多,放置也是在好几个地方:
位置
配置文件说明
/WEB-INF
portlet?描述和?struts?等配置文件
/WEB-INF/classes
system.properties?和?portal.properties?配置文件
/WEB-INF/classes/META-INF
portal-spring.xml?,?portal-hbm.xml?,?portal-log4j.xml?配置文件。此位置可调,具体可以修改?portal.properties?内容。
?
???????为了让系统正确运行,我们还需要修改?system.properties?和?portal.properties?配置文件,这是?Liferay?核心配置文件。Liferay?的很多服务都是在此配置文件中声明和修改。具体修改哪些本文不细说,改篇专门作个专题讲。
?
???????还需要修改?portal-spring.xml?(如果是?professional?版,则是?portal-spring-professional.xml?)。需要将那些已经没有的类?bean?删除。否则?Liferay?现在的加载机制,一旦碰到没有的类的?bean?,则加载不成功了。
???????当然?portal-hbm.xml?也是需要修改的,去掉那些不需要的类即可。
?
???????基本上经过以上五个步骤,?Liferay?即可完成手身了。在真实系统研发过程中,不一定非要选择这样的瘦身方式,毕竟这种方式,对后续?Liferay?版本的维护带来一定的工作量。——?但是,如果这么尝试一把,则可以在通过调试过程中,对?Liferay?的配置体系和代码结构体系有个较为清晰的认识?。