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
71 lines (57 loc) · 2.29 KB
/
TaskActivityExecutor.java
File metadata and controls
71 lines (57 loc) · 2.29 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
// 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, 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);
// 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 DataConverter dataConverter = TaskActivityExecutor.this.dataConverter;
public TaskActivityContextImpl(String activityName, String rawInput) {
this.name = activityName;
this.rawInput = rawInput;
}
@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);
}
}
}