2011-04-05 26 views
0

我的企業應用程序當前運行在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池?任何其他反饋將是最受歡迎的。如果你願意,可以撕碎我的碎片 - 我可以接受它!

很多謝謝

+1

爲什麼重新發明輪子而不是使用開源規則引擎? – CoolBeans 2011-04-05 22:23:34

+0

正如你所知,「專有」通常意味着「我們擁有並自己定製的系統」 – 2011-04-05 22:31:50

+1

也許他們不想將幾個未知的,可能的(可能)未被記錄的黑盒邏輯引入到他們的基礎設施中,他們需要的是一個類名稱列表,其中包含一些元數據過濾功能,可以迭代。 – 2011-04-05 22:35:30

回答

0

很明顯,在這種事情上有兩個總的工作要做。

第一個是確定要觸發的規則,第二個是實際執行它們。

根據您的過濾和動態,規則查詢可能很容易被記憶,所以查找的成本可能接近於零。 500條規則並不是真的很多,當你想到它。

接下來是實際執行。如果你的所有東西都是單身人士,那麼你需要關心單身人士啓動,線程安全等。

基本上,只要確保你的每個規則都有一個生命週期。 「開始」「運行」「停止」。如果它是一個真正的單例,需要運行一些狀態來運行,那麼啓動和停止方法可能會有邏輯。如果在輸入上運行只是一點邏輯,那麼可能不需要啓動和停止(它們可以是空方法),或者它可以是單例,所以只需創建一個新實例,然後啓動它,並把它扔掉。

你沒有提到邏輯上的「規則」是什麼。它們可以很容易地成爲遵循此生命週期的簡單Java類。添加@SingeletonRule註解,或實現isSingleton,無論如何。

真的,在這個水平上,這種系統還是很少有火箭科學。魔術主要在元數據和實際創建的執行規則列表中。

簡單的規則系統很簡單。

+0

謝謝你。真正有用的,這個想法是保持儘可能簡單。真的喜歡註解的想法來解決生命週期問題。再次感謝 – Elwood 2011-04-06 15:13:13