CREATE TABLE APLUS_RULE (
   RID VARCHAR(30) NOT NULL,
   NAME VARCHAR(150) NOT NULL,
+  CTRLLOOP VARCHAR(150) NOT NULL,
   DESCRIPTION VARCHAR(4000) NULL,
   ENABLE SMALLINT NOT NULL,
   TEMPLATEID BIGINT NOT NULL,
   UNIQUE (NAME)
 );
 
+CREATE INDEX IDX_APLUS_RULE_NAME ON APLUS_RULE (NAME);
+CREATE INDEX IDX_APLUS_RULE_CTRLLOOP ON APLUS_RULE (CTRLLOOP);
 CREATE INDEX IDX_APLUS_RULE_ENABLE ON APLUS_RULE (ENABLE);
 CREATE INDEX IDX_APLUS_RULE_TEMPLATEID ON APLUS_RULE (TEMPLATEID);
 CREATE INDEX IDX_APLUS_RULE_ENGINEID ON APLUS_RULE (ENGINEID);
 
     private int enabled;\r
     @JsonProperty(value="ruleid")\r
     private String ruleId;\r
+    @JsonProperty(value = "loopcontrolname")\r
+    private String loopControlName;\r
 }\r
 
 public abstract class CorrelationRuleDao {\r
 \r
     @GetGeneratedKeys\r
-    @SqlUpdate("INSERT INTO APLUS_RULE  (NAME,DESCRIPTION,ENABLE,TEMPLATEID,ENGINETYPE,CREATOR,UPDATOR,PARAMS,CONTENT ,VENDOR,CREATETIME,UPDATETIME,ENGINEID,PACKAGE,RID) VALUES (:name,:description,:enabled,:templateID,:engineType,:creator,:modifier,:params,:content,:vendor,:createTime,:updateTime,:engineID,:packageName,:rid)")\r
+    @SqlUpdate("INSERT INTO APLUS_RULE  (NAME,CTRLLOOP,DESCRIPTION,ENABLE,TEMPLATEID,ENGINETYPE,CREATOR,UPDATOR,PARAMS,CONTENT ,VENDOR,CREATETIME,UPDATETIME,ENGINEID,PACKAGE,RID) VALUES (:name,:closedControlLoopName,:description,:enabled,:templateID,:engineType,:creator,:modifier,:params,:content,:vendor,:createTime,:updateTime,:engineID,:packageName,:rid)")\r
     protected abstract String addRule(@BindBean CorrelationRule correlationRule);\r
 \r
-    @SqlUpdate("UPDATE APLUS_RULE SET DESCRIPTION=:description,ENABLE=:enabled,CONTENT=:content,UPDATOR=:modifier,UPDATETIME=:updateTime, PACKAGE=:packageName WHERE RID=:rid")\r
+    @SqlUpdate("UPDATE APLUS_RULE SET CTRLLOOP=:closedControlLoopName,DESCRIPTION=:description,ENABLE=:enabled,CONTENT=:content,UPDATOR=:modifier,UPDATETIME=:updateTime, PACKAGE=:packageName WHERE RID=:rid")\r
     protected abstract int updateRuleByRid(@BindBean CorrelationRule correlationRule);\r
 \r
     @SqlUpdate("DELETE FROM APLUS_RULE WHERE RID=:rid")\r
 
         correlationRule.setContent(resultSet.getString("content"));\r
         correlationRule.setVendor(resultSet.getString("vendor"));\r
         correlationRule.setPackageName(resultSet.getString("package"));\r
+        correlationRule.setClosedControlLoopName(resultSet.getString("ctrlloop"));\r
         return correlationRule;\r
     }\r
 \r
 
         if (ruleTemp != null) {\r
             throw new CorrelationException("A rule with the same name already exists.");\r
         }\r
-        String packageName = deployRule2Engine(correlationRule, ruleCreateRequest.getLoopControlName());\r
+        String packageName = deployRule2Engine(correlationRule);\r
         correlationRule.setPackageName(packageName);\r
         CorrelationRule result = null;\r
         try {\r
         int oldEnabled = oldCorrelationRule.getEnabled();\r
         String newDes = newCorrelationRule.getDescription();\r
         String oldDes = oldCorrelationRule.getDescription();\r
-        if (newContent.equals(oldContent) && newEnabled == oldEnabled && newDes.equals(oldDes)) {\r
+        String oldControlLoop = oldCorrelationRule.getClosedControlLoopName();\r
+        String newControlLoop = newCorrelationRule.getClosedControlLoopName();\r
+        if (newContent.equals(oldContent) && newEnabled == oldEnabled\r
+                && newDes.equals(oldDes) && newControlLoop.equals(oldControlLoop)) {\r
             return false;\r
         }\r
         return true;\r
         correlationRule.setCreator(userName);\r
         correlationRule.setModifier(userName);\r
         correlationRule.setEnabled(ruleCreateRequest.getEnabled());\r
+        correlationRule.setClosedControlLoopName(ruleCreateRequest.getLoopControlName());\r
         return correlationRule;\r
     }\r
 \r
         correlationRule.setUpdateTime(new Date());\r
         correlationRule.setModifier(modifier);\r
         correlationRule.setName(ruleName);\r
+        correlationRule.setClosedControlLoopName(ruleUpdateRequest.getLoopControlName());\r
         return correlationRule;\r
     }\r
 \r
         return "";\r
     }\r
 \r
