到目前为止,我一直在使用Stateful Sessions(KieSession)并且已经设法使用Scala和一些Java包装器按需运行我的项目。我现在正在尝试切换到StatelessKieSessions。根据我发现的文档,我设法运行以下命令将对象/集合插入到会话中,触发它们的规则并更新事实:
val cmd = CommandFactory.newInsert(myObject, "myObject")
val result = ksession.execute(cmd)
当我打印result
(属于org.drools.core.common.DefaultFactHandle类)时,它会显示所需事实的结构,按预期更新,前面加上“事实0”的排序: 1:2050275256:1971742898:2:默认:NON_TRAIT:“
文档说我应该能够编写类似result.getValue("myObject")
的内容,但是这个选项在Scala中似乎不可用。 (https://docs.jboss.org/drools/release/6.0.0.Beta1/kie-api-javadoc/org/kie/api/runtime/StatelessKieSession.html)
据我所知,Scala-Drools的互操作性尚未完全提供,但有没有人知道从StatelessKieSession或包含它的DefaultFactHandle中提取更新事实的方法?
答案 0 :(得分:1)
你从这个执行命令得到的是新插入事实的事实句柄。其中的对象仍然是您插入,更新或未更新的对象。您必须调查这是否可以在Scala中使用。
没有命令可以检索在执行会话期间已更改的所有事实。你必须使用一些可用的技术来监控它。
运行“无状态会话”并没有多少好处。如果您可以使用常规(有状态)会话实现所需,请将其保留。无状态会话可能有其优点,但不要从Scala中解决它。