Liferay研究(一):初步在新Tomcat下部署
从现在开始,会把我最近在研究的开源Portal Liferay一些心得贴出来。研究Liferay版本:Liferay Professional 4.0.0
柯自聪兄弟写过一系列的Liferay Portal开发文章,参考http://www.blogjava.net/eamoi/。所以基础性内容,本文不再细说,可参考柯自聪的文章或Blog。
(一)部署Liferay Portlet
Liferay简单部署一个portlet并不是很复杂,通过WEB-INF目录下的portlet.xml、liferay-portlet.xml、liferay-display.xml描述即可。
描述
portlet.xml portlet.xml用来定义Portlet的诸如部署名称、初始化参数、支持模式、resource bundle等普通的初始化信息,包括:portlet-name、display-name、portlet-class、init-param、expiration-cathe、supports、portlet-info、security-role-ref等等。其正式的规范请参考:http://java.sun.com/xml/ns/Portlet/Portlet-app_1_0.xsd
liferay-portlet.xml 定义Portlet默认可用的用户组、默认模板、是否支持多个实例等,规范由http://www.liferay.com/dtd/liferay-Portlet-app_3_5_0.dtd
liferay-display.xml 定义Portlet默认的所属类别。Liferay Portal对Portlet实行按类别管理和划分用户权限。
Liferay是基于Struts Template页面模版技术来实现页面的,所以Liferay默认提供了com.liferay.portlet.StrutsPortlet这个Portlet Class来完成Portlet处理的;当然为了简单对普通jsp页面的处理,Liferay也提供了com.liferay.portlet.JSPPortlet等其他Portlet Class。
Liferay扩展了Portlet Mode,增加了about,config,preview,print等几种模式。所以,开发人员基于Liferay进行扩展Portlet Class需要基于com.liferay.portlet.LiferayPortlet。当然,允许直接继承javax.portlet.GenericPortlet进行扩展。
(二)部署Liferay应用在新下载的Tomcat上
这一块耗费我不少时间,因为Liferay采用了其修改后的Tomcat(实际上是Tomcat5.5,这是我后来才知道的)。
但我很不喜欢Liferay这种绑定方式,而且默认开发必须采用其层层Ant Build方式,并且绑定其Tomcat或其他其修改后提供的server。——当然,在Liferay可能认为这样可以减少开发人员对环境配置的关心。
让我来看看,如何在一个新下载的Tomcat5.0.28上成功部署Liferay应用:
(1) 首先把liferay工程目录放置Tomcat_Home/目录下,当然,你可以放置在Tomcat_Home/web-apps目录下。
(2) 其次,需要把liferay默认的目录下的Common/lib/ext目录下的一些jar包copy到Tomcat_Home/common/lib 目录下。注意,不要放置在ext目录下,默认tomcat5.0.28是不自动加载ext目录下的jar包的,这跟Tomcat5.5不同。这些jar包主要是:hsql.jar,commons-logging.jar,log4j.jar这三个。
(3) 把liferay默认的目录下的Common/lib/ext中的portal-shared.jar 和 portlet.jar ,可以移到liferay应用的WEB-INF/lib中。
(4) 拷贝Root.xml到 Tomcat_Home\conf\Catalina\localhost目录下,配置webcontext信息。并在此配置DataSource。注意,liferay的默认运行中的配置是Tomcat5.5的写法,所以此处配置DataSource的写法,就必须更改为Tomcat5.0的写法。否则,运行过程中会抛“Cannot create JDBC driver of class '' for connect URL 'null'”异常。
<Context docBase="D:\Tomcat5028\ liferay" path="" reloadable="true">
<Resource name="jdbc/LiferayPool" auth="Container"
type="javax.sql.DataSource" />
<ResourceParams name="jdbc/LiferayPool">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
XXX(其他配置,此处略)
</ResourceParams>
</Context>
有关Liferay对连接池的引用,可以去Portal.properties配置文件中修改。默认此配置文件已经被打在了liferay的portal-ejb.jar中。
(5) 配置jaasconf。讲jaas.config文件放置在Tomcat_Home\conf目录下。并在catalina.bat文件中增加 -Djava.security.auth.login.config=%CATALINA_HOME%/conf/jaas.config 来设置jaas的配置。当然,这首先一定要保证在前面的Root.xml的Context中配置JAASRealm。
//注意,暂时必须把liferay应用配置成为默认根应用,否则不可以正确运行。
<Context docBase="D:\Tomcat5028\ liferay" path="" reloadable="true">
<Realm className="org.apache.catalina.realm.JAASRealm"
appName="PortalRealm"
userClassNames="com.liferay.portal.security.jaas.PortalPrincipal"
roleClassNames="com.liferay.portal.security.jaas.PortalRole"
debug="99"
useContextClassLoader="false" />
</Context>
在jaas.config的文件中,设置如下内容:
PortalRealm {
com.liferay.portal.shared.security.jaas.PortalLoginModule required;
};
Jaas是需要被正确配置的,否则系统不可以正确登陆,而且会一直不断的访问/jaas_securit_check,而不能登陆。
基本上进行如上操作之后,即可在Tomcat5.0.28下单独运行。
Liferay研究(二):对Liferay进行瘦身
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的配置体系和代码结构体系有个较为清晰的认识。
分享到:
相关推荐
部署Liferay需要将Tomcat拷贝到指定的目录下,并启动Tomcat。在配置向导中,需要选择自己的数据库类型,并输入数据库名称、账号和密码。Liferay提供了两种项目部署方式:热部署模式和上传war包方式。
本篇文章主要讲解如何在Apache Tomcat服务器上集成Pentaho Business Analytics(一个强大的商业智能工具)与Liferay(一款流行的开源企业级门户平台)。这个过程涉及到多语言支持,因为提供的压缩包子文件包含不同...
`<liferay-ui:section>` 标签用于在选项卡中创建子区域,通常与`<liferay-ui:tabs>` 结合使用,以便在每个选项卡下展示不同的内容。 #### 2.3 Liferay-UI:pageIterator `<liferay-ui:pageIterator>` 标签用于分页...
在Liferay中,标签(Taglib)是一组预定义的JSP标签,它们简化了开发者的工作,使其能够轻松地构建功能丰富的页面而无需编写大量Java代码。 ### 1. URL Liferay的URL标签允许开发者生成与Liferay相关的动态URL。...
#Liferay 在码头工人Liferay版本:liferay-portal-tomcat-6.2-ce-ga2-20140319114139101 busybox 上的基础图像以获得更小的图像(~600M) 将 tomcat 日志文件移动到 $LIFERAY_HOME/logs/tomcat 暴露端口 8080 #卷/...
标题 "liferay tomcat eclipse debug" 暗示了我们正在讨论如何在Eclipse环境中调试Liferay Portal,这是一个基于Java的开源企业级内容管理和协作平台,通常与Apache Tomcat这样的Servlet容器结合使用。以下是关于这...
在IT行业中,Liferay Portal是一款广泛使用的开源企业级门户平台,它允许用户构建、管理和部署各种Web应用程序。Tomcat作为一款流行的Apache软件基金会的Servlet容器,常常被用作Liferay Portal的运行环境。然而,...
在这个额外研究中,我们将探讨如何在新的Tomcat服务器上部署Liferay Portal以及其Portlet。 首先,了解Portlet的部署过程至关重要。Liferay Portal使用portlet.xml、liferay-portlet.xml和liferay-display.xml这三...
- 点击右侧的 `Add` 按钮,在弹出的选择服务器界面中选择 `Liferay, Inc.` > `Liferay v6.2 CE (Tomcat7)`。 - 选中 “Create a new location server” 的复选框。 - 点击 `Next`,然后选择liferay-portal-6.2-ce...
《Liferay Portal 6.1.1源码部署在Eclipse中的详细步骤》 Liferay Portal是一款开源的企业级门户平台,具有高度可定制性。在本文中,我们将深入探讨如何将Liferay Portal 6.1.1的源码部署到Eclipse集成开发环境中,...
标题 "Liferay Tomcat 在后台打印" 暗示了我们正在讨论关于Liferay Portal的部署和日志管理,特别是如何在后台环境中配置Tomcat服务器来记录和查看Liferay的日志输出。Liferay是一个开源的企业级门户平台,而Tomcat...
- **配置 Liferay SDK 和 Portal Runtime**:在 Eclipse 中设置 Liferay SDK 路径,并配置 Liferay Portal Runtime,使其指向安装的 Tomcat 服务器和 Liferay 门户。 - **启动服务**:通过 Eclipse 的 Server 视图...
- **在现有的应用服务器中安装Liferay**: 提供了在Tomcat、WebLogic等服务器上部署Liferay的步骤。 - **10步轻松安装Liferay**: 简化版的安装指南,适用于初次接触Liferay的用户。 - **TOMCAT5.5.X**: 详细介绍如何...
在Eclipse中添加Tomcat服务器,然后将Liferay项目部署到服务器上。 3. **MySQL数据库集成** - **安装MySQL**:确保你已经在本地或远程服务器上安装了MySQL数据库。 - **创建Liferay数据库**:创建一个新的数据库...
在本文中,我们将详细介绍如何在Windows平台上安装和部署Liferay 6.1.1。Liferay是一款开源的企业级门户平台,它提供了内容管理、社交网络、协作工具等多种功能。以下是一步一步的安装和配置指南。 1. **下载...
根据提供的文件信息,本文将详细解释如何在已运行的Tomcat服务器上安装Liferay 6.1.0,并配置其连接到SQL Server 2005 Express数据库的过程。 ### Liferay 6.1.0 安装过程 #### 1. 下载源代码并编译 首先需要下载...