Слюни: Использование глобалов, определенных при создании сеанса для вновь вставленных правил - PullRequest
0 голосов
/ 07 февраля 2011

Да, я запускаю Drools в программе заказа, которую я делаю.Меня попросили сделать правила загружаемыми во время запуска программы через JMX.Я принимаю их как строку и добавляю в базу знаний StatefulKnowledgeSession.Пока все хорошо.Я получаю простое правило теста для загрузки просто отлично и без инцидентов.

Однако, когда я запускаю программу, я загружаю несколько фиксированных глобальных переменных, например, Logger.Если я пытаюсь загрузить правило, ссылающееся на эти глобальные переменные, через JMX, оно говорит:
com/hipdm/messaging/Rule_Test_0.java (7:704) : logger cannot be resolved
Есть ли способ сделать это глобальное видимым для вновь загруженных правил?Я ввел его в тот же пакет, что и правила, загруженные при запуске.
Полное правило:

package com.hipdm.messaging  

import com.hipdm.messaging.model.DummyOrderMessage  

rule "Test"  
   when $msg : DummyOrderMessage( processed == false ) from entry-point "Message stream"  
then  
   modify($msg) {process()};  
   logger.info("Order processed by rule engine");  
end

Любые идеи, что может быть не так, и как я могу сделать свои глобальные переменные видимыми после первоначального создания сеанса

1 Ответ

1 голос
/ 08 февраля 2011

Насколько я знаю, глобальные переменные должны быть 'импортированы' в файл правил , чтобы сделать их видимыми. В ДХО существует специальное ключевое слово: global . Для этого добавьте следующую строку после строки import в ваших правилах.

global <full-class-name> <name-of-global-variable>

Так что, если вы используете регистратор (предполагая, что это log4j-регистратор), вы должны добавить:

global org.apache.log4j.Logger logger

Конечно, на другом конце в Java-коде глобал должен быть установлен в рабочую память , но, думаю, вам удалось это сделать. В любом случае:

workingMemory.setGlobal("logger", someLogger);

Обратите внимание, что ключевое слово 'logger' должно совпадать в коде Java и в ваших правилах.

...