Liferay是一個出色的Java開源Portal產品,其中整合了不少當今流行的開源框架,也被很多人使用在實際項目中。最近剛結束了一個基於Liferay Portal的項目,總結下使用中的一些心得,但願對正在使用Liferay的朋友有些幫助。
1、安裝
Liferay的安裝十分容易,甚至都不能稱其爲安裝,根據狀況從Liferay官方網站下載合適的安裝包(通常能夠選擇Tomcat的Bundle),解壓後直接運行,它會使用自帶的HSQL數據庫,其中包括一些初始數據和演示數據。
實際使用時不能用HSQL,也不該該有演示數據,因此能夠用Liferay站點提供的SQL來初始化數據庫。Liferay-portal-sql的包比較大,只要用其中的幾個SQL就好了,若是是全新安裝,用create-minimal目錄中適合本身數據庫的那個SQL文件就能夠了。
啓動tomcat前,修改conf\Catalina\localhost中的ROOT.xml,啓用新的數據源,Hibernate的Dialect系統會自動識別的。
2、Portal細節配置
Liferay的可配置性極強,能夠經過兩個部分來配置,一是portal-ext.properties文件,二是進入系統後用企業管理Portlet來配置。
要了解portal-ext有哪些能夠配置的參數,能夠打開portal-impl.jar中的portal.properties,其中對每一個屬性都帶有詳細的說明,portal-ext.properties會覆蓋其中的配置。
列舉幾個我的認爲比較有用的設置:
1.登陸相關(這個能夠在企業管理裏設置)
company.security.auth.type=screenName
company.security.auto.login=false
company.security.send.password=false
company.security.strangers=false
open.id.auth.enabled=false
2. 默認用戶佈局
能夠本身設置上面要放的Portlet。
default.user.layout.name=Home
default.user.layout.template.id=3_columns
default.user.layout.column-1=
default.user.layout.column-2=
default.user.layout.column-3=
default.user.layout.column-4=
3. Session控制
session.timeout=30
session.timeout.warning=1
session.timeout.auto.extend=false
4.沒法顯示的portlet設置
我原本在JavaEye上問怎麼隱藏沒權限的Portlet呢,結果後來看到了這個配置。
layout.show.portlet.access.denied=false
layout.show.portlet.inactive=false
其餘的設置還有不少,好比terms.of.use.required、theme.sync.on.group、auth.forward.by.last.path、default.landing.page.path等等,請參考portal.properties吧。若是不想修改配置文件也能用企業管理Portlet,它們有些地方是互補的,因此結合起來看看吧。
3、簡單性能優化
項目中使用的是一臺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壓縮。個人配置是這樣的:
<Connector port="80" maxHttpHeaderSize="8192"
maxThreads="768" minSpareThreads="128" maxSpareThreads="256"
enableLookups="false" redirectPort="8443" acceptCount="768"
connectionTimeout="30000" disableUploadTimeout="true"
compression="on" compressionMinSize="2048"
noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
/>
修改好應用服務器後,再來看看Liferay。打開portal-ext.properties,添加以下內容:
portlet.css.enabled=false
javascript.fast.load=true
theme.css.fast.load=true
velocity.engine.resource.manager.cache.enabled=true
通過了以上這些步驟後,都不用什麼工具測試,能夠明顯感受系統速度快了很多。
4、一些問題
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了)。