diff --git a/dapr-spring/dapr-spring-workflows/src/main/java/io/dapr/spring/workflows/config/DaprWorkflowsConfiguration.java b/dapr-spring/dapr-spring-workflows/src/main/java/io/dapr/spring/workflows/config/DaprWorkflowsConfiguration.java index 88e81906b0..b8b75941ff 100644 --- a/dapr-spring/dapr-spring-workflows/src/main/java/io/dapr/spring/workflows/config/DaprWorkflowsConfiguration.java +++ b/dapr-spring/dapr-spring-workflows/src/main/java/io/dapr/spring/workflows/config/DaprWorkflowsConfiguration.java @@ -17,12 +17,14 @@ import io.dapr.workflows.WorkflowActivity; import io.dapr.workflows.runtime.WorkflowRuntime; import io.dapr.workflows.runtime.WorkflowRuntimeBuilder; +import io.micrometer.common.util.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; import java.util.Map; @@ -54,8 +56,18 @@ private void registerWorkflowsAndActivities(ApplicationContext applicationContex Map workflowActivitiesBeans = applicationContext.getBeansOfType(WorkflowActivity.class); for (WorkflowActivity activity : workflowActivitiesBeans.values()) { - LOGGER.info("Dapr Workflow Activity: '{}' registered", activity.getClass().getName()); + // Get the @Component annotation + Component componentAnnotation = activity.getClass().getAnnotation(Component.class); + activity.getName() + if (componentAnnotation != null) { + var componentValue = componentAnnotation.value(); + if (StringUtils.isNotEmpty(componentValue)) { + LOGGER.info("Dapr Workflow Activity: '{}' with name '{}' registered", activity.getClass().getName(), componentValue); + workflowRuntimeBuilder.registerActivity(componentValue, activity); + } + } + LOGGER.info("Dapr Workflow Activity: '{}' registered", activity.getClass().getName()); workflowRuntimeBuilder.registerActivity(activity); } diff --git a/examples/src/main/java/io/dapr/examples/workflows/continueasnew/CleanUpActivity.java b/examples/src/main/java/io/dapr/examples/workflows/continueasnew/CleanUpActivity.java index 2a11fce4f0..263a914c8d 100644 --- a/examples/src/main/java/io/dapr/examples/workflows/continueasnew/CleanUpActivity.java +++ b/examples/src/main/java/io/dapr/examples/workflows/continueasnew/CleanUpActivity.java @@ -20,6 +20,7 @@ import java.util.concurrent.TimeUnit; + public class CleanUpActivity implements WorkflowActivity { @Override public Object run(WorkflowActivityContext ctx) { diff --git a/sdk-workflows/src/main/java/io/dapr/workflows/WorkflowActivity.java b/sdk-workflows/src/main/java/io/dapr/workflows/WorkflowActivity.java index 5f8c45292a..7d611ac63a 100644 --- a/sdk-workflows/src/main/java/io/dapr/workflows/WorkflowActivity.java +++ b/sdk-workflows/src/main/java/io/dapr/workflows/WorkflowActivity.java @@ -42,4 +42,8 @@ public interface WorkflowActivity { * @return any serializable value to be returned to the calling orchestrator. */ Object run(WorkflowActivityContext ctx); + + default String getName() { + return this.getClass().getCanonicalName(); + } } diff --git a/sdk-workflows/src/main/java/io/dapr/workflows/runtime/WorkflowRuntimeBuilder.java b/sdk-workflows/src/main/java/io/dapr/workflows/runtime/WorkflowRuntimeBuilder.java index 12fe62860b..c486ceaa4c 100644 --- a/sdk-workflows/src/main/java/io/dapr/workflows/runtime/WorkflowRuntimeBuilder.java +++ b/sdk-workflows/src/main/java/io/dapr/workflows/runtime/WorkflowRuntimeBuilder.java @@ -116,6 +116,23 @@ public WorkflowRuntimeBuilder registerWorkflow(Class cla this.builder.addOrchestration(new WorkflowClassWrapper<>(clazz)); this.workflowSet.add(clazz.getCanonicalName()); this.workflows.add(clazz.getSimpleName()); + + this.logger.info("Registered Workflow: {}", clazz.getSimpleName()); + + return this; + } + + /** + * Registers a Workflow object. + * + * @param any Workflow type + * @param clazz the class being registered + * @return the WorkflowRuntimeBuilder + */ + public WorkflowRuntimeBuilder registerWorkflow(String name, Class clazz) { + this.builder.addOrchestration(new WorkflowClassWrapper<>(clazz)); + this.workflowSet.add(name); + this.workflows.add(name); this.logger.info("Registered Workflow: {}", clazz.getSimpleName());