This is an automated email from the ASF dual-hosted git repository.
fjtiradosarti pushed a commit to branch main
in repository
https://gitbox.apache.org/repos/asf/incubator-kie-kogito-runtimes.git
The following commit(s) were added to refs/heads/main by this push:
new ded2b68dd5 [Fix #3346] Allow add ProcessEventListener to
StaticWorkflowApplication (#3448)
ded2b68dd5 is described below
commit ded2b68dd57d8c30eb97279a7815c544ad49c7fb
Author: Francisco Javier Tirado Sarti
<[email protected]>
AuthorDate: Tue Mar 19 17:36:42 2024 +0100
[Fix #3346] Allow add ProcessEventListener to StaticWorkflowApplication
(#3448)
* [Fix #3346] Allow add ProcessEventListener to StaticWorkflowApplication
* [Fix #3346] Fixing mistakes
---
.../impl/DefaultProcessEventListenerConfig.java | 6 ++
.../executor/StaticWorkflowApplication.java | 76 ++++++++++++++++++----
.../StaticFluentWorkflowApplicationTest.java | 11 +++-
3 files changed, 79 insertions(+), 14 deletions(-)
diff --git
a/jbpm/jbpm-flow/src/main/java/org/kie/kogito/process/impl/DefaultProcessEventListenerConfig.java
b/jbpm/jbpm-flow/src/main/java/org/kie/kogito/process/impl/DefaultProcessEventListenerConfig.java
index f6cfa8a58b..143033d8c5 100644
---
a/jbpm/jbpm-flow/src/main/java/org/kie/kogito/process/impl/DefaultProcessEventListenerConfig.java
+++
b/jbpm/jbpm-flow/src/main/java/org/kie/kogito/process/impl/DefaultProcessEventListenerConfig.java
@@ -27,4 +27,10 @@ public class DefaultProcessEventListenerConfig extends
CachedProcessEventListene
register(listener);
}
}
+
+ public DefaultProcessEventListenerConfig(Iterable<? extends
ProcessEventListener> listeners) {
+ for (ProcessEventListener listener : listeners) {
+ register(listener);
+ }
+ }
}
diff --git
a/kogito-serverless-workflow/kogito-serverless-workflow-executor-core/src/main/java/org/kie/kogito/serverless/workflow/executor/StaticWorkflowApplication.java
b/kogito-serverless-workflow/kogito-serverless-workflow-executor-core/src/main/java/org/kie/kogito/serverless/workflow/executor/StaticWorkflowApplication.java
index bce8b4f53b..aaaedd8606 100644
---
a/kogito-serverless-workflow/kogito-serverless-workflow-executor-core/src/main/java/org/kie/kogito/serverless/workflow/executor/StaticWorkflowApplication.java
+++
b/kogito-serverless-workflow/kogito-serverless-workflow-executor-core/src/main/java/org/kie/kogito/serverless/workflow/executor/StaticWorkflowApplication.java
@@ -20,10 +20,13 @@ package org.kie.kogito.serverless.workflow.executor;
import java.io.IOException;
import java.io.InputStream;
+import java.net.URL;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.Properties;
@@ -46,6 +49,7 @@ import
org.kie.kogito.codegen.api.context.impl.JavaKogitoBuildContext;
import org.kie.kogito.config.StaticConfigBean;
import org.kie.kogito.event.impl.EventFactoryUtils;
import org.kie.kogito.internal.process.event.DefaultKogitoProcessEventListener;
+import org.kie.kogito.internal.process.event.KogitoProcessEventListener;
import org.kie.kogito.internal.process.runtime.KogitoWorkItemHandler;
import org.kie.kogito.process.Process;
import org.kie.kogito.process.ProcessInstance;
@@ -120,28 +124,74 @@ public class StaticWorkflowApplication extends
StaticApplication implements Auto
}
}
- public static StaticWorkflowApplication create() {
- Properties properties = new Properties();
- try (InputStream is =
Thread.currentThread().getContextClassLoader().getResourceAsStream("application.properties"))
{
- if (is != null) {
- properties.load(is);
+ public static class WorkflowApplicationBuilder {
+
+ private Map<String, Object> properties;
+ private Collection<KogitoProcessEventListener> listeners = new
ArrayList<>();
+
+ private WorkflowApplicationBuilder() {
+ }
+
+ public WorkflowApplicationBuilder withProperties(Map<String, Object>
properties) {
+ this.properties = properties;
+ return this;
+ }
+
+ public WorkflowApplicationBuilder
withEventListener(KogitoProcessEventListener listener,
KogitoProcessEventListener... extraListeners) {
+ listeners.add(listener);
+ for (KogitoProcessEventListener extraListener : extraListeners) {
+ listeners.add(extraListener);
+ }
+ return this;
+ }
+
+ public StaticWorkflowApplication build() {
+ if (properties == null) {
+ this.properties = loadApplicationDotProperties();
+ }
+ Map<String, SynchronousQueue<JsonNodeModel>> queues = new
ConcurrentHashMap<>();
+ listeners.add(new StaticCompletionEventListener(queues));
+ StaticWorkflowApplication application = new
StaticWorkflowApplication(properties, queues, listeners);
+ application.applicationRegisters.forEach(register ->
register.register(application));
+ return application;
+ }
+ }
+
+ private static Map<String, Object> loadApplicationDotProperties() {
+ Map<String, Object> allProperties = new HashMap<>();
+ try {
+ Enumeration<URL> urls =
Thread.currentThread().getContextClassLoader().getResources("application.properties");
+ while (urls.hasMoreElements()) {
+ URL url = urls.nextElement();
+ try (InputStream is = url.openStream()) {
+ Properties fileProperties = new Properties();
+ fileProperties.load(is);
+ fileProperties.entrySet().forEach(e ->
allProperties.put(e.getKey().toString(), e.getValue()));
+ } catch (IOException io) {
+ logger.info("Error loading properties from URL {}", url,
io);
+ }
}
} catch (IOException io) {
- logger.warn("Error loading application.properties from classpath",
io);
+ logger.warn("Error searching for application.properties in
classpath", io);
}
- return create((Map) properties);
+ return allProperties;
+ }
+
+ public static WorkflowApplicationBuilder builder() {
+ return new WorkflowApplicationBuilder();
+ }
+
+ public static StaticWorkflowApplication create() {
+ return builder().build();
}
public static StaticWorkflowApplication create(Map<String, Object>
properties) {
- Map<String, SynchronousQueue<JsonNodeModel>> queues = new
ConcurrentHashMap<>();
- StaticWorkflowApplication application = new
StaticWorkflowApplication(properties, queues);
- application.applicationRegisters.forEach(register ->
register.register(application));
- return application;
+ return builder().withProperties(properties).build();
}
- private StaticWorkflowApplication(Map<String, Object> properties,
Map<String, SynchronousQueue<JsonNodeModel>> queues) {
+ private StaticWorkflowApplication(Map<String, Object> properties,
Map<String, SynchronousQueue<JsonNodeModel>> queues,
Collection<KogitoProcessEventListener> listeners) {
super(new StaticConfig(new Addons(Collections.emptySet()), new
StaticProcessConfig(new CachedWorkItemHandlerConfig(),
- new DefaultProcessEventListenerConfig(new
StaticCompletionEventListener(queues)),
+ new DefaultProcessEventListenerConfig(listeners),
new DefaultUnitOfWorkManager(new
CollectingUnitOfWorkFactory())), new StaticConfigBean()));
if (!properties.isEmpty()) {
ConfigResolverHolder.setConfigResolver(MultiSourceConfigResolver.withSystemProperties(properties));
diff --git
a/kogito-serverless-workflow/kogito-serverless-workflow-executor-core/src/test/java/org/kie/kogito/serverless/workflow/executor/StaticFluentWorkflowApplicationTest.java
b/kogito-serverless-workflow/kogito-serverless-workflow-executor-core/src/test/java/org/kie/kogito/serverless/workflow/executor/StaticFluentWorkflowApplicationTest.java
index d96afcd2c9..81de083a09 100644
---
a/kogito-serverless-workflow/kogito-serverless-workflow-executor-core/src/test/java/org/kie/kogito/serverless/workflow/executor/StaticFluentWorkflowApplicationTest.java
+++
b/kogito-serverless-workflow/kogito-serverless-workflow-executor-core/src/test/java/org/kie/kogito/serverless/workflow/executor/StaticFluentWorkflowApplicationTest.java
@@ -23,8 +23,11 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.concurrent.TimeoutException;
+import java.util.concurrent.atomic.AtomicBoolean;
import org.junit.jupiter.api.Test;
+import org.kie.api.event.process.ProcessCompletedEvent;
+import org.kie.kogito.internal.process.event.DefaultKogitoProcessEventListener;
import org.kie.kogito.process.Process;
import org.kie.kogito.serverless.workflow.actions.SysoutAction;
import org.kie.kogito.serverless.workflow.actions.WorkflowLogLevel;
@@ -67,9 +70,15 @@ public class StaticFluentWorkflowApplicationTest {
@Test
void helloWorld() {
final String GREETING_STRING = "Hello World!!!";
- try (StaticWorkflowApplication application =
StaticWorkflowApplication.create()) {
+ AtomicBoolean completed = new AtomicBoolean(false);
+ try (StaticWorkflowApplication application =
StaticWorkflowApplication.builder().withEventListener(new
DefaultKogitoProcessEventListener() {
+ public void afterProcessCompleted(ProcessCompletedEvent event) {
+ completed.set(true);
+ }
+ }).build()) {
Workflow workflow = workflow("HelloWorld").start(inject(new
TextNode(GREETING_STRING))).end().build();
assertThat(application.execute(workflow,
Collections.emptyMap()).getWorkflowdata()).contains(new
TextNode(GREETING_STRING));
+ assertThat(completed.get()).isTrue();
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]