-    private String deployRule2Engine(CorrelationRule correlationRule, String loopControlName)\r
-            throws CorrelationException {\r
-        if (engineWarpper.checkRuleFromEngine(correlationRules2CheckRule(correlationRule)) && (\r
-                correlationRule.getEnabled() == RuleMgtConstant.STATUS_RULE_OPEN)) {\r
-            return engineWarpper.deployEngine(correlationRules2DeployRule(correlationRule, loopControlName));\r
-        }\r
-        return "";\r
-    }\r
-\r
     public RuleQueryListResponse getCorrelationRuleByCondition(\r
             RuleQueryCondition ruleQueryCondition) throws CorrelationException {\r
         List<CorrelationRule> correlationRule = correlationRuleQueryDao\r
         CorrelationDeployRule4Engine correlationDeployRule4Engine = new CorrelationDeployRule4Engine();\r
         correlationDeployRule4Engine.setContent(correlationRule.getContent());\r
         correlationDeployRule4Engine.setEngineId(correlationRule.getEngineID());\r
-        return correlationDeployRule4Engine;\r
-    }\r
-\r
-    private CorrelationDeployRule4Engine correlationRules2DeployRule(\r
-            CorrelationRule correlationRule, String loopControlName) {\r
-        CorrelationDeployRule4Engine correlationDeployRule4Engine = new CorrelationDeployRule4Engine();\r
-        correlationDeployRule4Engine.setContent(correlationRule.getContent());\r
-        correlationDeployRule4Engine.setEngineId(correlationRule.getEngineID());\r
-        correlationDeployRule4Engine.setLoopControlName(loopControlName);\r
+        correlationDeployRule4Engine.setLoopControlName(correlationRule.getClosedControlLoopName());\r
         return correlationDeployRule4Engine;\r
     }\r
 \r
 
         expect(resultSet.getString("content")).andReturn("");\r
         expect(resultSet.getString("vendor")).andReturn("");\r
         expect(resultSet.getString("package")).andReturn("");\r
+        expect(resultSet.getString("ctrlloop")).andReturn("");\r
         PowerMock.replay(resultSet);\r
         mapper.map(0, resultSet, null);\r
         PowerMock.verify(resultSet);\r
 
         oldCorrelationRule.setContent("content");\r
         oldCorrelationRule.setPackageName("testName");\r
         oldCorrelationRule.setEnabled(1);\r
-        RuleUpdateRequest ruleUpdateRequest = createRuleUpdateRequest("rule_1", "des2", "contetnt2", 1);\r
+        oldCorrelationRule.setClosedControlLoopName("cl-name");\r
+        RuleUpdateRequest ruleUpdateRequest = createRuleUpdateRequest("rule_1", "cl-name", "des2", "contetnt2", 1);\r
 \r
         EasyMock.expect(correlationRuleDaoMock.queryRuleByRid("rule_1")).andReturn(oldCorrelationRule);\r
         EasyMock.expect(engineWrapperMock.deleteRuleFromEngine("testName")).andReturn(true);\r
         oldCorrelationRule.setContent("content");\r
         oldCorrelationRule.setPackageName("testName");\r
         oldCorrelationRule.setEnabled(1);\r
-        RuleUpdateRequest ruleUpdateRequest = createRuleUpdateRequest("rule_1", "des1", "content", 1);\r
+        oldCorrelationRule.setClosedControlLoopName("cl-name");\r
+        RuleUpdateRequest ruleUpdateRequest = createRuleUpdateRequest("rule_1", "cl-name", "des1", "content", 1);\r
 \r
         EasyMock.expect(correlationRuleDaoMock.queryRuleByRid("rule_1")).andReturn(oldCorrelationRule);\r
 \r
         return rcr;\r
     }\r
 \r
-    private RuleUpdateRequest createRuleUpdateRequest(String ruleId, String description, String content, int enabled) {\r
+    private RuleUpdateRequest createRuleUpdateRequest(String ruleId, String clName, String description,\r
+            String content, int enabled) {\r
         RuleUpdateRequest ruleUpdateRequest = new RuleUpdateRequest();\r
         ruleUpdateRequest.setRuleId(ruleId);\r
         ruleUpdateRequest.setDescription(description);\r
         ruleUpdateRequest.setContent(content);\r
         ruleUpdateRequest.setEnabled(enabled);\r
+        ruleUpdateRequest.setLoopControlName(clName);\r
         return ruleUpdateRequest;\r
     }\r
 \r