この記事では、Liferay DXP 7.0でキャッシュを操作し、そのサイズ、TTL(Time To Live)、レプリケーションを変更する方法について説明します。
解決策
デフォルトのキャッシュサイズとエントリーTTLの変更
混乱を招く可能性があるのは、 ehcache.multi.vm.config.location
portalプロパティです。 このプロパティは、Liferayプラットフォームのデフォルトのキャッシュサイズや動作を変更するため、またはLiferayプラットフォームがプラットフォームのフックプラグインを使用して個々のキャッシュ設定を変更する機能を追加した LPS-17296 より前のリリースで特定のキャッシュサイズや動作を変更する場合に、以前のLiferayプラットフォームのリリースで使用されました。
このポータルプロパティはLiferay DXPでも機能しますが、過去のリリースで可能だった絶対パスの指定はできなくなりました。 むしろ、 EhcachePortalCacheManager のソースコードは、 クラスパス
相対値 のみを受け入れることを示しています。 つまり、このポータルのプロパティで指定されるファイルは、 com.liferay.portal.cache.ehcache
のバンドルフラグメントとして存在するか、Liferay アプリケーションの WEB-INF/classes
に存在する必要があることを示します。
特定のキャッシュサイズとエントリーTTLの変更
6.2で追加されたキャッシュコンフィギュレーションフック機構に伴い、Liferayは通常、キャッシュコンフィギュレーションファイルを完全に置き換えるのではなく、新しいキャッシュの追加や既存のキャッシュの修正のみを行うことを想定しています。 PortalCacheConfiguratorSettings サービスを提供する OSGi コンポーネントを作成することで、Liferay キャッシュのサイズとキャッシュエントリー が生きるデフォルトの時間をカスタマイズすることができます。
多くのLiferayサービスとは異なり、これは実際にはインターフェースではなくベースクラスであり、利用可能な唯一のコンストラクタは2つの引数を受け入れます:いくつかのリソースファイルをロードするために使用できるクラスローダと、そのリソースファイルへのパスです。 このリソースファイルは、 PortalCacheConfiguratorSettings
のコンストラクタに渡すクラスローダで見つけることができる限り、好きな名前を付けることができます。 このファイル自体には、 キャッシュ の項目のみが含まれており、 portal-cache-ehcache モジュール内の項目と全く同じように見えるはずです。
Liferayの既存の実装(DDMRESTDataProviderCacheConfiguratorSettings, JournalMultiVMClusteredCacheConfiguratorSettings)も、 ライフサイクルイベント (特に、 PORTAL_INITIALIZED
)への依存を追加して、 が早すぎないような設定にしています。
キャッシュのレプリケーションを変更する
MultiVMEhcachePortalCacheManagerConfigurator ポータルのプロパティで設定された値に基づいて、キャッシュのレプリケーションがどのように行われるかを決定します。 DE-28 以前の Liferay のバージョンを使用している場合、 LPS-73830で説明されているように、ポータルのプロパティの変更を有効にするためには、 ehcache.multi.vm.config.location
で指定したデフォルト設定ファイルでキャッシュを宣言しなければならないということにも注意が必要です。
DE-26以前は、設定する必要のあるプロパティ名は ehcache.cluster.link.replicator.properties
でした:
ehcache.cluster.link.replicator.properties.TEST_CACHE=replicatePutsViaCopy=true,replicateUpdatesViaCopy=true
DE-26で、LiferayはCEでもクラスタリングを利用できるようにするための変更を準備し始めたが、LiferayはEE顧客だけにクラスタリンクベースのレプリケーション機構を残すことを選択した。 潜在的な混乱を避けるため、プロパティ名はDE-26で ehcache.replicator.properties
に変更され、その後7.0.4 GA5でCEユーザーに提供されました:
ehcache.replicator.properties.TEST_CACHE=replicatePutsViaCopy=true,replicateUpdatesViaCopy=true
混乱を避けるため、これらを ehcache.replicator.properties
と呼ぶことにします。DE-25以前をお使いの場合は、プレフィックスを ehcache
から ehcache.cluster.link
に変更することが可能です。
実装レベルでは、Liferayプラットフォームは ehcache.replicator.properties.default
プロパティをチェックし、 ehcache.replicator.properties.${cache.name}
で指定されたキャッシュ固有のプロパティを各キャッシュに対してマージします。
したがって、キャッシュがレプリケーションを処理する方法を変更するには、 portal-ext.properties
を更新して、 ehcache.replicator.properties.default
(デフォルトを変更したい場合)または ehcache.replicator.properties のいずれかを設定する必要があります。${cache.name}
(1つのキャッシュの動作だけを変更したい場合)のいずれかを選択します。 いずれのプロパティにも値が指定されていない場合、 PortalCacheReplicatorで指定されている定数にフォールバックします。
コード内で、putまたはremoveイベントに対するすべてのレプリケーションを特に防止したい場合は、 PortalCacheHelperUtilの対応するメソッドを使用できます。 なお、更新の場合は、単にエントリーをキャッシュに入れる方法を使うことになる。