テーブルマッパーテーブルのキャッシュを無効にする

Service Builderは、エンティティ間のリレーショナルマッピングを作成します。 マッピングテーブルを使用してエンティティを関連付けます。service.xmlファイルでは、両方のエンティティにmapping-table="table1_table2"形式のmapping-table列属性があります。たとえば、AssetEntryAssetCategoryにマップするservice.xmlには、次の列を持つAssetCategoryエンティティがあります。

<column entity="AssetEntry"
mapping-table="AssetEntries_AssetCategories"
name="entries" type="Collection" />

AssetEntryエンティティ要素には次の列があります。

<column entity="AssetCategory"
mapping-table="AssetEntries_AssetCategories"
name="categories" type="Collection" />

デフォルトでは、テーブルマッパーキャッシュは各マッピングテーブルに関連付けられています。キャッシュはオブジェクトの取得を最適化します。ただし、場合によっては、テーブルマッパーキャッシュを無効にしたほうがいい場合もあります。

テーブルマッパーでキャッシュを無効にしたほうがいいのはなぜですか?

超大規模なエンティティテーブルは、メモリを大量に消費するテーブルマッパーキャッシュにつながる可能性があります。このため、テーブルマッパーでキャッシュを無効にすることを検討してください。

table.mapper.cacheless.mapping.table.namesポータルプロパティは、指定されたマッピングテーブルに関連付けられたテーブルマッパーのキャッシュを無効にします。 デフォルトのプロパティ設定は次のとおりです。

##
## Table Mapper
##

#
# Set a list of comma delimited mapping table names that will not be using
# cache in their table mappers.
#
table.mapper.cacheless.mapping.table.names=\
Users_Groups,\
Users_Orgs,\
Users_Roles,\
Users_Teams,\
Users_UserGroups

上記の無効化されたキャッシュはすべて、Userオブジェクトに関係します。これは、テーブルマッパーが大きくなりすぎて有用なキャッシュを持たない傾向があるためです。各Userは、関連する各テーブルに複数のエントリを持つことができます。

キャッシュからオブジェクトを取得する潜在的な競合条件も、テーブルマッパーを無効にする理由の1つです。

たとえば、LPS-84374は、カスタムエンティティのテーブルマッパーキャッシュが使用中にクリアされ、トランザクションのロールバックが発生する競合状態を説明しています。AssetEntryを公開すると、関連するすべてのテーブルマッパーキャッシュがクリアされます。ゲッターメソッドがAssetEntries_AssetCategoriesマッピングテーブルからオブジェクトを取得すると同時にそれらが公開された場合、トランザクションのロールバックが発生します。

テーブルマッパーキャッシュを無効にする

マッピングテーブル名をtable.mapper.cacheless.mapping.table.namesポータルプロパティに追加すると、関連するテーブルマッパーキャッシュが無効になります。

  1. [Liferay_Home]/portal-ext.propertiesファイルに、現在のtable.mapper.cacheless.mapping.table.namesプロパティ設定を追加します。この設定は、Liferay DXPインストールのportal-impl.jar/portal.propertiesファイルにあります。

  2. マッピングテーブル名をリストに追加しますたとえば、AssetEntries_AssetCategoriesという名前のマッピングテーブルに関連付けられているキャッシュを無効にするには、その名前をリストに追加します。

    table.mapper.cacheless.mapping.table.names=\
    Users_Groups,\
    Users_Orgs,\
    Users_Roles,\
    Users_Teams,\
    Users_UserGroups,\
    AssetEntries_AssetCategories
    
  3. Liferay DXPインスタンスを再起動して、テーブルマッパーキャッシュを削除します。

不要なテーブルマッパーキャッシュを無効にしました。

« 別のデータベースで変更されるソート順DXPソースコードのパッチ »
この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています