Проблема с изменением фактов в 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 или использовать полное имя класса.
(Я никогда не пробовал ничего из этого, не использовал командный интерфейс в течение многих лет. Я только что прочитал исходный код.)