我的企業應用程序當前運行在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