From 07a9b021ede749a37d02f69e08855fd3f26ceea6 Mon Sep 17 00:00:00 2001 From: fjtirado Date: Fri, 10 Oct 2025 12:26:47 +0200 Subject: [PATCH] Improving modularization Signed-off-by: fjtirado --- impl/README.md | 21 ++++++--- impl/jackson/pom.xml | 37 ++++++++------- impl/jq/pom.xml | 45 ++++++++++--------- impl/json-utils/pom.xml | 24 ++++++++++ .../impl/jackson}/JacksonCloudEventUtils.java | 3 +- .../impl/jackson/JsonUtils.java | 0 .../impl/jackson/MergeUtils.java | 0 .../impl/jackson/ObjectMapperFactory.java | 0 .../jackson/ObjectMapperFactoryProvider.java | 0 impl/lifecycleevent/pom.xml | 20 +++++++++ .../events/JacksonLifeCyclePublisher.java | 0 ...w.impl.lifecycle.WorkflowExecutionListener | 0 impl/model/pom.xml | 20 +++++++++ .../impl/model/jackson/JacksonModel.java | 0 .../model/jackson/JacksonModelCollection.java | 0 .../jackson/JacksonModelDeserializer.java | 0 .../model/jackson/JacksonModelFactory.java | 2 +- .../model/jackson/JacksonModelSerializer.java | 0 ...rverlessworkflow.impl.WorkflowModelFactory | 0 impl/persistence/jackson-marshaller/pom.xml | 2 +- impl/pom.xml | 34 +++++++++++--- impl/test/pom.xml | 4 -- impl/validation/pom.xml | 28 ++++++++++++ .../jackson/schema/JsonSchemaValidator.java | 0 .../schema/JsonSchemaValidatorFactory.java | 0 ...orkflow.impl.schema.SchemaValidatorFactory | 0 26 files changed, 185 insertions(+), 55 deletions(-) create mode 100644 impl/json-utils/pom.xml rename impl/{jackson/src/main/java/io/serverlessworkflow/impl/jackson/events => json-utils/src/main/java/io/serverlessworkflow/impl/jackson}/JacksonCloudEventUtils.java (96%) rename impl/{jackson => json-utils}/src/main/java/io/serverlessworkflow/impl/jackson/JsonUtils.java (100%) rename impl/{jackson => json-utils}/src/main/java/io/serverlessworkflow/impl/jackson/MergeUtils.java (100%) rename impl/{jackson => json-utils}/src/main/java/io/serverlessworkflow/impl/jackson/ObjectMapperFactory.java (100%) rename impl/{jackson => json-utils}/src/main/java/io/serverlessworkflow/impl/jackson/ObjectMapperFactoryProvider.java (100%) create mode 100644 impl/lifecycleevent/pom.xml rename impl/{jackson => lifecycleevent}/src/main/java/io/serverlessworkflow/impl/jackson/events/JacksonLifeCyclePublisher.java (100%) rename impl/{jackson => lifecycleevent}/src/main/resources/META-INF/services/io.serverlessworkflow.impl.lifecycle.WorkflowExecutionListener (100%) create mode 100644 impl/model/pom.xml rename impl/{jackson => model}/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModel.java (100%) rename impl/{jackson => model}/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelCollection.java (100%) rename impl/{jackson => model}/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelDeserializer.java (100%) rename impl/{jackson => model}/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelFactory.java (98%) rename impl/{jackson => model}/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelSerializer.java (100%) rename impl/{jackson => model}/src/main/resources/META-INF/services/io.serverlessworkflow.impl.WorkflowModelFactory (100%) create mode 100644 impl/validation/pom.xml rename impl/{jackson => validation}/src/main/java/io/serverlessworkflow/impl/jackson/schema/JsonSchemaValidator.java (100%) rename impl/{jackson => validation}/src/main/java/io/serverlessworkflow/impl/jackson/schema/JsonSchemaValidatorFactory.java (100%) rename impl/{jackson => validation}/src/main/resources/META-INF/services/io.serverlessworkflow.impl.schema.SchemaValidatorFactory (100%) diff --git a/impl/README.md b/impl/README.md index e041285da..931a66df2 100644 --- a/impl/README.md +++ b/impl/README.md @@ -70,17 +70,26 @@ This reference implementation can run workflows consisting of: This SDK is modular by design—pull in only what you need: -* **`serverlessworkflow-impl-core`** +* **serverlessworkflow-impl-core** Workflow engine & core interfaces. Depends on generated types and CloudEvents SDK. -* **`serverlessworkflow-impl-jackson`** - Adds Jackson integration, JQ expressions, JSON Schema validation, and CloudEvents (de)serialization. +* **serverlessworkflow-impl-jackson** 👉 **Most users add this one.** - -* **`serverlessworkflow-impl-http`** + + Adds Jackson integration, JQ expressions, JSON Schema validation, and CloudEvents (de)serialization. + + Internally, this module is an aggregation of smaller modules to allow part replacement if needed: + * **serverlessworkflow-impl-jq** JQ expression implementation + * **serverlessworkflow-impl-model** Jackson model implementation + * **serverlessworkflow-impl-validation** Schema validation implementation + * **serverlessworkflow-impl-lifecycle-events** Enable publication of lifecycle events as Json cloud events. + * **serverlessworkflow-impl-json** Json common utilities shared by all modules in this list + + +* **serverlessworkflow-impl-http** HTTP `Call` task handler. -* **`serverlessworkflow-impl-jackson-jwt`** +* **serverlessworkflow-impl-jackson-jwt** OAuth2/OIDC helpers for HTTP calls. There are also companion modules/docs for: diff --git a/impl/jackson/pom.xml b/impl/jackson/pom.xml index 1f123648c..3690fafa3 100644 --- a/impl/jackson/pom.xml +++ b/impl/jackson/pom.xml @@ -6,23 +6,28 @@ 8.0.0-SNAPSHOT serverlessworkflow-impl-jackson + pom Serverless Workflow :: Impl :: Jackson - - io.serverlessworkflow - serverlessworkflow-impl-core - - - io.serverlessworkflow - serverlessworkflow-api - - - io.cloudevents - cloudevents-json-jackson - - - com.networknt - json-schema-validator - + + io.serverlessworkflow + serverlessworkflow-impl-core + + + io.serverlessworkflow + serverlessworkflow-impl-jq + + + io.serverlessworkflow + serverlessworkflow-impl-model + + + io.serverlessworkflow + serverlessworkflow-impl-validation + + + io.serverlessworkflow + serverlessworkflow-impl-lifecycle-events + \ No newline at end of file diff --git a/impl/jq/pom.xml b/impl/jq/pom.xml index 451ab5553..909ace32b 100644 --- a/impl/jq/pom.xml +++ b/impl/jq/pom.xml @@ -8,25 +8,30 @@ serverlessworkflow-impl-jq Serverless Workflow :: Impl :: JQ - - net.thisptr - jackson-jq - - - io.serverlessworkflow - serverlessworkflow-impl-jackson - - - org.junit.jupiter - junit-jupiter-engine - - - org.assertj - assertj-core - - - org.mockito - mockito-core - + + net.thisptr + jackson-jq + + + io.serverlessworkflow + serverlessworkflow-impl-json + + + org.junit.jupiter + junit-jupiter-engine + + + org.assertj + assertj-core + + + org.mockito + mockito-core + + + io.serverlessworkflow + serverlessworkflow-impl-model + test + \ No newline at end of file diff --git a/impl/json-utils/pom.xml b/impl/json-utils/pom.xml new file mode 100644 index 000000000..57627413b --- /dev/null +++ b/impl/json-utils/pom.xml @@ -0,0 +1,24 @@ + + 4.0.0 + + io.serverlessworkflow + serverlessworkflow-impl + 8.0.0-SNAPSHOT + + serverlessworkflow-impl-json + Serverless Workflow :: Impl :: Json utils + + + com.fasterxml.jackson.core + jackson-databind + + + io.serverlessworkflow + serverlessworkflow-impl-core + + + io.cloudevents + cloudevents-json-jackson + + + \ No newline at end of file diff --git a/impl/jackson/src/main/java/io/serverlessworkflow/impl/jackson/events/JacksonCloudEventUtils.java b/impl/json-utils/src/main/java/io/serverlessworkflow/impl/jackson/JacksonCloudEventUtils.java similarity index 96% rename from impl/jackson/src/main/java/io/serverlessworkflow/impl/jackson/events/JacksonCloudEventUtils.java rename to impl/json-utils/src/main/java/io/serverlessworkflow/impl/jackson/JacksonCloudEventUtils.java index 61df65020..a3591a93c 100644 --- a/impl/jackson/src/main/java/io/serverlessworkflow/impl/jackson/events/JacksonCloudEventUtils.java +++ b/impl/json-utils/src/main/java/io/serverlessworkflow/impl/jackson/JacksonCloudEventUtils.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.serverlessworkflow.impl.jackson.events; +package io.serverlessworkflow.impl.jackson; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.NullNode; @@ -21,7 +21,6 @@ import io.cloudevents.CloudEvent; import io.cloudevents.CloudEventData; import io.cloudevents.jackson.JsonCloudEventData; -import io.serverlessworkflow.impl.jackson.JsonUtils; import java.io.IOException; import java.io.UncheckedIOException; import java.time.OffsetDateTime; diff --git a/impl/jackson/src/main/java/io/serverlessworkflow/impl/jackson/JsonUtils.java b/impl/json-utils/src/main/java/io/serverlessworkflow/impl/jackson/JsonUtils.java similarity index 100% rename from impl/jackson/src/main/java/io/serverlessworkflow/impl/jackson/JsonUtils.java rename to impl/json-utils/src/main/java/io/serverlessworkflow/impl/jackson/JsonUtils.java diff --git a/impl/jackson/src/main/java/io/serverlessworkflow/impl/jackson/MergeUtils.java b/impl/json-utils/src/main/java/io/serverlessworkflow/impl/jackson/MergeUtils.java similarity index 100% rename from impl/jackson/src/main/java/io/serverlessworkflow/impl/jackson/MergeUtils.java rename to impl/json-utils/src/main/java/io/serverlessworkflow/impl/jackson/MergeUtils.java diff --git a/impl/jackson/src/main/java/io/serverlessworkflow/impl/jackson/ObjectMapperFactory.java b/impl/json-utils/src/main/java/io/serverlessworkflow/impl/jackson/ObjectMapperFactory.java similarity index 100% rename from impl/jackson/src/main/java/io/serverlessworkflow/impl/jackson/ObjectMapperFactory.java rename to impl/json-utils/src/main/java/io/serverlessworkflow/impl/jackson/ObjectMapperFactory.java diff --git a/impl/jackson/src/main/java/io/serverlessworkflow/impl/jackson/ObjectMapperFactoryProvider.java b/impl/json-utils/src/main/java/io/serverlessworkflow/impl/jackson/ObjectMapperFactoryProvider.java similarity index 100% rename from impl/jackson/src/main/java/io/serverlessworkflow/impl/jackson/ObjectMapperFactoryProvider.java rename to impl/json-utils/src/main/java/io/serverlessworkflow/impl/jackson/ObjectMapperFactoryProvider.java diff --git a/impl/lifecycleevent/pom.xml b/impl/lifecycleevent/pom.xml new file mode 100644 index 000000000..82ba06973 --- /dev/null +++ b/impl/lifecycleevent/pom.xml @@ -0,0 +1,20 @@ + + 4.0.0 + + io.serverlessworkflow + serverlessworkflow-impl + 8.0.0-SNAPSHOT + + serverlessworkflow-impl-lifecycle-events + Serverless Workflow :: Impl :: Jackson:: Lifecycle Events + + + io.serverlessworkflow + serverlessworkflow-impl-json + + + io.serverlessworkflow + serverlessworkflow-impl-core + + + \ No newline at end of file diff --git a/impl/jackson/src/main/java/io/serverlessworkflow/impl/jackson/events/JacksonLifeCyclePublisher.java b/impl/lifecycleevent/src/main/java/io/serverlessworkflow/impl/jackson/events/JacksonLifeCyclePublisher.java similarity index 100% rename from impl/jackson/src/main/java/io/serverlessworkflow/impl/jackson/events/JacksonLifeCyclePublisher.java rename to impl/lifecycleevent/src/main/java/io/serverlessworkflow/impl/jackson/events/JacksonLifeCyclePublisher.java diff --git a/impl/jackson/src/main/resources/META-INF/services/io.serverlessworkflow.impl.lifecycle.WorkflowExecutionListener b/impl/lifecycleevent/src/main/resources/META-INF/services/io.serverlessworkflow.impl.lifecycle.WorkflowExecutionListener similarity index 100% rename from impl/jackson/src/main/resources/META-INF/services/io.serverlessworkflow.impl.lifecycle.WorkflowExecutionListener rename to impl/lifecycleevent/src/main/resources/META-INF/services/io.serverlessworkflow.impl.lifecycle.WorkflowExecutionListener diff --git a/impl/model/pom.xml b/impl/model/pom.xml new file mode 100644 index 000000000..c73779712 --- /dev/null +++ b/impl/model/pom.xml @@ -0,0 +1,20 @@ + + 4.0.0 + + io.serverlessworkflow + serverlessworkflow-impl + 8.0.0-SNAPSHOT + + serverlessworkflow-impl-model + Serverless Workflow :: Impl :: Jackson:: Model + + + io.serverlessworkflow + serverlessworkflow-impl-json + + + io.serverlessworkflow + serverlessworkflow-impl-core + + + \ No newline at end of file diff --git a/impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModel.java b/impl/model/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModel.java similarity index 100% rename from impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModel.java rename to impl/model/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModel.java diff --git a/impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelCollection.java b/impl/model/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelCollection.java similarity index 100% rename from impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelCollection.java rename to impl/model/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelCollection.java diff --git a/impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelDeserializer.java b/impl/model/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelDeserializer.java similarity index 100% rename from impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelDeserializer.java rename to impl/model/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelDeserializer.java diff --git a/impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelFactory.java b/impl/model/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelFactory.java similarity index 98% rename from impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelFactory.java rename to impl/model/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelFactory.java index cb2516143..810207618 100644 --- a/impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelFactory.java +++ b/impl/model/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelFactory.java @@ -27,8 +27,8 @@ import io.serverlessworkflow.impl.WorkflowModel; import io.serverlessworkflow.impl.WorkflowModelCollection; import io.serverlessworkflow.impl.WorkflowModelFactory; +import io.serverlessworkflow.impl.jackson.JacksonCloudEventUtils; import io.serverlessworkflow.impl.jackson.JsonUtils; -import io.serverlessworkflow.impl.jackson.events.JacksonCloudEventUtils; import java.math.BigDecimal; import java.time.OffsetDateTime; import java.util.Map; diff --git a/impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelSerializer.java b/impl/model/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelSerializer.java similarity index 100% rename from impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelSerializer.java rename to impl/model/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelSerializer.java diff --git a/impl/jackson/src/main/resources/META-INF/services/io.serverlessworkflow.impl.WorkflowModelFactory b/impl/model/src/main/resources/META-INF/services/io.serverlessworkflow.impl.WorkflowModelFactory similarity index 100% rename from impl/jackson/src/main/resources/META-INF/services/io.serverlessworkflow.impl.WorkflowModelFactory rename to impl/model/src/main/resources/META-INF/services/io.serverlessworkflow.impl.WorkflowModelFactory diff --git a/impl/persistence/jackson-marshaller/pom.xml b/impl/persistence/jackson-marshaller/pom.xml index 322a557ce..7cd1447b8 100644 --- a/impl/persistence/jackson-marshaller/pom.xml +++ b/impl/persistence/jackson-marshaller/pom.xml @@ -14,7 +14,7 @@ io.serverlessworkflow - serverlessworkflow-impl-jackson + serverlessworkflow-impl-model \ No newline at end of file diff --git a/impl/pom.xml b/impl/pom.xml index fe4f6bd32..8996325f8 100644 --- a/impl/pom.xml +++ b/impl/pom.xml @@ -27,6 +27,31 @@ serverlessworkflow-impl-http ${project.version} + + io.serverlessworkflow + serverlessworkflow-impl-json + ${project.version} + + + io.serverlessworkflow + serverlessworkflow-impl-jq + ${project.version} + + + io.serverlessworkflow + serverlessworkflow-impl-model + ${project.version} + + + io.serverlessworkflow + serverlessworkflow-impl-validation + ${project.version} + + + io.serverlessworkflow + serverlessworkflow-impl-lifecycle-events + ${project.version} + io.serverlessworkflow serverlessworkflow-persistence-api @@ -57,11 +82,6 @@ serverlessworkflow-impl-jackson ${project.version} - - io.serverlessworkflow - serverlessworkflow-impl-jq - ${project.version} - net.thisptr jackson-jq @@ -104,5 +124,9 @@ persistence test jq + json-utils + model + lifecycleevent + validation \ No newline at end of file diff --git a/impl/test/pom.xml b/impl/test/pom.xml index 32bc56756..f861f9c55 100644 --- a/impl/test/pom.xml +++ b/impl/test/pom.xml @@ -29,10 +29,6 @@ io.serverlessworkflow serverlessworkflow-impl-http - - io.serverlessworkflow - serverlessworkflow-impl-jq - io.serverlessworkflow serverlessworkflow-impl-jackson-jwt diff --git a/impl/validation/pom.xml b/impl/validation/pom.xml new file mode 100644 index 000000000..b8b77ed69 --- /dev/null +++ b/impl/validation/pom.xml @@ -0,0 +1,28 @@ + + 4.0.0 + + io.serverlessworkflow + serverlessworkflow-impl + 8.0.0-SNAPSHOT + + serverlessworkflow-impl-validation + Serverless Workflow :: Impl :: Jackson:: Validation + + + com.networknt + json-schema-validator + + + io.serverlessworkflow + serverlessworkflow-api + + + io.serverlessworkflow + serverlessworkflow-impl-core + + + io.serverlessworkflow + serverlessworkflow-impl-json + + + \ No newline at end of file diff --git a/impl/jackson/src/main/java/io/serverlessworkflow/impl/jackson/schema/JsonSchemaValidator.java b/impl/validation/src/main/java/io/serverlessworkflow/impl/jackson/schema/JsonSchemaValidator.java similarity index 100% rename from impl/jackson/src/main/java/io/serverlessworkflow/impl/jackson/schema/JsonSchemaValidator.java rename to impl/validation/src/main/java/io/serverlessworkflow/impl/jackson/schema/JsonSchemaValidator.java diff --git a/impl/jackson/src/main/java/io/serverlessworkflow/impl/jackson/schema/JsonSchemaValidatorFactory.java b/impl/validation/src/main/java/io/serverlessworkflow/impl/jackson/schema/JsonSchemaValidatorFactory.java similarity index 100% rename from impl/jackson/src/main/java/io/serverlessworkflow/impl/jackson/schema/JsonSchemaValidatorFactory.java rename to impl/validation/src/main/java/io/serverlessworkflow/impl/jackson/schema/JsonSchemaValidatorFactory.java diff --git a/impl/jackson/src/main/resources/META-INF/services/io.serverlessworkflow.impl.schema.SchemaValidatorFactory b/impl/validation/src/main/resources/META-INF/services/io.serverlessworkflow.impl.schema.SchemaValidatorFactory similarity index 100% rename from impl/jackson/src/main/resources/META-INF/services/io.serverlessworkflow.impl.schema.SchemaValidatorFactory rename to impl/validation/src/main/resources/META-INF/services/io.serverlessworkflow.impl.schema.SchemaValidatorFactory