宣布新型Jboss Drools

时间:2011-08-31 22:30:07

标签: jboss field drools declare

我需要在我的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);

当我触发规则时,它可以使用声明的字段而不放置此代码,就像静态字段一样?

1 个答案:

答案 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