You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2019/03/20 08:10:46 UTC

[syncope] branch 2_1_X updated: Flowable: allow to configure IdGenerator

This is an automated email from the ASF dual-hosted git repository.

ilgrosso pushed a commit to branch 2_1_X
in repository https://gitbox.apache.org/repos/asf/syncope.git


The following commit(s) were added to refs/heads/2_1_X by this push:
     new b1cd2e1  Flowable: allow to configure IdGenerator
b1cd2e1 is described below

commit b1cd2e14c7f006112efec7ce82d86be10aac4e9d
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Wed Mar 20 09:09:24 2019 +0100

    Flowable: allow to configure IdGenerator
---
 .../src/main/resources/workflowFlowableContext.xml |  9 ++++
 .../syncope/core/logic/init/FlowableLoader.java    | 55 ++++++++++------------
 fit/core-reference/src/main/resources/log4j2.xml   |  4 ++
 3 files changed, 39 insertions(+), 29 deletions(-)

diff --git a/ext/flowable/flowable-bpmn/src/main/resources/workflowFlowableContext.xml b/ext/flowable/flowable-bpmn/src/main/resources/workflowFlowableContext.xml
index aebf495..73e4873 100644
--- a/ext/flowable/flowable-bpmn/src/main/resources/workflowFlowableContext.xml
+++ b/ext/flowable/flowable-bpmn/src/main/resources/workflowFlowableContext.xml
@@ -40,6 +40,13 @@ under the License.
 
   <bean id="syncopeFormHandlerHelper" class="org.apache.syncope.core.flowable.support.SyncopeFormHandlerHelper"/>
 
+  <!--
+    This is called to generate unique identifiers for database entities used by Flowable.
+    Consider to switch to org.flowable.common.engine.impl.persistence.StrongUuidGenerator
+    in high-demanding production environments.
+  -->
+  <bean id="idGenerator" class="org.flowable.engine.impl.db.DbIdGenerator"/>
+
   <bean class="org.flowable.spring.SpringProcessEngineConfiguration" scope="prototype">
     <property name="databaseSchemaUpdate" value="true"/>
 
@@ -56,6 +63,8 @@ under the License.
     </property>
     
     <property name="formHandlerHelper" ref="syncopeFormHandlerHelper"/>
+    
+    <property name="idGenerator" ref="idGenerator"/>
   </bean>
 
   <bean id="bpmnProcessManager" class="org.apache.syncope.core.flowable.impl.FlowableBpmnProcessManager"/>
diff --git a/ext/flowable/logic/src/main/java/org/apache/syncope/core/logic/init/FlowableLoader.java b/ext/flowable/logic/src/main/java/org/apache/syncope/core/logic/init/FlowableLoader.java
index ea526ad..45436a1 100644
--- a/ext/flowable/logic/src/main/java/org/apache/syncope/core/logic/init/FlowableLoader.java
+++ b/ext/flowable/logic/src/main/java/org/apache/syncope/core/logic/init/FlowableLoader.java
@@ -22,7 +22,6 @@ import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.List;
-import java.util.Map;
 import javax.annotation.Resource;
 import org.apache.commons.io.IOUtils;
 import org.apache.syncope.common.lib.types.FlowableEntitlement;
@@ -32,9 +31,8 @@ import org.apache.syncope.core.flowable.support.DomainProcessEngine;
 import org.apache.syncope.core.persistence.api.SyncopeLoader;
 import org.apache.syncope.core.provisioning.api.EntitlementsHolder;
 import org.apache.syncope.core.spring.ResourceWithFallbackLoader;
-import org.flowable.engine.ProcessEngine;
+import org.flowable.engine.impl.db.DbIdGenerator;
 import org.flowable.engine.repository.ProcessDefinition;
