我希望在drool的when子句中引用java类中的静态字段。我不想插入表示此值的事实,因为该值与我们的系统而不是业务逻辑相关。具体来说,它用于记录目的。
下面的链接似乎表明可以在drl文件中引用静态变量。显然这可以从then子句开始。是否有可能在when子句中引用此值?请记住,我不想使用eval语句,因为我知道它们是最后的工具。
http://drools.46999.n3.nabble.com/Access-a-static-variable-from-Java-file-to-DRL-File-td4023641.html
更新
下面是我需要安装静态调用的代码。基本上,只有在日志级别为某个值时才会触发流口水。
Java类:
public class LoggingUtilities{
public static LogLevel logLevel = LogLevel.NONE;
}
drl file:
import com.myproject.LoggingUtilities;
rule "MyRule"
when
MyFact()
then
Log.writeOut("Some Stuff");
end
答案 0 :(得分:1)
如果您的Java类a.b.Foo
具有公共静态字段bar
,则应该
import a.b.Foo;
然后你只需使用
when
SomeFact( ... Foo.bar ... )
在某些约束表达式的上下文中。
如果您遇到问题,请提供该规则的完整DRL代码以及该Java类的最小代码段。
<强>后来强>
根据你的例子:
import com.myproject.LoggingUtilities;
rule "MyRule"
when
MyFact()
eval( LoggingUtilities.logLevel != LogLevel.NONE )
then
Log.writeOut("Some Stuff");
end
这是条件元素(!)eval
,它仍然是一等公民。这是&#34;内联&#34;仅eval
已经失去其实用性。
**后来**
您可以通过使用日志级别(和其他参数)创建和插入事实来避免eval
。这将具有额外的优势:
如果规则的一个目的是记录,您可以在的早期阻止规则评估。
Parameters( logLevel != LogLevel.NONE )
MyFact()