Author: deepak
Date: Tue Oct 17 11:52:14 2017
New Revision: 1812394
URL: http://svn.apache.org/viewvc?rev=1812394&view=rev
Log:
Improved: Added ability to disable seca rule (OFBIZ-9826)
We have enabled flag in ServiceEcaRule class, if its set false then seca rule
will not be executed.
But there is not way to disable seca.
We can add enabled flag in SECA definition to disable the existing seca rule.
Here is the proposal:
- Add new attribute on seca tag named enabled
- Default value will be true for this.
- If user want to disable existing OOTB seca rule, then user can define same
rule in custom component and set the enabled=false
Need to do some changes in code to honor the enabled attribute while loading
seca rule.
Also as per current flow if same seca rule is define more then once, system
will execute all the rule, ideally it should not execute same rule (same rule,
condition and action) if its defined more than one.
Modified:
ofbiz/ofbiz-framework/trunk/framework/service/dtd/service-eca.xsd
ofbiz/ofbiz-framework/trunk/framework/service/src/main/java/org/apache/ofbiz/service/eca/ServiceEcaRule.java
ofbiz/ofbiz-framework/trunk/framework/service/src/main/java/org/apache/ofbiz/service/eca/ServiceEcaUtil.java
Modified: ofbiz/ofbiz-framework/trunk/framework/service/dtd/service-eca.xsd
URL:
http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/service/dtd/service-eca.xsd?rev=1812394&r1=1812393&r2=1812394&view=diff
==============================================================================
--- ofbiz/ofbiz-framework/trunk/framework/service/dtd/service-eca.xsd (original)
+++ ofbiz/ofbiz-framework/trunk/framework/service/dtd/service-eca.xsd Tue Oct
17 11:52:14 2017
@@ -262,5 +262,13 @@ under the License.
</xs:restriction>
</xs:simpleType>
</xs:attribute>
+ <xs:attribute name="enabled" default="true">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="true"/>
+ <xs:enumeration value="false"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
</xs:attributeGroup>
</xs:schema>
Modified:
ofbiz/ofbiz-framework/trunk/framework/service/src/main/java/org/apache/ofbiz/service/eca/ServiceEcaRule.java
URL:
http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/service/src/main/java/org/apache/ofbiz/service/eca/ServiceEcaRule.java?rev=1812394&r1=1812393&r2=1812394&view=diff
==============================================================================
---
ofbiz/ofbiz-framework/trunk/framework/service/src/main/java/org/apache/ofbiz/service/eca/ServiceEcaRule.java
(original)
+++
ofbiz/ofbiz-framework/trunk/framework/service/src/main/java/org/apache/ofbiz/service/eca/ServiceEcaRule.java
Tue Oct 17 11:52:14 2017
@@ -55,6 +55,7 @@ public final class ServiceEcaRule implem
this.eventName = eca.getAttribute("event");
this.runOnFailure = "true".equals(eca.getAttribute("run-on-failure"));
this.runOnError = "true".equals(eca.getAttribute("run-on-error"));
+ this.enabled = !"false".equals(eca.getAttribute("enabled"));
for (Element element: UtilXml.childElementList(eca, "condition")) {
conditions.add(new ServiceEcaCondition(element, true, false));
@@ -199,9 +200,6 @@ public final class ServiceEcaRule implem
if (this.runOnError != other.runOnError) {
return false;
}
- if (this.enabled != other.enabled) {
- return false;
- }
return true;
} else {
Modified:
ofbiz/ofbiz-framework/trunk/framework/service/src/main/java/org/apache/ofbiz/service/eca/ServiceEcaUtil.java
URL:
http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/service/src/main/java/org/apache/ofbiz/service/eca/ServiceEcaUtil.java?rev=1812394&r1=1812393&r2=1812394&view=diff
==============================================================================
---
ofbiz/ofbiz-framework/trunk/framework/service/src/main/java/org/apache/ofbiz/service/eca/ServiceEcaUtil.java
(original)
+++
ofbiz/ofbiz-framework/trunk/framework/service/src/main/java/org/apache/ofbiz/service/eca/ServiceEcaUtil.java
Tue Oct 17 11:52:14 2017
@@ -147,6 +147,11 @@ public final class ServiceEcaUtil {
eventMap.put(eventName, rules);
}
}
+ //remove the old rule if found and keep the recent one
+ //This will prevent duplicate rule execution along with
enabled/disabled seca workflow
+ if (rules.remove(rule)) {
+ Debug.logWarning("Duplicate Service ECA [" + serviceName + "]
on [" + eventName + "] ", module);
+ }
rules.add(rule);
}
}