我有一个独立的 Java 应用程序,我必须为此集成一个规则引擎。我应该使用属性文件或 XML 文件来定义规则。我需要规则引擎来读取属性或 XML 文件中定义的这些规则,并相应地在应用程序中实现代码。
任何这样的规则引擎(开源),我都可以将它用于我的应用程序。请注意,我不希望在应用程序服务器或 Web 服务器中部署任何规则引擎。我需要某种 jar 文件,我可以在其中直接将其用于我的应用程序。
如果我可以使用任何这样的规则引擎,请指导我?
我有一个独立的 Java 应用程序,我必须为此集成一个规则引擎。我应该使用属性文件或 XML 文件来定义规则。我需要规则引擎来读取属性或 XML 文件中定义的这些规则,并相应地在应用程序中实现代码。
任何这样的规则引擎(开源),我都可以将它用于我的应用程序。请注意,我不希望在应用程序服务器或 Web 服务器中部署任何规则引擎。我需要某种 jar 文件,我可以在其中直接将其用于我的应用程序。
如果我可以使用任何这样的规则引擎,请指导我?
你可以选择 Drools,它也可以在独立程序中使用。
插头警报!
我有偏见,因为这是我自己的项目,但如果你想要一个非常快速和轻量级的规则引擎,你可以查看Roolie。
该项目背后的理念是基于我个人的经验,即 JSR-94 太过分了,大多数规则引擎都太重了,依赖关系太多,学习曲线陡峭。
Roolie 没有解决改变应用程序状态的“功能性”规则(那些应该是 Java 无论如何,恕我直言)。
相反,它允许开发人员使用单个“通过”方法实现简单的规则,并将它们与 XML 文件中的短路布尔逻辑链接在一起。它没有任何运行时依赖,而且速度非常快。
这是一个简单问题的简单解决方案(即用户可以看到文件吗?只有当他们“登录”、“管理员”或“高级用户”和“有足够的帖子”时)。
复合规则是“UserCanSeeFile”,由“IsLoggedIn”、“IsAdmin”、“IsPowerUser”和“HasEnoughPosts”组成。
如果稍后您不关心他们必须有多少帖子让他们看到一个文件,只需拉出该 XML 行,您就完成了。
我在java中尝试了一些表达式评估库。我发现 MVEL 是最好的。就我而言,我正在从数据库中读取“规则”。所以我的规则看起来像
player.platform == 'iOS' && ( player.ltv > 100 || player.status >= GOLD )
现在我所做的是为所有变量解析上面的表达式。在我的情况下,变量是带有点( object.method )的任何标记。它对我有用。不确定它是否对你有用。
但是一旦所有变量都替换为值。我刚刚调用了一个 MVEL.evaluate()。
此外,在我的情况下,我需要评估的所有表达式都将以布尔结果给出。但是 MVEL 可以评估具有不同结果类型的任何表达式。