我的企业应用程序当前运行在Weblogic 10.3.4,Java 1.6和Spring 2.0.8上。这是一个最近的升级,因此Spring尚未更新,并且一些Java代码库仍旧处于旧版1.4风格。Java数据库驱动业务规则 - 设计思想?
目前我们使用propriatory规则引擎来运行我们的业务规则。然而,由于我们不使用任何推理引擎功能,所以这是过分的,我们不能再证明许可成本。该计划是编写一个数据库驱动的规则引擎。
每个表单请求都会有任何数量的关联规则,这些规则将使用几个基本的数据库表进行配置。
到目前为止,我的设计是数据库中定义的每个规则都将通过Spring映射到Singleton无状态Spring bean。给定一个表单状态,每个规则将返回一个Result respose对象。见下面的代码片段:
//get List of rules for form from database
List<RuleConfiguration> rules = RulesService.getRulesForFormRuleset(formType, filingMethod, rsName, document);
IssueDocument issues = new IssueDocumentImpl();
for (RuleConfiguration ruleConfig : rules) {
//create a rule instance from the Spring Bean Factory
Rule rule = (Rule) beanFactory.getBean(ruleConfig.getRule().getRuleBeanName());
RulesIssue issue = rule.runRule(document, ruleConfig);
if (issue != null) { //Issue has been populated rule must have fired
issues.addNewIssue(issue);
}
}
return issues;
这听起来像是一个明智的解决方案吗?我非常希望实施一个“轻触式”的解决方案,以避免EJB,因为最终必须编写超过500条规则。我主要担心的是,因为这些都是单身人士,并且对我的“规则引擎”会有很大的需求,我是否需要考虑某种类型的bean池?任何其他反馈将是最受欢迎的。如果你愿意,可以撕碎我的碎片 - 我可以接受它!
很多谢谢
为什么重新发明轮子而不是使用开源规则引擎? – CoolBeans 2011-04-05 22:23:34
正如你所知,“专有”通常意味着“我们拥有并自己定制的系统” – 2011-04-05 22:31:50
也许他们不想将几个未知的,可能的(可能)未被记录的黑盒逻辑引入到他们的基础设施中,他们需要的是一个类名称列表,其中包含一些元数据过滤功能,可以迭代。 – 2011-04-05 22:35:30