訊息驅動批次規則引擎 (2)-規則元件

規則元件程式

package com.progria; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; import org.easyrules.annotation.Action; import org.easyrules.annotation.Condition; import org.easyrules.annotation.Priority; import org.easyrules.annotation.Rule; @Rule(name = "Friendship Rule", description = "Friends") public class FriendshipRule { private Properties actionResult = null; private String nameFriend = null; private int friendship = 0; public FriendshipRule(Properties actionResult) { super(); this.actionResult = actionResult; } @Condition public boolean checkRule() { return (friendship != 0); } @Action public void ruleAction() throws Exception { Properties dbProps = new Properties(); dbProps.put("user", "job1"); dbProps.put("password", "job1"); try { Connection dbConn = DriverManager.getConnection( "jdbc:derby:BatchRules;create=true", dbProps); dbConn.setAutoCommit(true); Statement sqlStatement = dbConn.createStatement(); sqlStatement .execute(String .format("INSERT INTO FriendList(nameFriend, isFriend, ageFriend) VALUES('%s', %d, %d)", this.nameFriend, 1, 0)); dbConn.close(); synchronized (this.actionResult) { this.actionResult.put("FriendshipRule", "1"); } } catch (SQLException e) { e.printStackTrace(); } } @Priority public int getPriority() { return 1; } public void setInput(String nameFriend, String friendshipString) { this.nameFriend = nameFriend; this.friendship = Integer.parseInt(friendshipString); } }

package com.progria; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; import org.easyrules.annotation.Action; import org.easyrules.annotation.Condition; import org.easyrules.annotation.Priority; import org.easyrules.annotation.Rule; @Rule(name = "Age Rule", description = "Young") public class AgeRule { private Properties actionResult = null; private String nameFriend = null; private int age = 100; public AgeRule(Properties actionResult) { super(); this.actionResult = actionResult; } @Condition public boolean checkRule() { return (age < 30); } @Action public void ruleAction() throws Exception { Properties dbProps = new Properties(); dbProps.put("user", "job1"); dbProps.put("password", "job1"); try { Connection dbConn = DriverManager.getConnection( "jdbc:derby:BatchRules;create=true", dbProps); dbConn.setAutoCommit(true); Statement sqlStatement = dbConn.createStatement(); sqlStatement .execute(String .format("UPDATE FriendList SET ageFriend=%d WHERE nameFriend='%s'", this.age, this.nameFriend)); dbConn.close(); synchronized (this.actionResult) { this.actionResult.put("AgeRule", "2"); } } catch (SQLException e) { e.printStackTrace(); } } @Priority public int getPriority() { return 2; } public void setInput(String nameFriend, String ageString) { this.nameFriend = nameFriend; this.age = Integer.parseInt(ageString); } }