我需要在我的drl中声明一个新类型,就像这个例子一样。
package com.sample
import com.sample.DroolsTest.Message;
declare Variavel
valor : Integer
end
rule "Hello World"
when
m : Message( status == Message.HELLO, myMessage : message )
- - - - > v:Variavel()问题在这里,变量没有实例化
then
System.out.println( myMessage );
m.setMessage( "Goodbye cruel world" );
m.setStatus( Message.GOODBYE );
update( m );
end
rule "GoodBye"
when
Message( status == Message.GOODBYE, myMessage : message )
then
System.out.println( myMessage );
end
我的问题:我想在不放置此代码的情况下使用变量
FactType personType = kbase.getFactType( "com.sample","Variavel" );
Object test = personType.newInstance();
ksession.insert(test);
当我触发规则时,它可以使用声明的字段而不放置此代码,就像静态字段一样?
答案 0 :(得分:3)
Drools中的类型声明就像在Java中声明一个类。你有那种类型,但没有实例。您可以做的是具有更高优先级的规则实例化并将其作为事实插入而不是让应用程序执行它。 E.g:
declare Variavel
valor : Integer
end
rule "create variable"
salience 100
when
then
insert( new Variavel() );
end
rule "Hello World"
when
m : Message( status == Message.HELLO, myMessage : message )
v : Variavel()
then
// do something
end