Skip to content

Commit b6c14f4

Browse files
committed
Some tweaks
1 parent 47a43e2 commit b6c14f4

File tree

8 files changed

+172
-116
lines changed

8 files changed

+172
-116
lines changed

core/src/main/java/io/temporal/samples/nexus_messaging/README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,21 +40,21 @@ temporal operator nexus endpoint create \
4040
In one terminal, start the handler worker (shared by both patterns):
4141

4242
```bash
43-
./gradlew -q :core:execute -PmainClass=io.temporal.samples.nexus_messaging.handler.HandlerWorker
43+
./gradlew -q :core:execute -PmainClass=io.temporal.samples.nexus_messaging.handler.HandlerWorker --args="-target-host localhost:7233 -namespace my-target-namespace"
4444
```
4545

4646
#### Entity pattern
4747

4848
In the second terminal, run the caller worker:
4949

5050
```bash
51-
./gradlew -q :core:execute -PmainClass=io.temporal.samples.nexus_messaging.caller.CallerWorker
51+
./gradlew -q :core:execute -PmainClass=io.temporal.samples.nexus_messaging.caller.CallerWorker --args="-target-host localhost:7233 -namespace my-caller-namespace"
5252
```
5353

5454
In the third terminal, start the caller workflow:
5555

5656
```bash
57-
./gradlew -q :core:execute -PmainClass=io.temporal.samples.nexus_messaging.caller.CallerStarter
57+
./gradlew -q :core:execute -PmainClass=io.temporal.samples.nexus_messaging.caller.CallerStarter --args="-target-host localhost:7233 -namespace my-caller-namespace"
5858
```
5959

6060
Expected output:
@@ -70,13 +70,13 @@ workflow approved
7070
In a second terminal, run the remote caller worker:
7171

7272
```bash
73-
./gradlew -q :core:execute -PmainClass=io.temporal.samples.nexus_messaging.caller_remote.CallerRemoteWorker
73+
./gradlew -q :core:execute -PmainClass=io.temporal.samples.nexus_messaging.caller_remote.CallerRemoteWorker --args="-target-host localhost:7233 -namespace my-caller-namespace"
7474
```
7575

7676
In a third terminal, start the remote caller workflow:
7777

7878
```bash
79-
./gradlew -q :core:execute -PmainClass=io.temporal.samples.nexus_messaging.caller_remote.CallerRemoteStarter
79+
./gradlew -q :core:execute -PmainClass=io.temporal.samples.nexus_messaging.caller_remote.CallerRemoteStarter --args="-target-host localhost:7233 -namespace my-caller-namespace"
8080
```
8181

8282
Expected output:

core/src/main/java/io/temporal/samples/nexus_messaging/caller/CallerWorkflowImpl.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package io.temporal.samples.nexus_messaging.caller;
22

33
import io.temporal.failure.ApplicationFailure;
4-
import io.temporal.samples.nexus_messaging.caller_remote.CallerRemoteWorkflowImpl;
4+
import io.temporal.samples.nexus_messaging.callerondemand.CallerRemoteWorkflowImpl;
55
import io.temporal.samples.nexus_messaging.service.Language;
66
import io.temporal.samples.nexus_messaging.service.NexusGreetingService;
77
import io.temporal.workflow.NexusOperationOptions;
@@ -11,11 +11,10 @@
1111
import java.util.ArrayList;
1212
import java.util.List;
1313
import org.slf4j.Logger;
14-
import org.slf4j.LoggerFactory;
1514

