forked from dapr/durabletask-java
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTaskActivityExecutor.java
More file actions
85 lines (69 loc) · 2.74 KB
/
TaskActivityExecutor.java
File metadata and controls
85 lines (69 loc) · 2.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
package io.dapr.durabletask;
import java.util.HashMap;
import java.util.logging.Logger;
final class TaskActivityExecutor {
private final HashMap<String, TaskActivityFactory> activityFactories;
private final DataConverter dataConverter;
private final Logger logger;
public TaskActivityExecutor(
HashMap<String, TaskActivityFactory> activityFactories,
DataConverter dataConverter,
Logger logger) {
this.activityFactories = activityFactories;
this.dataConverter = dataConverter;
this.logger = logger;
}
public String execute(String taskName, String input, String taskExecutionId, int taskId) throws Throwable {
TaskActivityFactory factory = this.activityFactories.get(taskName);
if (factory == null) {
throw new IllegalStateException(
String.format("No activity task named '%s' is registered.", taskName));
}
TaskActivity activity = factory.create();
if (activity == null) {
throw new IllegalStateException(
String.format("The task factory '%s' returned a null TaskActivity object.", taskName));
}
TaskActivityContextImpl context = new TaskActivityContextImpl(taskName, input, taskExecutionId, taskId);
// Unhandled exceptions are allowed to escape
Object output = activity.run(context);
if (output != null) {
return this.dataConverter.serialize(output);
}
return null;
}
private class TaskActivityContextImpl implements TaskActivityContext {
private final String name;
private final String rawInput;
private final String taskExecutionId;
private final int taskId;
private final DataConverter dataConverter = TaskActivityExecutor.this.dataConverter;
public TaskActivityContextImpl(String activityName, String rawInput, String taskExecutionId, int taskId) {
this.name = activityName;
this.rawInput = rawInput;
this.taskExecutionId = taskExecutionId;
this.taskId = taskId;
}
@Override
public String getName() {
return this.name;
}
@Override
public <T> T getInput(Class<T> targetType) {
if (this.rawInput == null) {
return null;
}
return this.dataConverter.deserialize(this.rawInput, targetType);
}
@Override
public String getTaskExecutionId() {
return this.taskExecutionId;
}
@Override
public int getTaskId() {
return this.taskId;
}
}
}