声明新类型 Jboss Drools

发布于 2024-12-02 15:42:50 字数 892 浏览 2 评论 0原文

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

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

i need declare a new type in my drl like this example.

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() Problem here, the variable is not instantiated

    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

My problem: I want use the variable without put this code

FactType personType = kbase.getFactType( "com.sample","Variavel" );
Object test = personType.newInstance();
                ksession.insert(test);

Its possible use the declared field without put this code when i fire the rule, like a static field?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

神妖 2024-12-09 15:42:50

Drools 中的类型声明就像 Java 中的类声明一样。那里有类型,但没有实例。您可以做的是实例化更高优先级的规则并将其作为事实插入,而不是让应用程序执行此操作。例如:


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

A type declaration in Drools is like declaring a class in Java. You have the type there, but no instances. What you can do is have a higher priority rule instantiate and insert it as a fact instead of having the application doing it. 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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文