diff --git a/impl/core/pom.xml b/impl/core/pom.xml index 80daa968..0ee45fe9 100644 --- a/impl/core/pom.xml +++ b/impl/core/pom.xml @@ -21,8 +21,8 @@ slf4j-api - com.github.f4b6a3 - ulid-creator + de.huxhorn.sulky + de.huxhorn.sulky.ulid diff --git a/impl/core/src/main/java/io/serverlessworkflow/impl/MonotonicUlidWorkflowInstanceIdFactory.java b/impl/core/src/main/java/io/serverlessworkflow/impl/MonotonicUlidWorkflowInstanceIdFactory.java new file mode 100644 index 00000000..20a722a2 --- /dev/null +++ b/impl/core/src/main/java/io/serverlessworkflow/impl/MonotonicUlidWorkflowInstanceIdFactory.java @@ -0,0 +1,41 @@ +/* + * Copyright 2020-Present The Serverless Workflow Specification Authors + * + * 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 io.serverlessworkflow.impl; + +import de.huxhorn.sulky.ulid.ULID; +import java.security.SecureRandom; +import java.util.concurrent.atomic.AtomicReference; + +/** + * A {@link WorkflowInstanceIdFactory} implementation that generates Monotonic ULIDs as workflow + * instance IDs. + */ +public class MonotonicUlidWorkflowInstanceIdFactory implements WorkflowInstanceIdFactory { + + private final ULID ulid; + private final AtomicReference currentUlid; + + public MonotonicUlidWorkflowInstanceIdFactory() { + this.ulid = new ULID(new SecureRandom()); + this.currentUlid = new AtomicReference<>(ulid.nextValue()); + } + + public String get() { + return currentUlid + .getAndUpdate(previousUlid -> ulid.nextMonotonicValue(previousUlid)) + .toString(); + } +} diff --git a/impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowApplication.java b/impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowApplication.java index 09cfe7c3..8e25e651 100644 --- a/impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowApplication.java +++ b/impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowApplication.java @@ -15,7 +15,6 @@ */ package io.serverlessworkflow.impl; -import com.github.f4b6a3.ulid.UlidCreator; import io.serverlessworkflow.api.types.SchemaInline; import io.serverlessworkflow.api.types.Workflow; import io.serverlessworkflow.impl.events.EventConsumer; @@ -141,7 +140,7 @@ public SchemaValidator getValidator(SchemaInline inline) { private ResourceLoaderFactory resourceLoaderFactory = DefaultResourceLoaderFactory.get(); private SchemaValidatorFactory schemaValidatorFactory; private WorkflowPositionFactory positionFactory = () -> new QueueWorkflowPosition(); - private WorkflowInstanceIdFactory idFactory = () -> UlidCreator.getMonotonicUlid().toString(); + private WorkflowInstanceIdFactory idFactory; private ExecutorServiceFactory executorFactory = new DefaultExecutorServiceFactory(); private EventConsumer eventConsumer; private Collection eventPublishers = new ArrayList<>(); @@ -244,6 +243,9 @@ public WorkflowApplication build() { return inMemory; }); } + if (idFactory == null) { + idFactory = new MonotonicUlidWorkflowInstanceIdFactory(); + } return new WorkflowApplication(this); } } diff --git a/impl/pom.xml b/impl/pom.xml index cd3f6076..41c4cb73 100644 --- a/impl/pom.xml +++ b/impl/pom.xml @@ -9,10 +9,10 @@ Serverless Workflow :: Impl pom - 3.1.11 - 1.6.0 - 5.2.3 + 8.3.0 4.0.0 + 1.6.0 + 3.1.11 @@ -42,9 +42,9 @@ ${version.net.thisptr} - com.github.f4b6a3 - ulid-creator - ${version.com.github.f4b6a3} + de.huxhorn.sulky + de.huxhorn.sulky.ulid + ${version.de.huxhorn.sulky} jakarta.ws.rs