Class DefaultRuleEngineKieModuleSwapper

    • Field Detail

      • WORKER_PRE_DESTROY_TIMEOUT

        public static final java.lang.String WORKER_PRE_DESTROY_TIMEOUT
        See Also:
        Constant Field Values
    • Constructor Detail

      • DefaultRuleEngineKieModuleSwapper

        public DefaultRuleEngineKieModuleSwapper()
    • Method Detail

      • switchKieModule

        public java.util.List<java.lang.Object> switchKieModule​(DroolsKIEModuleModel module,
                                                                KieContainerListener listener,
                                                                java.util.LinkedList<java.util.function.Supplier<java.lang.Object>> postTaskList,
                                                                boolean enableIncrementalUpdate,
                                                                RuleEngineActionResult result)
        Description copied from interface: RuleEngineKieModuleSwapper
        Swaps synchroneously to a new KieModule. It's a blocking call
        Specified by:
        switchKieModule in interface RuleEngineKieModuleSwapper
        Parameters:
        module - instance of the AbstractRulesModuleModel module
        listener - instance of KieContainerListener that fires when the switch of Kie Container is complete
        postTaskList - chain of post-task operations incapsulated as a linked list of Supplier instances
        enableIncrementalUpdate - flag, if true, enables for incremental updates of the rule engine kie module
        result - instance of RuleEngineActionResult to be used in cluster nodes notification
        Returns:
        the list that will contain the method execution results including the post-tasks
      • switchKieModuleAsync

        public void switchKieModuleAsync​(java.lang.String moduleName,
                                         KieContainerListener listener,
                                         java.util.List<java.lang.Object> resultsAccumulator,
                                         java.util.function.Supplier<java.lang.Object> resetFlagSupplier,
                                         java.util.List<java.util.function.Supplier<java.lang.Object>> postTaskList,
                                         boolean enableIncrementalUpdate,
                                         RuleEngineActionResult result)
        Description copied from interface: RuleEngineKieModuleSwapper
        Swaps asynchroneously to a new KieModule. It's a non-blocking call
        Specified by:
        switchKieModuleAsync in interface RuleEngineKieModuleSwapper
        Parameters:
        moduleName - kie module name
        listener - instance of KieContainerListener that fires when the switch of Kie Container is complete
        resultsAccumulator - the list that will contain the method execution results including the post-tasks
        resetFlagSupplier - the task to perform after the sync call finishes the task (whether it was successfull or not )
        postTaskList - chain of post-task operations incapsulated as a linked list of Supplier instances
        enableIncrementalUpdate - flag, if true, enables for incremental updates of the rule engine kie module
        result - instance of RuleEngineActionResult to be used in cluster nodes notification
      • waitForSwappingToFinish

        protected void waitForSwappingToFinish​(java.lang.String moduleName)
      • getNextWorkerName

        protected java.lang.String getNextWorkerName()
      • waitWhileWorkerIsRunning

        protected void waitWhileWorkerIsRunning​(java.lang.Thread worker)
      • beforeDestroy

        public void beforeDestroy()
        This method to be called by containers (like spring container) as destroy method
      • writeKModuleXML

        public void writeKModuleXML​(org.kie.api.builder.model.KieModuleModel module,
                                    org.kie.api.builder.KieFileSystem kfs)
        Description copied from interface: RuleEngineKieModuleSwapper
        Creates the XML representation of KieModuleModel and writes it to KieFileSystem
        Specified by:
        writeKModuleXML in interface RuleEngineKieModuleSwapper
        Parameters:
        module - instance of KieModuleModel
        kfs - instance of KieFileSystem
      • copyChanges

        protected void copyChanges​(org.drools.compiler.kie.builder.impl.MemoryKieModule trgKieModule,
                                   org.drools.compiler.kie.builder.impl.MemoryKieModule srcKieModule)
      • cloneForIncrementalCompilation

        protected org.drools.compiler.kie.builder.impl.MemoryKieModule cloneForIncrementalCompilation​(org.drools.compiler.kie.builder.impl.MemoryKieModule origKieModule,
                                                                                                      org.kie.api.builder.ReleaseId releaseId,
                                                                                                      org.kie.api.builder.model.KieModuleModel kModuleModel)
        Method creates the clone of the KieModule, having the specified ReleaseId. It creates the new instance of MemoryKieModule with given ReleaseId, KieModuleModel and new instance of MemoryFileSystem, copying from original KieModule all the relevant information (including file system content). (The #clone.mark(); is used to reset the map of modified files since last mark).
        Parameters:
        origKieModule - The instance of MemoryKieModule to clone
        releaseId - The new ReleaseId for a clone MemoryKieModule
        kModuleModel - instance of new KieModuleModel for a clone KieModule
        Returns:
        clone of MemoryKieModule with given ReleaseId
      • prepareIncrementalUpdate

        protected java.util.Optional<org.apache.commons.lang3.tuple.Pair<java.util.Collection<DroolsRuleModel>,​java.util.Collection<DroolsRuleModel>>> prepareIncrementalUpdate​(org.kie.api.builder.ReleaseId releaseId,
                                                                                                                                                                                      DroolsKIEBaseModel kieBase)
        Given the ReleaseId of the deployed KieModule the method returns the tuple consisting of rules to add/update and rules to delete. Before returning the tuple the method applies the strategy to decide whether the incremental update is applicable. If it is not applicable the empty Optional is returned
        Parameters:
        releaseId - ReleaseId of the currently deployed kie module
        kieBase - DroolsKIEBaseModel containing the set of rules to deploy
        Returns:
        a Pair containing the rules to add/update (left-hand-side) and the rules to delete (right-hand-side)
      • deployRulesIncrementally

        protected void deployRulesIncrementally​(org.kie.api.builder.ReleaseId releaseId,
                                                org.kie.api.builder.model.KieModuleModel kieModuleModel,
                                                org.kie.api.builder.KieModule kieModule,
                                                java.util.Collection<DroolsRuleModel> rulesToAdd,
                                                java.util.Collection<DroolsRuleModel> rulesToRemove,
                                                RuleEngineActionResult result)
        Deploy incrementally the rule engine updates. It accepts the new ReleaseId, new KieModuleModel, the clone MemoryKieModule and based on the collections of rules to add/update and delete, applies the incremental rule engine updates. In order to add/update the rule engine the new instance of KieBuilder is created. After the proper KieBuilderSet with updates is created, the KieBuilderSet.#build() method is called. if the update was successful, the updated information is copied from "incremental" KieModule to the clone KieModule (method copyChanges(MemoryKieModule, MemoryKieModule))
        Parameters:
        releaseId - new ReleaseId
        kieModuleModel - new KieModuleModel
        kieModule - clone KieModule
        rulesToAdd - a collection of DroolsRuleModel rules to add/update
        rulesToRemove - a collection of DroolsRuleModel rules to remove
        result - instance of RuleEngineActionResult accumulating the results of deploy
      • verifyErrors

        protected void verifyErrors​(RuleEngineActionResult result,
                                    java.util.List<org.kie.api.builder.Message> messages)
      • mergePartialKieModules

        protected org.kie.api.builder.KieModule mergePartialKieModules​(org.kie.api.builder.ReleaseId releaseId,
                                                                       org.kie.api.builder.model.KieModuleModel kieModuleModel,
                                                                       org.kie.api.builder.KieModule partialKieModule)
      • mergeFileSystemToKieModule

        protected void mergeFileSystemToKieModule​(org.drools.compiler.kie.builder.impl.MemoryKieModule partialKieModule,
                                                  MemoryFileSystem mainMemoryFileSystem)
      • mergePartialKieModules

        protected org.kie.api.builder.KieModule mergePartialKieModules​(org.kie.api.builder.ReleaseId releaseId,
                                                                       org.kie.api.builder.model.KieModuleModel kieModuleModel,
                                                                       java.util.List<org.kie.api.builder.KieBuilder> kieBuilders)
      • addKieBase

        public void addKieBase​(org.kie.api.builder.model.KieModuleModel module,
                               org.kie.api.builder.KieFileSystem kfs,
                               DroolsKIEBaseModel base,
                               KIEModuleCacheBuilder cache)
        Description copied from interface: RuleEngineKieModuleSwapper
        Adds new KieBaseModel to a KieModuleModel with all rules
        Specified by:
        addKieBase in interface RuleEngineKieModuleSwapper
        Parameters:
        module - instance of KieModuleModel to add the KieBaseModel to
        kfs - instance of KieFileSystem
        base - instance of DroolsKIEBaseModel that keeps the information for a KieBaseModel to be created
        cache - the caching structure for the module being initialized
      • removeKieModuleIfPresent

        public boolean removeKieModuleIfPresent​(org.kie.api.builder.ReleaseId releaseId,
                                                RuleEngineActionResult result)
        Description copied from interface: RuleEngineKieModuleSwapper
        Tries to remove the KieModule with given ReleaseId from KieRepository
        Specified by:
        removeKieModuleIfPresent in interface RuleEngineKieModuleSwapper
        Parameters:
        releaseId - the instance of ReleaseId corresponding to a KieModule to be removed
        result - instance of RuleEngineActionResult to be used in cluster nodes notification removal
        Returns:
        true if the module was found and removed, false otherwise
      • filterByBiggestVersion

        protected <R extends D,​D extends AbstractRuleEngineRuleModel> java.util.Set<R> filterByBiggestVersion​(java.util.Collection<D> rulesForVersion)
      • writeRulesToKieFileSystem

        protected void writeRulesToKieFileSystem​(org.kie.api.builder.KieFileSystem kfs,
                                                 java.util.Collection<DroolsRuleModel> rules)
      • deleteRulesFromKieModule

        protected void deleteRulesFromKieModule​(org.drools.compiler.kie.builder.impl.MemoryKieModule kieModule,
                                                java.util.Collection<DroolsRuleModel> rules)
        Removes the specified collection of DroolsRuleModel rules from KieModule
        Parameters:
        kieModule - the instance of clone KieModule to remove rules from
        rules - Collection of DroolsRuleModel rules to delete
      • getDeployedReleaseId

        public java.util.Optional<org.kie.api.builder.ReleaseId> getDeployedReleaseId​(DroolsKIEModuleModel module,
                                                                                      java.lang.String deployedMvnVersion)
        Description copied from interface: RuleEngineKieModuleSwapper
        Returns (optional) ReleaseId for a deployed version of the KieModuleModel
        Specified by:
        getDeployedReleaseId in interface RuleEngineKieModuleSwapper
        Parameters:
        module - instance of DroolsKIEModuleModel
        deployedMvnVersion - currently deployed releaseId version of the Kie Module, if known
        Returns:
        instance of Optional.of(ReleaseId) if the ReleaseId could be created, Optional.empty() otherwise
      • setup

        @PostConstruct
        public void setup()
      • registerWorker

        protected void registerWorker​(java.lang.String moduleName,
                                      java.lang.Thread worker)
      • switchKieModuleRunnableTask

        protected java.lang.Runnable switchKieModuleRunnableTask​(java.lang.String moduleName,
                                                                 KieContainerListener listener,
                                                                 java.util.List<java.lang.Object> resultsAccumulator,
                                                                 java.util.function.Supplier<java.lang.Object> resetFlagSupplier,
                                                                 java.util.List<java.util.function.Supplier<java.lang.Object>> postTaskList,
                                                                 boolean enableIncrementalUpdate,
                                                                 RuleEngineActionResult result)
      • onSwapFailed

        protected java.lang.Object onSwapFailed​(java.lang.Throwable t,
                                                RuleEngineActionResult result,
                                                java.util.function.Supplier<java.lang.Object> resetFlagSupplier)
      • isInitialEngineStartup

        protected boolean isInitialEngineStartup​(org.kie.api.builder.ReleaseId releaseId,
                                                 java.lang.String newDeployedMvnVersion)
      • getKieServices

        protected org.kie.api.KieServices getKieServices()
      • setKieServices

        protected void setKieServices​(org.kie.api.KieServices kieServices)
      • setConfigurationService

        public void setConfigurationService​(ConfigurationService configurationService)
      • getCurrentTenant

        protected Tenant getCurrentTenant()
      • setCurrentTenant

        public void setCurrentTenant​(Tenant currentTenant)
      • getTenantAwareThreadFactory

        protected java.util.concurrent.ThreadFactory getTenantAwareThreadFactory()
      • setTenantAwareThreadFactory

        public void setTenantAwareThreadFactory​(java.util.concurrent.ThreadFactory tenantAwareThreadFactory)
      • getModelService

        protected ModelService getModelService()
      • setModelService

        public void setModelService​(ModelService modelService)
      • setRuleEngineCacheService

        public void setRuleEngineCacheService​(RuleEngineCacheService ruleEngineCacheService)
      • setRulesModuleDao

        public void setRulesModuleDao​(RulesModuleDao rulesModuleDao)
      • setConcurrentMapFactory

        public void setConcurrentMapFactory​(ConcurrentMapFactory concurrentMapFactory)
      • setRulePublishingSpliterator

        public void setRulePublishingSpliterator​(RulePublishingSpliterator rulePublishingSpliterator)
      • setContentMatchRulesFilter

        public void setContentMatchRulesFilter​(ContentMatchRulesFilter contentMatchRulesFilter)
      • getWorkerPreDestroyTimeout

        protected long getWorkerPreDestroyTimeout()
      • setSuspendResumeTaskManager

        public void setSuspendResumeTaskManager​(SuspendResumeTaskManager suspendResumeTaskManager)
      • setKieModuleService

        public void setKieModuleService​(KieModuleService kieModuleService)
      • setEngineRuleDao

        public void setEngineRuleDao​(EngineRuleDao engineRuleDao)