IBM ODM 8.8.1/8.9.1 - Как прикрепить инструмент события или плагин события к контексту при использовании IlrSessionRequest
Мы выполняем проект классического механизма правил на ODM 8.8.1 (а также 8.9.1 - тот же проект), и у нас есть отдельный проект, который использует IlrContext
объекты для прямого доступа к контексту и прикрепить пользовательский IlrTool
который используется для вывода подробностей выполнения правил с использованием методов перехвата событий, предоставляемых IlrTool
интерфейс. Это полезно для отладки выполнения механизма правил и дает нам представление о том, как объекты выглядят на разных этапах, а также, если во время выполнения возникают ошибки, мы можем точно видеть, где они произошли в процессе.
Мы хотим использовать этот "инструмент трассировки" в нашем развернутом проекте правил в WebLogic 12.2.1. Однако у нас нет прямого доступа к IlrContext
объект в коде на стороне сервера; мы используем IrlEJB3SessionFactory
производить пульт IlrStatelessSession
боб и IlrSessionResponse
используется для предоставления набора правил и входных параметров для IlrStatelessSession.execute()
, По сути, сеанс без сохранения состояния инкапсулирует контекст, но не предоставляет к нему доступ и, по-видимому, не обеспечивает способ присоединения инструмента к нему.
Ниже приведен код нашего сервера для выполнения набора правил с помощью класса runner app rule:
@Override
protected Map<String, Object> execute(Map<String, Object> inputs) throws RuleAppExecutionException {
IlrEJB3SessionFactory sf = new IlrEJB3SessionFactory();
sf.setRemote(true);
sf.setStatelessRemoteJndiName(jndiName);
try {
IlrStatelessSession statelessRuleSession = sf.createStatelessSession();
IlrSessionRequest ruleSessionRequest = sf.createRequest();
ruleSessionRequest.setTaskName(ruleFlow);
ruleSessionRequest.setRulesetPath(IlrPath.parsePath(ruleSetPath));
ruleSessionRequest.setInputParameters(inputs);
ruleSessionRequest.setTraceEnabled(true);
IlrSessionResponse ruleSessionResponse = statelessRuleSession.execute(ruleSessionRequest);
Map<String, Object> outputs = ruleSessionResponse.getOutputParameters();
return outputs;
} catch (IlrSessionCreationException e) {
throw new RuleAppExecutionException(e);
} catch (IlrFormatException e) {
throw new RuleAppExecutionException(e);
} catch (IlrSessionException e) {
throw new RuleAppExecutionException(e);
}
}
По сравнению с нашим локальным проектом по запуску набора специальных правил (с указанием подключения инструмента):
@Override
protected Map<String, Object> execute(IlrRuleset ruleset, Map<String, Object> inputs, PrintWriter out) {
IlrContext engine = new IlrContext(ruleset);
TracerTool tracer = new TracerTool(engine, out);
try {
engine.connectTool(tracer);
} catch (IlrToolConnectionException e) {
throw new RuleAppExecutionException(e);
}
engine.setParameterValue("param1", inputs.get("param1"));
engine.setParameterValue("param2", inputs.get("param2"));
IlrParameterMap outParams = engine.execute();
Map<String, Object> outputs = new HashMap<String, Object>();
for (Object o : outParams.keySet()) {
String key = (String) o;
outputs.put(key, outParams.getObjectValue(key));
}
return outputs;
}
Итак, мои вопросы:
- Можно ли еще прикрепить
IlrTool
возражать противIlrStatelessSession
или жеIlrSessionRequest
объекты таким образом, что это приведет к тому же соединению, что иIlrContext.connectTool()
? - Если это невозможно, я видел упоминание о
EventPlugin
а такжеIlrRuleEngineEventPlugin
, но не нашли каких-либо четких объяснений относительно того, как расширить их для обеспечения аналогичной функциональности или как упаковать их, чтобы сделать их доступными на экземпляре сервера. (Я видел несколько ссылок здесь, но было все еще неясно, как реализовать плагин для WebLogic 12c.) Любые идеи, как я мог бы реализоватьEventPlugin
для серверного кода, чтобы действовать какTracerTool
реализация в специальном примере?
Пожалуйста, дайте мне знать, если я должен предоставить больше информации. Спасибо за любую помощь, которую вы все можете предоставить!