Skip to content

Commit 67c3ada

Browse files
committed
Merge upstream
1 parent 5bcd5ee commit 67c3ada

File tree

12 files changed

+149
-120
lines changed

12 files changed

+149
-120
lines changed

saas-modules/temporal/src/main/java/com/baeldung/temporal/workflows/flakyhello/FlakyHelloWorkflowImpl.java

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

saas-modules/temporal/src/main/java/com/baeldung/temporal/workflows/flakyhello/FlakySayHelloWorker.java

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

saas-modules/temporal/src/main/java/com/baeldung/temporal/workflows/flakyhello/activities/FlakySayHelloActivityImpl.java

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

saas-modules/temporal/src/main/java/com/baeldung/temporal/workflows/hello/SayHelloWorker.java renamed to saas-modules/temporal/src/main/java/com/baeldung/temporal/workflows/hello/HelloWorker.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import com.baeldung.temporal.workflows.hello.activities.SayHelloActivityImpl;
55
import io.temporal.worker.Worker;
66

7-
public class SayHelloWorker implements TemporalWorker {
7+
public class HelloWorker implements TemporalWorker {
88

99
private Worker worker;
1010

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.baeldung.temporal.workflows.hellov2;
2+
3+
import com.baeldung.temporal.worker.TemporalWorker;
4+
import com.baeldung.temporal.workflows.hellov2.activities.HelloV2ActivitiesImpl;
5+
import io.temporal.worker.Worker;
6+
7+
public class HelloV2Worker implements TemporalWorker {
8+
9+
private Worker worker;
10+
11+
@Override
12+
public void init(Worker worker) {
13+
this.worker = worker;
14+
worker.registerWorkflowImplementationTypes(HelloWorkflowV2Impl.class);
15+
worker.registerActivitiesImplementations(new HelloV2ActivitiesImpl());
16+
}
17+
18+
}

saas-modules/temporal/src/main/java/com/baeldung/temporal/workflows/flakyhello/FlakyHelloWorkflow.java renamed to saas-modules/temporal/src/main/java/com/baeldung/temporal/workflows/hellov2/HelloWorkflowV2.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
1-
package com.baeldung.temporal.workflows.flakyhello;
1+
package com.baeldung.temporal.workflows.hellov2;
22

33
import io.temporal.workflow.WorkflowInterface;
44
import io.temporal.workflow.WorkflowMethod;
55

66
@WorkflowInterface
7-
public interface FlakyHelloWorkflow {
8-
7+
public interface HelloWorkflowV2 {
98
@WorkflowMethod
109
String hello(String person);
11-
1210
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.baeldung.temporal.workflows.hellov2;
2+
3+
import com.baeldung.temporal.workflows.hellov2.activities.HelloV2Activities;
4+
import io.temporal.activity.ActivityOptions;
5+
import io.temporal.common.RetryOptions;
6+
import io.temporal.workflow.Workflow;
7+
import org.slf4j.Logger;
8+
import org.slf4j.LoggerFactory;
9+
10+
import java.time.Duration;
11+
12+
public class HelloWorkflowV2Impl implements HelloWorkflowV2 {
13+
14+
private static final Logger log = LoggerFactory.getLogger(HelloWorkflowV2Impl.class);
15+
16+
17+
private final HelloV2Activities activity = Workflow.newActivityStub(
18+
HelloV2Activities.class,
19+
ActivityOptions.newBuilder()
20+
.setStartToCloseTimeout(Duration.ofSeconds(10))
21+
.setRetryOptions(RetryOptions.newBuilder()
22+
.setMaximumAttempts(3)
23+
.setInitialInterval(Duration.ofSeconds(1))
24+
.build())
25+
.build()
26+
);
27+
28+
29+
@Override
30+
public String hello(String person) {
31+
32+
var info = Workflow.getInfo();
33+
34+
log.info("Running workflow for person {}: id={}, attempt={}",
35+
person,
36+
info.getWorkflowId(),
37+
info.getAttempt());
38+
39+
var step1result = activity.sayHello(person);
40+
var step2result = activity.sayGoodbye(person);
41+
42+
return "Workflow OK";
43+
}
44+
45+
}

saas-modules/temporal/src/main/java/com/baeldung/temporal/workflows/flakyhello/activities/FlakySayHelloActivity.java renamed to saas-modules/temporal/src/main/java/com/baeldung/temporal/workflows/hellov2/activities/HelloV2Activities.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1-
package com.baeldung.temporal.workflows.flakyhello.activities;
1+
package com.baeldung.temporal.workflows.hellov2.activities;
22

33
import io.temporal.activity.ActivityInterface;
44
import io.temporal.activity.ActivityMethod;
55

66
@ActivityInterface
7-
public interface FlakySayHelloActivity {
7+
public interface HelloV2Activities {
88
@ActivityMethod
99
String sayHello(String person);
10+
String sayGoodbye(String person);
1011
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.baeldung.temporal.workflows.hellov2.activities;
2+
3+
import io.temporal.activity.Activity;
4+
import org.slf4j.Logger;
5+
import org.slf4j.LoggerFactory;
6+
7+
import java.util.concurrent.atomic.AtomicLong;
8+
9+
public class HelloV2ActivitiesImpl implements HelloV2Activities {
10+
private static final Logger log = LoggerFactory.getLogger(HelloV2ActivitiesImpl.class);
11+
12+
@Override
13+
public String sayHello(String person) {
14+
var info = Activity.getExecutionContext().getInfo();
15+
16+
log.info("Saying hello to {}, workflowId={}, attempt={}", person,
17+
info.getWorkflowId(),
18+
info.getAttempt());
19+
return "Step1 - OK";
20+
}
21+
22+
@Override
23+
public String sayGoodbye(String person) {
24+
25+
var info = Activity.getExecutionContext().getInfo();
26+
27+
log.info("Saying goodbye to {}, workflowId={}, attempt={}", person,
28+
info.getWorkflowId(),
29+
info.getAttempt());
30+
31+
if ( info.getAttempt() == 1 ) {
32+
throw new IllegalStateException("Simulating task failure");
33+
}
34+
else {
35+
return "Step2 - OK";
36+
}
37+
}
38+
}

saas-modules/temporal/src/test/java/com/baeldung/temporal/SayHelloWorkerIntegrationTest.java renamed to saas-modules/temporal/src/test/java/com/baeldung/temporal/Hello2WorkerIntegrationTest.java

Lines changed: 30 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
package com.baeldung.temporal;
22

3-
import com.baeldung.temporal.worker.TemporalWorker;
43
import com.baeldung.temporal.workflows.hello.HelloWorkflow;
5-
import com.baeldung.temporal.workflows.hello.SayHelloWorker;
4+
import com.baeldung.temporal.workflows.hello.HelloWorker;
5+
import com.baeldung.temporal.workflows.hellov2.HelloV2Worker;
6+
import com.baeldung.temporal.workflows.hellov2.HelloWorkflowV2;
67
import io.temporal.client.WorkflowClient;
78
import io.temporal.client.WorkflowOptions;
9+
import io.temporal.common.VersioningBehavior;
10+
import io.temporal.common.WorkerDeploymentVersion;
811
import io.temporal.serviceclient.WorkflowServiceStubs;
9-
import io.temporal.worker.Worker;
10-
import io.temporal.worker.WorkerFactory;
11-
import io.temporal.worker.WorkerFactoryOptions;
12+
import io.temporal.worker.*;
13+
import io.temporal.workflow.Workflow;
1214
import org.junit.jupiter.api.AfterEach;
1315
import org.junit.jupiter.api.BeforeEach;
1416
import org.junit.jupiter.api.Test;
@@ -19,34 +21,31 @@
1921

2022
import static org.junit.jupiter.api.Assertions.assertEquals;
2123

22-
class SayHelloWorkerIntegrationTest {
23-
private final Logger log = LoggerFactory.getLogger(SayHelloWorkerIntegrationTest.class);
24+
class Hello2WorkerIntegrationTest {
25+
private static final String QUEUE_NAME = "say-hello-queue";
26+
private static final Logger log = LoggerFactory.getLogger(Hello2WorkerIntegrationTest.class);
2427

2528
private WorkerFactory factory;
2629

27-
private static final String QUEUE_NAME = "say-hello-queue";
28-
2930
@BeforeEach
3031
public void startWorker() {
3132

3233
log.info("Creating worker...");
3334
WorkflowServiceStubs service = WorkflowServiceStubs.newLocalServiceStubs();
3435
WorkflowClient client = WorkflowClient.newInstance(service);
35-
this.factory = WorkerFactory.newInstance(client,
36-
WorkerFactoryOptions.newBuilder()
37-
.setUsingVirtualWorkflowThreads(true)
38-
.build());
36+
this.factory = WorkerFactory.newInstance(client);
3937

40-
Worker worker = factory.newWorker(QUEUE_NAME);
38+
var workerOptions = WorkerOptions.newBuilder()
39+
.setUsingVirtualThreads(true)
40+
.build();
41+
Worker worker = factory.newWorker(QUEUE_NAME,workerOptions);
4142

42-
var sayHelloWorker = new SayHelloWorker();
43-
sayHelloWorker.init(worker);
43+
var helloV2Worker = new HelloV2Worker();
44+
helloV2Worker.init(worker);
4445

4546
log.info("Starting worker...");
4647
factory.start();
47-
4848
log.info("Worker started.");
49-
5049
}
5150

5251
@AfterEach
@@ -56,8 +55,6 @@ public void stopWorker() {
5655
log.info("Worker stopped.");
5756
}
5857

59-
60-
6158
@Test
6259
void givenPerson_whenSayHello_thenSuccess() {
6360

@@ -67,15 +64,25 @@ void givenPerson_whenSayHello_thenSuccess() {
6764
var wfid = UUID.randomUUID().toString();
6865

6966
var workflow = client.newWorkflowStub(
70-
HelloWorkflow.class,
67+
HelloWorkflowV2.class,
7168
WorkflowOptions.newBuilder()
7269
.setTaskQueue(QUEUE_NAME)
7370
.setWorkflowId(wfid)
7471
.build()
7572
);
7673

77-
String result = workflow.hello("Baeldung");
78-
assertEquals("Hello, Baeldung", result);
74+
75+
// Invoke workflow asynchronously.
76+
var execution = WorkflowClient.start(workflow::hello,"Baeldung");
77+
log.info("Workflow started: id={}, runId={}",
78+
execution.getWorkflowId(),
79+
execution.getRunId());
80+
81+
// Create a blocking workflow using the execution's workflow id
82+
var syncWorkflow = client.newWorkflowStub(HelloWorkflowV2.class,execution.getWorkflowId());
83+
84+
// The sync workflow stub will block until it completes. Notice that the call argument here is ignored!
85+
assertEquals("Workflow OK", syncWorkflow.hello("ignored"));
7986

8087
}
8188

0 commit comments

Comments
 (0)