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