-import org.flowable.spring.SpringProcessEngineConfiguration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -60,39 +58,38 @@ public class FlowableLoader implements SyncopeLoader {
     public void load() {
         EntitlementsHolder.getInstance().init(FlowableEntitlement.values());
 
-        byte[] wfDef = new byte[0];
-
         try (InputStream wfIn = userWorkflowDef.getResource().getInputStream()) {
-            wfDef = IOUtils.toByteArray(wfIn);
-        } catch (IOException e) {
-            LOG.error("While loading " + userWorkflowDef.getResource().getFilename(), e);
-        }
+            byte[] wfDef = IOUtils.toByteArray(wfIn);
 
-        for (Map.Entry<String, ProcessEngine> entry : dpEngine.getEngines().entrySet()) {
-            List<ProcessDefinition> processes = entry.getValue().getRepositoryService().
-                    createProcessDefinitionQuery().processDefinitionKey(FlowableRuntimeUtils.WF_PROCESS_ID).
-                    list();
-            LOG.debug(FlowableRuntimeUtils.WF_PROCESS_ID + " Flowable processes in repository: {}", processes);
+            dpEngine.getEngines().forEach((domain, processEngine) -> {
+                List<ProcessDefinition> processes = processEngine.getRepositoryService().
+                        createProcessDefinitionQuery().processDefinitionKey(FlowableRuntimeUtils.WF_PROCESS_ID).
+                        list();
+                LOG.debug(FlowableRuntimeUtils.WF_PROCESS_ID + " Flowable processes in repository: {}", processes);
 
-            // Only loads process definition from file if not found in repository
-            if (processes.isEmpty()) {
-                entry.getValue().getRepositoryService().createDeployment().addInputStream(
-                        userWorkflowDef.getResource().getFilename(), new ByteArrayInputStream(wfDef)).deploy();
+                // Only loads process definition from file if not found in repository
+                if (processes.isEmpty()) {
+                    processEngine.getRepositoryService().createDeployment().addInputStream(
+                            userWorkflowDef.getResource().getFilename(), new ByteArrayInputStream(wfDef)).deploy();
 
-                ProcessDefinition procDef = entry.getValue().getRepositoryService().createProcessDefinitionQuery().
-                        processDefinitionKey(FlowableRuntimeUtils.WF_PROCESS_ID).latestVersion().
-                        singleResult();
+                    ProcessDefinition procDef = processEngine.getRepositoryService().createProcessDefinitionQuery().
+                            processDefinitionKey(FlowableRuntimeUtils.WF_PROCESS_ID).latestVersion().
+                            singleResult();
 
-                FlowableDeployUtils.deployModel(entry.getValue(), procDef);
+                    FlowableDeployUtils.deployModel(processEngine, procDef);
 
-                LOG.debug("Flowable Workflow definition loaded for domain {}", entry.getKey());
-            }
+                    LOG.debug("Flowable Workflow definition loaded for domain {}", domain);
 
-            // jump to the next ID block
-            for (int i = 0; i < entry.getValue().getProcessEngineConfiguration().getIdBlockSize(); i++) {
-                SpringProcessEngineConfiguration.class.cast(entry.getValue().getProcessEngineConfiguration()).
-                        getIdGenerator().getNextId();
-            }
+                    if (processEngine.getProcessEngineConfiguration().getIdGenerator() instanceof DbIdGenerator) {
+                        // jump to the next ID block
+                        for (int i = 0; i < processEngine.getProcessEngineConfiguration().getIdBlockSize(); i++) {
+                            processEngine.getProcessEngineConfiguration().getIdGenerator().getNextId();
+                        }
+                    }
+                }
+            });
+        } catch (IOException e) {
+            LOG.error("While loading " + userWorkflowDef.getResource().getFilename(), e);
         }
     }
 }
diff --git a/fit/core-reference/src/main/resources/log4j2.xml b/fit/core-reference/src/main/resources/log4j2.xml
index 7df562b..8ad93bc 100644
--- a/fit/core-reference/src/main/resources/log4j2.xml
+++ b/fit/core-reference/src/main/resources/log4j2.xml
@@ -184,6 +184,10 @@ under the License.
       <appender-ref ref="mainFile"/>
       <appender-ref ref="main"/>
     </asyncLogger>
+    <asyncLogger name="org.hibernate.validator" additivity="false" level="ERROR">
+      <appender-ref ref="mainFile"/>
+      <appender-ref ref="main"/>
+    </asyncLogger>
     <asyncLogger name="com.zaxxer.hikari" additivity="false" level="ERROR">
       <appender-ref ref="mainFile"/>
       <appender-ref ref="main"/>