Skip to content

Commit d36e7d7

Browse files
authored
Merge pull request #69 from uber/signal-sample
Add signal samples in Java
2 parents f1a1523 + 830da3e commit d36e7d7

File tree

4 files changed

+71
-2
lines changed

4 files changed

+71
-2
lines changed

src/main/java/com/uber/cadence/samples/spring/cadence/CadenceAutoConfiguration.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55

66
import com.uber.cadence.client.WorkflowClient;
77
import com.uber.cadence.client.WorkflowClientOptions;
8-
import com.uber.cadence.samples.spring.workflows.HelloWorldWorkflowImpl;
8+
import com.uber.cadence.samples.spring.workflows.impl.HelloWorldWorkflowImpl;
9+
import com.uber.cadence.samples.spring.workflows.impl.SignalWorkflowImpl;
910
import com.uber.cadence.serviceclient.ClientOptions;
1011
import com.uber.cadence.serviceclient.WorkflowServiceTChannel;
1112
import com.uber.cadence.worker.Worker;
@@ -33,7 +34,12 @@ public void startWorker(ApplicationStartedEvent event) {
3334
WorkflowClient workflowClient = context.getBean(WorkflowClient.class);
3435
WorkerFactory factory = WorkerFactory.newInstance(workflowClient);
3536
Worker worker = factory.newWorker(TASK_LIST);
37+
38+
// HelloWorldWorkflow registration
3639
worker.registerWorkflowImplementationTypes(HelloWorldWorkflowImpl.class);
40+
41+
// SignalWorkflow registration
42+
worker.registerWorkflowImplementationTypes(SignalWorkflowImpl.class);
3743
factory.start();
3844
}
3945
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.uber.cadence.samples.spring.workflows;
2+
3+
import com.uber.cadence.samples.spring.models.SampleMessage;
4+
import com.uber.cadence.workflow.SignalMethod;
5+
import com.uber.cadence.workflow.WorkflowMethod;
6+
7+
public interface SignalWorkflow {
8+
@WorkflowMethod
9+
void getGreeting(SampleMessage sampleMessage);
10+
11+
@SignalMethod
12+
void waitForGreeting(String greeting);
13+
14+
@SignalMethod
15+
void cancel();
16+
}

src/main/java/com/uber/cadence/samples/spring/workflows/HelloWorldWorkflowImpl.java renamed to src/main/java/com/uber/cadence/samples/spring/workflows/impl/HelloWorldWorkflowImpl.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
package com.uber.cadence.samples.spring.workflows;
1+
package com.uber.cadence.samples.spring.workflows.impl;
22

33
import com.uber.cadence.samples.spring.models.SampleMessage;
4+
import com.uber.cadence.samples.spring.workflows.HelloWorldWorkflow;
45
import com.uber.cadence.workflow.Workflow;
56
import org.slf4j.Logger;
67

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.uber.cadence.samples.spring.workflows.impl;
2+
3+
import com.uber.cadence.samples.spring.models.SampleMessage;
4+
import com.uber.cadence.samples.spring.workflows.SignalWorkflow;
5+
import com.uber.cadence.workflow.Workflow;
6+
import org.slf4j.Logger;
7+
8+
public class SignalWorkflowImpl implements SignalWorkflow {
9+
private final Logger logger = Workflow.getLogger(SignalWorkflowImpl.class);
10+
private String name;
11+
private String greetingMsg = "";
12+
private boolean cancel = false;
13+
14+
@Override
15+
public void getGreeting(SampleMessage sampleMessage) {
16+
logger.info("executing SignalWorkflow::getGreeting");
17+
this.name = sampleMessage.GetMessage();
18+
int count = 0;
19+
20+
while (!cancel) {
21+
Workflow.await(() -> cancel || !this.greetingMsg.isEmpty());
22+
if (!this.greetingMsg.isEmpty()) {
23+
logger.info(++count + ": " + this.greetingMsg + "!");
24+
this.greetingMsg = "";
25+
}
26+
}
27+
28+
logger.info("workflow canceled");
29+
}
30+
31+
@Override
32+
public void waitForGreeting(String greeting) {
33+
if (cancel) {
34+
logger.info("signal workflow failed because it is already cancelled");
35+
return;
36+
}
37+
38+
logger.info("received signal from SignalWorkflow:waitForName");
39+
this.greetingMsg = String.format("%s, %s!", greeting, this.name);
40+
}
41+
42+
@Override
43+
public void cancel() {
44+
this.cancel = true;
45+
}
46+
}

0 commit comments

Comments
 (0)