У нас есть правило, которое вызывает метод Java, а затем этот метод вызывает запрос от Drools. В старой версии это работало нормально, но теперь в последних версиях не работает. Выполнение зависает.
Отладка, как будто текущее состояние повестки дня KieSessions было ЗАПУСКА, и вызов Query вызывает новый элемент в этой повестке дня, который блокируется навсегда и никогда не возвращается в код.< /p>
Пример кода:
Код: Выделить всё
////
// DROOLS
////
query javaToDrools
ves : Data()
end
rule "INSERT: New Item"
when
$data: MyData($id:id)
then
System.out.println("Insert Data: " + $id);
insert(new Data($data));
myJavaClass.droolsToJava();
end
Код: Выделить всё
////
// JAVA
////
public void droolsToJava() {
QueryResults results = session.getQueryResults("javaToDrools");
results.forEach(res -> {
res.toString();
});
session.fireUntilHalt();
}
Код: Выделить всё
StatefulKnowledgeSessionImpl.getQueryResults
-> StatefulKnowledgeSessionImpl.internalGetQueryResult
-> StatefulKnowledgeSessionImpl.evalQuery
-> StatefulKnowledgeSessionImpl.addPropagation -> It adds the Propagation
Как будто я не могу вставить факт в KieSession и одновременно вызвать запрос...
Подробнее здесь: https://stackoverflow.com/questions/791 ... l-to-query