Механизм статистики сущностей предоставляет данные о текущем количестве экземпляров сущностей в базе данных. Эти данные используются для автоматического принятия решений о выборе способа поиска связанных сущностей и ограничении размера выборок в экранах пользовательского интерфейса.
Статистика хранится в таблице SYS_ENTITY_STATISTICS, соответствующей сущности EntityStatistics
. Заполнить статистику можно как вручную, внося соответствующие записи в таблицу, так и автоматически с помощью метода refreshStatistics()
JMX-бина
PersistenceManagerMBean
. При указании в качестве параметра имени сущности статистика будет собрана только для данной сущности, в противном случае
- для всех. Сбор статистики может занять значительное время и вызвать нежелательную нагрузку на БД, поэтому выполнять его
нужно либо вручную, либо назначенным заданием в подходящее время.
Программный доступ к статистике осуществляется с помощью интерфейса PersistenceManagerAPI
на Middleware и PersistenceManagerService
на клиентском уровне. Статистика кэшируется в памяти, поэтому если изменения статистики вносятся напрямую в базу данных,
для вступления их в силу необходимо перезапустить сервер или вызвать метод PersistenceManagerMBean.flushStatisticsCache()
.
Рассмотрим атрибуты EntityStatistics
и их влияние на поведение системы.
-
name
(колонка NAME) - тип сущности в виде имени мета-класса, например,sales$Customer
. -
instanceCount
(колонка INSTANCE_COUNT) - примерное текущее количество экземпляров сущности. -
fetchUI
(колонка FETCH_UI) - размер страницы данных, предлагаемый пользователю при извлечении списков сущностей.Например, компонент
Filter
устанавливает это число в поле Показывать N строк. -
maxFetchUI
(колонка MAX_FETCH_UI) - максимальное количество экземпляров сущности, которое может быть извлечено и передано на клиентский уровень.Данный параметр играет роль при отображении списков сущностей в компонентах типа
LookupField
иLookupPickerField
, а также в таблицах без универсального фильтра, то есть когда на связанный источник данных не налагается ограничений методомCollectionDatasource.setMaxResults()
. В этом случае сам источник данных ограничивает количество извлекаемых экземпляров значениемmaxFetchUI
. -
lookupScreenThreshold
(колонка LOOKUP_SCREEN_THRESHOLD) - порог количества экземпляров сущности, при превышении которого в универсальных механизмах пользовательского интерфейса для поиска связанных сущностей будут использоваться экраны выбора вместо выпадающих списков.В частности, этот параметр принимается во внимание компонентом
Filter
при выборе параметров фильтрации: до достижения порога используется компонентLookupField
, при превышении порога - компонентPickerField
. Поэтому, если необходимо заставить фильтр отображать выбор параметра некоторого типа через экран выбора, достаточно внести запись статистики для этой сущности со значениемlookupScreenThreshold
меньшим, чемinstanceCount
.
JMX-бин PersistenceManagerMBean
в атрибутах DefaultFetchUI
, DefaultMaxFetchUI
, DefaultLookupScreenThreshold
позволяет задать значения вышеперечисленных параметров по умолчанию. В результате, если для некоторой сущности статистика
отсутствует (что является обычной ситуацией), будет использоваться соответствующий параметр по умолчанию.
Кроме того, JMX-бин PersistenceManagerMBean
позволяет ввести данные статистики для конкретной сущности с помощью операции enterStatistics()
. Например, для того, чтобы для сущности sales$Customer
установить размер страницы данных по умолчанию в 1000, а максимальное количество извлекаемых экземпляров в компонентах LookupField в 30000, следует вызвать операцию enterStatistics()
со следующими параметрами:
entityName: sales$Customer fetchUI: 1000 maxFetchUI: 30000