当前位置: 代码迷 >> 综合 >> Liferay Portal额外研究(一):初步在新Tomcat下部署
  详细解决方案

Liferay Portal额外研究(一):初步在新Tomcat下部署

热度:2   发布时间:2024-01-12 08:54:14.0

 

Liferay Portal额外研究(一):初步在新Tomcat下部署

2009-11-09 10:37:41 |  分类: Java-Web 阅读65 评论0   字号:   订阅

从现在开始,会把我最近在研究的开源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=蔜ALINA_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 下单独运行。
  相关解决方案