在Drool里用Java实现业务逻辑,搞什么搞
副标题是,我个人不推荐,Jboss的开发人员在文档中也不推荐。Java在rule文件里应该是写Utility用的。
本文不谈rule的大方向,什么将逻辑从Java代码里分离出来,利用更加方便的语言来描述规则等等。
写rule最立竿见影的效果就是将Java里面讨厌的一长串if-else语句用比较简洁的rule语言表示。
如果在rule文件里用Java实现业务逻辑,那用rule engine又有什么意义呢?
Java可以直接在JVM上跑,没必要用rule engine来做Proxy。而且,Java函数对rule engine来说是难以优化的,官网上说无法对其做索引,当滥用eval操作去调用Java函数时,rule engine的性能会受到很大的影响。Rule文件里就应该写纯粹的rule语法,要用Java实现业务逻辑的话,就把Java放到Java文件里;不然就变成了四不像,既没有很好的利用rule engine的优化功能,又丧失了在项目中使用rule engine的意义。
Java在rule文件中就是写Utility的,打印下log啊,对变量做下处理什么的,而不是用来判断逻辑的。其实更好的方法是rule文件中一点Java函数的身影都不要用,专门搞一个Utility的类给rule文件用。两全其美,相得益彰,看的也爽。各种语言各个项目各施其职,社会才会和谐嘛!