Setting Up Liferay Portal With Terracota

This article is a legacy article. It applies to previous versions of the Liferay product. While the article is no longer maintained, the information may still be applicable.

This article describes how to achieve integration between Terracotta and Liferay.

Resolution

In order to successfully integrate Terracotta with Liferay, a patch from LPS-31709 will be required.

After obtaining the patch, please follow these instructions:

*If using the shell script examples provided in the upcoming instructions, set up some environment variables corresponding to the Liferay home folder, the Tomcat home folder, the Liferay Portal 6.1 EE GA2 Terracotta home folder, and the IP address and port where Terracotta live.
LIFERAY_HOME=/run/shm/6120/bundles

TOMCAT_HOME=$LIFERAY_HOME/tomcat-7.0.27

TERRACOTTA_ADDRESS=127.0.0.1:9510

TERRACOTTA_HOME=$HOME/Downloads/terracotta-3.5.5

1. Find the version of Terracotta that corresponds to the version of EhCache used by Liferay. For example, in 6.1 EE SP1 (6.1.20), Liferay uses EhCache 2.4.6. Therefore, a version of Terracotta is needed that ships with EhCache 2.4.x. Terracotta 3.5.3 ships with EhCache 2.4.6 and Terracotta 3.5.5 ships with EhCache 2.4.8.

2. Remove all the EhCache and SLF4j JARs in Liferay's WEB-INF/lib folder and replace them with the ones that are provided in Terracotta's ehcache/lib folder. If this were written in a shell script, it might look something like this:

rm $TOMCAT_HOME/webapps/ROOT/WEB-INF/lib/ehcache*.jar

rm $TOMCAT_HOME/webapps/ROOT/WEB-INF/lib/slf4j*.jar

cp $TERRACOTTA_HOME/ehcache/lib/ehcache*.jar

$TOMCAT_HOME/webapps/ROOT/WEB-INF/lib

cp $TERRACOTTA_HOME/ehcache/lib/slf4j*.jar $TOMCAT_HOME/webapps/ROOT/WEB-INF/lib

3. If session replication is not used (please note that session replication is currently not possible with Lifreay 6.1), copy the terracotta-toolkit JAR toLiferay's WEB-INF/lib folder. If this were written in a shell script, it might look something like this:

cp $TERRACOTTA_HOME/common/terracotta-toolkit*.jar

$TOMCAT_HOME/webapps/ROOT/WEB-INF/lib

4. Extract the hibernate-terracotta.xml and liferay-multi-vm-terracotta.xml from portal-impl.jar and place them in a "myehcache" folder in Liferay's WEB-INF/classes. After doing so, replace any instance of "localhost:9510" with the actual IP address and port where Terracotta is running (it runs on port 9510 by default, so only change the IP address if it is on a different server). If this were written in a shell script, it might look something like this:

unzip -qq $TOMCAT_HOME/webapps/ROOT/WEB-INF/lib/portal-impl.jar

ehcache/hibernate-terracotta.xml

ehcache/liferay-multi-vm-terracotta.xml -d

$TOMCAT_HOME/webapps/ROOT/WEB-INF/classes

mv $TOMCAT_HOME/webapps/ROOT/WEB-INF/classes/ehcache

$TOMCAT_HOME/webapps/ROOT/WEB-INF/classes/myehcache

sed -i "s/localhost:9510/$TERRACOTTA_ADDRESS/g"

$TOMCAT_HOME/webapps/ROOT/WEB-INF/classes/myehcache/hibernate-terracotta.xml

sed -i "s/localhost:9510/$TERRACOTTA_ADDRESS/g"

$TOMCAT_HOME/webapps/ROOT/WEB-INF/classes/myehcache/liferay-multi-vm-terracotta.xml

5. Add the new hibernate-terracotta.xml and liferay-multi-vm-terracotta.xml to portal-ext.properties. For example, if using the portal-ext.properties in $LIFERAY_HOME, then the shell script might look something like this:

echo -e "\n" >> $LIFERAY_HOME/portal-ext.properties

echo "net.sf.ehcache.configurationResourceName=/myehcache/hibernate-terracotta.xml"

>> $LIFERAY_HOME/portal-ext.properties

echo "ehcache.multi.vm.config.location=/myehcache/liferay-multi-vm-terracotta.xml"

>> $LIFERAY_HOME/portal-ext.properties

6. Remove all the Quartz JARs in Liferay's WEB-INF/lib folder and replace them with the quartz-all and quartz-terracotta JARs that are provided in Terracotta's quartz folder. There are other Quartz JARs included in the Terracotta distribution, but they can be safely ignore. If this were written in a shell script, it might look something like this:

rm $TOMCAT_HOME/webapps/ROOT/WEB-INF/lib/quartz*.jar

cp $TERRACOTTA_HOME/quartz/quartz-all*.jar $TOMCAT_HOME/webapps/ROOT/WEB-INF/lib

cp $TERRACOTTA_HOME/quartz/quartz-terracotta*.jar

$TOMCAT_HOME/webapps/ROOT/WEB-INF/lib

7. Update portal-ext.properties so that the old org.quartz.* properties are all blanked out, the jobStore class is set to org.terracotta.quartz.TerracottaJobStore, and a new property "tcConfigUrl" is added which points to the IP address and port where Terracotta are located. If this were written in a shell script, it might look something like this:

echo -e "\n" >> $LIFERAY_HOME/portal-ext.properties

echo "org.quartz.jobStore.class=org.terracotta.quartz.TerracottaJobStore"

>> $LIFERAY_HOME/portal-ext.properties

echo "org.quartz.jobStore.tcConfigUrl=$TERRACOTTA_ADDRESS" >>

$LIFERAY_HOME/portal-ext.properties

echo "org.quartz.jobStore.dataSource=" >> $LIFERAY_HOME/portal-ext.properties

echo "org.quartz.jobStore.isClustered=" >> $LIFERAY_HOME/portal-ext.properties

echo "org.quartz.jobStore.misfireThreshold=" >>

$LIFERAY_HOME/portal-ext.properties

echo "org.quartz.jobStore.tablePrefix=" >> $LIFERAY_HOME/portal-ext.properties

echo "org.quartz.jobStore.useProperties=" >> $LIFERAY_HOME/portal-ext.properties

8. The last step is to consider enabling session replication with Terracotta. Hypothetically, if one were to upgrade Liferay's version of EhCache to the same one used in a version of Terracotta where the TerracottaTomcat70xSessionValve is present and fix all EhCache wrapper classes so they properly implement all the new methods added to the upgraded EhCache interface classes. After doing that, users are able to enable session replication using Terracotta.

In order to accomplish this, add the terracotta-toolkit JAR to lib/ext and ensure that the terracota-session JAR is included in lib/ext as well. Afterwards, update all the context XMLs for each of the web applications (stored in conf/Catalina/localhost for Tomcat) so that they know to use the Terracotta valve. If this were to be written as a shell script, it might look something like this:

cp $TERRACOTTA_HOME/common/terracotta-toolkit*.jar $TOMCAT_HOME/lib/ext

cp $TERRACOTTA_HOME/sessions/terracotta-session*.jar $TOMCAT_HOME/lib/ext

for file in $TOMCAT_HOME/conf/Catalina/localhost/*; do

sed -i "s/<\/Context>/\t<Valve

className=\"org.terracotta.session.TerracottaTomcat70xSessionValve\"

tcConfigUrl=\"$TERRACOTTA_ADDRESS\"\/>\n<\/Context>/" $file

Additional Information

This resource might also prove useful: How do I cluster Liferay with Terracotta?

这篇文章有帮助吗?
0 人中有 0 人觉得有帮助