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;
}

Итак, мои вопросы:

  1. Можно ли еще прикрепить IlrTool возражать против IlrStatelessSession или же IlrSessionRequest объекты таким образом, что это приведет к тому же соединению, что и IlrContext.connectTool()?
  2. Если это невозможно, я видел упоминание о EventPlugin а также IlrRuleEngineEventPlugin, но не нашли каких-либо четких объяснений относительно того, как расширить их для обеспечения аналогичной функциональности или как упаковать их, чтобы сделать их доступными на экземпляре сервера. (Я видел несколько ссылок здесь, но было все еще неясно, как реализовать плагин для WebLogic 12c.) Любые идеи, как я мог бы реализовать EventPlugin для серверного кода, чтобы действовать как TracerTool реализация в специальном примере?

Пожалуйста, дайте мне знать, если я должен предоставить больше информации. Спасибо за любую помощь, которую вы все можете предоставить!

0 ответов

Другие вопросы по тегам