Skip to content

Commit b265cf6

Browse files
committed
initial @EnableDaprWorkflows implementation
Signed-off-by: salaboy <[email protected]>
1 parent 458a3b3 commit b265cf6

File tree

8 files changed

+153
-2
lines changed

8 files changed

+153
-2
lines changed

dapr-spring/dapr-spring-boot-autoconfigure/src/main/java/io/dapr/spring/boot/autoconfigure/client/DaprClientAutoConfiguration.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import io.dapr.client.DaprClientBuilder;
1818
import io.dapr.config.Properties;
1919
import io.dapr.workflows.client.DaprWorkflowClient;
20+
import io.dapr.workflows.runtime.WorkflowRuntimeBuilder;
2021
import org.springframework.boot.autoconfigure.AutoConfiguration;
2122
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
2223
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
@@ -65,14 +66,26 @@ DaprClient daprClient(DaprClientBuilder daprClientBuilder) {
6566
@Bean
6667
@ConditionalOnMissingBean
6768
DaprWorkflowClient daprWorkflowClient(DaprConnectionDetails daprConnectionDetails) {
69+
final Properties properties = createPropertiesFromConnectionDetails(daprConnectionDetails);
70+
return new DaprWorkflowClient(properties);
71+
}
72+
73+
@Bean
74+
@ConditionalOnMissingBean
75+
WorkflowRuntimeBuilder daprWorkflowRuntimeBuilder(DaprConnectionDetails daprConnectionDetails) {
76+
final Properties properties = createPropertiesFromConnectionDetails(daprConnectionDetails);
77+
return new WorkflowRuntimeBuilder(properties);
78+
}
79+
80+
private Properties createPropertiesFromConnectionDetails(DaprConnectionDetails daprConnectionDetails) {
6881
final Map<String, String> propertyOverrides = new HashMap<>();
6982
propertyOverrides.put(Properties.HTTP_ENDPOINT.getName(), daprConnectionDetails.httpEndpoint());
7083
propertyOverrides.put(Properties.HTTP_PORT.getName(), String.valueOf(daprConnectionDetails.httpPort()));
7184
propertyOverrides.put(Properties.GRPC_ENDPOINT.getName(), daprConnectionDetails.grpcEndpoint());
7285
propertyOverrides.put(Properties.GRPC_PORT.getName(), String.valueOf(daprConnectionDetails.grpcPort()));
73-
final Properties properties = new Properties(propertyOverrides);
74-
return new DaprWorkflowClient(properties);
86+
return new Properties(propertyOverrides);
7587
}
7688

7789

90+
7891
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package io.dapr.spring.boot.autoconfigure.client;
2+
3+
import io.dapr.spring.boot.autoconfigure.client.workflows.TestActivity;
4+
import io.dapr.spring.boot.autoconfigure.client.workflows.TestWorkflow;
5+
import io.dapr.workflows.client.DaprWorkflowClient;
6+
import org.junit.jupiter.api.Test;
7+
import org.springframework.beans.factory.annotation.Autowired;
8+
import org.springframework.boot.test.context.SpringBootTest;
9+
10+
import static org.junit.jupiter.api.Assertions.assertNotNull;
11+
12+
@SpringBootTest(classes = {WorkflowTestApplication.class, DaprClientAutoConfiguration.class, TestActivity.class, TestWorkflow.class})
13+
public class DaprWorkflowsRegistrationTests {
14+
15+
@Autowired
16+
private DaprWorkflowClient daprWorkflowClient;
17+
18+
@Test
19+
public void doThat(){
20+
assertNotNull(daprWorkflowClient);
21+
22+
}
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package io.dapr.spring.boot.autoconfigure.client;
2+
3+
import io.dapr.spring.workflows.config.EnableDaprWorkflows;
4+
import org.springframework.boot.SpringApplication;
5+
import org.springframework.boot.autoconfigure.SpringBootApplication;
6+
7+
@SpringBootApplication
8+
@EnableDaprWorkflows
9+
public class WorkflowTestApplication {
10+
public static void main(String[] args) {
11+
SpringApplication.run(WorkflowTestApplication.class, args);
12+
13+
}
14+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package io.dapr.spring.boot.autoconfigure.client.workflows;
2+
3+
import io.dapr.workflows.runtime.WorkflowActivity;
4+
import io.dapr.workflows.runtime.WorkflowActivityContext;
5+
6+
public class TestActivity implements WorkflowActivity {
7+
@Override
8+
public Object run(WorkflowActivityContext ctx) {
9+
return null;
10+
}
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package io.dapr.spring.boot.autoconfigure.client.workflows;
2+
3+
import io.dapr.workflows.Workflow;
4+
import io.dapr.workflows.WorkflowStub;
5+
6+
public class TestWorkflow extends Workflow {
7+
8+
@Override
9+
public WorkflowStub create() {
10+
return null;
11+
}
12+
}

dapr-spring/dapr-spring-boot-starters/dapr-spring-boot-starter/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@
4040
<artifactId>dapr-spring-messaging</artifactId>
4141
<version>${project.parent.version}</version>
4242
</dependency>
43+
<dependency>
44+
<groupId>io.dapr.spring</groupId>
45+
<artifactId>dapr-spring-workflows</artifactId>
46+
<version>${project.parent.version}</version>
47+
</dependency>
4348
</dependencies>
4449

4550
</project>
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package io.dapr.spring.workflows.config;
2+
3+
import io.dapr.workflows.Workflow;
4+
import io.dapr.workflows.runtime.WorkflowActivity;
5+
import io.dapr.workflows.runtime.WorkflowRuntime;
6+
import io.dapr.workflows.runtime.WorkflowRuntimeBuilder;
7+
import org.slf4j.Logger;
8+
import org.slf4j.LoggerFactory;
9+
import org.springframework.beans.BeansException;
10+
import org.springframework.beans.factory.annotation.Autowired;
11+
import org.springframework.context.ApplicationContext;
12+
import org.springframework.context.ApplicationContextAware;
13+
import org.springframework.context.annotation.Bean;
14+
import org.springframework.context.annotation.ComponentScan;
15+
import org.springframework.context.annotation.Configuration;
16+
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
17+
18+
import java.util.Map;
19+
20+
@Configuration
21+
@ComponentScan("io.dapr.spring.workflows.config")
22+
public class DaprWorkflowsConfig implements ApplicationContextAware {
23+
private static final Logger LOGGER = LoggerFactory.getLogger(DaprWorkflowsConfig.class);
24+
@Autowired
25+
private WorkflowRuntimeBuilder workflowRuntimeBuilder;
26+
27+
private static ApplicationContext context;
28+
29+
/**
30+
* Register workflows and activities to the workflowRuntimeBuilder.
31+
*/
32+
public void registerWorkflowsAndActivities() {
33+
LOGGER.info("Registering Dapr Workflows and Activities");
34+
Map<String, Workflow> workflowBeans = context.getBeansOfType(Workflow.class);
35+
for (Workflow w : workflowBeans.values()) {
36+
LOGGER.info("Dapr Workflow: '{}' registered", w.getClass().getName());
37+
workflowRuntimeBuilder.registerWorkflow(w.getClass());
38+
}
39+
40+
Map<String, WorkflowActivity> workflowActivitiesBeans = context.getBeansOfType(WorkflowActivity.class);
41+
for (WorkflowActivity a : workflowActivitiesBeans.values()) {
42+
LOGGER.info("Dapr Workflow Activity: '{}' registered", a.getClass().getName());
43+
workflowRuntimeBuilder.registerActivity(a.getClass());
44+
}
45+
46+
try (WorkflowRuntime runtime = workflowRuntimeBuilder.build()) {
47+
LOGGER.info("Starting workflow runtime ... ");
48+
runtime.start(false);
49+
}
50+
}
51+
52+
@Override
53+
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
54+
context = applicationContext;
55+
registerWorkflowsAndActivities();
56+
}
57+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package io.dapr.spring.workflows.config;
2+
3+
4+
import org.springframework.context.annotation.Import;
5+
6+
import java.lang.annotation.Retention;
7+
import java.lang.annotation.Target;
8+
9+
import static java.lang.annotation.ElementType.TYPE;
10+
import static java.lang.annotation.RetentionPolicy.RUNTIME;
11+
12+
@Retention(RUNTIME)
13+
@Target(TYPE)
14+
@Import(DaprWorkflowsConfig.class)
15+
public @interface EnableDaprWorkflows {
16+
}

0 commit comments

Comments
 (0)