WildFly AS是继JBoss AS之后,社区版应用服务器的首选,目前的最新版本是WildFly AS 10。
Portal容器之一,JBoss AS曾经的亲密伙伴JBoss Portal,首先结合eXo升级到GateIn Portal,继而不断更新直至2014.5发布了与JBoss AS 7集成的GateIn Portal3.8.1.Final,此后近2年时间里已经没有更新。
基于WildFly AS的“内核+扩展”模式,GateIn Portal是以JBoss AS的扩展的方式被集成到JBoss AS中的,两者有紧密的耦合。因而要升级JBoss AS到WildFly AS并完成GateIn Portal的集成,必须熟悉GateIn Portal本身,并且需要熟悉WildFly AS的扩展机制,最后还要了解WildFly AS中作为Web服务器,Tomcat的替代者Undertow,难度可想而知。
退而求其次,笔者选择了Liferay Portal。
相对于GateIn Portal与JBoss AS的紧密集成, Liferay Portal就显得比较中性,其本身支持与多种应用服务器的绑定,包括发布包中对Tomcat、JBoss AS、Glassfish、Jetty和Resin服务器。此外,为了便于与商业服务器的集成,Liferay Portal还提供了Liferay web应用和依赖包,以便于直接部署到商业服务器提供Portal容器。
另外,Liferay Portal还提供了丰富而详尽的文档,虽然文档与软件的发布相比有一定的滞后性,但是仍然具有重要的参考价值。
要实现Liferay Portal 6.x与WildFly AS 10的集成,笔者重点参考了"INSTALLING LIFERAY ON JBOSS 7.1"文档,具体步骤如下:
将Liferay 的依赖包解压缩的jars复制到上述目录,默认包括
在上述目录中创建module.xml文件如下
<?xml version="1.0"?> <module xmlns="urn:jboss:module:1.0" name="com.liferay.portal"> <resources> <!--resource-root path="mysql-connector-java-[version]-bin.jar" /--> <resource-root path="hsql.jar" /> <resource-root path="portal-service.jar" /> <resource-root path="portlet.jar" /> </resources> <dependencies> <module name="javax.api" /> <module name="javax.mail.api" /> <module name="javax.servlet.api" /> <module name="javax.servlet.jsp.api" /> <module name="javax.transaction.api" /> </dependencies> </module>
WildFly AS的启动模式有多种,主要是独立模式standalone和域模式domain。由于域模式的限制,这里采用独立模式进行配置,修改standalone.xml(或standalone-full.xml)文件如下:
在</extensions>元素后面添加如下内容:
<system-properties> <property name="org.apache.catalina.connector.URI_ENCODING" value="UTF-8" /> <property name="org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING" value="true" /> </system-properties>
<subsystem xmlns="urn:jboss:domain:deployment-scanner:2.0"> <deployment-scanner path="deployments" relative-to="jboss.server.base.dir" scan-interval="5000" deployment-timeout="240" runtime-failure-causes-rollback="${jboss.deployment.scanner.rollback.on.failure:false}"/> </subsystem>在<subsystem xmlns="urn:jboss:domain:security:1.2">元素的<security-domains>元素中,添加新的安全域的认证方式如下:
<security-domain name="PortalRealm"> <authentication> <login-module code="com.liferay.portal.security.jaas.PortalLoginModule" flag="required"/> </authentication> </security-domain>
由于采用默认的HSQL,这里就不再设置数据源。
必要的情况下,设置WildFly AS的启动参数,修改$JBOSS_HOME/bin/standalone.conf(Windows平台下是$JBOSS_HOME/bin/standalone.conf.bat文件)如下:
Windows平台
set "JAVA_OPTS=-Xms256M -Xmx1024M" ... rem # install liferay portal set "JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8 -Djava.security.policy=$JBOSS_HOME/bin/server.policy -Djboss.home.dir=$JBOSS_HOME -Duser.timezone=GMT+8"
Linux平台
JAVA_OPTS="$JAVA_OPTS -Xms256m -Xmx1024m"
注意:-XX:MaxPermSize参数已经在JDK 1.8中过时
<path name="com/sun/crypto" /> <path name="com/sun/crypto/provider" /> <path name="com/sun/image/codec/jpeg" /> <path name="com/sun/org/apache/xml/internal/resolver" /> <path name="com/sun/org/apache/xml/internal/resolver/tools" />
最后是安全性设置,创建$JBOSS_HOME/bin/server.policy文件如下:
grant { permission java.security.AllPermission; };
<?xml version="1.0"?> <jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.1"> <deployment> <exclusions> <module name="org.apache.log4j" /> <module name="org.hibernate" /> </exclusions> <dependencies> <module meta-inf="export" name="com.liferay.portal"> <imports> <include path="META-INF" /> </imports> </module> <module name="javax.mail.api" /> <module name="org.apache.xerces" /> <module name="org.jboss.modules" /> </dependencies> </deployment> </jboss-deployment-structure>
打开浏览器访问http://127.0.0.1:8080/即可看到Liferay Portal的主页如下图所示。