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进行瘦身
包结构
|
说明
|
com.liferay.counter
|
主要提供主建操作服务,Liferay内部的提供的组织结构表维护,就是采用counter提供的主建自增机制
|
com.liferay.filters
|
提供一些基础的基于servlet filter的过滤器
|
com.liferay.taglib
|
提供最基本的web展示标签
|
com.liferay.util
|
提供最基本的一些公共组件
|
包结构
|
说明
|
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
|
|
包结构
|
说明
|
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
|
这个包必须要。
|
位置
|
配置文件说明
|
/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内容。
|