1615
public class CallerWorkflowImpl implements CallerWorkflow {
1716

18-
private static final Logger logger = LoggerFactory.getLogger(CallerRemoteWorkflowImpl.class);
17+
private static final Logger logger = Workflow.getLogger(CallerRemoteWorkflowImpl.class);
1918

2019
// The endpoint is configured at the worker level in CallerWorker; only operation options are
2120
// set here.
@@ -36,26 +35,28 @@ public List<String> run() {
3635
// 👉 Call a Nexus operation backed by a query against the entity workflow.
3736
NexusGreetingService.GetLanguagesOutput languagesOutput =
3837
greetingService.getLanguages(new NexusGreetingService.GetLanguagesInput(false));
39-
log.add("supported languages: " + languagesOutput.getLanguages());
38+
log.add("Supported languages: " + languagesOutput.getLanguages());
39+
logger.info("Supported languages: {}", languagesOutput.getLanguages());
4040

4141
// 👉 Call a Nexus operation backed by an update against the entity workflow.
4242
Language previousLanguage =
4343
greetingService.setLanguage(new NexusGreetingService.SetLanguageInput(Language.ARABIC));
44-
logger.info("Language changed from {} to {}", previousLanguage, Language.ARABIC);
4544

4645
// 👉 Call a Nexus operation backed by a query to confirm the language change.
4746
Language currentLanguage =
4847
greetingService.getLanguage(new NexusGreetingService.GetLanguageInput());
4948
if (currentLanguage != Language.ARABIC) {
5049
throw ApplicationFailure.newFailure(
51-
"expected language ARABIC, got " + currentLanguage, "AssertionError");
50+
"Expected language ARABIC, got " + currentLanguage, "AssertionError");
5251
}
5352

54-
log.add("language changed: " + previousLanguage.name() + " -> " + Language.ARABIC.name());
53+
log.add("Language changed: " + previousLanguage.name() + " -> " + Language.ARABIC.name());
54+
logger.info("Language changed from {} to {}", previousLanguage, Language.ARABIC);
5555

5656
// 👉 Call a Nexus operation backed by a signal against the entity workflow.
5757
greetingService.approve(new NexusGreetingService.ApproveInput("caller"));
58-
log.add("workflow approved");
58+
log.add("Workflow approved");
59+
logger.info("Workflow approved");
5960

6061
return log;
6162
}

core/src/main/java/io/temporal/samples/nexus_messaging/caller_remote/CallerRemoteWorkflowImpl.java

Lines changed: 0 additions & 78 deletions
This file was deleted.

core/src/main/java/io/temporal/samples/nexus_messaging/caller_remote/CallerRemoteStarter.java renamed to core/src/main/java/io/temporal/samples/nexus_messaging/callerondemand/CallerRemoteStarter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.temporal.samples.nexus_messaging.caller_remote;
1+
package io.temporal.samples.nexus_messaging.callerondemand;
22

33
import io.temporal.client.WorkflowClient;
44
import io.temporal.client.WorkflowClientOptions;

core/src/main/java/io/temporal/samples/nexus_messaging/caller_remote/CallerRemoteWorker.java renamed to core/src/main/java/io/temporal/samples/nexus_messaging/callerondemand/CallerRemoteWorker.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.temporal.samples.nexus_messaging.caller_remote;
1+
package io.temporal.samples.nexus_messaging.callerondemand;
22

33
import io.temporal.client.WorkflowClient;
44
import io.temporal.client.WorkflowClientOptions;
@@ -7,12 +7,12 @@
77
import io.temporal.worker.WorkerFactory;
88
import io.temporal.worker.WorkflowImplementationOptions;
99
import io.temporal.workflow.NexusServiceOptions;
10+
import io.temporal.workflow.Workflow;
1011
import java.util.Collections;
1112
import org.slf4j.Logger;
12-
import org.slf4j.LoggerFactory;
1313

