From 9c8f901e01a26a929eaf8a40b56929a14482210c Mon Sep 17 00:00:00 2001 From: Simon Zambrovski Date: Mon, 20 Apr 2026 15:59:29 +0200 Subject: [PATCH] let command bew ExecutionModeAware --- .../processengineapi/ExecutionMode.kt | 28 +++++++++++++++++++ .../processengineapi/ExecutionModeAware.kt | 13 +++++++++ .../correlation/CorrelateMessageCmd.kt | 3 +- .../correlation/SendSignalCmd.kt | 3 +- .../DecisionByRefEvaluationCommand.kt | 1 + .../decision/DecisionEvaluationCommand.kt | 3 +- .../deploy/DeployBundleCommand.kt | 4 ++- .../process/StartProcessCommand.kt | 3 +- .../task/CompleteTaskByErrorCmd.kt | 3 +- .../processengineapi/task/CompleteTaskCmd.kt | 3 +- .../processengineapi/task/FailTaskCmd.kt | 3 +- .../processengineapi/task/ModifyTaskCmd.kt | 4 ++- 12 files changed, 62 insertions(+), 9 deletions(-) create mode 100644 api/src/main/kotlin/dev/bpmcrafters/processengineapi/ExecutionMode.kt create mode 100644 api/src/main/kotlin/dev/bpmcrafters/processengineapi/ExecutionModeAware.kt diff --git a/api/src/main/kotlin/dev/bpmcrafters/processengineapi/ExecutionMode.kt b/api/src/main/kotlin/dev/bpmcrafters/processengineapi/ExecutionMode.kt new file mode 100644 index 00000000..bfb87fc8 --- /dev/null +++ b/api/src/main/kotlin/dev/bpmcrafters/processengineapi/ExecutionMode.kt @@ -0,0 +1,28 @@ +package dev.bpmcrafters.processengineapi + +/** + * Command execution mode. + * @since 1.6 + */ +enum class ExecutionMode { + /** + * Alias for async. + */ + DEFAULT, + + /** + * Default async execution mode. + */ + ASYNC, + + /** + * Synchronous execution mode, adapter should use a specific thread pool + * to run the same thread and tx as the caller. + */ + SYNC, + + /** + * Special execution mode for preflight checks. + */ + PREFLIGHT_CHECK +} diff --git a/api/src/main/kotlin/dev/bpmcrafters/processengineapi/ExecutionModeAware.kt b/api/src/main/kotlin/dev/bpmcrafters/processengineapi/ExecutionModeAware.kt new file mode 100644 index 00000000..6def83a3 --- /dev/null +++ b/api/src/main/kotlin/dev/bpmcrafters/processengineapi/ExecutionModeAware.kt @@ -0,0 +1,13 @@ +package dev.bpmcrafters.processengineapi + +/** + * Interface to retrieve information of execution mode. + * @since 1.6 + */ +interface ExecutionModeAware { + /** + * Retrieves execution mode. + * @return Execution mode. + */ + fun executionMode(): ExecutionMode = ExecutionMode.DEFAULT +} diff --git a/api/src/main/kotlin/dev/bpmcrafters/processengineapi/correlation/CorrelateMessageCmd.kt b/api/src/main/kotlin/dev/bpmcrafters/processengineapi/correlation/CorrelateMessageCmd.kt index 1b7e9bd0..c29186da 100644 --- a/api/src/main/kotlin/dev/bpmcrafters/processengineapi/correlation/CorrelateMessageCmd.kt +++ b/api/src/main/kotlin/dev/bpmcrafters/processengineapi/correlation/CorrelateMessageCmd.kt @@ -1,5 +1,6 @@ package dev.bpmcrafters.processengineapi.correlation +import dev.bpmcrafters.processengineapi.ExecutionModeAware import dev.bpmcrafters.processengineapi.PayloadSupplier /** @@ -23,7 +24,7 @@ data class CorrelateMessageCmd( * Restrictions applied for this message. */ val restrictions: Map = emptyMap() -) : PayloadSupplier by payloadSupplier { +) : PayloadSupplier by payloadSupplier, ExecutionModeAware { /** * Constructs a correlation command by message name, payload and correlation. * @param messageName message name. diff --git a/api/src/main/kotlin/dev/bpmcrafters/processengineapi/correlation/SendSignalCmd.kt b/api/src/main/kotlin/dev/bpmcrafters/processengineapi/correlation/SendSignalCmd.kt index ea2ecec2..2d7b9ba6 100644 --- a/api/src/main/kotlin/dev/bpmcrafters/processengineapi/correlation/SendSignalCmd.kt +++ b/api/src/main/kotlin/dev/bpmcrafters/processengineapi/correlation/SendSignalCmd.kt @@ -1,5 +1,6 @@ package dev.bpmcrafters.processengineapi.correlation +import dev.bpmcrafters.processengineapi.ExecutionModeAware import dev.bpmcrafters.processengineapi.PayloadSupplier /** @@ -19,7 +20,7 @@ data class SendSignalCmd( * Restrictions of the signaling. */ val restrictions: Map = emptyMap() -) : PayloadSupplier by payloadSupplier { +) : PayloadSupplier by payloadSupplier, ExecutionModeAware { /** * Constructs a signal command by signal name, restrictions and given payload. * @param signalName signal name. diff --git a/api/src/main/kotlin/dev/bpmcrafters/processengineapi/decision/DecisionByRefEvaluationCommand.kt b/api/src/main/kotlin/dev/bpmcrafters/processengineapi/decision/DecisionByRefEvaluationCommand.kt index f9154a90..58f553c1 100644 --- a/api/src/main/kotlin/dev/bpmcrafters/processengineapi/decision/DecisionByRefEvaluationCommand.kt +++ b/api/src/main/kotlin/dev/bpmcrafters/processengineapi/decision/DecisionByRefEvaluationCommand.kt @@ -1,5 +1,6 @@ package dev.bpmcrafters.processengineapi.decision +import dev.bpmcrafters.processengineapi.ExecutionModeAware import dev.bpmcrafters.processengineapi.PayloadSupplier import java.util.function.Supplier diff --git a/api/src/main/kotlin/dev/bpmcrafters/processengineapi/decision/DecisionEvaluationCommand.kt b/api/src/main/kotlin/dev/bpmcrafters/processengineapi/decision/DecisionEvaluationCommand.kt index e74e84f4..981fe34d 100644 --- a/api/src/main/kotlin/dev/bpmcrafters/processengineapi/decision/DecisionEvaluationCommand.kt +++ b/api/src/main/kotlin/dev/bpmcrafters/processengineapi/decision/DecisionEvaluationCommand.kt @@ -1,9 +1,10 @@ package dev.bpmcrafters.processengineapi.decision +import dev.bpmcrafters.processengineapi.ExecutionModeAware import dev.bpmcrafters.processengineapi.PayloadSupplier /** * Interface for decision evaluation commands. * @since 1.4 */ -interface DecisionEvaluationCommand : PayloadSupplier +interface DecisionEvaluationCommand : PayloadSupplier, ExecutionModeAware diff --git a/api/src/main/kotlin/dev/bpmcrafters/processengineapi/deploy/DeployBundleCommand.kt b/api/src/main/kotlin/dev/bpmcrafters/processengineapi/deploy/DeployBundleCommand.kt index e0cd10a5..c03645e7 100644 --- a/api/src/main/kotlin/dev/bpmcrafters/processengineapi/deploy/DeployBundleCommand.kt +++ b/api/src/main/kotlin/dev/bpmcrafters/processengineapi/deploy/DeployBundleCommand.kt @@ -1,5 +1,7 @@ package dev.bpmcrafters.processengineapi.deploy +import dev.bpmcrafters.processengineapi.ExecutionModeAware + /** * Command to deploy a bundle of resources. * @since 0.0.1 @@ -13,4 +15,4 @@ data class DeployBundleCommand( * Optional tenant id. */ val tenantId: String? = null -) +) : ExecutionModeAware diff --git a/api/src/main/kotlin/dev/bpmcrafters/processengineapi/process/StartProcessCommand.kt b/api/src/main/kotlin/dev/bpmcrafters/processengineapi/process/StartProcessCommand.kt index 371b29a7..33961246 100644 --- a/api/src/main/kotlin/dev/bpmcrafters/processengineapi/process/StartProcessCommand.kt +++ b/api/src/main/kotlin/dev/bpmcrafters/processengineapi/process/StartProcessCommand.kt @@ -1,9 +1,10 @@ package dev.bpmcrafters.processengineapi.process +import dev.bpmcrafters.processengineapi.ExecutionModeAware import dev.bpmcrafters.processengineapi.PayloadSupplier /** * Interface for process start commands. * @since 0.0.1 */ -interface StartProcessCommand : PayloadSupplier +interface StartProcessCommand : PayloadSupplier, ExecutionModeAware diff --git a/api/src/main/kotlin/dev/bpmcrafters/processengineapi/task/CompleteTaskByErrorCmd.kt b/api/src/main/kotlin/dev/bpmcrafters/processengineapi/task/CompleteTaskByErrorCmd.kt index 2f2a93e5..59d1e614 100644 --- a/api/src/main/kotlin/dev/bpmcrafters/processengineapi/task/CompleteTaskByErrorCmd.kt +++ b/api/src/main/kotlin/dev/bpmcrafters/processengineapi/task/CompleteTaskByErrorCmd.kt @@ -1,5 +1,6 @@ package dev.bpmcrafters.processengineapi.task +import dev.bpmcrafters.processengineapi.ExecutionModeAware import dev.bpmcrafters.processengineapi.PayloadSupplier /** @@ -23,7 +24,7 @@ open class CompleteTaskByErrorCmd( * Payload supplier. */ private val payloadSupplier: PayloadSupplier -) : PayloadSupplier by payloadSupplier { +) : PayloadSupplier by payloadSupplier, ExecutionModeAware { /** * Creates the complete command for a given task id and payload. * @param taskId id of the task to complete. diff --git a/api/src/main/kotlin/dev/bpmcrafters/processengineapi/task/CompleteTaskCmd.kt b/api/src/main/kotlin/dev/bpmcrafters/processengineapi/task/CompleteTaskCmd.kt index c48268c6..2c00ff21 100644 --- a/api/src/main/kotlin/dev/bpmcrafters/processengineapi/task/CompleteTaskCmd.kt +++ b/api/src/main/kotlin/dev/bpmcrafters/processengineapi/task/CompleteTaskCmd.kt @@ -1,5 +1,6 @@ package dev.bpmcrafters.processengineapi.task +import dev.bpmcrafters.processengineapi.ExecutionModeAware import dev.bpmcrafters.processengineapi.PayloadSupplier /** @@ -15,7 +16,7 @@ open class CompleteTaskCmd( * Payload supplier. */ private val payloadSupplier: PayloadSupplier -) : PayloadSupplier by payloadSupplier { +) : PayloadSupplier by payloadSupplier, ExecutionModeAware { /** * Creates the complete command for a given task id and payload. diff --git a/api/src/main/kotlin/dev/bpmcrafters/processengineapi/task/FailTaskCmd.kt b/api/src/main/kotlin/dev/bpmcrafters/processengineapi/task/FailTaskCmd.kt index c65182cc..de999a41 100644 --- a/api/src/main/kotlin/dev/bpmcrafters/processengineapi/task/FailTaskCmd.kt +++ b/api/src/main/kotlin/dev/bpmcrafters/processengineapi/task/FailTaskCmd.kt @@ -1,5 +1,6 @@ package dev.bpmcrafters.processengineapi.task +import dev.bpmcrafters.processengineapi.ExecutionModeAware import java.time.Duration /** @@ -27,7 +28,7 @@ open class FailTaskCmd( * Optional retry backoff duration. */ val retryBackoff: Duration? -) { +) : ExecutionModeAware { constructor(taskId: String, reason: String, errorDetails: String?) : this(taskId = taskId, reason = reason, errorDetails = errorDetails, null, null) } diff --git a/api/src/main/kotlin/dev/bpmcrafters/processengineapi/task/ModifyTaskCmd.kt b/api/src/main/kotlin/dev/bpmcrafters/processengineapi/task/ModifyTaskCmd.kt index 4d6c7789..609c0d18 100644 --- a/api/src/main/kotlin/dev/bpmcrafters/processengineapi/task/ModifyTaskCmd.kt +++ b/api/src/main/kotlin/dev/bpmcrafters/processengineapi/task/ModifyTaskCmd.kt @@ -1,9 +1,11 @@ package dev.bpmcrafters.processengineapi.task +import dev.bpmcrafters.processengineapi.ExecutionModeAware + /** * Captures the intent of task modification. * @since 1.3 */ -interface ModifyTaskCmd { +interface ModifyTaskCmd : ExecutionModeAware { val taskId: String }