使用 QueryResults 没有 return 任何东西
Using QueryResults does not return anything
我正在尝试使用 QueryResults 来计算对象的数量。我的规则是:
query "Test"
m : Message()
end
function int countFacts(String queryString) {
QueryResults queryResults = DroolsTest.getQueryResults(queryString);
if (queryResults != null) {
System.out.println("Total FACTS found: " + queryResults.size());
return queryResults.size();
}
return 0;
}
rule "Hello World"
when
m : Message( status == Message.HELLO, myMessage : message )
eval(countFacts("Test")>0 )
then
System.out.println( myMessage );
end
而在java一侧
public static QueryResults getQueryResults(String queryName) {
System.out.println("inside queryResults for queryName " +queryName );
QueryResults queryResults = kSession.getQueryResults(queryName);
return queryResults;
}
当我尝试 运行 规则时,执行停止并且没有任何反应。
kSession.getQueryResults(queryName) returns 什么都没有,一段时间后我不得不手动终止执行。
这里有什么问题?
我认为这里的问题是你的线程被阻止了。如果您的要求是将会话中的事实数量作为规则的一部分进行计数,那么您可以使用累加器以更多 "Drools-friendly" 的方式进行计算:
rule "More than 2 HELLO messages"
when
Number(longValue > 2) from accumulate (
Message( status == Message.HELLO),
count(1)
)
then
System.out.println( myMessage );
end
如果您真的想从规则的 when
部分调用查询,则需要 pass an unbound variable to the query 才能在规则中返回结果:
query countMessages(long $n)
Number($n:= longValue) from accumulate (
Message(),
count(1)
)
end
rule "Hello World"
when
m : Message( status == Message.HELLO, myMessage : message )
countMessages($n;)
eval($n > 0)
then
System.out.println( m );
end
希望对您有所帮助,
我正在尝试使用 QueryResults 来计算对象的数量。我的规则是:
query "Test"
m : Message()
end
function int countFacts(String queryString) {
QueryResults queryResults = DroolsTest.getQueryResults(queryString);
if (queryResults != null) {
System.out.println("Total FACTS found: " + queryResults.size());
return queryResults.size();
}
return 0;
}
rule "Hello World"
when
m : Message( status == Message.HELLO, myMessage : message )
eval(countFacts("Test")>0 )
then
System.out.println( myMessage );
end
而在java一侧
public static QueryResults getQueryResults(String queryName) {
System.out.println("inside queryResults for queryName " +queryName );
QueryResults queryResults = kSession.getQueryResults(queryName);
return queryResults;
}
当我尝试 运行 规则时,执行停止并且没有任何反应。 kSession.getQueryResults(queryName) returns 什么都没有,一段时间后我不得不手动终止执行。
这里有什么问题?
我认为这里的问题是你的线程被阻止了。如果您的要求是将会话中的事实数量作为规则的一部分进行计数,那么您可以使用累加器以更多 "Drools-friendly" 的方式进行计算:
rule "More than 2 HELLO messages"
when
Number(longValue > 2) from accumulate (
Message( status == Message.HELLO),
count(1)
)
then
System.out.println( myMessage );
end
如果您真的想从规则的 when
部分调用查询,则需要 pass an unbound variable to the query 才能在规则中返回结果:
query countMessages(long $n)
Number($n:= longValue) from accumulate (
Message(),
count(1)
)
end
rule "Hello World"
when
m : Message( status == Message.HELLO, myMessage : message )
countMessages($n;)
eval($n > 0)
then
System.out.println( m );
end
希望对您有所帮助,