1414
public class CallerRemoteWorker {
15-
private static final Logger logger = LoggerFactory.getLogger(CallerRemoteWorker.class);
15+
private static final Logger logger = Workflow.getLogger(CallerRemoteWorker.class);
1616

1717
public static final String NAMESPACE = "nexus-messaging-caller-namespace";
1818
public static final String TASK_QUEUE = "nexus-messaging-caller-remote-task-queue";

core/src/main/java/io/temporal/samples/nexus_messaging/caller_remote/CallerRemoteWorkflow.java renamed to core/src/main/java/io/temporal/samples/nexus_messaging/callerondemand/CallerRemoteWorkflow.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.temporal.samples.nexus_messaging.caller_remote;
1+
package io.temporal.samples.nexus_messaging.callerondemand;
22

33
import io.temporal.workflow.WorkflowInterface;
44
import io.temporal.workflow.WorkflowMethod;
Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
package io.temporal.samples.nexus_messaging.callerondemand;
2+
3+
import io.temporal.samples.nexus_messaging.service.Language;
4+
import io.temporal.samples.nexus_messaging.service.NexusGreetingService;
5+
import io.temporal.samples.nexus_messaging.service.NexusRemoteGreetingService;
6+
import io.temporal.workflow.NexusOperationHandle;
7+
import io.temporal.workflow.NexusOperationOptions;
8+
import io.temporal.workflow.NexusServiceOptions;
9+
import io.temporal.workflow.Workflow;
10+
import java.time.Duration;
11+
import java.util.ArrayList;
12+
import java.util.List;
13+
import org.slf4j.Logger;
14+
15+
public class CallerRemoteWorkflowImpl implements CallerRemoteWorkflow {
16+
17+
private static final Logger logger = Workflow.getLogger(CallerRemoteWorkflowImpl.class);
18+
19+
// private static final String REMOTE_WORKFLOW_ID = "nexus-messaging-remote-greeting-workflow";
20+
private static final String REMOTE_WORKFLOW_ONE = "UserId One";
21+
private static final String REMOTE_WORKFLOW_TWO = "UserId Two";
22+
23+
NexusRemoteGreetingService greetingRemoteServiceOne =
24+
Workflow.newNexusServiceStub(
25+
NexusRemoteGreetingService.class,
26+
NexusServiceOptions.newBuilder()
27+
.setOperationOptions(
28+
NexusOperationOptions.newBuilder()
29+
.setScheduleToCloseTimeout(Duration.ofSeconds(10))
30+
.build())
31+
.build());
32+
NexusRemoteGreetingService greetingRemoteServiceTwo =
33+
Workflow.newNexusServiceStub(
34+
NexusRemoteGreetingService.class,
35+
NexusServiceOptions.newBuilder()
36+
.setOperationOptions(
37+
NexusOperationOptions.newBuilder()
38+
.setScheduleToCloseTimeout(Duration.ofSeconds(10))
39+
.build())
40+
.build());
41+
42+
@Override
43+
public List<String> run() {
44+
List<String> log = new ArrayList<>();
45+
46+
// 👉 Async Nexus operation — starts a workflow on the handler and returns a handle.
47+
// Unlike the sync operations below (getLanguages, setLanguage, etc.), this does not block
48+
// until the workflow completes. It is backed by WorkflowRunOperation on the handler side.
49+
NexusOperationHandle<String> handleOne =
50+
Workflow.startNexusOperation(
51+
greetingRemoteServiceOne::runFromRemote,
52+
new NexusRemoteGreetingService.RunFromRemoteInput(REMOTE_WORKFLOW_ONE));
53+
// Wait for the operation to be started (workflow is now running on the handler).
54+
handleOne.getExecution().get();
55+
log.add("started remote greeting workflow: " + REMOTE_WORKFLOW_ONE);
56+
logger.info("started remote greeting workflow {}", REMOTE_WORKFLOW_ONE);
57+
58+
NexusOperationHandle<String> handleTwo =
59+
Workflow.startNexusOperation(
60+
greetingRemoteServiceOne::runFromRemote,
61+
new NexusRemoteGreetingService.RunFromRemoteInput(REMOTE_WORKFLOW_TWO));
62+
// Wait for the operation to be started (workflow is now running on the handler).
63+
handleTwo.getExecution().get();
64+
log.add("started remote greeting workflow: " + REMOTE_WORKFLOW_TWO);
65+
logger.info("started remote greeting workflow {}", REMOTE_WORKFLOW_TWO);
66+
67+
// Query the remote workflow for supported languages.
68+
// Output types (e.g. GetLanguagesOutput) are defined on NexusGreetingService and shared by
69+
// both service interfaces.
70+
NexusGreetingService.GetLanguagesOutput languagesOutput =
71+
greetingRemoteServiceOne.getLanguages(
72+
new NexusRemoteGreetingService.GetLanguagesInput(false, REMOTE_WORKFLOW_ONE));
73+
log.add(
74+
"Supported languages for " + REMOTE_WORKFLOW_ONE + ": " + languagesOutput.getLanguages());
75+
logger.info(
76+
"supported languages are {} for workflow {}",
77+
languagesOutput.getLanguages(),
78+
REMOTE_WORKFLOW_ONE);
79+
80+
languagesOutput =
81+
greetingRemoteServiceTwo.getLanguages(
82+
new NexusRemoteGreetingService.GetLanguagesInput(false, REMOTE_WORKFLOW_TWO));
83+
log.add(
84+
"Supported languages for " + REMOTE_WORKFLOW_TWO + ": " + languagesOutput.getLanguages());
85+
logger.info(
86+
"supported languages are {} for workflow {}",
87+
languagesOutput.getLanguages(),
88+
REMOTE_WORKFLOW_TWO);
89+
90+
// Update the language on the remote workflow.
91+
Language previousLanguageOne =
92+
greetingRemoteServiceOne.setLanguage(
93+
new NexusRemoteGreetingService.SetLanguageInput(Language.ARABIC, REMOTE_WORKFLOW_ONE));
94+
95+
Language previousLanguageTwo =
96+
greetingRemoteServiceTwo.setLanguage(
97+
new NexusRemoteGreetingService.SetLanguageInput(Language.HINDI, REMOTE_WORKFLOW_TWO));
98+
99+
// Confirm the change by querying.
100+
Language currentLanguage =
101+
greetingRemoteServiceOne.getLanguage(
102+
new NexusRemoteGreetingService.GetLanguageInput(REMOTE_WORKFLOW_ONE));
103+
log.add(
104+
REMOTE_WORKFLOW_ONE
105+
+ " changed language: "
106+
+ previousLanguageOne.name()
107+
+ " -> "
108+
+ currentLanguage.name());
109+
logger.info(
110+
"Language changed from {} to {} for workflow {}",
111+
previousLanguageOne,
112+
currentLanguage,
113+
REMOTE_WORKFLOW_ONE);
114+
115+
currentLanguage =
116+
greetingRemoteServiceTwo.getLanguage(
117+
new NexusRemoteGreetingService.GetLanguageInput(REMOTE_WORKFLOW_TWO));
118+
log.add(
119+
REMOTE_WORKFLOW_TWO
120+
+ " changed language: "
121+
+ previousLanguageTwo.name()
122+
+ " -> "
123+
+ currentLanguage.name());
124+
logger.info(
125+
"Language changed from {} to {} for workflow {}",
126+
previousLanguageTwo,
127+
currentLanguage,
128+
REMOTE_WORKFLOW_TWO);
129+
130+
// Approve the remote workflow so it can complete.
131+
greetingRemoteServiceOne.approve(
132+
new NexusRemoteGreetingService.ApproveInput("remote-caller", REMOTE_WORKFLOW_ONE));
133+
greetingRemoteServiceTwo.approve(
134+
new NexusRemoteGreetingService.ApproveInput("remote-caller", REMOTE_WORKFLOW_TWO));
135+
log.add("Workflows approved");
136+
137+
// Wait for the remote workflow to finish and return its result.
138+
String result = handleOne.getResult().get();
139+
log.add("Workflow one result: " + result);
140+
141+
result = handleTwo.getResult().get();
142+
log.add("Workflow two result: " + result);
143+
return log;
144+
}
145+
}

0 commit comments

Comments
 (0)