Как обмениваться данными между правилами Drools на карте?

У меня есть правило, которое принимает Map() как факт, а затем устанавливает множество элементов на эту карту. Я хочу иметь возможность использовать эту карту в другом месте при выполнении других правил. Я читал о глобалах в Drools, но кажется, что их не следует использовать для этой цели. Прямо сейчас я сохраняю эту карту как частную собственность в классе Java, чтобы она могла хранить все данные в контексте веб-приложения, но это увеличивает объем моей памяти. Я знаю, это может показаться странным, но есть ли аналогия в правилах Drools со статическими полями Java?

Заранее спасибо!


person azec-pdx    schedule 02.12.2011    source источник


Ответы (1)


Можете ли вы объяснить немного больше о том, чего пытается достичь ваше правило? в большинстве случаев вы должны переформулировать правила, чтобы они соответствовали вашим потребностям. Правило, которое фильтрует Map(), требует, чтобы экземпляр java.util.Map был вставлен в сеанс знаний. Если вы добавите карту как глобальную, ваши правила не смогут напрямую фильтровать карту(). Я обычно рекомендую использовать более структурированные факты/объекты для написания правил вместо общих структур. Помните, что если вы вставите экземпляр java.util.Map в сеанс, эта карта будет доступна для всех правил, которые фильтруют тип объекта Map().

Надеюсь, это поможет, если вы можете предоставить больше информации, мы сможем помочь дальше.

Ваше здоровье

person salaboy    schedule 03.12.2011
comment
У меня есть таблица решений XLS (более 3000 правил), где кто-то написал, что правила играют роль контейнера данных и имеют только тривиальную логику (установка значений для объекта домена). Это вызывает исключения PermGen, поэтому мне пришлось вытащить их оттуда. Теперь я поместил эту карту в java и передал ее как факт и заполнил карту только при срабатывании первого правила. Итак, эта карта находится в моей куче развернутого приложения. Есть ли лучшее решение для заполнения этой карты и совместного использования правил? Примечание. Это всего лишь временное решение, все эти данные будут удалены из правил в какой-то момент, но мне пришлось поработать над этой проблемой PermGen. - person azec-pdx; 05.12.2011