From 31606095f2e0cf86a9a192267f18bc564a216057 Mon Sep 17 00:00:00 2001 From: Tiago Dolphine Date: Mon, 16 Oct 2023 12:05:36 -0300 Subject: [PATCH 01/19] KOGITO-9886 Add the support for the ProcessDefinitionDataEvent at runtime --- .../org/kie/kogito/event/EventPublisher.java | 5 + .../process/NodeDefinitionEventBody.java | 82 ++++++++++ .../process/ProcessDefinitionEventBody.java | 150 ++++++++++++++++++ .../kogito/event/impl/ProcessEventBatch.java | 27 ++++ .../process/ProcessDefinitionDataEvent.java | 44 +++++ .../ProcessDefinitionEventRegistry.java | 91 +++++++++++ .../impl/SpringBootKogitoBuildContext.java | 1 + .../events/config/EventsRuntimeConfig.java | 67 ++++++++ .../ReactiveMessagingEventPublisher.java | 24 ++- .../ProcessDefinitionRegistration.java | 31 ++++ .../ServerlessWorkflowAssetsProcessor.java | 12 ++ .../pom.xml | 4 + .../src/main/resources/application.properties | 12 ++ .../quarkus/workflows/WorkflowEventIT.java | 46 +++++- .../events/spring/KafkaEventPublisher.java | 11 +- 15 files changed, 595 insertions(+), 12 deletions(-) create mode 100644 api/kogito-events-api/src/main/java/org/kie/kogito/event/process/NodeDefinitionEventBody.java create mode 100644 api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessDefinitionEventBody.java create mode 100644 api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/ProcessEventBatch.java create mode 100644 api/kogito-events-core/src/main/java/org/kie/kogito/event/process/ProcessDefinitionDataEvent.java create mode 100644 api/kogito-services/src/main/java/org/kie/kogito/services/registry/ProcessDefinitionEventRegistry.java create mode 100644 quarkus/addons/events/process/runtime/src/main/java/org/kie/kogito/events/config/EventsRuntimeConfig.java create mode 100644 quarkus/extensions/kogito-quarkus-extension-common/kogito-quarkus-common/src/main/java/org/kie/kogito/quarkus/registry/ProcessDefinitionRegistration.java diff --git a/api/kogito-api/src/main/java/org/kie/kogito/event/EventPublisher.java b/api/kogito-api/src/main/java/org/kie/kogito/event/EventPublisher.java index 0869447738c..b0a0ccee436 100644 --- a/api/kogito-api/src/main/java/org/kie/kogito/event/EventPublisher.java +++ b/api/kogito-api/src/main/java/org/kie/kogito/event/EventPublisher.java @@ -31,6 +31,11 @@ */ public interface EventPublisher { + String PI_TOPIC_NAME = "kogito-processinstances-events"; + String UI_TOPIC_NAME = "kogito-usertaskinstances-events"; + String VI_TOPIC_NAME = "kogito-variables-events"; + String PD_TOPIC_NAME = "kogito-process-definition-events"; + /** * Publishes individual event * diff --git a/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/NodeDefinitionEventBody.java b/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/NodeDefinitionEventBody.java new file mode 100644 index 00000000000..5ae83e848a6 --- /dev/null +++ b/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/NodeDefinitionEventBody.java @@ -0,0 +1,82 @@ +package org.kie.kogito.event.process; + +import java.util.Map; + +public class NodeDefinitionEventBody { + private String id; + private String nodeName; + private String nodeType; + private String uniqueId; + private Map metadata; + + public NodeDefinitionEventBody() { + } + public NodeDefinitionEventBody(String id, String nodeName, String nodeType, String uniqueId, Map metadata) { + this.id = id; + this.nodeName = nodeName; + this.nodeType = nodeType; + this.uniqueId = uniqueId; + this.metadata = metadata; + } + + public String getId() { + return id; + } + + public String getNodeName() { + return nodeName; + } + + public String getNodeType() { + return nodeType; + } + + public String getUniqueId() { + return uniqueId; + } + + public Map getMetadata() { + return metadata; + } + + public static NodeDefinitionEventBodyBuilder builder() { + return new NodeDefinitionEventBodyBuilder(); + } + + public static class NodeDefinitionEventBodyBuilder { + private String id; + private String nodeName; + private String nodeType; + private String uniqueId; + private Map metadata; + + public NodeDefinitionEventBodyBuilder setId(String id) { + this.id = id; + return this; + } + + public NodeDefinitionEventBodyBuilder setNodeName(String nodeName) { + this.nodeName = nodeName; + return this; + } + + public NodeDefinitionEventBodyBuilder setNodeType(String nodeType) { + this.nodeType = nodeType; + return this; + } + + public NodeDefinitionEventBodyBuilder setUniqueId(String uniqueId) { + this.uniqueId = uniqueId; + return this; + } + + public NodeDefinitionEventBodyBuilder setMetadata(Map metadata) { + this.metadata = metadata; + return this; + } + + public NodeDefinitionEventBody build() { + return new NodeDefinitionEventBody(id, nodeName, nodeType, uniqueId, metadata); + } + } +} diff --git a/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessDefinitionEventBody.java b/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessDefinitionEventBody.java new file mode 100644 index 00000000000..27304d8bb59 --- /dev/null +++ b/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessDefinitionEventBody.java @@ -0,0 +1,150 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ +package org.kie.kogito.event.process; + +import java.util.List; +import java.util.Set; + +public class ProcessDefinitionEventBody { + + private String id; + private String name; + private String version; + private String type; + private Set roles; + private Set addons; + private String endpoint; + private String source; + private List nodes; + + public ProcessDefinitionEventBody() { + } + + public ProcessDefinitionEventBody(String id, String name, String version, String type, Set roles, Set addons, String endpoint, String source, List nodes) { + this.id = id; + this.name = name; + this.version = version; + this.type = type; + this.roles = roles; + this.addons = addons; + this.endpoint = endpoint; + this.source = source; + this.nodes = nodes; + } + + public String getId() { + return id; + } + + public String getName() { + return name; + } + + public String getVersion() { + return version; + } + + public String getType() { + return type; + } + + public Set getRoles() { + return roles; + } + + public Set getAddons() { + return addons; + } + + public String getEndpoint() { + return endpoint; + } + + public String getSource() { + return source; + } + + public List getNodes() { + return nodes; + } + + public static ProcessDefinitionEventBodyBuilder builder(){ + return new ProcessDefinitionEventBodyBuilder(); + } + public static class ProcessDefinitionEventBodyBuilder { + private String id; + private String name; + private String version; + private String type; + private Set roles; + private Set addons; + private String endpoint; + private String source; + private List nodes; + + public ProcessDefinitionEventBodyBuilder setId(String id) { + this.id = id; + return this; + } + + public ProcessDefinitionEventBodyBuilder setName(String name) { + this.name = name; + return this; + } + + public ProcessDefinitionEventBodyBuilder setVersion(String version) { + this.version = version; + return this; + } + + public ProcessDefinitionEventBodyBuilder setType(String type) { + this.type = type; + return this; + } + + public ProcessDefinitionEventBodyBuilder setRoles(Set roles) { + this.roles = roles; + return this; + } + + public ProcessDefinitionEventBodyBuilder setAddons(Set addons) { + this.addons = addons; + return this; + } + + public ProcessDefinitionEventBodyBuilder setEndpoint(String endpoint) { + this.endpoint = endpoint; + return this; + } + + public ProcessDefinitionEventBodyBuilder setSource(String source) { + this.source = source; + return this; + } + + public ProcessDefinitionEventBodyBuilder setNodes(List nodes) { + this.nodes = nodes; + return this; + } + + public ProcessDefinitionEventBody build() { + return new ProcessDefinitionEventBody(id, name, version, type, roles, addons, endpoint, source, nodes); + } + } +} diff --git a/api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/ProcessEventBatch.java b/api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/ProcessEventBatch.java new file mode 100644 index 00000000000..0a4479a1d4c --- /dev/null +++ b/api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/ProcessEventBatch.java @@ -0,0 +1,27 @@ +package org.kie.kogito.event.impl; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import org.kie.kogito.event.DataEvent; +import org.kie.kogito.event.EventBatch; +import org.kie.kogito.event.process.ProcessDataEvent; + +public class ProcessEventBatch implements EventBatch { + + private List> events = new ArrayList<>(); + + @Override + public void append(Object rawEvent) { + if (!ProcessDataEvent.class.isInstance(rawEvent)) { + throw new IllegalArgumentException("The event is not a ProcessDataEvent"); + } + events.add((ProcessDataEvent) rawEvent); + } + + @Override + public Collection> events() { + return events; + } +} diff --git a/api/kogito-events-core/src/main/java/org/kie/kogito/event/process/ProcessDefinitionDataEvent.java b/api/kogito-events-core/src/main/java/org/kie/kogito/event/process/ProcessDefinitionDataEvent.java new file mode 100644 index 00000000000..9651821ae4d --- /dev/null +++ b/api/kogito-events-core/src/main/java/org/kie/kogito/event/process/ProcessDefinitionDataEvent.java @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ +package org.kie.kogito.event.process; + +public class ProcessDefinitionDataEvent extends ProcessDataEvent { + + public static final String PROCESS_DEFINITION_EVENT = "ProcessDefinitionEvent"; + + public ProcessDefinitionDataEvent(){ + + } + public ProcessDefinitionDataEvent(ProcessDefinitionEventBody body) { + super(PROCESS_DEFINITION_EVENT, + body.getEndpoint(), + body, + null, + null, + null, + null, + body.getId(), + null, + null, + null, + body.getType(), + null, + null); + } +} \ No newline at end of file diff --git a/api/kogito-services/src/main/java/org/kie/kogito/services/registry/ProcessDefinitionEventRegistry.java b/api/kogito-services/src/main/java/org/kie/kogito/services/registry/ProcessDefinitionEventRegistry.java new file mode 100644 index 00000000000..f347144de09 --- /dev/null +++ b/api/kogito-services/src/main/java/org/kie/kogito/services/registry/ProcessDefinitionEventRegistry.java @@ -0,0 +1,91 @@ +/* + * Copyright 2023 Red Hat, Inc. and/or its affiliates. + * + * 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. + */ + +package org.kie.kogito.services.registry; + +import java.util.List; +import java.util.Set; +import java.util.function.Function; +import java.util.stream.Collectors; + +import org.kie.kogito.Application; +import org.kie.kogito.event.EventBatch; +import org.kie.kogito.event.impl.ProcessEventBatch; +import org.kie.kogito.event.process.NodeDefinitionEventBody; +import org.kie.kogito.event.process.ProcessDefinitionDataEvent; +import org.kie.kogito.event.process.ProcessDefinitionEventBody; +import org.kie.kogito.process.Process; +import org.kie.kogito.process.Processes; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class ProcessDefinitionEventRegistry { + + private static final Logger LOGGER = LoggerFactory.getLogger(ProcessDefinitionEventRegistry.class); + + private Application app; + private String serviceUrl; + + public ProcessDefinitionEventRegistry(Application app, String serviceUrl) { + this.app = app; + this.serviceUrl = serviceUrl; + } + + public void register(Processes processes) { + EventBatch eventBatch = new ProcessEventBatch(); + processes.processIds().stream() + .map(processes::processById) + .map(mapProcessDefinition(app.config().addons().availableAddons(), serviceUrl)) + .forEach(process -> { + LOGGER.debug("Registering process definition with id: {}", process.getId()); + eventBatch.append(process); + }); + LOGGER.debug("Publishing all processes definitions"); + app.unitOfWorkManager().eventManager().publish(eventBatch); + } + + private Function, ProcessDefinitionDataEvent> mapProcessDefinition(Set addons, String endpoint) { + return p -> new ProcessDefinitionDataEvent(ProcessDefinitionEventBody.builder() + .setId(p.id()) + .setName(p.name()) + .setVersion(p.version()) + .setType(ProcessDefinitionDataEvent.PROCESS_DEFINITION_EVENT) + .setAddons(addons) + .setEndpoint(getEndpoint(endpoint, p)) + .setSource(getProcessSource()) + .setNodes(getNodesDefinitions(p)) + .build()); + } + + private static String getEndpoint(String endpoint, Process p) { + return endpoint + "/" + (p.id().contains(".") ? p.id().substring(p.id().lastIndexOf('.') + 1) : p.id()); + } + private List getNodesDefinitions(Process p) { + return p.findNodes(n -> true).stream() + .map(node -> NodeDefinitionEventBody.builder() + .setId(String.valueOf(node.getId())) + .setNodeName(node.getName()) + .setNodeType(node.getNodeType().name()) + .setUniqueId(node.getNodeUniqueId()) + .setMetadata(node.getMetaData()) + .build()) + .collect(Collectors.toList()); + } + + private String getProcessSource() { + return null; + } +} diff --git a/kogito-codegen-modules/kogito-codegen-api/src/main/java/org/kie/kogito/codegen/api/context/impl/SpringBootKogitoBuildContext.java b/kogito-codegen-modules/kogito-codegen-api/src/main/java/org/kie/kogito/codegen/api/context/impl/SpringBootKogitoBuildContext.java index baa4fc4863c..dca66f7d877 100644 --- a/kogito-codegen-modules/kogito-codegen-api/src/main/java/org/kie/kogito/codegen/api/context/impl/SpringBootKogitoBuildContext.java +++ b/kogito-codegen-modules/kogito-codegen-api/src/main/java/org/kie/kogito/codegen/api/context/impl/SpringBootKogitoBuildContext.java @@ -35,6 +35,7 @@ public static Builder builder() { return new SpringBootKogitoBuildContextBuilder(); } + @Override public boolean hasRest() { return hasClassAvailable(SPRING_REST); diff --git a/quarkus/addons/events/process/runtime/src/main/java/org/kie/kogito/events/config/EventsRuntimeConfig.java b/quarkus/addons/events/process/runtime/src/main/java/org/kie/kogito/events/config/EventsRuntimeConfig.java new file mode 100644 index 00000000000..f1595e43f03 --- /dev/null +++ b/quarkus/addons/events/process/runtime/src/main/java/org/kie/kogito/events/config/EventsRuntimeConfig.java @@ -0,0 +1,67 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ +package org.kie.kogito.events.config; + +import io.quarkus.runtime.annotations.ConfigItem; +import io.quarkus.runtime.annotations.ConfigPhase; +import io.quarkus.runtime.annotations.ConfigRoot; + +@ConfigRoot(name = "", phase = ConfigPhase.RUN_TIME, prefix = "kogito.events") +public class EventsRuntimeConfig { + + /** + * Enable publishing processes instances events + */ + @ConfigItem(name = "processinstances.enabled", defaultValue = "true") + boolean processInstancesEventsEnabled; + + /** + * Enable publishing processes definition events + */ + @ConfigItem(name = "process-definition.enabled", defaultValue = "true") + boolean processDefinitionEventsEnabled; + + /** + * Enable publishing user task instances events + */ + @ConfigItem(name = "usertasks.enabled", defaultValue = "true") + boolean userTasksEventsEnabled; + + /** + * Enable publishing processes instances variables events + */ + @ConfigItem(name = "variables.enabled", defaultValue = "true") + boolean variablesEventsEnabled; + + public boolean isProcessInstancesEventsEnabled() { + return processInstancesEventsEnabled; + } + + public boolean isProcessDefinitionEventsEnabled() { + return processDefinitionEventsEnabled; + } + + public boolean isUserTasksEventsEnabled() { + return userTasksEventsEnabled; + } + + public boolean isVariablesEventsEnabled() { + return variablesEventsEnabled; + } +} diff --git a/quarkus/addons/events/process/runtime/src/main/java/org/kie/kogito/events/process/ReactiveMessagingEventPublisher.java b/quarkus/addons/events/process/runtime/src/main/java/org/kie/kogito/events/process/ReactiveMessagingEventPublisher.java index 01c199deb60..719e79f03a5 100644 --- a/quarkus/addons/events/process/runtime/src/main/java/org/kie/kogito/events/process/ReactiveMessagingEventPublisher.java +++ b/quarkus/addons/events/process/runtime/src/main/java/org/kie/kogito/events/process/ReactiveMessagingEventPublisher.java @@ -19,7 +19,6 @@ package org.kie.kogito.events.process; import java.util.Collection; -import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage; @@ -28,20 +27,17 @@ import javax.inject.Inject; import javax.inject.Singleton; -import org.eclipse.microprofile.config.inject.ConfigProperty; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.smallrye.reactive.messaging.providers.locals.ContextAwareMessage; import org.eclipse.microprofile.reactive.messaging.Channel; import org.eclipse.microprofile.reactive.messaging.Message; import org.kie.kogito.addon.quarkus.common.reactive.messaging.MessageDecoratorProvider; import org.kie.kogito.event.DataEvent; import org.kie.kogito.event.EventPublisher; +import org.kie.kogito.events.config.EventsRuntimeConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.ObjectMapper; - -import io.smallrye.reactive.messaging.MutinyEmitter; -import io.smallrye.reactive.messaging.providers.locals.ContextAwareMessage; - @Singleton public class ReactiveMessagingEventPublisher implements EventPublisher { private static final String PI_TOPIC_NAME = "kogito-processinstances-events"; @@ -56,6 +52,10 @@ public class ReactiveMessagingEventPublisher implements EventPublisher { @Channel(PI_TOPIC_NAME) MutinyEmitter processInstancesEventsEmitter; + @Inject + @Channel(PD_TOPIC_NAME) + Emitter processDefinitionEventsEmitter; + @Inject @Channel(UI_TOPIC_NAME) MutinyEmitter userTasksEventsEmitter; @@ -68,6 +68,9 @@ public class ReactiveMessagingEventPublisher implements EventPublisher { @ConfigProperty(name = "kogito.events.usertasks.enabled") Optional userTasksEvents; + @Inject + EventsRuntimeConfig eventsRuntimeConfig; + @Inject Instance decoratorProviderInstance; @@ -82,6 +85,12 @@ public void init() { public void publish(DataEvent event) { switch (event.getType()) { + sdsfds + case "ProcessDefinitionEvent": + if (eventsRuntimeConfig.isProcessDefinitionEventsEnabled()) { + publishToTopic(event, processDefinitionEventsEmitter, PD_TOPIC_NAME); + } + break; case "ProcessInstanceErrorDataEvent": case "ProcessInstanceNodeDataEvent": case "ProcessInstanceSLADataEvent": @@ -91,6 +100,7 @@ public void publish(DataEvent event) { publishToTopic(event, processInstancesEventsEmitter, PI_TOPIC_NAME); } break; + case "UserTaskInstanceAssignmentDataEvent": case "UserTaskInstanceAttachmentDataEvent": case "UserTaskInstanceCommentDataEvent": diff --git a/quarkus/extensions/kogito-quarkus-extension-common/kogito-quarkus-common/src/main/java/org/kie/kogito/quarkus/registry/ProcessDefinitionRegistration.java b/quarkus/extensions/kogito-quarkus-extension-common/kogito-quarkus-common/src/main/java/org/kie/kogito/quarkus/registry/ProcessDefinitionRegistration.java new file mode 100644 index 00000000000..fc289957c77 --- /dev/null +++ b/quarkus/extensions/kogito-quarkus-extension-common/kogito-quarkus-common/src/main/java/org/kie/kogito/quarkus/registry/ProcessDefinitionRegistration.java @@ -0,0 +1,31 @@ +package org.kie.kogito.quarkus.registry; + +import javax.enterprise.context.ApplicationScoped; +import javax.enterprise.event.Observes; +import javax.enterprise.inject.Instance; +import javax.inject.Inject; + +import io.quarkus.runtime.StartupEvent; +import org.kie.kogito.Application; +import org.kie.kogito.process.Processes; +import org.kie.kogito.quarkus.config.KogitoRuntimeConfig; +import org.kie.kogito.services.registry.ProcessDefinitionEventRegistry; + +@ApplicationScoped +public class ProcessDefinitionRegistration { + + Instance processes; + ProcessDefinitionEventRegistry processDefinitionRegistry; + + @Inject + public ProcessDefinitionRegistration(Application application, KogitoRuntimeConfig runtimeConfig, Instance processes) { + this.processes = processes; + this.processDefinitionRegistry = new ProcessDefinitionEventRegistry(application, runtimeConfig.serviceUrl.orElse(null)); + } + + void onStartUp(@Observes StartupEvent startupEvent) { + if (processes.isResolvable()) { + processDefinitionRegistry.register(processes.get()); + } + } +} diff --git a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-deployment/src/main/java/org/kie/kogito/quarkus/serverless/workflow/deployment/ServerlessWorkflowAssetsProcessor.java b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-deployment/src/main/java/org/kie/kogito/quarkus/serverless/workflow/deployment/ServerlessWorkflowAssetsProcessor.java index aa9eb8ac39c..691092f2386 100644 --- a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-deployment/src/main/java/org/kie/kogito/quarkus/serverless/workflow/deployment/ServerlessWorkflowAssetsProcessor.java +++ b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-deployment/src/main/java/org/kie/kogito/quarkus/serverless/workflow/deployment/ServerlessWorkflowAssetsProcessor.java @@ -31,6 +31,12 @@ import org.kie.kogito.codegen.api.context.KogitoBuildContext; import org.kie.kogito.codegen.process.ProcessContainerGenerator; import org.kie.kogito.codegen.process.ProcessGenerator; +import org.kie.kogito.event.process.NodeDefinitionEventBody; +import org.kie.kogito.event.process.NodeInstanceEventBody; +import org.kie.kogito.event.process.ProcessDataEvent; +import org.kie.kogito.event.process.ProcessDefinitionDataEvent; +import org.kie.kogito.event.process.ProcessDefinitionEventBody; +import org.kie.kogito.event.process.ProcessErrorEventBody; import org.kie.kogito.event.process.ProcessInstanceDataEvent; import org.kie.kogito.event.process.ProcessInstanceErrorEventBody; import org.kie.kogito.event.process.ProcessInstanceNodeEventBody; @@ -125,6 +131,12 @@ public ReflectiveClassBuildItem eventsApiReflection() { ProcessInstanceStateEventBody.class.getName(), ProcessInstanceVariableDataEvent.class.getName(), ProcessInstanceVariableEventBody.class.getName()); + ProcessInstanceEventBody.class.getName(), + ProcessDefinitionDataEvent.class.getName(), + ProcessDefinitionEventBody.class.getName(), + NodeDefinitionEventBody.class.getName(), + VariableInstanceDataEvent.class.getName(), + VariableInstanceEventBody.class.getName()); } @BuildStep diff --git a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/pom.xml b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/pom.xml index 49a2036d6d0..2920d99b0ae 100644 --- a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/pom.xml +++ b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/pom.xml @@ -63,6 +63,10 @@ io.quarkus quarkus-elytron-security-properties-file + + org.kie.kogito + kogito-addons-quarkus-process-management + org.kie.kogito diff --git a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/main/resources/application.properties b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/main/resources/application.properties index 952daab5c23..88cb9835a87 100644 --- a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/main/resources/application.properties +++ b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/main/resources/application.properties @@ -203,6 +203,18 @@ mp.messaging.outgoing.kogito-usertaskinstances-events.value.serializer=org.apach mp.messaging.outgoing.kogito-usertaskinstances-events.group.id=kogito-data-index-it mp.messaging.outgoing.kogito-usertaskinstances-events.auto.offset.reset=latest +mp.messaging.outgoing.kogito-variables-events.connector=smallrye-kafka +mp.messaging.outgoing.kogito-variables-events.topic=kogito-variables-events +mp.messaging.outgoing.kogito-variables-events.value.serializer=org.apache.kafka.common.serialization.StringSerializer +mp.messaging.outgoing.kogito-variables-events.group.id=kogito-data-index-it +mp.messaging.outgoing.kogito-variables-events.auto.offset.reset=latest + +mp.messaging.outgoing.kogito-process-definition-events.connector=smallrye-kafka +mp.messaging.outgoing.kogito-process-definition-events.topic=kogito-process-definition-events +mp.messaging.outgoing.kogito-process-definition-events.value.serializer=org.apache.kafka.common.serialization.StringSerializer +mp.messaging.outgoing.kogito-process-definition-events.group.id=kogito-data-index-it +mp.messaging.outgoing.kogito-process-definition-events.auto.offset.reset=latest + quarkus.native.additional-build-args=-H:SerializationConfigurationResources=serialization-config.json # Maximum Java heap to be used during the native image generation quarkus.native.native-image-xmx=8g diff --git a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/WorkflowEventIT.java b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/WorkflowEventIT.java index f670e1f044b..dd5db073175 100644 --- a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/WorkflowEventIT.java +++ b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/WorkflowEventIT.java @@ -18,20 +18,30 @@ */ package org.kie.kogito.quarkus.workflows; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; +import org.assertj.core.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.kie.kogito.event.EventPublisher; +import org.kie.kogito.event.process.ProcessDataEvent; +import org.kie.kogito.event.process.ProcessDefinitionDataEvent; +import org.kie.kogito.event.process.ProcessDefinitionEventBody; import org.kie.kogito.event.process.ProcessInstanceDataEvent; import org.kie.kogito.test.quarkus.QuarkusTestProperty; import org.kie.kogito.test.quarkus.kafka.KafkaTestClient; import org.kie.kogito.testcontainers.quarkus.KafkaQuarkusTestResource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.testcontainers.shaded.org.awaitility.Awaitility; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; @@ -54,7 +64,6 @@ public class WorkflowEventIT { } private static final Logger LOGGER = LoggerFactory.getLogger(WorkflowEventIT.class); - public static final String KOGITO_PROCESSINSTANCES_EVENTS = "kogito-processinstances-events"; public KafkaTestClient kafkaClient; private ObjectMapper mapper; @@ -77,7 +86,7 @@ void testWorkflowEvents() throws Exception { String username = "buddy"; String password = "buddy"; - kafkaClient.consume(Set.of(KOGITO_PROCESSINSTANCES_EVENTS), s -> { + kafkaClient.consume(Set.of(EventPublisher.PI_TOPIC_NAME), s -> { LOGGER.info("Received from kafka: {}", s); try { ProcessInstanceDataEvent event = mapper.readValue(s, ProcessInstanceDataEvent.class); @@ -109,4 +118,37 @@ void testWorkflowEvents() throws Exception { future.get(10, TimeUnit.SECONDS); } + + @Test + void testWorkflowDefinitionsEvents() { + List definitionDataEvents = new ArrayList<>(); + kafkaClient.consume(Set.of(EventPublisher.PD_TOPIC_NAME), s -> { + LOGGER.debug("Received from kafka: {}", s); + try { + ProcessDefinitionDataEvent event = mapper.readValue(s, ProcessDefinitionDataEvent.class); + definitionDataEvents.add(event); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + }); + + List processIds = given() + .contentType(ContentType.JSON) + .accept(ContentType.JSON) + .when() + .get("/management/processes") + .then() + .statusCode(200) + .extract() + .body().as(List.class); + + Awaitility.waitAtMost(10, TimeUnit.SECONDS).untilAsserted(() -> Assertions.assertThat(definitionDataEvents).hasSize(processIds.size())); + + List processIdsFromEvent = definitionDataEvents.stream() + .map(ProcessDefinitionDataEvent::getData) + .map(ProcessDefinitionEventBody::getId) + .collect(Collectors.toList()); + + Assertions.assertThat(processIdsFromEvent).containsAll(processIds); + } } \ No newline at end of file diff --git a/springboot/addons/events/kafka/src/main/java/org/kie/kogito/events/spring/KafkaEventPublisher.java b/springboot/addons/events/kafka/src/main/java/org/kie/kogito/events/spring/KafkaEventPublisher.java index 59301bb31e1..d34f270ead8 100644 --- a/springboot/addons/events/kafka/src/main/java/org/kie/kogito/events/spring/KafkaEventPublisher.java +++ b/springboot/addons/events/kafka/src/main/java/org/kie/kogito/events/spring/KafkaEventPublisher.java @@ -35,9 +35,6 @@ @Component public class KafkaEventPublisher implements EventPublisher { - private static final String PI_TOPIC_NAME = "kogito-processinstances-events"; - private static final String UI_TOPIC_NAME = "kogito-usertaskinstances-events"; - private static final Logger logger = LoggerFactory.getLogger(KafkaEventPublisher.class); @Autowired @@ -52,6 +49,9 @@ public class KafkaEventPublisher implements EventPublisher { @Value("${kogito.events.processinstances.enabled:true}") private boolean processInstancesEvents; + @Value("${kogito.events.process-definition.enabled:true}") + private boolean processDefinitionEvents; + @Value("${kogito.events.usertasks.enabled:true}") private boolean userTasksEvents; @@ -74,6 +74,11 @@ public void publish(DataEvent event) { case "UserTaskInstanceVariableDataEvent": publishToTopic(event, UI_TOPIC_NAME); break; + case "ProcessDefinitionEvent": + if (processDefinitionEvents) { + publishToTopic(event, PD_TOPIC_NAME); + } + break; default: logger.debug("Unknown type of event '{}', ignoring for this publisher", event.getType()); } From e5d7a4be38cd4033fb3f897524d7fbeff904bbbf Mon Sep 17 00:00:00 2001 From: Tiago Dolphine Date: Mon, 16 Oct 2023 14:10:39 -0300 Subject: [PATCH 02/19] Extracting the logic to build the process name in the utils class --- .../kie/kogito/internal/utils/ConversionUtils.java | 12 ++++++++++++ .../kogito/internal/utils/ConversionUtilsTest.java | 12 ++++++++++++ .../registry/ProcessDefinitionEventRegistry.java | 5 ++++- .../codegen/process/ProcessResourceGenerator.java | 3 ++- 4 files changed, 30 insertions(+), 2 deletions(-) diff --git a/api/kogito-api/src/main/java/org/kie/kogito/internal/utils/ConversionUtils.java b/api/kogito-api/src/main/java/org/kie/kogito/internal/utils/ConversionUtils.java index 42a1eb7cb08..d6356c70b7f 100644 --- a/api/kogito-api/src/main/java/org/kie/kogito/internal/utils/ConversionUtils.java +++ b/api/kogito-api/src/main/java/org/kie/kogito/internal/utils/ConversionUtils.java @@ -261,4 +261,16 @@ public static String sanitizeJavaName(String name, boolean capitalize) { } return sb.toString(); } + + /** + * Receives a String possibly with FQDN org.acme.ProcessTest1 and returns a simple name like ProcessTest1 + * @param processId a possible FQDN + * @return simple name + */ + public static String sanitizeToSimpleName(String processId){ + if(Objects.isNull(processId)){ + return null; + } + return processId.substring(processId.lastIndexOf('.') + 1); + } } diff --git a/api/kogito-api/src/test/java/org/kie/kogito/internal/utils/ConversionUtilsTest.java b/api/kogito-api/src/test/java/org/kie/kogito/internal/utils/ConversionUtilsTest.java index 3b2d6b7993f..141e9a57ee4 100644 --- a/api/kogito-api/src/test/java/org/kie/kogito/internal/utils/ConversionUtilsTest.java +++ b/api/kogito-api/src/test/java/org/kie/kogito/internal/utils/ConversionUtilsTest.java @@ -27,6 +27,7 @@ import static org.kie.kogito.internal.utils.ConversionUtils.concatPaths; import static org.kie.kogito.internal.utils.ConversionUtils.convert; import static org.kie.kogito.internal.utils.ConversionUtils.convertToCollection; +import static org.kie.kogito.internal.utils.ConversionUtils.sanitizeToSimpleName; import static org.kie.kogito.internal.utils.ConversionUtils.toCamelCase; class ConversionUtilsTest { @@ -138,4 +139,15 @@ public void testConcatPaths() { public void testConvertToCollection() { assertThat(convertToCollection("1,2,3", Integer.class)).isEqualTo(Arrays.asList(1, 2, 3)); } + + @Test + public void testSanitizeToSimpleName(){ + String nameFull = "org.acme.ProcessTest1"; + String nameSimple = "ProcessTest2"; + String nameEmpty = ""; + assertThat(sanitizeToSimpleName(nameFull)).isEqualTo("ProcessTest1"); + assertThat(sanitizeToSimpleName(nameSimple)).isEqualTo("ProcessTest2"); + assertThat(sanitizeToSimpleName(nameEmpty)).isEqualTo(""); + assertThat(sanitizeToSimpleName(null)).isNull(); + } } diff --git a/api/kogito-services/src/main/java/org/kie/kogito/services/registry/ProcessDefinitionEventRegistry.java b/api/kogito-services/src/main/java/org/kie/kogito/services/registry/ProcessDefinitionEventRegistry.java index f347144de09..3847b4c30a5 100644 --- a/api/kogito-services/src/main/java/org/kie/kogito/services/registry/ProcessDefinitionEventRegistry.java +++ b/api/kogito-services/src/main/java/org/kie/kogito/services/registry/ProcessDefinitionEventRegistry.java @@ -27,6 +27,7 @@ import org.kie.kogito.event.process.NodeDefinitionEventBody; import org.kie.kogito.event.process.ProcessDefinitionDataEvent; import org.kie.kogito.event.process.ProcessDefinitionEventBody; +import org.kie.kogito.internal.utils.ConversionUtils; import org.kie.kogito.process.Process; import org.kie.kogito.process.Processes; import org.slf4j.Logger; @@ -71,7 +72,9 @@ private Function, ProcessDefinitionDataEvent> mapProcessDefinition(Se } private static String getEndpoint(String endpoint, Process p) { - return endpoint + "/" + (p.id().contains(".") ? p.id().substring(p.id().lastIndexOf('.') + 1) : p.id()); + //sanitize process path in case of fqdn org.acme.ProcessExample -> ProcessExample + String processPath = ConversionUtils.sanitizeToSimpleName(p.id()); + return endpoint + "/" + processPath; } private List getNodesDefinitions(Process p) { return p.findNodes(n -> true).stream() diff --git a/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/ProcessResourceGenerator.java b/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/ProcessResourceGenerator.java index eece2d904ad..0bcd47adbba 100644 --- a/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/ProcessResourceGenerator.java +++ b/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/ProcessResourceGenerator.java @@ -61,6 +61,7 @@ import com.github.javaparser.ast.stmt.SwitchStmt; import com.github.javaparser.ast.type.ClassOrInterfaceType; import com.github.javaparser.ast.type.Type; +import org.kie.kogito.internal.utils.ConversionUtils; import static com.github.javaparser.StaticJavaParser.parse; import static org.kie.kogito.codegen.core.CodegenUtils.interpolateTypes; @@ -108,7 +109,7 @@ public ProcessResourceGenerator( this.context = context; this.process = process; this.processId = process.getId(); - this.processName = processId.substring(processId.lastIndexOf('.') + 1); + this.processName = ConversionUtils.sanitizeToSimpleName(processId); this.resourceClazzName = sanitizeClassName(processName + "Resource"); this.relativePath = process.getPackageName().replace(".", "/") + "/" + resourceClazzName + ".java"; this.modelfqcn = modelfqcn; From 2c3821bec8f356fba7f54c9d9ac06bceef4ebb66 Mon Sep 17 00:00:00 2001 From: Tiago Dolphine Date: Mon, 16 Oct 2023 16:30:26 -0300 Subject: [PATCH 03/19] fix formatting --- .../java/org/kie/kogito/internal/utils/ConversionUtils.java | 5 +++-- .../org/kie/kogito/internal/utils/ConversionUtilsTest.java | 2 +- .../kie/kogito/event/process/NodeDefinitionEventBody.java | 1 + .../kie/kogito/event/process/ProcessDefinitionEventBody.java | 3 ++- .../kie/kogito/event/process/ProcessDefinitionDataEvent.java | 3 ++- .../services/registry/ProcessDefinitionEventRegistry.java | 1 + 6 files changed, 10 insertions(+), 5 deletions(-) diff --git a/api/kogito-api/src/main/java/org/kie/kogito/internal/utils/ConversionUtils.java b/api/kogito-api/src/main/java/org/kie/kogito/internal/utils/ConversionUtils.java index d6356c70b7f..ee0a4a64234 100644 --- a/api/kogito-api/src/main/java/org/kie/kogito/internal/utils/ConversionUtils.java +++ b/api/kogito-api/src/main/java/org/kie/kogito/internal/utils/ConversionUtils.java @@ -264,11 +264,12 @@ public static String sanitizeJavaName(String name, boolean capitalize) { /** * Receives a String possibly with FQDN org.acme.ProcessTest1 and returns a simple name like ProcessTest1 + * * @param processId a possible FQDN * @return simple name */ - public static String sanitizeToSimpleName(String processId){ - if(Objects.isNull(processId)){ + public static String sanitizeToSimpleName(String processId) { + if (Objects.isNull(processId)) { return null; } return processId.substring(processId.lastIndexOf('.') + 1); diff --git a/api/kogito-api/src/test/java/org/kie/kogito/internal/utils/ConversionUtilsTest.java b/api/kogito-api/src/test/java/org/kie/kogito/internal/utils/ConversionUtilsTest.java index 141e9a57ee4..43f1cc41534 100644 --- a/api/kogito-api/src/test/java/org/kie/kogito/internal/utils/ConversionUtilsTest.java +++ b/api/kogito-api/src/test/java/org/kie/kogito/internal/utils/ConversionUtilsTest.java @@ -141,7 +141,7 @@ public void testConvertToCollection() { } @Test - public void testSanitizeToSimpleName(){ + public void testSanitizeToSimpleName() { String nameFull = "org.acme.ProcessTest1"; String nameSimple = "ProcessTest2"; String nameEmpty = ""; diff --git a/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/NodeDefinitionEventBody.java b/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/NodeDefinitionEventBody.java index 5ae83e848a6..df32527343d 100644 --- a/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/NodeDefinitionEventBody.java +++ b/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/NodeDefinitionEventBody.java @@ -11,6 +11,7 @@ public class NodeDefinitionEventBody { public NodeDefinitionEventBody() { } + public NodeDefinitionEventBody(String id, String nodeName, String nodeType, String uniqueId, Map metadata) { this.id = id; this.nodeName = nodeName; diff --git a/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessDefinitionEventBody.java b/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessDefinitionEventBody.java index 27304d8bb59..8be617fff98 100644 --- a/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessDefinitionEventBody.java +++ b/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessDefinitionEventBody.java @@ -84,9 +84,10 @@ public List getNodes() { return nodes; } - public static ProcessDefinitionEventBodyBuilder builder(){ + public static ProcessDefinitionEventBodyBuilder builder() { return new ProcessDefinitionEventBodyBuilder(); } + public static class ProcessDefinitionEventBodyBuilder { private String id; private String name; diff --git a/api/kogito-events-core/src/main/java/org/kie/kogito/event/process/ProcessDefinitionDataEvent.java b/api/kogito-events-core/src/main/java/org/kie/kogito/event/process/ProcessDefinitionDataEvent.java index 9651821ae4d..2bfb1df3466 100644 --- a/api/kogito-events-core/src/main/java/org/kie/kogito/event/process/ProcessDefinitionDataEvent.java +++ b/api/kogito-events-core/src/main/java/org/kie/kogito/event/process/ProcessDefinitionDataEvent.java @@ -22,9 +22,10 @@ public class ProcessDefinitionDataEvent extends ProcessDataEvent p) { String processPath = ConversionUtils.sanitizeToSimpleName(p.id()); return endpoint + "/" + processPath; } + private List getNodesDefinitions(Process p) { return p.findNodes(n -> true).stream() .map(node -> NodeDefinitionEventBody.builder() From fc6793da7c628d2b5f99015d22d4954ef4d09b00 Mon Sep 17 00:00:00 2001 From: Tiago Dolphine Date: Tue, 17 Oct 2023 08:40:00 -0300 Subject: [PATCH 04/19] applying pr comments --- .../kogito/event/process/NodeDefinition.java | 101 ++++++++++++++++++ .../process/NodeDefinitionEventBody.java | 83 -------------- .../process/ProcessDefinitionEventBody.java | 10 +- .../kogito/event/impl/ProcessEventBatch.java | 18 ++++ .../ProcessDefinitionEventRegistry.java | 36 ++++--- 5 files changed, 143 insertions(+), 105 deletions(-) create mode 100644 api/kogito-events-api/src/main/java/org/kie/kogito/event/process/NodeDefinition.java delete mode 100644 api/kogito-events-api/src/main/java/org/kie/kogito/event/process/NodeDefinitionEventBody.java diff --git a/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/NodeDefinition.java b/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/NodeDefinition.java new file mode 100644 index 00000000000..bfae93f1da6 --- /dev/null +++ b/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/NodeDefinition.java @@ -0,0 +1,101 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ +package org.kie.kogito.event.process; + +import java.util.Map; + +public class NodeDefinition { + private String id; + private String name; + private String type; + private String uniqueId; + private Map metadata; + + public NodeDefinition() { + } + + public NodeDefinition(String id, String name, String type, String uniqueId, Map metadata) { + this.id = id; + this.name = name; + this.type = type; + this.uniqueId = uniqueId; + this.metadata = metadata; + } + + public String getId() { + return id; + } + + public String getName() { + return name; + } + + public String getType() { + return type; + } + + public String getUniqueId() { + return uniqueId; + } + + public Map getMetadata() { + return metadata; + } + + public static NodeDefinitionEventBodyBuilder builder() { + return new NodeDefinitionEventBodyBuilder(); + } + + public static class NodeDefinitionEventBodyBuilder { + private String id; + private String name; + private String type; + private String uniqueId; + private Map metadata; + + public NodeDefinitionEventBodyBuilder setId(String id) { + this.id = id; + return this; + } + + public NodeDefinitionEventBodyBuilder setName(String name) { + this.name = name; + return this; + } + + public NodeDefinitionEventBodyBuilder setType(String type) { + this.type = type; + return this; + } + + public NodeDefinitionEventBodyBuilder setUniqueId(String uniqueId) { + this.uniqueId = uniqueId; + return this; + } + + public NodeDefinitionEventBodyBuilder setMetadata(Map metadata) { + this.metadata = metadata; + return this; + } + + public NodeDefinition build() { + return new NodeDefinition(id, name, type, uniqueId, metadata); + } + } +} diff --git a/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/NodeDefinitionEventBody.java b/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/NodeDefinitionEventBody.java deleted file mode 100644 index df32527343d..00000000000 --- a/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/NodeDefinitionEventBody.java +++ /dev/null @@ -1,83 +0,0 @@ -package org.kie.kogito.event.process; - -import java.util.Map; - -public class NodeDefinitionEventBody { - private String id; - private String nodeName; - private String nodeType; - private String uniqueId; - private Map metadata; - - public NodeDefinitionEventBody() { - } - - public NodeDefinitionEventBody(String id, String nodeName, String nodeType, String uniqueId, Map metadata) { - this.id = id; - this.nodeName = nodeName; - this.nodeType = nodeType; - this.uniqueId = uniqueId; - this.metadata = metadata; - } - - public String getId() { - return id; - } - - public String getNodeName() { - return nodeName; - } - - public String getNodeType() { - return nodeType; - } - - public String getUniqueId() { - return uniqueId; - } - - public Map getMetadata() { - return metadata; - } - - public static NodeDefinitionEventBodyBuilder builder() { - return new NodeDefinitionEventBodyBuilder(); - } - - public static class NodeDefinitionEventBodyBuilder { - private String id; - private String nodeName; - private String nodeType; - private String uniqueId; - private Map metadata; - - public NodeDefinitionEventBodyBuilder setId(String id) { - this.id = id; - return this; - } - - public NodeDefinitionEventBodyBuilder setNodeName(String nodeName) { - this.nodeName = nodeName; - return this; - } - - public NodeDefinitionEventBodyBuilder setNodeType(String nodeType) { - this.nodeType = nodeType; - return this; - } - - public NodeDefinitionEventBodyBuilder setUniqueId(String uniqueId) { - this.uniqueId = uniqueId; - return this; - } - - public NodeDefinitionEventBodyBuilder setMetadata(Map metadata) { - this.metadata = metadata; - return this; - } - - public NodeDefinitionEventBody build() { - return new NodeDefinitionEventBody(id, nodeName, nodeType, uniqueId, metadata); - } - } -} diff --git a/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessDefinitionEventBody.java b/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessDefinitionEventBody.java index 8be617fff98..134e2ecdd4b 100644 --- a/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessDefinitionEventBody.java +++ b/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessDefinitionEventBody.java @@ -31,12 +31,12 @@ public class ProcessDefinitionEventBody { private Set addons; private String endpoint; private String source; - private List nodes; + private List nodes; public ProcessDefinitionEventBody() { } - public ProcessDefinitionEventBody(String id, String name, String version, String type, Set roles, Set addons, String endpoint, String source, List nodes) { + public ProcessDefinitionEventBody(String id, String name, String version, String type, Set roles, Set addons, String endpoint, String source, List nodes) { this.id = id; this.name = name; this.version = version; @@ -80,7 +80,7 @@ public String getSource() { return source; } - public List getNodes() { + public List getNodes() { return nodes; } @@ -97,7 +97,7 @@ public static class ProcessDefinitionEventBodyBuilder { private Set addons; private String endpoint; private String source; - private List nodes; + private List nodes; public ProcessDefinitionEventBodyBuilder setId(String id) { this.id = id; @@ -139,7 +139,7 @@ public ProcessDefinitionEventBodyBuilder setSource(String source) { return this; } - public ProcessDefinitionEventBodyBuilder setNodes(List nodes) { + public ProcessDefinitionEventBodyBuilder setNodes(List nodes) { this.nodes = nodes; return this; } diff --git a/api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/ProcessEventBatch.java b/api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/ProcessEventBatch.java index 0a4479a1d4c..edf004f39d3 100644 --- a/api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/ProcessEventBatch.java +++ b/api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/ProcessEventBatch.java @@ -1,3 +1,21 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ package org.kie.kogito.event.impl; import java.util.ArrayList; diff --git a/api/kogito-services/src/main/java/org/kie/kogito/services/registry/ProcessDefinitionEventRegistry.java b/api/kogito-services/src/main/java/org/kie/kogito/services/registry/ProcessDefinitionEventRegistry.java index c3b97b3689e..468113f2fda 100644 --- a/api/kogito-services/src/main/java/org/kie/kogito/services/registry/ProcessDefinitionEventRegistry.java +++ b/api/kogito-services/src/main/java/org/kie/kogito/services/registry/ProcessDefinitionEventRegistry.java @@ -1,19 +1,21 @@ /* - * Copyright 2023 Red Hat, Inc. and/or its affiliates. + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 * - * 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 * - * 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. + * 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. */ - package org.kie.kogito.services.registry; import java.util.List; @@ -24,7 +26,7 @@ import org.kie.kogito.Application; import org.kie.kogito.event.EventBatch; import org.kie.kogito.event.impl.ProcessEventBatch; -import org.kie.kogito.event.process.NodeDefinitionEventBody; +import org.kie.kogito.event.process.NodeDefinition; import org.kie.kogito.event.process.ProcessDefinitionDataEvent; import org.kie.kogito.event.process.ProcessDefinitionEventBody; import org.kie.kogito.internal.utils.ConversionUtils; @@ -77,12 +79,12 @@ private static String getEndpoint(String endpoint, Process p) { return endpoint + "/" + processPath; } - private List getNodesDefinitions(Process p) { + private List getNodesDefinitions(Process p) { return p.findNodes(n -> true).stream() - .map(node -> NodeDefinitionEventBody.builder() + .map(node -> NodeDefinition.builder() .setId(String.valueOf(node.getId())) - .setNodeName(node.getName()) - .setNodeType(node.getNodeType().name()) + .setName(node.getName()) + .setType(node.getNodeType().name()) .setUniqueId(node.getNodeUniqueId()) .setMetadata(node.getMetaData()) .build()) From b3423a0bb0bc9d666d0c82ae8b3a3ccff7c909fc Mon Sep 17 00:00:00 2001 From: Tiago Dolphine Date: Tue, 17 Oct 2023 09:21:39 -0300 Subject: [PATCH 05/19] fix headers + concurrent issue on IT --- .../ProcessDefinitionRegistration.java | 18 ++++++++++++++++++ .../ServerlessWorkflowAssetsProcessor.java | 4 ++-- .../quarkus/workflows/WorkflowEventIT.java | 3 ++- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/quarkus/extensions/kogito-quarkus-extension-common/kogito-quarkus-common/src/main/java/org/kie/kogito/quarkus/registry/ProcessDefinitionRegistration.java b/quarkus/extensions/kogito-quarkus-extension-common/kogito-quarkus-common/src/main/java/org/kie/kogito/quarkus/registry/ProcessDefinitionRegistration.java index fc289957c77..bc989682039 100644 --- a/quarkus/extensions/kogito-quarkus-extension-common/kogito-quarkus-common/src/main/java/org/kie/kogito/quarkus/registry/ProcessDefinitionRegistration.java +++ b/quarkus/extensions/kogito-quarkus-extension-common/kogito-quarkus-common/src/main/java/org/kie/kogito/quarkus/registry/ProcessDefinitionRegistration.java @@ -1,3 +1,21 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ package org.kie.kogito.quarkus.registry; import javax.enterprise.context.ApplicationScoped; diff --git a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-deployment/src/main/java/org/kie/kogito/quarkus/serverless/workflow/deployment/ServerlessWorkflowAssetsProcessor.java b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-deployment/src/main/java/org/kie/kogito/quarkus/serverless/workflow/deployment/ServerlessWorkflowAssetsProcessor.java index 691092f2386..4fcdc7668b8 100644 --- a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-deployment/src/main/java/org/kie/kogito/quarkus/serverless/workflow/deployment/ServerlessWorkflowAssetsProcessor.java +++ b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-deployment/src/main/java/org/kie/kogito/quarkus/serverless/workflow/deployment/ServerlessWorkflowAssetsProcessor.java @@ -31,7 +31,7 @@ import org.kie.kogito.codegen.api.context.KogitoBuildContext; import org.kie.kogito.codegen.process.ProcessContainerGenerator; import org.kie.kogito.codegen.process.ProcessGenerator; -import org.kie.kogito.event.process.NodeDefinitionEventBody; +import org.kie.kogito.event.process.NodeDefinition; import org.kie.kogito.event.process.NodeInstanceEventBody; import org.kie.kogito.event.process.ProcessDataEvent; import org.kie.kogito.event.process.ProcessDefinitionDataEvent; @@ -134,7 +134,7 @@ public ReflectiveClassBuildItem eventsApiReflection() { ProcessInstanceEventBody.class.getName(), ProcessDefinitionDataEvent.class.getName(), ProcessDefinitionEventBody.class.getName(), - NodeDefinitionEventBody.class.getName(), + NodeDefinition.class.getName(), VariableInstanceDataEvent.class.getName(), VariableInstanceEventBody.class.getName()); } diff --git a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/WorkflowEventIT.java b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/WorkflowEventIT.java index dd5db073175..3d7cdf37e41 100644 --- a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/WorkflowEventIT.java +++ b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/WorkflowEventIT.java @@ -19,6 +19,7 @@ package org.kie.kogito.quarkus.workflows; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; @@ -121,7 +122,7 @@ void testWorkflowEvents() throws Exception { @Test void testWorkflowDefinitionsEvents() { - List definitionDataEvents = new ArrayList<>(); + List definitionDataEvents = Collections.synchronizedList(new ArrayList<>()); kafkaClient.consume(Set.of(EventPublisher.PD_TOPIC_NAME), s -> { LOGGER.debug("Received from kafka: {}", s); try { From e3bc5996c2e5f2dad277d94f74b81fbffe6b86ed Mon Sep 17 00:00:00 2001 From: Tiago Dolphine Date: Tue, 17 Oct 2023 13:18:44 -0300 Subject: [PATCH 06/19] concurrent issue on IT --- .../quarkus/workflows/WorkflowEventIT.java | 30 +++++++++---------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/WorkflowEventIT.java b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/WorkflowEventIT.java index 3d7cdf37e41..91da77d50fc 100644 --- a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/WorkflowEventIT.java +++ b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/WorkflowEventIT.java @@ -18,16 +18,23 @@ */ package org.kie.kogito.quarkus.workflows; -import java.util.ArrayList; -import java.util.Collections; +import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; -import org.assertj.core.api.Assertions; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import io.cloudevents.jackson.JsonFormat; +import io.quarkus.test.common.QuarkusTestResource; +import io.quarkus.test.junit.QuarkusIntegrationTest; +import io.restassured.RestAssured; +import io.restassured.http.ContentType; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.kie.kogito.event.EventPublisher; @@ -42,17 +49,8 @@ import org.slf4j.LoggerFactory; import org.testcontainers.shaded.org.awaitility.Awaitility; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; - -import io.cloudevents.jackson.JsonFormat; -import io.quarkus.test.common.QuarkusTestResource; -import io.quarkus.test.junit.QuarkusIntegrationTest; -import io.restassured.RestAssured; -import io.restassured.http.ContentType; - import static io.restassured.RestAssured.given; +import static org.assertj.core.api.Assertions.assertThat; import static org.hamcrest.CoreMatchers.is; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -122,7 +120,7 @@ void testWorkflowEvents() throws Exception { @Test void testWorkflowDefinitionsEvents() { - List definitionDataEvents = Collections.synchronizedList(new ArrayList<>()); + Collection definitionDataEvents = new ConcurrentLinkedQueue<>(); kafkaClient.consume(Set.of(EventPublisher.PD_TOPIC_NAME), s -> { LOGGER.debug("Received from kafka: {}", s); try { @@ -143,13 +141,13 @@ void testWorkflowDefinitionsEvents() { .extract() .body().as(List.class); - Awaitility.waitAtMost(10, TimeUnit.SECONDS).untilAsserted(() -> Assertions.assertThat(definitionDataEvents).hasSize(processIds.size())); + Awaitility.waitAtMost(10, TimeUnit.SECONDS).pollInterval(1, TimeUnit.SECONDS).untilAsserted(() -> assertThat(definitionDataEvents).hasSize(processIds.size())); List processIdsFromEvent = definitionDataEvents.stream() .map(ProcessDefinitionDataEvent::getData) .map(ProcessDefinitionEventBody::getId) .collect(Collectors.toList()); - Assertions.assertThat(processIdsFromEvent).containsAll(processIds); + assertThat(processIdsFromEvent).containsAll(processIds); } } \ No newline at end of file From 97703bed8c4bac1f38b488780b35387eb4a13204 Mon Sep 17 00:00:00 2001 From: Tiago Dolphine Date: Wed, 18 Oct 2023 11:31:42 -0300 Subject: [PATCH 07/19] Fixing formatter issues --- .../ProcessDefinitionRegistration.java | 3 ++- .../quarkus/workflows/WorkflowEventIT.java | 18 ++++++++++-------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/quarkus/extensions/kogito-quarkus-extension-common/kogito-quarkus-common/src/main/java/org/kie/kogito/quarkus/registry/ProcessDefinitionRegistration.java b/quarkus/extensions/kogito-quarkus-extension-common/kogito-quarkus-common/src/main/java/org/kie/kogito/quarkus/registry/ProcessDefinitionRegistration.java index bc989682039..4ec977733a0 100644 --- a/quarkus/extensions/kogito-quarkus-extension-common/kogito-quarkus-common/src/main/java/org/kie/kogito/quarkus/registry/ProcessDefinitionRegistration.java +++ b/quarkus/extensions/kogito-quarkus-extension-common/kogito-quarkus-common/src/main/java/org/kie/kogito/quarkus/registry/ProcessDefinitionRegistration.java @@ -23,12 +23,13 @@ import javax.enterprise.inject.Instance; import javax.inject.Inject; -import io.quarkus.runtime.StartupEvent; import org.kie.kogito.Application; import org.kie.kogito.process.Processes; import org.kie.kogito.quarkus.config.KogitoRuntimeConfig; import org.kie.kogito.services.registry.ProcessDefinitionEventRegistry; +import io.quarkus.runtime.StartupEvent; + @ApplicationScoped public class ProcessDefinitionRegistration { diff --git a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/WorkflowEventIT.java b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/WorkflowEventIT.java index 91da77d50fc..86f144a071a 100644 --- a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/WorkflowEventIT.java +++ b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/WorkflowEventIT.java @@ -27,14 +27,6 @@ import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import io.cloudevents.jackson.JsonFormat; -import io.quarkus.test.common.QuarkusTestResource; -import io.quarkus.test.junit.QuarkusIntegrationTest; -import io.restassured.RestAssured; -import io.restassured.http.ContentType; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.kie.kogito.event.EventPublisher; @@ -49,6 +41,16 @@ import org.slf4j.LoggerFactory; import org.testcontainers.shaded.org.awaitility.Awaitility; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; + +import io.cloudevents.jackson.JsonFormat; +import io.quarkus.test.common.QuarkusTestResource; +import io.quarkus.test.junit.QuarkusIntegrationTest; +import io.restassured.RestAssured; +import io.restassured.http.ContentType; + import static io.restassured.RestAssured.given; import static org.assertj.core.api.Assertions.assertThat; import static org.hamcrest.CoreMatchers.is; From 70b6244208e636609ce60814ec464e9d43ae148e Mon Sep 17 00:00:00 2001 From: Tiago Dolphine Date: Wed, 18 Oct 2023 11:32:00 -0300 Subject: [PATCH 08/19] Fixing formatter issues --- .../src/main/java/org/kie/kogito/event/AbstractDataEvent.java | 3 +++ .../codegen/api/context/impl/SpringBootKogitoBuildContext.java | 1 - .../kie/kogito/codegen/process/ProcessResourceGenerator.java | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/api/kogito-events-core/src/main/java/org/kie/kogito/event/AbstractDataEvent.java b/api/kogito-events-core/src/main/java/org/kie/kogito/event/AbstractDataEvent.java index d3f6a29a269..2fcdd704196 100644 --- a/api/kogito-events-core/src/main/java/org/kie/kogito/event/AbstractDataEvent.java +++ b/api/kogito-events-core/src/main/java/org/kie/kogito/event/AbstractDataEvent.java @@ -54,6 +54,8 @@ import io.cloudevents.core.v03.CloudEventV03; import io.cloudevents.core.v1.CloudEventV1; +import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL; + /** * This is an implementation of the {@link DataEvent} that contains basic common attributes referring to * kogito processes metadata. @@ -61,6 +63,7 @@ * @param the payload class type */ @JsonIgnoreProperties(ignoreUnknown = true) +@JsonInclude(NON_NULL) public abstract class AbstractDataEvent implements DataEvent { /** diff --git a/kogito-codegen-modules/kogito-codegen-api/src/main/java/org/kie/kogito/codegen/api/context/impl/SpringBootKogitoBuildContext.java b/kogito-codegen-modules/kogito-codegen-api/src/main/java/org/kie/kogito/codegen/api/context/impl/SpringBootKogitoBuildContext.java index dca66f7d877..baa4fc4863c 100644 --- a/kogito-codegen-modules/kogito-codegen-api/src/main/java/org/kie/kogito/codegen/api/context/impl/SpringBootKogitoBuildContext.java +++ b/kogito-codegen-modules/kogito-codegen-api/src/main/java/org/kie/kogito/codegen/api/context/impl/SpringBootKogitoBuildContext.java @@ -35,7 +35,6 @@ public static Builder builder() { return new SpringBootKogitoBuildContextBuilder(); } - @Override public boolean hasRest() { return hasClassAvailable(SPRING_REST); diff --git a/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/ProcessResourceGenerator.java b/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/ProcessResourceGenerator.java index 0bcd47adbba..dfbb92dfb5d 100644 --- a/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/ProcessResourceGenerator.java +++ b/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/ProcessResourceGenerator.java @@ -43,6 +43,7 @@ import org.kie.kogito.codegen.core.CodegenUtils; import org.kie.kogito.codegen.core.GeneratorConfig; import org.kie.kogito.internal.process.runtime.KogitoWorkflowProcess; +import org.kie.kogito.internal.utils.ConversionUtils; import com.github.javaparser.ast.CompilationUnit; import com.github.javaparser.ast.Modifier.Keyword; @@ -61,7 +62,6 @@ import com.github.javaparser.ast.stmt.SwitchStmt; import com.github.javaparser.ast.type.ClassOrInterfaceType; import com.github.javaparser.ast.type.Type; -import org.kie.kogito.internal.utils.ConversionUtils; import static com.github.javaparser.StaticJavaParser.parse; import static org.kie.kogito.codegen.core.CodegenUtils.interpolateTypes; From 08932a8d138dd8f7d345a2114b8f670efe95a41b Mon Sep 17 00:00:00 2001 From: Tiago Dolphine Date: Thu, 19 Oct 2023 08:14:03 -0300 Subject: [PATCH 09/19] adding annotation, description, to the process definition event --- .../process/ProcessDefinitionEventBody.java | 53 ++++++++++++++++--- .../ProcessDefinitionEventRegistry.java | 45 +++++++++++----- .../ReactiveMessagingEventPublisher.java | 6 ++- 3 files changed, 80 insertions(+), 24 deletions(-) diff --git a/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessDefinitionEventBody.java b/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessDefinitionEventBody.java index 134e2ecdd4b..9a6a61813de 100644 --- a/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessDefinitionEventBody.java +++ b/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessDefinitionEventBody.java @@ -18,33 +18,40 @@ */ package org.kie.kogito.event.process; -import java.util.List; +import java.util.Collection; +import java.util.Map; import java.util.Set; public class ProcessDefinitionEventBody { - private String id; private String name; + private String description; private String version; private String type; private Set roles; private Set addons; + private Set annotations; private String endpoint; private String source; - private List nodes; + private Map metadata; + private Collection nodes; public ProcessDefinitionEventBody() { } - public ProcessDefinitionEventBody(String id, String name, String version, String type, Set roles, Set addons, String endpoint, String source, List nodes) { + public ProcessDefinitionEventBody(String id, String name, String description, String version, String type, Set roles, Set addons, Set annotations, String endpoint, + String source, Map metadata, Collection nodes) { this.id = id; this.name = name; + this.description = description; this.version = version; this.type = type; this.roles = roles; this.addons = addons; + this.annotations = annotations; this.endpoint = endpoint; this.source = source; + this.metadata = metadata; this.nodes = nodes; } @@ -80,10 +87,22 @@ public String getSource() { return source; } - public List getNodes() { + public Collection getNodes() { return nodes; } + public String getDescription() { + return description; + } + + public Set getAnnotations() { + return annotations; + } + + public Map getMetadata() { + return metadata; + } + public static ProcessDefinitionEventBodyBuilder builder() { return new ProcessDefinitionEventBodyBuilder(); } @@ -91,13 +110,16 @@ public static ProcessDefinitionEventBodyBuilder builder() { public static class ProcessDefinitionEventBodyBuilder { private String id; private String name; + private String description; private String version; private String type; private Set roles; private Set addons; + private Set annotations; private String endpoint; private String source; - private List nodes; + private Map metadata; + private Collection nodes; public ProcessDefinitionEventBodyBuilder setId(String id) { this.id = id; @@ -139,13 +161,28 @@ public ProcessDefinitionEventBodyBuilder setSource(String source) { return this; } - public ProcessDefinitionEventBodyBuilder setNodes(List nodes) { + public ProcessDefinitionEventBodyBuilder setDescription(String description) { + this.description = description; + return this; + } + + public ProcessDefinitionEventBodyBuilder setAnnotations(Set annotations) { + this.annotations = annotations; + return this; + } + + public ProcessDefinitionEventBodyBuilder setMetadata(Map metadata) { + this.metadata = metadata; + return this; + } + + public ProcessDefinitionEventBodyBuilder setNodes(Collection nodes) { this.nodes = nodes; return this; } public ProcessDefinitionEventBody build() { - return new ProcessDefinitionEventBody(id, name, version, type, roles, addons, endpoint, source, nodes); + return new ProcessDefinitionEventBody(id, name, description, version, type, roles, addons, annotations, endpoint, source, metadata, nodes); } } } diff --git a/api/kogito-services/src/main/java/org/kie/kogito/services/registry/ProcessDefinitionEventRegistry.java b/api/kogito-services/src/main/java/org/kie/kogito/services/registry/ProcessDefinitionEventRegistry.java index 468113f2fda..d7ad2afe2a0 100644 --- a/api/kogito-services/src/main/java/org/kie/kogito/services/registry/ProcessDefinitionEventRegistry.java +++ b/api/kogito-services/src/main/java/org/kie/kogito/services/registry/ProcessDefinitionEventRegistry.java @@ -18,9 +18,12 @@ */ package org.kie.kogito.services.registry; +import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.function.Function; +import java.util.function.Supplier; import java.util.stream.Collectors; import org.kie.kogito.Application; @@ -35,6 +38,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static java.util.Collections.emptyList; +import static java.util.stream.Collectors.toSet; + public class ProcessDefinitionEventRegistry { private static final Logger LOGGER = LoggerFactory.getLogger(ProcessDefinitionEventRegistry.class); @@ -61,16 +67,31 @@ public void register(Processes processes) { } private Function, ProcessDefinitionDataEvent> mapProcessDefinition(Set addons, String endpoint) { - return p -> new ProcessDefinitionDataEvent(ProcessDefinitionEventBody.builder() - .setId(p.id()) - .setName(p.name()) - .setVersion(p.version()) - .setType(ProcessDefinitionDataEvent.PROCESS_DEFINITION_EVENT) - .setAddons(addons) - .setEndpoint(getEndpoint(endpoint, p)) - .setSource(getProcessSource()) - .setNodes(getNodesDefinitions(p)) - .build()); + + return p -> { + Map metadata = Collections.emptyMap(); + if (p instanceof Supplier) { + org.kie.api.definition.process.Process processDefinition = ((Supplier) p).get(); + if (processDefinition != null) { + metadata = processDefinition.getMetaData(); + } + } + Set annotations = ((List) metadata.getOrDefault("annotations", emptyList())).stream().collect(toSet()); + String description = (String) metadata.get("Description"); + ProcessDefinitionDataEvent definitionDataEvent = new ProcessDefinitionDataEvent(ProcessDefinitionEventBody.builder() + .setId(p.id()) + .setName(p.name()) + .setVersion(p.version()) + .setType(ProcessDefinitionDataEvent.PROCESS_DEFINITION_EVENT) + .setAddons(addons) + .setEndpoint(getEndpoint(endpoint, p)) + .setNodes(getNodesDefinitions(p)) + .setAnnotations(annotations) + .setDescription(description) + .setMetadata(metadata) + .build()); + return definitionDataEvent; + }; } private static String getEndpoint(String endpoint, Process p) { @@ -90,8 +111,4 @@ private List getNodesDefinitions(Process p) { .build()) .collect(Collectors.toList()); } - - private String getProcessSource() { - return null; - } } diff --git a/quarkus/addons/events/process/runtime/src/main/java/org/kie/kogito/events/process/ReactiveMessagingEventPublisher.java b/quarkus/addons/events/process/runtime/src/main/java/org/kie/kogito/events/process/ReactiveMessagingEventPublisher.java index 719e79f03a5..76161b5395c 100644 --- a/quarkus/addons/events/process/runtime/src/main/java/org/kie/kogito/events/process/ReactiveMessagingEventPublisher.java +++ b/quarkus/addons/events/process/runtime/src/main/java/org/kie/kogito/events/process/ReactiveMessagingEventPublisher.java @@ -27,8 +27,6 @@ import javax.inject.Inject; import javax.inject.Singleton; -import com.fasterxml.jackson.databind.ObjectMapper; -import io.smallrye.reactive.messaging.providers.locals.ContextAwareMessage; import org.eclipse.microprofile.reactive.messaging.Channel; import org.eclipse.microprofile.reactive.messaging.Message; import org.kie.kogito.addon.quarkus.common.reactive.messaging.MessageDecoratorProvider; @@ -38,6 +36,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.fasterxml.jackson.databind.ObjectMapper; + +import io.smallrye.reactive.messaging.providers.locals.ContextAwareMessage; + @Singleton public class ReactiveMessagingEventPublisher implements EventPublisher { private static final String PI_TOPIC_NAME = "kogito-processinstances-events"; From 4cd1c08da196a24f7974efbcda31ee8c99bd7c04 Mon Sep 17 00:00:00 2001 From: Tiago Dolphine Date: Thu, 19 Oct 2023 10:19:16 -0300 Subject: [PATCH 10/19] fixes after rebase + applying pr comments --- .../org/kie/kogito/event/EventPublisher.java | 7 ++--- .../kogito/event/impl/ProcessEventBatch.java | 8 ++--- .../process/ProcessDefinitionDataEvent.java | 10 +++--- .../events/config/EventsRuntimeConfig.java | 13 ++------ .../ReactiveMessagingEventPublisher.java | 31 ++++++------------- .../ServerlessWorkflowAssetsProcessor.java | 10 ++---- .../src/main/resources/application.properties | 10 +++--- .../quarkus/workflows/WorkflowEventIT.java | 7 ++--- .../events/spring/KafkaEventPublisher.java | 6 ++-- 9 files changed, 37 insertions(+), 65 deletions(-) diff --git a/api/kogito-api/src/main/java/org/kie/kogito/event/EventPublisher.java b/api/kogito-api/src/main/java/org/kie/kogito/event/EventPublisher.java index b0a0ccee436..8a28f56d81b 100644 --- a/api/kogito-api/src/main/java/org/kie/kogito/event/EventPublisher.java +++ b/api/kogito-api/src/main/java/org/kie/kogito/event/EventPublisher.java @@ -31,10 +31,9 @@ */ public interface EventPublisher { - String PI_TOPIC_NAME = "kogito-processinstances-events"; - String UI_TOPIC_NAME = "kogito-usertaskinstances-events"; - String VI_TOPIC_NAME = "kogito-variables-events"; - String PD_TOPIC_NAME = "kogito-process-definition-events"; + String PROCESS_INSTANCES_TOPIC_NAME = "kogito-processinstances-events"; + String USER_TASK_INSTANCES_TOPIC_NAME = "kogito-usertaskinstances-events"; + String PROCESS_DEFINITIONS_TOPIC_NAME = "kogito-processdefinitions-events"; /** * Publishes individual event diff --git a/api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/ProcessEventBatch.java b/api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/ProcessEventBatch.java index edf004f39d3..fca70c09800 100644 --- a/api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/ProcessEventBatch.java +++ b/api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/ProcessEventBatch.java @@ -20,22 +20,22 @@ import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.List; import org.kie.kogito.event.DataEvent; import org.kie.kogito.event.EventBatch; -import org.kie.kogito.event.process.ProcessDataEvent; public class ProcessEventBatch implements EventBatch { - private List> events = new ArrayList<>(); + private List> events = Collections.synchronizedList(new ArrayList<>()); @Override public void append(Object rawEvent) { - if (!ProcessDataEvent.class.isInstance(rawEvent)) { + if (!DataEvent.class.isInstance(rawEvent)) { throw new IllegalArgumentException("The event is not a ProcessDataEvent"); } - events.add((ProcessDataEvent) rawEvent); + events.add((DataEvent) rawEvent); } @Override diff --git a/api/kogito-events-core/src/main/java/org/kie/kogito/event/process/ProcessDefinitionDataEvent.java b/api/kogito-events-core/src/main/java/org/kie/kogito/event/process/ProcessDefinitionDataEvent.java index 2bfb1df3466..22bbcb8ca22 100644 --- a/api/kogito-events-core/src/main/java/org/kie/kogito/event/process/ProcessDefinitionDataEvent.java +++ b/api/kogito-events-core/src/main/java/org/kie/kogito/event/process/ProcessDefinitionDataEvent.java @@ -18,7 +18,9 @@ */ package org.kie.kogito.event.process; -public class ProcessDefinitionDataEvent extends ProcessDataEvent { +import org.kie.kogito.event.AbstractDataEvent; + +public class ProcessDefinitionDataEvent extends AbstractDataEvent { public static final String PROCESS_DEFINITION_EVENT = "ProcessDefinitionEvent"; @@ -32,14 +34,12 @@ public ProcessDefinitionDataEvent(ProcessDefinitionEventBody body) { body, null, null, - null, - null, body.getId(), null, null, null, - body.getType(), null, - null); + null, + body.getType()); } } \ No newline at end of file diff --git a/quarkus/addons/events/process/runtime/src/main/java/org/kie/kogito/events/config/EventsRuntimeConfig.java b/quarkus/addons/events/process/runtime/src/main/java/org/kie/kogito/events/config/EventsRuntimeConfig.java index f1595e43f03..5e78b3de9b9 100644 --- a/quarkus/addons/events/process/runtime/src/main/java/org/kie/kogito/events/config/EventsRuntimeConfig.java +++ b/quarkus/addons/events/process/runtime/src/main/java/org/kie/kogito/events/config/EventsRuntimeConfig.java @@ -22,7 +22,7 @@ import io.quarkus.runtime.annotations.ConfigPhase; import io.quarkus.runtime.annotations.ConfigRoot; -@ConfigRoot(name = "", phase = ConfigPhase.RUN_TIME, prefix = "kogito.events") +@ConfigRoot(name = "kogito", phase = ConfigPhase.RUN_TIME, prefix = "events") public class EventsRuntimeConfig { /** @@ -34,7 +34,7 @@ public class EventsRuntimeConfig { /** * Enable publishing processes definition events */ - @ConfigItem(name = "process-definition.enabled", defaultValue = "true") + @ConfigItem(name = "processdefinitions.enabled", defaultValue = "true") boolean processDefinitionEventsEnabled; /** @@ -43,12 +43,6 @@ public class EventsRuntimeConfig { @ConfigItem(name = "usertasks.enabled", defaultValue = "true") boolean userTasksEventsEnabled; - /** - * Enable publishing processes instances variables events - */ - @ConfigItem(name = "variables.enabled", defaultValue = "true") - boolean variablesEventsEnabled; - public boolean isProcessInstancesEventsEnabled() { return processInstancesEventsEnabled; } @@ -61,7 +55,4 @@ public boolean isUserTasksEventsEnabled() { return userTasksEventsEnabled; } - public boolean isVariablesEventsEnabled() { - return variablesEventsEnabled; - } } diff --git a/quarkus/addons/events/process/runtime/src/main/java/org/kie/kogito/events/process/ReactiveMessagingEventPublisher.java b/quarkus/addons/events/process/runtime/src/main/java/org/kie/kogito/events/process/ReactiveMessagingEventPublisher.java index 76161b5395c..225f55eb4e1 100644 --- a/quarkus/addons/events/process/runtime/src/main/java/org/kie/kogito/events/process/ReactiveMessagingEventPublisher.java +++ b/quarkus/addons/events/process/runtime/src/main/java/org/kie/kogito/events/process/ReactiveMessagingEventPublisher.java @@ -38,12 +38,11 @@ import com.fasterxml.jackson.databind.ObjectMapper; +import io.smallrye.reactive.messaging.MutinyEmitter; import io.smallrye.reactive.messaging.providers.locals.ContextAwareMessage; @Singleton public class ReactiveMessagingEventPublisher implements EventPublisher { - private static final String PI_TOPIC_NAME = "kogito-processinstances-events"; - private static final String UI_TOPIC_NAME = "kogito-usertaskinstances-events"; private static final Logger logger = LoggerFactory.getLogger(ReactiveMessagingEventPublisher.class); @@ -51,25 +50,16 @@ public class ReactiveMessagingEventPublisher implements EventPublisher { ObjectMapper json; @Inject - @Channel(PI_TOPIC_NAME) + @Channel(PROCESS_INSTANCES_TOPIC_NAME) MutinyEmitter processInstancesEventsEmitter; @Inject - @Channel(PD_TOPIC_NAME) - Emitter processDefinitionEventsEmitter; + @Channel(PROCESS_DEFINITIONS_TOPIC_NAME) + MutinyEmitter processDefinitionEventsEmitter; @Inject - @Channel(UI_TOPIC_NAME) + @Channel(USER_TASK_INSTANCES_TOPIC_NAME) MutinyEmitter userTasksEventsEmitter; - - @Inject - @ConfigProperty(name = "kogito.events.processinstances.enabled") - Optional processInstancesEvents; - - @Inject - @ConfigProperty(name = "kogito.events.usertasks.enabled") - Optional userTasksEvents; - @Inject EventsRuntimeConfig eventsRuntimeConfig; @@ -87,10 +77,9 @@ public void init() { public void publish(DataEvent event) { switch (event.getType()) { - sdsfds case "ProcessDefinitionEvent": if (eventsRuntimeConfig.isProcessDefinitionEventsEnabled()) { - publishToTopic(event, processDefinitionEventsEmitter, PD_TOPIC_NAME); + publishToTopic(event, processDefinitionEventsEmitter, PROCESS_DEFINITIONS_TOPIC_NAME); } break; case "ProcessInstanceErrorDataEvent": @@ -98,8 +87,8 @@ public void publish(DataEvent event) { case "ProcessInstanceSLADataEvent": case "ProcessInstanceStateDataEvent": case "ProcessInstanceVariableDataEvent": - if (processInstancesEvents.orElse(true)) { - publishToTopic(event, processInstancesEventsEmitter, PI_TOPIC_NAME); + if (eventsRuntimeConfig.isProcessInstancesEventsEnabled()) { + publishToTopic(event, processInstancesEventsEmitter, PROCESS_INSTANCES_TOPIC_NAME); } break; @@ -109,8 +98,8 @@ public void publish(DataEvent event) { case "UserTaskInstanceDeadlineDataEvent": case "UserTaskInstanceStateDataEvent": case "UserTaskInstanceVariableDataEvent": - if (userTasksEvents.orElse(true)) { - publishToTopic(event, userTasksEventsEmitter, UI_TOPIC_NAME); + if (eventsRuntimeConfig.isUserTasksEventsEnabled()) { + publishToTopic(event, userTasksEventsEmitter, USER_TASK_INSTANCES_TOPIC_NAME); } break; default: diff --git a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-deployment/src/main/java/org/kie/kogito/quarkus/serverless/workflow/deployment/ServerlessWorkflowAssetsProcessor.java b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-deployment/src/main/java/org/kie/kogito/quarkus/serverless/workflow/deployment/ServerlessWorkflowAssetsProcessor.java index 4fcdc7668b8..2a3241b0ad2 100644 --- a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-deployment/src/main/java/org/kie/kogito/quarkus/serverless/workflow/deployment/ServerlessWorkflowAssetsProcessor.java +++ b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-deployment/src/main/java/org/kie/kogito/quarkus/serverless/workflow/deployment/ServerlessWorkflowAssetsProcessor.java @@ -32,11 +32,8 @@ import org.kie.kogito.codegen.process.ProcessContainerGenerator; import org.kie.kogito.codegen.process.ProcessGenerator; import org.kie.kogito.event.process.NodeDefinition; -import org.kie.kogito.event.process.NodeInstanceEventBody; -import org.kie.kogito.event.process.ProcessDataEvent; import org.kie.kogito.event.process.ProcessDefinitionDataEvent; import org.kie.kogito.event.process.ProcessDefinitionEventBody; -import org.kie.kogito.event.process.ProcessErrorEventBody; import org.kie.kogito.event.process.ProcessInstanceDataEvent; import org.kie.kogito.event.process.ProcessInstanceErrorEventBody; import org.kie.kogito.event.process.ProcessInstanceNodeEventBody; @@ -130,13 +127,10 @@ public ReflectiveClassBuildItem eventsApiReflection() { ProcessInstanceStateDataEvent.class.getName(), ProcessInstanceStateEventBody.class.getName(), ProcessInstanceVariableDataEvent.class.getName(), - ProcessInstanceVariableEventBody.class.getName()); - ProcessInstanceEventBody.class.getName(), + ProcessInstanceVariableEventBody.class.getName(), ProcessDefinitionDataEvent.class.getName(), ProcessDefinitionEventBody.class.getName(), - NodeDefinition.class.getName(), - VariableInstanceDataEvent.class.getName(), - VariableInstanceEventBody.class.getName()); + NodeDefinition.class.getName()); } @BuildStep diff --git a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/main/resources/application.properties b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/main/resources/application.properties index 88cb9835a87..ba20b794de0 100644 --- a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/main/resources/application.properties +++ b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/main/resources/application.properties @@ -209,11 +209,11 @@ mp.messaging.outgoing.kogito-variables-events.value.serializer=org.apache.kafka. mp.messaging.outgoing.kogito-variables-events.group.id=kogito-data-index-it mp.messaging.outgoing.kogito-variables-events.auto.offset.reset=latest -mp.messaging.outgoing.kogito-process-definition-events.connector=smallrye-kafka -mp.messaging.outgoing.kogito-process-definition-events.topic=kogito-process-definition-events -mp.messaging.outgoing.kogito-process-definition-events.value.serializer=org.apache.kafka.common.serialization.StringSerializer -mp.messaging.outgoing.kogito-process-definition-events.group.id=kogito-data-index-it -mp.messaging.outgoing.kogito-process-definition-events.auto.offset.reset=latest +mp.messaging.outgoing.kogito-processdefinitions-events.connector=smallrye-kafka +mp.messaging.outgoing.kogito-processdefinitions-events.topic=kogito-processdefinitions-events +mp.messaging.outgoing.kogito-processdefinitions-events.value.serializer=org.apache.kafka.common.serialization.StringSerializer +mp.messaging.outgoing.kogito-processdefinitions-events.group.id=kogito-data-index-it +mp.messaging.outgoing.kogito-processdefinitions-events.auto.offset.reset=latest quarkus.native.additional-build-args=-H:SerializationConfigurationResources=serialization-config.json # Maximum Java heap to be used during the native image generation diff --git a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/WorkflowEventIT.java b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/WorkflowEventIT.java index 86f144a071a..a21b62e08ee 100644 --- a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/WorkflowEventIT.java +++ b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/WorkflowEventIT.java @@ -30,7 +30,6 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.kie.kogito.event.EventPublisher; -import org.kie.kogito.event.process.ProcessDataEvent; import org.kie.kogito.event.process.ProcessDefinitionDataEvent; import org.kie.kogito.event.process.ProcessDefinitionEventBody; import org.kie.kogito.event.process.ProcessInstanceDataEvent; @@ -87,7 +86,7 @@ void testWorkflowEvents() throws Exception { String username = "buddy"; String password = "buddy"; - kafkaClient.consume(Set.of(EventPublisher.PI_TOPIC_NAME), s -> { + kafkaClient.consume(Set.of(EventPublisher.PROCESS_INSTANCES_TOPIC_NAME), s -> { LOGGER.info("Received from kafka: {}", s); try { ProcessInstanceDataEvent event = mapper.readValue(s, ProcessInstanceDataEvent.class); @@ -123,7 +122,7 @@ void testWorkflowEvents() throws Exception { @Test void testWorkflowDefinitionsEvents() { Collection definitionDataEvents = new ConcurrentLinkedQueue<>(); - kafkaClient.consume(Set.of(EventPublisher.PD_TOPIC_NAME), s -> { + kafkaClient.consume(Set.of(EventPublisher.PROCESS_DEFINITIONS_TOPIC_NAME), s -> { LOGGER.debug("Received from kafka: {}", s); try { ProcessDefinitionDataEvent event = mapper.readValue(s, ProcessDefinitionDataEvent.class); @@ -152,4 +151,4 @@ void testWorkflowDefinitionsEvents() { assertThat(processIdsFromEvent).containsAll(processIds); } -} \ No newline at end of file +} diff --git a/springboot/addons/events/kafka/src/main/java/org/kie/kogito/events/spring/KafkaEventPublisher.java b/springboot/addons/events/kafka/src/main/java/org/kie/kogito/events/spring/KafkaEventPublisher.java index d34f270ead8..3f82f9b734c 100644 --- a/springboot/addons/events/kafka/src/main/java/org/kie/kogito/events/spring/KafkaEventPublisher.java +++ b/springboot/addons/events/kafka/src/main/java/org/kie/kogito/events/spring/KafkaEventPublisher.java @@ -64,7 +64,7 @@ public void publish(DataEvent event) { case "ProcessInstanceSLADataEvent": case "ProcessInstanceStateDataEvent": case "ProcessInstanceVariableDataEvent": - publishToTopic(event, PI_TOPIC_NAME); + publishToTopic(event, PROCESS_INSTANCES_TOPIC_NAME); break; case "UserTaskInstanceAssignmentDataEvent": case "UserTaskInstanceAttachmentDataEvent": @@ -72,11 +72,11 @@ public void publish(DataEvent event) { case "UserTaskInstanceDeadlineDataEvent": case "UserTaskInstanceStateDataEvent": case "UserTaskInstanceVariableDataEvent": - publishToTopic(event, UI_TOPIC_NAME); + publishToTopic(event, USER_TASK_INSTANCES_TOPIC_NAME); break; case "ProcessDefinitionEvent": if (processDefinitionEvents) { - publishToTopic(event, PD_TOPIC_NAME); + publishToTopic(event, PROCESS_DEFINITIONS_TOPIC_NAME); } break; default: From 0632460426816311cca6e2e21a32d29aaa7fcad5 Mon Sep 17 00:00:00 2001 From: Tiago Dolphine Date: Thu, 19 Oct 2023 15:10:22 -0300 Subject: [PATCH 11/19] adding process-management-deployment addon in the IT to fix maven dependency check --- .../pom.xml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/pom.xml b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/pom.xml index 2920d99b0ae..747039445b0 100644 --- a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/pom.xml +++ b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/pom.xml @@ -154,6 +154,19 @@ + + org.kie.kogito + kogito-addons-quarkus-process-management-deployment + ${project.version} + pom + test + + + * + * + + + org.kie.kogito kogito-serverless-workflow-builder From ebfd69d8887c2c5d29b7517ff4d432f47516270c Mon Sep 17 00:00:00 2001 From: Tiago Dolphine Date: Wed, 1 Nov 2023 12:45:17 -0300 Subject: [PATCH 12/19] publishign defintion on data index devservice and fix data type/schema on events --- .../event/process/ProcessDefinitionDataEvent.java | 4 ++-- .../registry/ProcessDefinitionEventRegistry.java | 2 +- .../devservices/DataIndexEventPublisher.java | 12 ++++++++++++ 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/api/kogito-events-core/src/main/java/org/kie/kogito/event/process/ProcessDefinitionDataEvent.java b/api/kogito-events-core/src/main/java/org/kie/kogito/event/process/ProcessDefinitionDataEvent.java index 22bbcb8ca22..b58cece22f7 100644 --- a/api/kogito-events-core/src/main/java/org/kie/kogito/event/process/ProcessDefinitionDataEvent.java +++ b/api/kogito-events-core/src/main/java/org/kie/kogito/event/process/ProcessDefinitionDataEvent.java @@ -39,7 +39,7 @@ public ProcessDefinitionDataEvent(ProcessDefinitionEventBody body) { null, null, null, - null, - body.getType()); + DATA_CONTENT_TYPE, + null); } } \ No newline at end of file diff --git a/api/kogito-services/src/main/java/org/kie/kogito/services/registry/ProcessDefinitionEventRegistry.java b/api/kogito-services/src/main/java/org/kie/kogito/services/registry/ProcessDefinitionEventRegistry.java index d7ad2afe2a0..e42a0c85ab1 100644 --- a/api/kogito-services/src/main/java/org/kie/kogito/services/registry/ProcessDefinitionEventRegistry.java +++ b/api/kogito-services/src/main/java/org/kie/kogito/services/registry/ProcessDefinitionEventRegistry.java @@ -82,7 +82,7 @@ private Function, ProcessDefinitionDataEvent> mapProcessDefinition(Se .setId(p.id()) .setName(p.name()) .setVersion(p.version()) - .setType(ProcessDefinitionDataEvent.PROCESS_DEFINITION_EVENT) + .setType(p.type()) .setAddons(addons) .setEndpoint(getEndpoint(endpoint, p)) .setNodes(getNodesDefinitions(p)) diff --git a/quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common/src/main/java/org/kie/kogito/quarkus/workflow/devservices/DataIndexEventPublisher.java b/quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common/src/main/java/org/kie/kogito/quarkus/workflow/devservices/DataIndexEventPublisher.java index e1c7f6d9619..c78d02ae2f7 100644 --- a/quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common/src/main/java/org/kie/kogito/quarkus/workflow/devservices/DataIndexEventPublisher.java +++ b/quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common/src/main/java/org/kie/kogito/quarkus/workflow/devservices/DataIndexEventPublisher.java @@ -62,6 +62,18 @@ public void publish(DataEvent event) { LOGGER.debug("Sending event to data index: {}", event); switch (event.getType()) { + case "ProcessDefinitionDataEvent": + webClient.postAbs(dataIndexUrl.get() + "/definitions") + .putHeader(CONTENT_TYPE, CLOUD_EVENTS_CONTENT_TYPE) + .expect(ResponsePredicate.SC_ACCEPTED) + .sendJson(event, result -> { + if (result.failed()) { + LOGGER.error("Failed to send message to Data Index", result.cause()); + } else { + LOGGER.debug("Event published to Data Index"); + } + }); + break; case "ProcessInstanceErrorDataEvent": case "ProcessInstanceNodeDataEvent": case "ProcessInstanceSLADataEvent": From 66c08522d1a8cfeaf37dd367fe7a30a78eb18e2b Mon Sep 17 00:00:00 2001 From: Tiago Dolphine Date: Fri, 10 Nov 2023 11:34:37 -0300 Subject: [PATCH 13/19] adding config in knative addon --- .../eventing/KnativeEventingConfigSourceFactory.java | 3 +++ .../eventing/KnativeEventingConfigSourceFactoryTest.java | 7 +++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/quarkus/addons/knative/eventing/runtime/src/main/java/org/kie/kogito/addons/quarkus/knative/eventing/KnativeEventingConfigSourceFactory.java b/quarkus/addons/knative/eventing/runtime/src/main/java/org/kie/kogito/addons/quarkus/knative/eventing/KnativeEventingConfigSourceFactory.java index e059c5ed205..088e353ba9c 100644 --- a/quarkus/addons/knative/eventing/runtime/src/main/java/org/kie/kogito/addons/quarkus/knative/eventing/KnativeEventingConfigSourceFactory.java +++ b/quarkus/addons/knative/eventing/runtime/src/main/java/org/kie/kogito/addons/quarkus/knative/eventing/KnativeEventingConfigSourceFactory.java @@ -42,6 +42,8 @@ public final class KnativeEventingConfigSourceFactory implements ConfigSourceFac private static final String PROCESS_INSTANCES_EVENTS = "kogito-processinstances-events"; + private static final String PROCESS_DEFINITIONS_EVENTS = "kogito-processdefinitions-events"; + private static final String USER_TASK_INSTANCES_EVENTS = "kogito-usertaskinstances-events"; private static final String QUARKUS_HTTP_CONNECTOR = "quarkus-http"; @@ -72,6 +74,7 @@ public Iterable getConfigSources(ConfigSourceContext context) { if (includeProcessEvents(context)) { addOutgoingConnector(configuration, PROCESS_INSTANCES_EVENTS); + addOutgoingConnector(configuration, PROCESS_DEFINITIONS_EVENTS); addOutgoingConnector(configuration, USER_TASK_INSTANCES_EVENTS); } diff --git a/quarkus/addons/knative/eventing/runtime/src/test/java/org/kie/kogito/addons/quarkus/knative/eventing/KnativeEventingConfigSourceFactoryTest.java b/quarkus/addons/knative/eventing/runtime/src/test/java/org/kie/kogito/addons/quarkus/knative/eventing/KnativeEventingConfigSourceFactoryTest.java index 6ae2ea213e6..120bfb650a3 100644 --- a/quarkus/addons/knative/eventing/runtime/src/test/java/org/kie/kogito/addons/quarkus/knative/eventing/KnativeEventingConfigSourceFactoryTest.java +++ b/quarkus/addons/knative/eventing/runtime/src/test/java/org/kie/kogito/addons/quarkus/knative/eventing/KnativeEventingConfigSourceFactoryTest.java @@ -39,7 +39,7 @@ class KnativeEventingConfigSourceFactoryTest { void getConfigSourcesWithProcessEventsAndDefaultIncomeStream() { KnativeEventingConfigSource eventingConfigSource = buildKnativeEventingConfigSource("true", null); - assertThat(eventingConfigSource.getPropertyNames()).hasSize(8); + assertThat(eventingConfigSource.getPropertyNames()).hasSize(10); assertProcessEvents(eventingConfigSource); assertDefaultIncomingConnector(eventingConfigSource); assertDefaultOutgoingConnector(eventingConfigSource); @@ -49,7 +49,7 @@ void getConfigSourcesWithProcessEventsAndDefaultIncomeStream() { void getConfigSourcesWithProcessEvents() { KnativeEventingConfigSource eventingConfigSource = buildKnativeEventingConfigSource("true", "true"); - assertThat(eventingConfigSource.getPropertyNames()).hasSize(6); + assertThat(eventingConfigSource.getPropertyNames()).hasSize(8); assertProcessEvents(eventingConfigSource); assertDefaultOutgoingConnector(eventingConfigSource); } @@ -89,6 +89,9 @@ private static void assertProcessEvents(KnativeEventingConfigSource eventingConf assertContainsProperty(eventingConfigSource, "mp.messaging.outgoing.kogito-processinstances-events.connector", "quarkus-http"); assertContainsProperty(eventingConfigSource, "mp.messaging.outgoing.kogito-processinstances-events.url", DEFAULT_SINK_CONFIG); + assertContainsProperty(eventingConfigSource, "mp.messaging.outgoing.kogito-processdefinitions-events.connector", "quarkus-http"); + assertContainsProperty(eventingConfigSource, "mp.messaging.outgoing.kogito-processdefinitions-events.url", DEFAULT_SINK_CONFIG); + assertContainsProperty(eventingConfigSource, "mp.messaging.outgoing.kogito-usertaskinstances-events.connector", "quarkus-http"); assertContainsProperty(eventingConfigSource, "mp.messaging.outgoing.kogito-usertaskinstances-events.url", DEFAULT_SINK_CONFIG); From 7bbc75d34f009ce3b720f81be9d5faf7bae9b0c2 Mon Sep 17 00:00:00 2001 From: Tiago Dolphine Date: Mon, 13 Nov 2023 09:11:55 -0300 Subject: [PATCH 14/19] minor fixes --- .../workflow/devservices/DataIndexEventPublisher.java | 9 ++++----- .../kie/kogito/events/spring/KafkaEventPublisher.java | 5 ++--- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common/src/main/java/org/kie/kogito/quarkus/workflow/devservices/DataIndexEventPublisher.java b/quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common/src/main/java/org/kie/kogito/quarkus/workflow/devservices/DataIndexEventPublisher.java index c78d02ae2f7..8a3143ed520 100644 --- a/quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common/src/main/java/org/kie/kogito/quarkus/workflow/devservices/DataIndexEventPublisher.java +++ b/quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common/src/main/java/org/kie/kogito/quarkus/workflow/devservices/DataIndexEventPublisher.java @@ -24,16 +24,15 @@ import javax.annotation.PostConstruct; import javax.inject.Inject; +import io.vertx.core.Vertx; +import io.vertx.ext.web.client.WebClient; +import io.vertx.ext.web.client.predicate.ResponsePredicate; import org.eclipse.microprofile.config.inject.ConfigProperty; import org.kie.kogito.event.DataEvent; import org.kie.kogito.event.EventPublisher; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import io.vertx.core.Vertx; -import io.vertx.ext.web.client.WebClient; -import io.vertx.ext.web.client.predicate.ResponsePredicate; - public class DataIndexEventPublisher implements EventPublisher { public static final String KOGITO_DATA_INDEX = "kogito.data-index.url"; @@ -62,7 +61,7 @@ public void publish(DataEvent event) { LOGGER.debug("Sending event to data index: {}", event); switch (event.getType()) { - case "ProcessDefinitionDataEvent": + case "ProcessDefinitionEvent": webClient.postAbs(dataIndexUrl.get() + "/definitions") .putHeader(CONTENT_TYPE, CLOUD_EVENTS_CONTENT_TYPE) .expect(ResponsePredicate.SC_ACCEPTED) diff --git a/springboot/addons/events/kafka/src/main/java/org/kie/kogito/events/spring/KafkaEventPublisher.java b/springboot/addons/events/kafka/src/main/java/org/kie/kogito/events/spring/KafkaEventPublisher.java index 3f82f9b734c..93b9779259a 100644 --- a/springboot/addons/events/kafka/src/main/java/org/kie/kogito/events/spring/KafkaEventPublisher.java +++ b/springboot/addons/events/kafka/src/main/java/org/kie/kogito/events/spring/KafkaEventPublisher.java @@ -20,6 +20,7 @@ import java.util.Collection; +import com.fasterxml.jackson.databind.ObjectMapper; import org.kie.kogito.event.DataEvent; import org.kie.kogito.event.EventPublisher; import org.slf4j.Logger; @@ -30,8 +31,6 @@ import org.springframework.kafka.core.KafkaTemplate; import org.springframework.stereotype.Component; -import com.fasterxml.jackson.databind.ObjectMapper; - @Component public class KafkaEventPublisher implements EventPublisher { @@ -49,7 +48,7 @@ public class KafkaEventPublisher implements EventPublisher { @Value("${kogito.events.processinstances.enabled:true}") private boolean processInstancesEvents; - @Value("${kogito.events.process-definition.enabled:true}") + @Value("${kogito.events.processdefinitions.enabled:true}") private boolean processDefinitionEvents; @Value("${kogito.events.usertasks.enabled:true}") From 79a9b40fe2d2f2d287f106786b77e13d6089c47b Mon Sep 17 00:00:00 2001 From: Tiago Dolphine Date: Mon, 13 Nov 2023 14:19:03 -0300 Subject: [PATCH 15/19] fix imports --- .../workflow/devservices/DataIndexEventPublisher.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common/src/main/java/org/kie/kogito/quarkus/workflow/devservices/DataIndexEventPublisher.java b/quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common/src/main/java/org/kie/kogito/quarkus/workflow/devservices/DataIndexEventPublisher.java index 8a3143ed520..bf02d1fa339 100644 --- a/quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common/src/main/java/org/kie/kogito/quarkus/workflow/devservices/DataIndexEventPublisher.java +++ b/quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common/src/main/java/org/kie/kogito/quarkus/workflow/devservices/DataIndexEventPublisher.java @@ -24,15 +24,16 @@ import javax.annotation.PostConstruct; import javax.inject.Inject; -import io.vertx.core.Vertx; -import io.vertx.ext.web.client.WebClient; -import io.vertx.ext.web.client.predicate.ResponsePredicate; import org.eclipse.microprofile.config.inject.ConfigProperty; import org.kie.kogito.event.DataEvent; import org.kie.kogito.event.EventPublisher; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import io.vertx.core.Vertx; +import io.vertx.ext.web.client.WebClient; +import io.vertx.ext.web.client.predicate.ResponsePredicate; + public class DataIndexEventPublisher implements EventPublisher { public static final String KOGITO_DATA_INDEX = "kogito.data-index.url"; From 3291838c7ef5d0f74622be10de1b9bf8ff21c9f8 Mon Sep 17 00:00:00 2001 From: Tiago Dolphine Date: Tue, 14 Nov 2023 08:55:24 -0300 Subject: [PATCH 16/19] adding uniqueId and type for node definition --- .../org/kie/kogito/internal/process/runtime/KogitoNode.java | 2 ++ .../services/registry/ProcessDefinitionEventRegistry.java | 4 ++-- .../org/kie/kogito/events/spring/KafkaEventPublisher.java | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/api/kogito-api/src/main/java/org/kie/kogito/internal/process/runtime/KogitoNode.java b/api/kogito-api/src/main/java/org/kie/kogito/internal/process/runtime/KogitoNode.java index 67926f5d9fb..f15769da3de 100644 --- a/api/kogito-api/src/main/java/org/kie/kogito/internal/process/runtime/KogitoNode.java +++ b/api/kogito-api/src/main/java/org/kie/kogito/internal/process/runtime/KogitoNode.java @@ -24,4 +24,6 @@ public interface KogitoNode extends Node { NodeContainer getParentContainer(); + + String getUniqueId(); } diff --git a/api/kogito-services/src/main/java/org/kie/kogito/services/registry/ProcessDefinitionEventRegistry.java b/api/kogito-services/src/main/java/org/kie/kogito/services/registry/ProcessDefinitionEventRegistry.java index e42a0c85ab1..768cccb7441 100644 --- a/api/kogito-services/src/main/java/org/kie/kogito/services/registry/ProcessDefinitionEventRegistry.java +++ b/api/kogito-services/src/main/java/org/kie/kogito/services/registry/ProcessDefinitionEventRegistry.java @@ -105,8 +105,8 @@ private List getNodesDefinitions(Process p) { .map(node -> NodeDefinition.builder() .setId(String.valueOf(node.getId())) .setName(node.getName()) - .setType(node.getNodeType().name()) - .setUniqueId(node.getNodeUniqueId()) + .setType(node.getClass().getSimpleName()) + .setUniqueId(node.getUniqueId()) .setMetadata(node.getMetaData()) .build()) .collect(Collectors.toList()); diff --git a/springboot/addons/events/kafka/src/main/java/org/kie/kogito/events/spring/KafkaEventPublisher.java b/springboot/addons/events/kafka/src/main/java/org/kie/kogito/events/spring/KafkaEventPublisher.java index 93b9779259a..d11aa00b702 100644 --- a/springboot/addons/events/kafka/src/main/java/org/kie/kogito/events/spring/KafkaEventPublisher.java +++ b/springboot/addons/events/kafka/src/main/java/org/kie/kogito/events/spring/KafkaEventPublisher.java @@ -20,7 +20,6 @@ import java.util.Collection; -import com.fasterxml.jackson.databind.ObjectMapper; import org.kie.kogito.event.DataEvent; import org.kie.kogito.event.EventPublisher; import org.slf4j.Logger; @@ -31,6 +30,8 @@ import org.springframework.kafka.core.KafkaTemplate; import org.springframework.stereotype.Component; +import com.fasterxml.jackson.databind.ObjectMapper; + @Component public class KafkaEventPublisher implements EventPublisher { From 9121b66e050ce6135d9018c48bd973e12f3c14dd Mon Sep 17 00:00:00 2001 From: Tiago Dolphine Date: Tue, 21 Nov 2023 09:42:40 -0300 Subject: [PATCH 17/19] fix header and dependency on springboot it --- .../kogito/addons/quarkus/kubernetes/Foo.java | 25 +++++++++++-------- .../pom.xml | 4 +++ .../pom.xml | 4 +++ 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/quarkus/addons/kubernetes/integration-tests/src/main/java/org/kie/kogito/addons/quarkus/kubernetes/Foo.java b/quarkus/addons/kubernetes/integration-tests/src/main/java/org/kie/kogito/addons/quarkus/kubernetes/Foo.java index abcbda47995..b9f49ef000d 100644 --- a/quarkus/addons/kubernetes/integration-tests/src/main/java/org/kie/kogito/addons/quarkus/kubernetes/Foo.java +++ b/quarkus/addons/kubernetes/integration-tests/src/main/java/org/kie/kogito/addons/quarkus/kubernetes/Foo.java @@ -1,17 +1,20 @@ /* - * Copyright 2023 Red Hat, Inc. and/or its affiliates. + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 * - * 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 * - * 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. + * 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. */ package org.kie.kogito.addons.quarkus.kubernetes; diff --git a/springboot/integration-tests/src/it/integration-tests-springboot-processes-persistence-it/integration-tests-springboot-processes-persistence-common/pom.xml b/springboot/integration-tests/src/it/integration-tests-springboot-processes-persistence-it/integration-tests-springboot-processes-persistence-common/pom.xml index d1e9dfc4aa6..f4a503316f8 100644 --- a/springboot/integration-tests/src/it/integration-tests-springboot-processes-persistence-it/integration-tests-springboot-processes-persistence-common/pom.xml +++ b/springboot/integration-tests/src/it/integration-tests-springboot-processes-persistence-it/integration-tests-springboot-processes-persistence-common/pom.xml @@ -37,6 +37,10 @@ org.springframework.boot spring-boot-starter-test + + org.kie.kogito + kogito-processes-spring-boot-starter + io.rest-assured rest-assured diff --git a/springboot/integration-tests/src/it/integration-tests-springboot-processes-persistence-it/pom.xml b/springboot/integration-tests/src/it/integration-tests-springboot-processes-persistence-it/pom.xml index 92c8e9208f1..8e1188f1ea4 100644 --- a/springboot/integration-tests/src/it/integration-tests-springboot-processes-persistence-it/pom.xml +++ b/springboot/integration-tests/src/it/integration-tests-springboot-processes-persistence-it/pom.xml @@ -62,6 +62,10 @@ org.kie.kogito kogito-spring-boot-starter + + org.kie.kogito + kogito-processes-spring-boot-starter + org.kie.kogito kogito-addons-springboot-process-management From fbcd5b211418442dcb1e03a570a96327840c3959 Mon Sep 17 00:00:00 2001 From: Tiago Dolphine Date: Tue, 21 Nov 2023 11:41:23 -0300 Subject: [PATCH 18/19] fix to broken CI gha springboot archetype --- springboot/archetype/pom.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/springboot/archetype/pom.xml b/springboot/archetype/pom.xml index cca701f3013..d34b0f8ca5b 100644 --- a/springboot/archetype/pom.xml +++ b/springboot/archetype/pom.xml @@ -52,6 +52,10 @@ ${project.version} provided + + org.kie.kogito + kogito-processes-spring-boot-starter + org.kie.kogito kogito-addons-springboot-monitoring-prometheus From 6f3a2d810cda9c48da2787235cc4e161386a3152 Mon Sep 17 00:00:00 2001 From: Tiago Dolphine Date: Wed, 22 Nov 2023 08:59:42 -0300 Subject: [PATCH 19/19] adjust invoker config --- .../invoker.properties | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/springboot/integration-tests/src/it/integration-tests-springboot-processes-persistence-it/invoker.properties b/springboot/integration-tests/src/it/integration-tests-springboot-processes-persistence-it/invoker.properties index 1e38bc2a7df..ee81a7c516d 100644 --- a/springboot/integration-tests/src/it/integration-tests-springboot-processes-persistence-it/invoker.properties +++ b/springboot/integration-tests/src/it/integration-tests-springboot-processes-persistence-it/invoker.properties @@ -18,5 +18,4 @@ # # disable verbose local download output -invoker.mavenOpts=-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn -invoker.goals=clean install \ No newline at end of file +invoker.mavenOpts=-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn \ No newline at end of file