JAVA的规则引擎实现

一、Drools:

Drools是一个Bob McWhirter开发的开源项目,实现了JSR94 Rule Engine API并提供了单元测试代码。

应用了Rete核心算法。Drools提供了三种语义模块――Python模块,Java模块和Groovy模块。

站点:http://drools.org/
Drools- 商务逻辑框架的选择:

http://www.matrix.org.cn/resource/article/44/44046_Drools+Framework+Business.html

在你的企业级java应用中使用Drools:

http://www.matrix.org.cn/resource/article/43/43782_Drools.html

详解Java规则引擎与其API

http://www.360doc.com/showWeb/0/0/19281.aspx

Ilog、Drools、Jess规则引擎的Rule Language 比对

http://it.13520.org/ArticleView/2005-9-5/Article_View_46215.Htm


二、Mandarax

Mandarax是一个规则引擎的纯Java实现。它支持多类型的事实和基于反映的规则,数据库,EJB等等,

支持XML标准(RuleML 0.8)。它提供了一个兼容J2EE的使用反向链接的接口引擎。

站点:http://mandarax.sourceforge.net/


三、JESS

http://kb.youkuaiyun.com/java/Articles/200509/8c98bec5-aa3e-4307-8a2c-bed0ca3a7bcc.html


四、JLisa

JLisa是一个利用java构建商业规则的强大框架。它实现了JSR94 Rule Engine API。

站点:http://jlisa.sourceforge.net/


五、OpenRules

OpenRules基于java完全开放源代码的商业规则管理框架。它有效的利用了MS Excel, Eclipse IDE 和其它java开源类库去构造,维护,部署,执行不同的复杂商业逻辑的规则引擎。

站点:http://openrules.com

六、JEOPS

JEOPS(The Java Embedded Object Production System)是一个基于Java的演绎法(Forward-Chaining)规则引擎.这个规则引擎被用于在Java 应用服务器,Java客户端程序,和Servlets中通过规则来提高它们的商业处理能力.

站点:http://sourceforge.net/projects/jeops/


七、InfoSapient

InfoSapient是一个开源的规则引擎.它设计用来表达,执行和维护在同一个公司中商业规则.InfoSapient基于纯Java开发,使用到MVC,Visitor,Strategy,Facade,Factory Method,Observer,Iterator等设计模式.


八、Prova language

Prova (from Prolog+Java) is a rule-based system for Java and agent scripting and information integration extending the Mandarax engine with a proper language syntax and enhanced semantics. The language breaks new ground in combining expressive and declarative programming. It combines natural syntax and typing of Java with Prolog-style rules and database wrappers. Java calls may include both constructor and method calls as wellas access to public variables in classes. Distributed and agent programming transported via JMS or JADE protocols is based on reaction rules specified in a natural syntax. The language makes it easy for agents to engage in concurrent conversations without starting new threads by using reaction and novel inline reaction rules in a very natural and ecoonomic syntax, directly capturing conversations as state machines.

站点:http://comas.soi.city.ac.uk/prova

九、Open Lexicon

Open Lexicon is a business rules and business process management tool that rapidly develops applications for transaction and process-based applications. It includes a business rules metadata repository, a business rules engine, and a comprehensive web-based UI for managing and testing the busines rules. It also includes process management tools for orchestrating complex interactions within business rules and business objects.

站点:http://openlexicon.org

十、Prova

A Language for Rule Based Java Scripting, Information Integration, and Agent Programming

站点:http://www.prova.ws/

十一、Euler

Euler is an inference engine supporting logic based proofs. It is a backward-chaining reasoner enhanced with Euler path detection. There is a 100% Java version, a C# version and a Python version.

站点:http://www.agfa.com/w3c/euler/
### Java 实现规则引擎进行消息推送 #### 使用 Drools 规则引擎实现消息推送 Drools 是一款功能强大的开源规则引擎,适用于复杂的业务逻辑处理。通过定义一系列规则文件并将其应用于特定的事实对象集合上,能够高效地执行基于条件的动作。 为了构建一个简单的Java应用程序来展示如何利用Drools完成HTTP POST请求触发的消息推送机制: 1. **引入依赖** 首先,在`pom.xml`中加入必要的Maven依赖项以便于项目能访问到Drools库以及支持JSON解析的相关工具包[^1]。 ```xml <dependencies> <!-- Drools --> <dependency> <groupId>org.drools</groupId> <artifactId>drools-core</artifactId> <version>7.68.0.Final</version> </dependency> <!-- JSON Parsing Library (Jackson) --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.13.0</version> </dependency> <!-- Other dependencies as needed... --> </dependencies> ``` 2. **创建规则文件** 接着编写`.drl`格式的规则文件用于描述当接收到指定类型的POST请求时应采取的操作。假设存在名为`pushMessageRule.drl`的规则集如下所示: ```plaintext package com.example.rules; import java.util.Map; global org.slf4j.Logger logger; rule "Push Message Based On MessageType" when $msg : Map( this["messageType"] == "ALERT" ) then String messageContent = (String)$msg.get("content"); logger.info("Received alert: {}", messageContent); // Here you can add code to perform actual push notification or other actions. end ``` 此规则表示如果传入的消息类型为 `ALERT` ,那么就记录日志并将内容打印出来;实际应用中此处可替换为调用第三方API发送通知等功能。 3. **开发服务端接口** 最后一步是在Spring Boot框架下建立RESTful Web Service 来接收外部发来的POST请求,并将这些数据作为事实传递给已加载好的规则实例去匹配相应的动作. ```java @RestController @RequestMapping("/api/v1/push") public class PushController { @Autowired private KieContainer kieContainer; @PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity<String> handlePost(@RequestBody Map<String,Object> msg){ try { KieSession session = kieContainer.newKieSession(); // Insert the incoming message into working memory of rule engine session.insert(msg); // Fire all rules that match with current facts int firedRulesCount = session.fireAllRules(); session.dispose(); return new ResponseEntity<>("Processed successfully", HttpStatus.OK); } catch(Exception e){ throw new RuntimeException(e.getMessage(),e); } } } ``` 上述代码片段展示了如何配置控制器方法以接受来自客户端提交的数据体(`Map<String, Object>`), 并将其插入工作内存供规则引擎评估。一旦有符合条件的规则被执行,则返回成功响应给调用者。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值