Java数据库驱动的业务规则 - 设计思想?

时间:2011-04-05 22:17:37

标签: java spring ejb scalability rules

我的企业应用程序目前正在运行Weblogic 10.3.4,Java 1.6和Spring 2.0.8。这是最近的升级,因此Spring尚未更新,而且一些java代码库仍然是旧的1.4风格。

目前我们使用专有规则引擎来运行我们的业务规则。但是,由于我们没有使用任何推理引擎功能,因此我们无法再证明许可证成本,因此这样做太过分了。计划是编写一个数据库驱动的规则引擎。

每个表单请求都有与之关联的任意数量的规则,这些规则可以使用一些基本的数据库表进行配置。

到目前为止,我的设计是数据库中定义的每个规则都将通过Spring映射到Singleton Stateless 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池?任何其他反馈将是最受欢迎的。如果你愿意,请把我撕成碎片 - 我可以接受它!

非常感谢

1 个答案:

答案 0 :(得分:0)

显然,在这类事情上有两个重要的工作领域。

第一个是识别要触发的规则,第二个是实际执行它们。

根据您的过滤和动态,规则查询可能很容易被记忆,因此查找的成本可能接近零。当你想到它时,500条规则并不是很多。

接下来,是实际执行。如果你所有的东西都是单身,那么你需要关注单身人士的启动,线程安全等等。

基本上,只需确保每个规则都有生命周期。 “开始”“跑”“停止”。如果它是一个真正的单例,从运行到运行需要一些状态,那么start和stop方法可能会有逻辑。如果在输入上运行只是一些逻辑,那么可能没有必要启动和停止(它们可以是空方法),或者它根本就是单例,所以只需创建一个新实例,启动它把它扔掉。

你没有提到逻辑方面的“规则”是什么。它们很容易就是遵循此生命周期的简单Java类。添加@SingeletonRule注释,或实现isSingleton,无论如何。

真的,在这个级别上,这种系统几乎没有火箭科学。神奇主要在于元数据和实际创建执行规则列表。

简单的规则系统很简单。

相关问题