【问题标题】:Issue with modifying facts in kie-server在 kie-server 中修改事实的问题
【发布时间】:2016-04-05 18:34:10
【问题描述】:

我指的是 Drools 文档中的以下代码来修改 Kie-server 中的事实。

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());

但是,SetterImpl(String accessor, String value) API 只接受 String 参数。

我们是否有任何其他的 SetterImpl 实现可以用来将对象而不是 String 发送到 Kie-server?

我之所以要发送一个对象是因为容器内的java模型包含非原始类型的属性,例如,

Public class Test{
    UUID id;

    public UUID getId(){
        return id;
    }

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

}

【问题讨论】:

    标签: java drools kie-server


    【解决方案1】:

    您可以尝试使用 MVEL 表达式作为 Setter 的值。 ModifyCommand 中的代码看起来好像已实现。所以,也许:

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

    这是在会话的上下文中评估的。您可能必须在 DRL 中导入 UUID 或使用完整的类名。

    (我从来没有尝试过这些,多年来没有使用命令界面。我只是阅读了源代码。)

    【讨论】:

    • Laune,您的建议无效!问题是 Drools-Core 引擎的 ModifyCommand 类中的 getMvelExpr() 函数总是将参数转换为字符串。根据您的建议,引擎只需删除引号并使用键字符串附加值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    相关资源
    最近更新 更多