Проблема с изменением фактов в kie-сервере

Я имею в виду следующий код из документации Drools для изменения фактов на Kie-сервере.

1 BatchExecutionCommand command = new BatchExecutionCommand();
2 command.setLookup("ksession1");
3 ModifyCommand modifyCommand = new ModifyCommand();
4 modifyCommand.setFactHandleFromString("123:234:345:456:567");
5 List<Setter> setters = new ArrayList<Setter>();
6 setters.add(new SetterImpl("age", "30"));
7 modifyCommand.setSetters(setters);
8 command.getCommands().add(modifyCommand);

В строке 6 я хотел бы установить атрибут объекта вместо строки. Например,

6 setters.add(new SetterImpl("id", UUID.randomUUID());

Однако API SetterImpl (String accessor, String value) принимает только строковые параметры.

Есть ли у нас какая-либо другая реализация SetterImpl, которую я могу использовать для отправки объекта вместо String на Kie-сервер?

Причина, по которой я хочу отправить объект, состоит в том, что модель Java в контейнере содержит атрибуты, которые имеют тип не примитивный, например,

Public class Test{
    UUID id;

    public UUID getId(){
        return id;
    }

    public void setId(UUID id){
        this.id = id;
    }

}

1 ответ

Вы можете попробовать использовать выражение MVEL в качестве значения Setter. Код в ModifyCommand выглядит так, как будто он был реализован. Так что, может быть:

6 setters.add(new SetterImpl( "id", "UUID.randomUUID()" );

Это оценивается в контексте сеанса. Возможно, вам придется импортировать UUID в DRL или использовать полное имя класса.

(Я никогда не пробовал ничего из этого, не использовал командный интерфейс в течение многих лет. Я только что прочитал исходный код.)

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