傳統開發中,業務邏輯硬編碼在 Java 程式中,導致:
if-else 巢狀地獄,難以維護規則引擎將業務規則從代碼中剝離,以聲明式方式編寫,支援熱更新、版本管理、業務人員可視化編輯,實現「業務驅動 IT」。
when 條件 then 動作 結構
kie-drools-wb-6.3.0.Final-tomcat7.war → 解壓重命名為 kie-drools 放入 webappsdrools-distribution-6.3.0.Final.zip → 解壓備用mysql-connector-java-5.1.38.jar 等 JAR 放入 tomcat/libH2Dialect 改為 MySQL5Dialectconf 目錄):配置 Bitronix 事務管理器日誌路徑jdbc/jbpm、連線池、MySQL 連線資訊)<Resource name="jdbc/jbpm" .../><Host> 下新增 <Valve className="org.kie.integration.tomcat.JACCValve"/>admin/manager-gui 角色用戶(如 tomcat/tomcat)CATALINA_OPTS、JAVA_OPTS(含 -Dorg.kie.demo=false 避免離線環境啟動超時)建立 drools schema,授權用戶(支援遠端 % 或指定 IP),首啟會自動建 39 張表。
./catalina.sh start
# 觀察 logs/catalina.out 無錯誤
# 瀏覽器訪問 https://IP:8080/kie-drools
# 登入 tomcat/tomcat


package org.sky.threshholdrulz;
public class PaymentInfo implements Serializable {
private int moneyAmount = 0;
private String decisionPath = "";
// getter/setter 省略
}

package org.sky.threshholdrulz;
rule "approval by manager"
when
$p : PaymentInfo(moneyAmount > 5000)
then
modify($p) { setDecisionPath("GM") };
end
rule "approval by general manager"
when
$p : PaymentInfo(moneyAmount <= 5000)
then
modify($p) { setDecisionPath("M") };
end

moneyAmount = 6000 → 預期 decisionPath = "GM"
.jar (KJAR)KieServices → KieContainer → KieSession → insert/fireAllRules
下集將講解: