Liferay是一个出色的Java开源Portal产品,其中整合了很多当今流行的开源框架,也被不少人使用在实际项目中。最近刚结束了一个基于Liferay Portal的项目,总结下使用中的一些心得,希望对正在使用Liferay的朋友有些帮助。
一、安装
Liferay的安装十分容易,甚至都不能称其为安装,根据情况从Liferay官方网站下载合适的安装包(一般可以选择Tomcat的Bundle),解压后直接运行,它会使用自带的HSQL数据库,其中包括一些初始数据和演示数据。
实际使用时不能用HSQL,也不应该有演示数据,所以可以用Liferay站点提供的SQL来初始化数据库。Liferay-portal-sql的包比较大,只要用其中的几个SQL就行了,如果是全新安装,用create-minimal目录中适合自己数据库的那个SQL文件就可以了。
启动tomcat前,修改conf\Catalina\localhost中的ROOT.xml,启用新的数据源,Hibernate的Dialect系统会自动识别的。
二、Portal细节配置
Liferay的可配置性极强,可以通过两个部分来配置,一是portal-ext.properties文件,二是进入系统后用企业管理Portlet来配置。
要了解portal-ext有哪些可以配置的参数,可以打开portal-impl.jar中的portal.properties,其中对每个属性都带有详细的说明,portal-ext.properties会覆盖其中的配置。
列举几个个人认为比较有用的设置:
1.登录相关(这个可以在企业管理里设置)
company.security.auth.type=screenNamecompany.security.auto.login=falsecompany.security.send.password=falsecompany.security.strangers=falseopen.id.auth.enabled=false
2. 默认用户布局
可以自己设置上面要放的Portlet。
default.user.layout.name=Homedefault.user.layout.template.id=3_columnsdefault.user.layout.column-1=default.user.layout.column-2=default.user.layout.column-3=default.user.layout.column-4=
3. Session控制
session.timeout=30session.timeout.warning=1session.timeout.auto.extend=false
4.无法显示的portlet设置
我本来在JavaEye上问怎么隐藏没权限的Portlet呢,结果后来看到了这个配置。
layout.show.portlet.access.denied=falselayout.show.portlet.inactive=false
其他的设置还有很多,比如terms.of.use.required、theme.sync.on.group、auth.forward.by.last.path、default.landing.page.path等等,请参考portal.properties吧。如果不想修改配置文件也能用企业管理Portlet,它们有些地方是互补的,所以结合起来看看吧。
三、简单性能优化
项目中使用的是一台Intel 3.20GHz双核 2G内存的IBM服务器,操作系统为Windows 2000 SP4,数据库为Oracle 9i,安装在另一台服务器上。
Liferay的默认设置在运行时总是感觉有些力不从心,有时响应速度很慢,开发时可以接受,但实际上线时肯定需要进行调整。因为没什么调优经验,所以随便对Tomcat和Liferay的参数做了些调整,仅供参考:
首先修改Tomcat 5.5的JVM的参数,考虑到服务器上还有其他服务,JAVA_OPTS中,-Xms512m –Xmx1024m,因为把JDK换成了jrockit-R27.4.0-jdk1.6.0_02,所以没有设置-XX:MaxPermSize。
然后安装Tomcat Native library,就是APR啦。
接下来修改server.xml,找到HTTP/1.1的Connector,调整maxThreads、minSpareThreads、maxSpareThreads和acceptCount的值,适当调高些,并启用gzip压缩。我的配置是这样的:
修改好应用服务器后,再来看看Liferay。打开portal-ext.properties,添加如下内容:
portlet.css.enabled=falsejavascript.fast.load=truetheme.css.fast.load=truevelocity.engine.resource.manager.cache.enabled=true
经过了以上这些步骤后,都不用什么工具测试,可以明显感觉系统速度快了不少。
四、一些问题
1.糟糕的中文翻译
虽说Liferay的作者是华裔的,不过那中文翻译实在不敢恭维,好在网上有些网友自制的中文包,不过内容并不完全。可以自己增加或覆盖中文语言信息,文件名是Language-ext_zh_CN.properties,放在WEB-INF/classes/content目录中,至于其中的内容参考下portal-impl.jar里的资源包,记得使用前先native2ascii转换一下。
2.控制台信息
Liferay的控制台输出时区不对,且中文有乱码。在企业管理Portlet的设置中将时区设置为(GMT +08:00)CST可以解决时间问题。
控制台的中文乱码有两种解决方法,一是在catalina.bat中去掉JAVA_OPTS里的-Dfile.encoding=UTF8;另一种就是conf/logging.properties,加上java.util.logging.ConsoleHandler.encoding = GBK,建议用后者吧。其实说白了就是因为Windows用的编码是GBK。
3.Document Library文件名乱码
Document Library Portlet提供了文件上传和下载的功能,可惜上传的中文名在下载时都会乱码,原先以为是一般的中文乱码问题,在Liferay自己的web.xml中补上了一段Spring的编码转换Filter声明,结果发现不行,看了源代码后才知道它直接用servlet进行文件下载,而问题还是出在Windows是GBK上。
也懒得想什么好办法了,直接修改com.liferay.portlet.documentlibrary.action.GetFileAction文件,在第128行,把ServletResponseUtil.sendFile参数中的fileEntry.getTitleWithExtension()改成new String(fileEntry.getTitleWithExtension().getBytes("GBK"),"ISO8859_1")。这样可以解决Windows下的乱码,别的不做保证,最好能事先判断下编码,有些系统默认编码是UTF-8,转了反而会出问题。
4.关于默认用户权限
Liferay默认新建用户的角色是User和Power User,每个用户可以有自己的私有页面,不过有时不希望出现这个私有的Community,在企业管理Portlet中可以调整默认用户的设置(默认Community、Role和User group),我去掉了Power User角色。但问题也随之而来,要求用户强制在第一次登录时修改密码,修改后出现没有为用户配置页的提示,而且放在Guest里的文档库普通用户也无法下载。郁闷了老半天之后,只能为所有的用户都分配了一个Community才把问题解决(我直接把用户扔进Guest Community了)。