TerracotaでLiferayポータルを設定する

この記事はレガシー記事です。 以前のバージョンのLiferay製品にも適用されます。 記事がメンテナンスされなくなったとはいえ、まだ該当する可能性があります。

この記事では、テラコッタとLiferayの統合を実現する方法を紹介しています。

決議

TerracottaとLiferayをうまく統合するためには、 LPS-31709 のパッチが必要になります。

パッチを入手したら、以下の手順に従ってください。

*今後の手順で提供されるシェルスクリプトの例を使用する場合は、Liferayホームフォルダ、Tomcatホームフォルダ、Liferayポータル6.1 EE GA2 Terracottaホームフォルダ、Terracottaが住むIPアドレスとポートに対応する環境変数を設定してください。
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. Liferayが使用しているEhCacheのバージョンに対応するTerracottaのバージョンを検索します。 例えば、6.1 EE SP1(6.1.20)では、LiferayはEhCache 2.4.6を使用しています。 そのため、EhCache 2.4.xに対応したバージョンのTerracottaが必要になります。 Terracotta 3.5.3はEhCache 2.4.6で、Terracotta 3.5.5はEhCache 2.4.8で出荷されます。

2. LiferayのWEB-INF/libフォルダ内のEhCacheとSLF4j JARを全て削除し、Terracottaのehcache/libフォルダ内のものと入れ替えます。 これがシェルスクリプトで書かれていたとしたら、次のようになるかもしれません。

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. セッションレプリケーションを使用しない場合(現在Lifreay 6.1ではセッションレプリケーションができないことに注意してください)、テラコッタツールキットのJARをLiferayのWEB-INF/libフォルダにコピーしてください。 これがシェルスクリプトで書かれていたとしたら、次のようになるかもしれません。

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

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

4. portal-impl.jarからhibernate-terracotta.xmlとliferay-multi-vm-terracotta.xmlを展開し、LiferayのWEB-INF/classesの "myehcache "フォルダに配置します。 その後、"localhost:9510 "のインスタンスを、Terracottaが動作している実際のIPアドレスとポートに置き換えます(デフォルトでは9510番ポートで動作しているので、別のサーバーにある場合はIPアドレスを変更するだけです)。 これがシェルスクリプトで書かれていたとしたら、次のようになるかもしれません。

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. portal-ext.propertiesに新しいhibernate-terracotta.xmlとliferay-multi-vm-terracotta.xmlを追加します。 例えば、 $LIFERAY_HOMEで portal-ext.properties を使用している場合、シェルスクリプトは以下のようになります。

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. LiferayのWEB-INF/libフォルダ内のQuartz JARを全て削除し、Terracottaのquartzフォルダ内に用意されているquartz-allとquartz-terracottaのJARに入れ替えます。 テラコッタ配布に含まれているQuartz JARは他にもありますが、安全に無視して大丈夫です。 これがシェルスクリプトで書かれていたとしたら、次のようになるかもしれません。

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. portal-ext.propertiesを更新し、古いorg.quartz.*プロパティをすべて空白にし、jobStoreクラスをorg.terracotta.quartz.TerracottaJobStoreに設定し、新しいプロパティ "tcConfigUrl "を追加しました。 これがシェルスクリプトで書かれていたとしたら、次のようになるかもしれません。

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. 最後のステップは、Terracottaでセッションレプリケーションを有効にすることを検討することです。 仮に、TerracottaTomcat70xSessionValveが存在するTerracottaのバージョンで使用されているものと同じものにLiferayのバージョンのEhCacheをアップグレードし、すべてのEhCacheラッパークラスを修正して、アップグレードされたEhCacheインターフェースクラスに追加されたすべての新しいメソッドを適切に実装できるようにしたとします。 その後、ユーザーはTerracottaを使ってセッションレプリケーションを有効にすることができます。

これを達成するために、teracotta-toolkit JARをlib/extに追加し、teracota-session JARも同様にlib/extに含まれていることを確認してください。 その後、Terracottaバルブを使用することがわかるように、各WebアプリケーションのすべてのコンテキストXMLを更新します(Tomcatの場合はconf/Catalina/localhostに格納されています)。 これをシェルスクリプトとして書くと、次のようになります。

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

追加情報

このリソースも役に立つかもしれません。 Terracotta で Liferay をクラスタリングするには?

この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています