diff options
Diffstat (limited to 'controlloop/m2/test/src/test/resources/appclcm/M2CLRulevUSPAPPCLCMGuardTemplate.drl')
-rw-r--r-- | controlloop/m2/test/src/test/resources/appclcm/M2CLRulevUSPAPPCLCMGuardTemplate.drl | 649 |
1 files changed, 0 insertions, 649 deletions
diff --git a/controlloop/m2/test/src/test/resources/appclcm/M2CLRulevUSPAPPCLCMGuardTemplate.drl b/controlloop/m2/test/src/test/resources/appclcm/M2CLRulevUSPAPPCLCMGuardTemplate.drl deleted file mode 100644 index 0e947c8e1..000000000 --- a/controlloop/m2/test/src/test/resources/appclcm/M2CLRulevUSPAPPCLCMGuardTemplate.drl +++ /dev/null @@ -1,649 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * m2/test - * ================================================================================ - * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.controlloop.p_${unique}; - -import org.drools.core.spi.KnowledgeHelper; - -import org.onap.policy.appclcm.AppcLcmDmaapWrapper; -import org.onap.policy.controlloop.VirtualControlLoopEvent; -import org.onap.policy.controlloop.ControlLoopEventStatus; -import org.onap.policy.controlloop.ControlLoopException; -import org.onap.policy.controlloop.ControlLoopNotification; -import org.onap.policy.controlloop.ControlLoopNotificationType; -import org.onap.policy.controlloop.VirtualControlLoopNotification; -import org.onap.policy.controlloop.compiler.ControlLoopCompiler; -import org.onap.policy.controlloop.policy.ControlLoop; -import org.onap.policy.controlloop.policy.ControlLoopPolicy; -import org.onap.policy.drools.core.PolicySession; -import org.onap.policy.drools.droolsinit.DroolsInitFeature; -import org.onap.policy.drools.system.PolicyController; -import org.onap.policy.drools.system.PolicyEngineConstants; -import org.onap.policy.guard.GuardContext; -import org.onap.policy.guard.PolicyGuardResponse; - -import org.onap.policy.m2.base.GuardAdjunct; -import org.onap.policy.m2.base.Transaction; -import org.onap.policy.m2.base.Util; -import org.onap.policy.m2.appclcm.AppcLcmOperation; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.ByteArrayInputStream; -import java.net.URLDecoder; -import java.time.Instant; -import java.util.LinkedList; -import java.util.Properties; - -declare Params - closedLoopControlName : String - controlLoopYaml : String - notificationTopic : String - operationTopic : String -end - -declare Context - logger : Logger - metricsLogger : Logger - auditLogger : Logger - policy : ControlLoopPolicy - guardContext : GuardContext - maxObjectCount : long - closedLoopControlName : String - controlLoopYaml : String - notificationTopic : String - operationTopic : String -end - -// this object is to provide support for timeouts -// due to a bug in drools' built in timers -declare ControlLoopTimer - closedLoopControlName : String - requestId : String - delay : String - expired : boolean - //timerType is the type of timer: either "ClosedLoop" or "Operation" - timerType : String -end - -function void sendNotification(Context context, - KnowledgeHelper drools, - ControlLoopNotification notification) -{ - if (notification != null) - { - notification.setFrom("policy"); - notification.setPolicyName(drools.getRule().getName()); - notification.setPolicyScope("${policyScope}"); - notification.setPolicyVersion("${policyVersion}"); - - Util.deliver(context.getNotificationTopic(), notification); - } -} - -function Context setParams(Context context) -{ - context.setClosedLoopControlName("${closedLoopControlName}"); - context.setControlLoopYaml("${controlLoopYaml}"); - context.setNotificationTopic("${notificationTopic}"); - context.setOperationTopic("${operationTopic}"); - context.setPolicy(ControlLoopCompiler.compile - (new ByteArrayInputStream - (URLDecoder.decode(context.getControlLoopYaml(), - "UTF-8").getBytes()), null)); - return context; -} - -rule "${policyName}.INIT" - salience 100 - when - $init : DroolsInitFeature.Init() - not(Context(closedLoopControlName == "${closedLoopControlName}")) - then - { - Logger logger = LoggerFactory.getLogger("${policyName}.drl"); - Logger metricsLogger = LoggerFactory.getLogger("com.att.eelf.metrics"); - Logger auditLogger = LoggerFactory.getLogger("com.att.eelf.audit"); - logger.info("This is ${policyName}.INIT"); - metricsLogger.info("{} {} {}", Instant.now(), drools.getRule().getName(), drools.getRule().getPackage()); - - Context context = new Context(); - context.setLogger(logger); - // add metricsLogger to context - context.setMetricsLogger(metricsLogger); - context.setAuditLogger(auditLogger); - context = setParams(context); - - PolicySession session = PolicySession.getCurrentSession(); - - context.setGuardContext(new GuardContext(session)); - - try - { - // initially, set a default maximum object count of 1000 - context.setMaxObjectCount(1000); - - // 'IllegalArgumentException' if the properties can't be found - PolicyController policyController = - Util.getPolicyController(session); - Properties properties = policyController.getProperties(); - - String maxObjectCount = - properties.getProperty("overload.maxObjectCount","").trim(); - if (!maxObjectCount.isEmpty()) - { - // A value has been specified in the properties file -- - // 'NumberFormatException' if the value is bad - context.setMaxObjectCount(Long.valueOf(maxObjectCount)); - } - } - catch (IllegalArgumentException e) - { - logger.error("${policyName}.INIT: Can't locate properties", e); - } - catch (Exception e) - { - logger.error - ("${policyName}.INIT: Can't decode 'overload.maxObjectCount'", e); - } - - insert(context); - } -end - -/* - * This rule fires when a drools update occurs. Its purpose is to - * update the expandable parameters of the context object to reflect - * the new state of the policy. - */ -rule "${policyName}.REINIT" - salience 100 - when - $init : DroolsInitFeature.Init() - $context : Context(closedLoopControlName == "${closedLoopControlName}" - && (controlLoopYaml != "${controlLoopYaml}" - || notificationTopic != "${notificationTopic}" || operationTopic != "${operationTopic}")) - then - { - Logger logger = $context.getLogger(); - // get metricsLogger from context - Logger metricsLogger = $context.getMetricsLogger(); - logger.info("This is ${policyName}.REINIT"); - metricsLogger.info("{} {} {}", Instant.now(), drools.getRule().getName(), drools.getRule().getPackage()); - - $context = setParams($context); - - modify($context) - { - } - } -end - -/* - * Fires when an incoming 'ONSET' event occurs, without an associated - * 'Transaction' instance - */ -rule "${policyName}.EVENT.NO-TRANSACTION" - when - $context : Context(closedLoopControlName == "${closedLoopControlName}") - $event : VirtualControlLoopEvent(closedLoopControlName == $context.closedLoopControlName, closedLoopEventStatus == ControlLoopEventStatus.ONSET) - not(Transaction(closedLoopControlName == $context.closedLoopControlName, requestId == $event.requestId)) - then - { - Logger logger = $context.getLogger(); - Logger metricsLogger = $context.getMetricsLogger(); - Logger auditLogger = $context.getAuditLogger(); - logger.info("This is ${policyName}.EVENT.NO-TRANSACTION"); - metricsLogger.info("{} {} {}", Instant.now(), drools.getRule().getName(), drools.getRule().getPackage()); - - // check for overload - if (drools.getWorkingMemory().getFactCount() > - $context.getMaxObjectCount()) - { - // send 'Overload' notification - ControlLoopNotification notification = - new VirtualControlLoopNotification($event); - notification.setNotification(ControlLoopNotificationType.REJECTED); - notification.setMessage("Overload in progress"); - sendNotification($context, drools, notification); - - // discard event, and return - auditLogger.info(Instant.now() + "Event End: FAIL: Overload in progress"); - retract($event); - return; - } - - Transaction transaction = - new Transaction(drools.getWorkingMemory(), - $context.getClosedLoopControlName(), - $event.getRequestId(), - $context.getPolicy()); - - // - // Setup the Overall Control Loop timer - // - ControlLoopTimer clTimer = - new ControlLoopTimer($event.getClosedLoopControlName(), $event.getRequestId().toString(), - transaction.getTimeout(), false, "ClosedLoop"); - - insert(clTimer); - - // check that the event and a&ai is valid - if (!transaction.isControlLoopEventValid($event) || - !AppcLcmOperation.isAaiValid(transaction, $event)) { - ControlLoopNotification notification = - new VirtualControlLoopNotification($event); - notification.setNotification(ControlLoopNotificationType.REJECTED); - notification.setMessage(transaction.getNotificationMessage()); - sendNotification($context, drools, notification); - - // discard event, and return - auditLogger.info(Instant.now() + "Event End: FAIL: Invalid event/AAI"); - retract($event); - return; - } - - // this adjunct needs to be in place before the first 'Operation' - // is created - GuardAdjunct.create(transaction, $context.getGuardContext()); - insert(transaction); - - // this creates the initial 'Operation' - transaction.setControlLoopEvent($event); - retract($event); - - // send out an active notification - ControlLoopNotification notification = transaction.getNotification(null); - notification.setNotification(ControlLoopNotificationType.ACTIVE); - sendNotification($context, drools, notification); - } -end - -/* - * Fires when 'ONSET' and 'ABATED' events have occured before an appc request was processed - */ -rule "${policyName}.TRANSACTION.ABATED.NO-REQUEST" - when - $context : Context(closedLoopControlName == "${closedLoopControlName}") - $transaction: Transaction(closedLoopControlName == $context.closedLoopControlName, state != AppcLcmOperation.LCM_PENDING && - state != "COMPLETE" && state != AppcLcmOperation.LCM_COMPLETE) - $event : VirtualControlLoopEvent(closedLoopControlName == $context.closedLoopControlName, closedLoopEventStatus == ControlLoopEventStatus.ABATED, requestId == $transaction.requestId) - then - { - Logger logger = $context.getLogger(); - Logger metricsLogger = $context.getMetricsLogger(); - logger.info("${policyName}.TRANSACTION.ABATED.NO-REQUEST"); - metricsLogger.info("{} {} {}", Instant.now(), drools.getRule().getName(), drools.getRule().getPackage()); - - $transaction.incomingMessage($event); - modify($transaction) - { - } - } -end - -rule "${policyName}.TRANSACTION.LCM.GUARD_PENDING.RESPONSE" - when - $context : Context(closedLoopControlName == "${closedLoopControlName}") - $transaction: Transaction(closedLoopControlName == $context.closedLoopControlName, state == AppcLcmOperation.LCM_GUARD_PENDING) - $response : PolicyGuardResponse(requestId == $transaction.getRequestId()) - then - { - Logger logger = $context.getLogger(); - Logger metricsLogger = $context.getMetricsLogger(); - logger.info("This is ${policyName}.TRANSACTION.LCM.GUARD_PENDING.RESPONSE"); - metricsLogger.info("{} {} {}", Instant.now(), drools.getRule().getName(), drools.getRule().getPackage()); - sendNotification($context, drools, - $transaction.incomingMessage($response)); - // - // insert operation timeout object - // - ControlLoopTimer opTimer = - new ControlLoopTimer($transaction.getClosedLoopControlName(), $transaction.getRequestId().toString(), - $transaction.getOperationTimeout(), false, "Operation"); - insert(opTimer); - - modify($transaction) - { - } - retract($response); - } -end - -/* - * Initial state for LCM operations (Restart/Rebuild/Migrate) - */ -rule "${policyName}.TRANSACTION.LCM.BEGIN" - when - $context : Context(closedLoopControlName == "${closedLoopControlName}") - $transaction : Transaction(closedLoopControlName == $context.closedLoopControlName, state == AppcLcmOperation.LCM_BEGIN) - ControlLoopTimer(closedLoopControlName == $context.closedLoopControlName, requestId == $transaction.getRequestId().toString(), !expired, timerType == "Operation") - not(VirtualControlLoopEvent(closedLoopControlName == $context.closedLoopControlName, closedLoopEventStatus == ControlLoopEventStatus.ABATED, requestId == $transaction.requestId)) - then - { - Logger logger = $context.getLogger(); - Logger metricsLogger = $context.getMetricsLogger(); - logger.info("This is ${policyName}.TRANSACTION.LCM.BEGIN"); - metricsLogger.info("{} {} {}", Instant.now(), drools.getRule().getName(), drools.getRule().getPackage()); - Object request = null; - try { - request = $transaction.getCurrentOperation().getRequest(); - } catch (ControlLoopException e) { - logger.error("request could not be formed due to: "+e.getMessage()); - return; - } - Util.deliver($context.getOperationTopic(), request); - - // send notification - sendNotification($context, drools, - $transaction.initialOperationNotification()); - - modify($transaction) - { - } - } -end - -/* - * We are waiting for an LCM response, and one has occurred - * (it may or may not be the one we were expecting) - */ -rule "${policyName}.TRANSACTION.LCM.PENDING.RESPONSE" - when - $context : Context(closedLoopControlName == "${closedLoopControlName}") - $transaction: Transaction(closedLoopControlName == $context.closedLoopControlName, state == AppcLcmOperation.LCM_PENDING) - $opTimer : ControlLoopTimer(closedLoopControlName == $context.closedLoopControlName, requestId == $transaction.getRequestId().toString(), !expired, timerType == "Operation") - $response : AppcLcmDmaapWrapper(body.output.commonHeader.requestId == $transaction.getRequestId()) - then - { - Logger logger = $context.getLogger(); - Logger metricsLogger = $context.getMetricsLogger(); - logger.info("This is ${policyName}.TRANSACTION.LCM.PENDING.RESPONSE"); - metricsLogger.info("{} {} {}", Instant.now(), drools.getRule().getName(), drools.getRule().getPackage()); - ControlLoopNotification notification = $transaction.incomingMessage($response); - sendNotification($context, drools, notification); - if (notification != null) { - retract($opTimer); - } - modify($transaction) - { - } - retract($response); - } -end - -/* -* -* This is the timer that manages the timeout for an individual operation. -* Due to a bug in the drools code, the drools timer needed to be split from most of the objects in the when clause -* -*/ -rule "${policyName}.LCM.OPERATION.TIMER.FIRED" - timer (expr: $timeout) - when - $context : Context(closedLoopControlName == "${closedLoopControlName}") - $opTimer : ControlLoopTimer(closedLoopControlName == $context.closedLoopControlName, $timeout : delay, !expired, timerType == "Operation") - then - Logger logger = $context.getLogger(); - Logger metricsLogger = $context.getMetricsLogger(); - Logger auditLogger = $context.getAuditLogger(); - metricsLogger.info("{} {} {}", Instant.now(), drools.getRule().getName(), drools.getRule().getPackage()); - modify($opTimer){setExpired(true)}; - end - -/* - * We are waiting for an LCM response, but the timer expired before - * receiving one. - */ -rule "${policyName}.TRANSACTION.LCM.PENDING.TIMEOUT" - when - $context : Context(closedLoopControlName == "${closedLoopControlName}") - $transaction: Transaction(closedLoopControlName == $context.closedLoopControlName, state == AppcLcmOperation.LCM_PENDING, $timeout : getOperationTimeout()) - $opTimer : ControlLoopTimer(closedLoopControlName == $context.closedLoopControlName, requestId == $transaction.getRequestId().toString(), expired, timerType == "Operation") - then - { - Logger logger = $context.getLogger(); - Logger metricsLogger = $context.getMetricsLogger(); - logger.info("This is ${policyName}.TRANSACTION.LCM.PENDING.TIMEOUT: " - + $transaction.getOperationTimeout()); - metricsLogger.info("{} {} {}", Instant.now(), drools.getRule().getName(), drools.getRule().getPackage()); - sendNotification($context, drools, $transaction.timeout()); - retract($opTimer); - modify($transaction) - { - } - } -end - -rule "${policyName}.TRANSACTION.LCM.PENDING.ERROR" - when - $context : Context(closedLoopControlName == "${closedLoopControlName}") - $transaction: Transaction(closedLoopControlName == $context.closedLoopControlName, state == AppcLcmOperation.LCM_ERROR) - $timers : LinkedList() - from collect (ControlLoopTimer(closedLoopControlName == $context.closedLoopControlName, requestId == $transaction.getRequestId().toString(), timerType == "Operation")) - then - { - Logger logger = $context.getLogger(); - Logger metricsLogger = $context.getMetricsLogger(); - logger.info("This is ${policyName}.TRANSACTION.LCM.ERROR"); - metricsLogger.info("{} {} {}", Instant.now(), drools.getRule().getName(), drools.getRule().getPackage()); - $transaction.processError(); - for (Object timer : $timers) { - retract(timer); - } - modify($transaction) - { - } - } -end - -/* - * We are in the 'LCM_COMPLETE' state, meaning no operations are in progress, - * and no 'ABATED' message is expected so the transaction can complete. - */ -rule "${policyName}.TRANSACTION.COMPLETE.NOT-ABATED" - when - $context : Context(closedLoopControlName == "${closedLoopControlName}", getPolicy().getControlLoop().getAbatement() == false) - $transaction: Transaction(closedLoopControlName == $context.closedLoopControlName, state == "COMPLETE") - $clTimer : ControlLoopTimer(closedLoopControlName == $context.closedLoopControlName, requestId == $transaction.getRequestId().toString(), timerType == "ClosedLoop") - then - { - Logger logger = $context.getLogger(); - Logger metricsLogger = $context.getMetricsLogger(); - Logger auditLogger = $context.getAuditLogger(); - logger.info("This is ${policyName}.TRANSACTION.COMPLETE.NOT-ABATED"); - metricsLogger.info("{} {} {}", Instant.now(), drools.getRule().getName(), drools.getRule().getPackage()); - auditLogger.info(Instant.now() + " Event End: SUCCESS: NOT-ABATED"); - retract($transaction); - retract($clTimer); - $transaction.cleanup(); - - sendNotification($context, drools, $transaction.finalNotification()); - } -end - -/* - * We are in the 'COMPLETE' state, meaning no operations are in progress, - * and we have received an 'ABATED' message. - */ -rule "${policyName}.TRANSACTION.COMPLETE.ABATED" - when - $context : Context(closedLoopControlName == "${closedLoopControlName}", getPolicy().getControlLoop().getAbatement() == true) - $transaction: Transaction(closedLoopControlName == $context.closedLoopControlName, state == "COMPLETE") - $event : VirtualControlLoopEvent(closedLoopControlName == $context.closedLoopControlName, closedLoopEventStatus == ControlLoopEventStatus.ABATED, requestId == $transaction.requestId) - $clTimer : ControlLoopTimer(closedLoopControlName == $context.closedLoopControlName, requestId == $transaction.getRequestId().toString(), timerType == "ClosedLoop") - then - { - Logger logger = $context.getLogger(); - Logger metricsLogger = $context.getMetricsLogger(); - Logger auditLogger = $context.getAuditLogger(); - logger.info("This is ${policyName}.TRANSACTION.COMPLETE.ABATED"); - metricsLogger.info("{} {} {}", Instant.now(), drools.getRule().getName(), drools.getRule().getPackage()); - auditLogger.info(Instant.now() + "Event End: SUCCESS: ABATED"); - retract($event); - retract($transaction); - retract($clTimer); - $transaction.cleanup(); - - sendNotification($context, drools, $transaction.finalNotification()); - } -end - -/* - * We are in the 'COMPLETE' state, meaning no operations are in progress, - * and the overall transaction failed, so no ABATED message is expected. - */ -rule "${policyName}.TRANSACTION.COMPLETE.FAILED" - when - $context : Context(closedLoopControlName == "${closedLoopControlName}") - $transaction: Transaction(closedLoopControlName == $context.closedLoopControlName, state == "COMPLETE", finalResultFailure) - $clTimer : ControlLoopTimer(closedLoopControlName == $context.closedLoopControlName, requestId == $transaction.getRequestId().toString(), timerType == "ClosedLoop") - then - { - Logger logger = $context.getLogger(); - Logger metricsLogger = $context.getMetricsLogger(); - Logger auditLogger = $context.getAuditLogger(); - logger.info("This is ${policyName}.TRANSACTION.COMPLETE.FAILED"); - metricsLogger.info("{} {} {}", Instant.now(), drools.getRule().getName(), drools.getRule().getPackage()); - auditLogger.info(Instant.now() + "Transaction End: FAIL: Final Result Failure"); - retract($transaction); - retract($clTimer); - $transaction.cleanup(); - - sendNotification($context, drools, $transaction.finalNotification()); - } -end - -/* -* -* This is the timer that manages the overall control loop timeout. -* Due to a bug in the drools code, the drools timer needed to be split from most of the objects in the when clause -* -*/ -rule "${policyName}.CLOSED_LOOP.TIMER.FIRED" - timer (expr: $timeout) - when - $context : Context(closedLoopControlName == "${closedLoopControlName}") - $clTimer : ControlLoopTimer(closedLoopControlName == $context.closedLoopControlName, $timeout : delay, !expired, timerType == "ClosedLoop") - then - Logger logger = $context.getLogger(); - Logger metricsLogger = $context.getMetricsLogger(); - logger.info("This is ${policyName}.CLOSED_LOOP.TIMER.FIRED"); - metricsLogger.info("{} {} {}", Instant.now(), drools.getRule().getName(), drools.getRule().getPackage()); - modify($clTimer){setExpired(true)}; - end - -/* - * The overall transaction has timed out. - */ -rule "${policyName}.TRANSACTION.TIMEOUT" - when - $context : Context(closedLoopControlName == "${closedLoopControlName}") - $transaction: Transaction(closedLoopControlName == $context.closedLoopControlName) - $clTimer : ControlLoopTimer(closedLoopControlName == $context.closedLoopControlName, requestId == $transaction.getRequestId().toString(), expired, timerType == "ClosedLoop") - $opTimers : LinkedList() - from collect (ControlLoopTimer(closedLoopControlName == $context.closedLoopControlName, requestId == $transaction.getRequestId().toString(), timerType == "Operation")) - then - { - Logger logger = $context.getLogger(); - Logger metricsLogger = $context.getMetricsLogger(); - Logger auditLogger = $context.getAuditLogger(); - logger.info("This is ${policyName}.TRANSACTION.TIMEOUT"); - metricsLogger.info("{} {} {}", Instant.now(), drools.getRule().getName(), drools.getRule().getPackage()); - auditLogger.info(Instant.now() + "Transaction End: FAIL: Transaction Timeout"); - retract($transaction); - retract($clTimer); - // Drools does not support generics, so the time of the objects in opTimers - // can't be set to OperationTimer. Therefore, timer must be an Object. - for (Object timer : $opTimers) { - retract(timer); - } - $transaction.cleanup(); - $transaction.clTimeout(); - - sendNotification($context, drools, $transaction.finalNotification()); - } -end - -/* ============================================================ */ - -/* - * This rule is an audit runs at a low priority, and cleans up any unclaimed - * 'ControlLoopEvent' instances. The assumption is that all other rules are - * structured so that incoming messages will be processed, and retracted - * from Drools memory (whether or not they are retained within the - * transaction). - */ -rule "${policyName}.UNCLAIMED-EVENT" - salience -1000 - when - $context : Context() - $event : VirtualControlLoopEvent() - then - { - Logger logger = $context.getLogger(); - Logger auditLogger = $context.getAuditLogger(); - logger.debug("${policyName}.UNCLAIMED-EVENT: " + $event); - auditLogger.info(Instant.now() + "Event End: FAIL: UNCLAIMED-EVENT - See error log"); - retract($event); - } -end - -/* - * This rule is an audit runs at a low priority, and cleans up any unclaimed - * 'PolicyGuardResponse' instances. The assumption is that all other rules are - * structured so that incoming messages will be processed, and retracted - * from Drools memory (whether or not they are retained within the - * transaction). - */ -rule "${policyName}.UNCLAIMED-POLICY-GUARD-RESPONSE" - salience -1000 - when - $context : Context() - $response : PolicyGuardResponse() - then - { - Logger logger = $context.getLogger(); - logger.error("${policyName}.UNCLAIMED-POLICY-GUARD-RESPONSE: " - + $response); - retract($response); - } -end - -/* - * This rule is an audit runs at a low priority, and cleans up any unclaimed - * 'Response' instances. The assumption is that all other rules are - * structured so that incoming messages will be processed, and retracted - * from Drools memory (whether or not they are retained within the - * transaction). - */ -rule "${policyName}.UNCLAIMED-LCM-RESPONSE" - salience -1000 - when - $context : Context() - $response : AppcLcmDmaapWrapper() - then - { - Logger logger = $context.getLogger(); - logger.error("${policyName}.UNCLAIMED-LCM-RESPONSE: " + $response); - retract($response); - } -end |