From 61bf7a9071fe443eb6f1722ccdb7a78fdd6ccd9b Mon Sep 17 00:00:00 2001 From: Maxim Fateev Date: Fri, 26 Jun 2020 19:19:32 -0700 Subject: [PATCH 1/7] 25.0 Release (#18) * Error handling and other proto changes in Java SDK (#17) * Updated temporal-sdk version to 0.25.0 --- build.gradle | 2 +- .../bookingsaga/TripBookingWorkflowImpl.java | 4 +- .../common/QueryWorkflowExecution.java | 2 +- .../fileprocessing/StoreActivities.java | 7 +++- .../samples/hello/HelloActivityRetry.java | 2 +- .../hello/HelloAsyncActivityCompletion.java | 10 +++-- .../io/temporal/samples/hello/HelloCron.java | 13 ++++-- .../temporal/samples/hello/HelloPeriodic.java | 9 ++-- .../samples/hello/HelloSearchAttributes.java | 15 ++++--- .../samples/moneytransfer/AccountImpl.java | 1 - .../AccountTransferWorkflowImpl.java | 5 +-- .../DynamicSleepWorkflowStarter.java | 11 ++--- src/main/resources/logback.xml | 2 +- .../bookingsaga/TripBookingWorkflowTest.java | 9 +++- .../fileprocessing/FileProcessingTest.java | 7 ++-- .../temporal/samples/hello/HelloCronTest.java | 2 +- .../samples/hello/HelloExceptionTest.java | 42 +++++++++++-------- .../samples/hello/HelloPeriodicTest.java | 15 +++---- .../samples/hello/HelloSignalTest.java | 5 ++- 19 files changed, 92 insertions(+), 71 deletions(-) diff --git a/build.gradle b/build.gradle index e70ab58b4..098d844d1 100644 --- a/build.gradle +++ b/build.gradle @@ -27,7 +27,7 @@ repositories { } dependencies { - implementation group: 'io.temporal', name: 'temporal-sdk', version: '0.23.1' + implementation group: 'io.temporal', name: 'temporal-sdk', version: '0.25.0' implementation group: 'commons-configuration', name: 'commons-configuration', version: '1.9' implementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3' diff --git a/src/main/java/io/temporal/samples/bookingsaga/TripBookingWorkflowImpl.java b/src/main/java/io/temporal/samples/bookingsaga/TripBookingWorkflowImpl.java index f551b4a32..4ff188d7e 100644 --- a/src/main/java/io/temporal/samples/bookingsaga/TripBookingWorkflowImpl.java +++ b/src/main/java/io/temporal/samples/bookingsaga/TripBookingWorkflowImpl.java @@ -21,7 +21,7 @@ import io.temporal.activity.ActivityOptions; import io.temporal.common.RetryOptions; -import io.temporal.workflow.ActivityException; +import io.temporal.failure.ActivityFailure; import io.temporal.workflow.Saga; import io.temporal.workflow.Workflow; import java.time.Duration; @@ -51,7 +51,7 @@ public void bookTrip(String name) { String flightReservationID = activities.bookFlight(name); saga.addCompensation(activities::cancelFlight, flightReservationID, name); - } catch (ActivityException e) { + } catch (ActivityFailure e) { saga.compensate(); throw e; } diff --git a/src/main/java/io/temporal/samples/common/QueryWorkflowExecution.java b/src/main/java/io/temporal/samples/common/QueryWorkflowExecution.java index eea0b2358..da104cd08 100644 --- a/src/main/java/io/temporal/samples/common/QueryWorkflowExecution.java +++ b/src/main/java/io/temporal/samples/common/QueryWorkflowExecution.java @@ -21,7 +21,7 @@ import io.temporal.client.WorkflowClient; import io.temporal.client.WorkflowStub; -import io.temporal.proto.common.WorkflowExecution; +import io.temporal.common.v1.WorkflowExecution; import io.temporal.serviceclient.WorkflowServiceStubs; import java.util.Optional; diff --git a/src/main/java/io/temporal/samples/fileprocessing/StoreActivities.java b/src/main/java/io/temporal/samples/fileprocessing/StoreActivities.java index 80431d779..79cf072a4 100644 --- a/src/main/java/io/temporal/samples/fileprocessing/StoreActivities.java +++ b/src/main/java/io/temporal/samples/fileprocessing/StoreActivities.java @@ -26,14 +26,17 @@ public interface StoreActivities { final class TaskListFileNamePair { - private final String hostTaskList; - private final String fileName; + private String hostTaskList; + private String fileName; public TaskListFileNamePair(String hostTaskList, String fileName) { this.hostTaskList = hostTaskList; this.fileName = fileName; } + /** Jackson needs it */ + public TaskListFileNamePair() {} + public String getHostTaskList() { return hostTaskList; } diff --git a/src/main/java/io/temporal/samples/hello/HelloActivityRetry.java b/src/main/java/io/temporal/samples/hello/HelloActivityRetry.java index d49c7a731..bcca4528c 100644 --- a/src/main/java/io/temporal/samples/hello/HelloActivityRetry.java +++ b/src/main/java/io/temporal/samples/hello/HelloActivityRetry.java @@ -72,7 +72,7 @@ public static class GreetingWorkflowImpl implements GreetingWorkflow { .setRetryOptions( RetryOptions.newBuilder() .setInitialInterval(Duration.ofSeconds(1)) - .setDoNotRetry(IllegalArgumentException.class) + .setDoNotRetry(IllegalArgumentException.class.getName()) .build()) .build()); diff --git a/src/main/java/io/temporal/samples/hello/HelloAsyncActivityCompletion.java b/src/main/java/io/temporal/samples/hello/HelloAsyncActivityCompletion.java index 668adca41..352f4f388 100644 --- a/src/main/java/io/temporal/samples/hello/HelloAsyncActivityCompletion.java +++ b/src/main/java/io/temporal/samples/hello/HelloAsyncActivityCompletion.java @@ -20,6 +20,7 @@ package io.temporal.samples.hello; import io.temporal.activity.Activity; +import io.temporal.activity.ActivityExecutionContext; import io.temporal.activity.ActivityInterface; import io.temporal.activity.ActivityOptions; import io.temporal.client.ActivityCompletionClient; @@ -86,17 +87,18 @@ static class GreetingActivitiesImpl implements GreetingActivities { /** * Demonstrates how to implement an activity asynchronously. When {@link - * Activity#doNotCompleteOnReturn()} is called the activity implementation function returning - * doesn't complete the activity. + * io.temporal.activity.ActivityExecutionContext#doNotCompleteOnReturn()} is called the activity + * implementation function returning doesn't complete the activity. */ @Override public String composeGreeting(String greeting, String name) { // TaskToken is a correlation token used to match an activity task with its completion - byte[] taskToken = Activity.getTaskToken(); + ActivityExecutionContext context = Activity.getExecutionContext(); + byte[] taskToken = context.getTaskToken(); // In real life this request can be executed anywhere. By a separate service for // example. ForkJoinPool.commonPool().execute(() -> composeGreetingAsync(taskToken, greeting, name)); - Activity.doNotCompleteOnReturn(); + context.doNotCompleteOnReturn(); // When doNotCompleteOnReturn() is invoked the return value is ignored. return "ignored"; } diff --git a/src/main/java/io/temporal/samples/hello/HelloCron.java b/src/main/java/io/temporal/samples/hello/HelloCron.java index 5bbf4d4cb..6049b52dc 100644 --- a/src/main/java/io/temporal/samples/hello/HelloCron.java +++ b/src/main/java/io/temporal/samples/hello/HelloCron.java @@ -22,10 +22,10 @@ import io.temporal.activity.Activity; import io.temporal.activity.ActivityInterface; import io.temporal.activity.ActivityOptions; -import io.temporal.client.DuplicateWorkflowException; import io.temporal.client.WorkflowClient; +import io.temporal.client.WorkflowExecutionAlreadyStarted; import io.temporal.client.WorkflowOptions; -import io.temporal.proto.common.WorkflowExecution; +import io.temporal.common.v1.WorkflowExecution; import io.temporal.serviceclient.WorkflowServiceStubs; import io.temporal.worker.Worker; import io.temporal.worker.WorkerFactory; @@ -82,7 +82,8 @@ public void greet(String name) { static class GreetingActivitiesImpl implements GreetingActivities { @Override public void greet(String greeting) { - System.out.println("From " + Activity.getWorkflowExecution() + ": " + greeting); + System.out.println( + "From " + Activity.getExecutionContext().getInfo().getWorkflowId() + ": " + greeting); } } @@ -114,13 +115,17 @@ public static void main(String[] args) throws InterruptedException { .setWorkflowId(CRON_WORKFLOW_ID) .setTaskList(TASK_LIST) .setCronSchedule("* * * * *") + // Execution timeout limits total time. Cron will stop executing after this timeout. + .setWorkflowExecutionTimeout(Duration.ofMinutes(10)) + // Run timeout limits duration of a single workflow invocation. + .setWorkflowRunTimeout(Duration.ofMinutes(1)) .build(); // WorkflowOptions.newBuilder().setCronSchedule("@every 2s").build(); GreetingWorkflow workflow = client.newWorkflowStub(GreetingWorkflow.class, workflowOptions); try { WorkflowExecution execution = WorkflowClient.start(workflow::greet, "World"); System.out.println("Started " + execution); - } catch (DuplicateWorkflowException e) { + } catch (WorkflowExecutionAlreadyStarted e) { System.out.println("Already running as " + e.getExecution()); } catch (Throwable e) { e.printStackTrace(); diff --git a/src/main/java/io/temporal/samples/hello/HelloPeriodic.java b/src/main/java/io/temporal/samples/hello/HelloPeriodic.java index b19d8fba9..dde317948 100644 --- a/src/main/java/io/temporal/samples/hello/HelloPeriodic.java +++ b/src/main/java/io/temporal/samples/hello/HelloPeriodic.java @@ -23,12 +23,12 @@ import io.temporal.activity.Activity; import io.temporal.activity.ActivityInterface; import io.temporal.activity.ActivityOptions; -import io.temporal.client.DuplicateWorkflowException; import io.temporal.client.WorkflowClient; import io.temporal.client.WorkflowException; +import io.temporal.client.WorkflowExecutionAlreadyStarted; import io.temporal.client.WorkflowOptions; import io.temporal.client.WorkflowStub; -import io.temporal.proto.common.WorkflowExecution; +import io.temporal.common.v1.WorkflowExecution; import io.temporal.serviceclient.WorkflowServiceStubs; import io.temporal.worker.Worker; import io.temporal.worker.WorkerFactory; @@ -112,7 +112,8 @@ public void greetPeriodically(String name) { static class GreetingActivitiesImpl implements GreetingActivities { @Override public void greet(String greeting) { - System.out.println("From " + Activity.getWorkflowExecution() + ": " + greeting); + System.out.println( + "From " + Activity.getExecutionContext().getInfo().getWorkflowId() + ": " + greeting); } } @@ -160,7 +161,7 @@ public static void main(String[] args) throws InterruptedException { try { execution = WorkflowClient.start(workflow::greetPeriodically, "World"); System.out.println("Started " + execution); - } catch (DuplicateWorkflowException e) { + } catch (WorkflowExecutionAlreadyStarted e) { System.out.println("Still running as " + e.getExecution()); } catch (Throwable e) { e.printStackTrace(); diff --git a/src/main/java/io/temporal/samples/hello/HelloSearchAttributes.java b/src/main/java/io/temporal/samples/hello/HelloSearchAttributes.java index 9cb562361..e5578b0ca 100644 --- a/src/main/java/io/temporal/samples/hello/HelloSearchAttributes.java +++ b/src/main/java/io/temporal/samples/hello/HelloSearchAttributes.java @@ -25,18 +25,17 @@ import io.temporal.client.WorkflowClient; import io.temporal.client.WorkflowOptions; import io.temporal.common.converter.DataConverter; -import io.temporal.common.converter.GsonJsonDataConverter; -import io.temporal.proto.common.Payload; -import io.temporal.proto.common.SearchAttributes; -import io.temporal.proto.common.WorkflowExecution; -import io.temporal.proto.workflowservice.DescribeWorkflowExecutionRequest; -import io.temporal.proto.workflowservice.DescribeWorkflowExecutionResponse; +import io.temporal.common.v1.Payload; +import io.temporal.common.v1.SearchAttributes; +import io.temporal.common.v1.WorkflowExecution; import io.temporal.serviceclient.WorkflowServiceStubs; import io.temporal.worker.Worker; import io.temporal.worker.WorkerFactory; import io.temporal.workflow.Workflow; import io.temporal.workflow.WorkflowInterface; import io.temporal.workflow.WorkflowMethod; +import io.temporal.workflowservice.v1.DescribeWorkflowExecutionRequest; +import io.temporal.workflowservice.v1.DescribeWorkflowExecutionResponse; import java.text.SimpleDateFormat; import java.time.Duration; import java.util.Date; @@ -168,7 +167,7 @@ private static String generateDateTimeFieldValue() { // example for extract value from search attributes private static String getKeywordFromSearchAttribute(SearchAttributes searchAttributes) { Payload field = searchAttributes.getIndexedFieldsOrThrow("CustomKeywordField"); - DataConverter dataConverter = GsonJsonDataConverter.getInstance(); - return dataConverter.getPayloadConverter().fromData(field, String.class, String.class); + DataConverter dataConverter = DataConverter.getDefaultInstance(); + return dataConverter.fromPayload(field, String.class, String.class); } } diff --git a/src/main/java/io/temporal/samples/moneytransfer/AccountImpl.java b/src/main/java/io/temporal/samples/moneytransfer/AccountImpl.java index 6ff9678ea..761c06b3a 100644 --- a/src/main/java/io/temporal/samples/moneytransfer/AccountImpl.java +++ b/src/main/java/io/temporal/samples/moneytransfer/AccountImpl.java @@ -26,7 +26,6 @@ public void withdraw(String accountId, String referenceId, int amountCents) { System.out.printf( "Withdraw to %s of %d cents requested. ReferenceId=%s\n", accountId, amountCents, referenceId); - // throw new RuntimeException("simulated"); } @Override diff --git a/src/main/java/io/temporal/samples/moneytransfer/AccountTransferWorkflowImpl.java b/src/main/java/io/temporal/samples/moneytransfer/AccountTransferWorkflowImpl.java index 32202affa..bf7a042fe 100644 --- a/src/main/java/io/temporal/samples/moneytransfer/AccountTransferWorkflowImpl.java +++ b/src/main/java/io/temporal/samples/moneytransfer/AccountTransferWorkflowImpl.java @@ -26,10 +26,7 @@ public class AccountTransferWorkflowImpl implements AccountTransferWorkflow { private final ActivityOptions options = - ActivityOptions.newBuilder() - .setStartToCloseTimeout(Duration.ofSeconds(5)) - .setScheduleToStartTimeout(Duration.ofMinutes(10)) - .build(); + ActivityOptions.newBuilder().setStartToCloseTimeout(Duration.ofSeconds(5)).build(); private final Account account = Workflow.newActivityStub(Account.class, options); @Override diff --git a/src/main/java/io/temporal/samples/updatabletimer/DynamicSleepWorkflowStarter.java b/src/main/java/io/temporal/samples/updatabletimer/DynamicSleepWorkflowStarter.java index 623f17690..4f8cf3ca2 100644 --- a/src/main/java/io/temporal/samples/updatabletimer/DynamicSleepWorkflowStarter.java +++ b/src/main/java/io/temporal/samples/updatabletimer/DynamicSleepWorkflowStarter.java @@ -22,11 +22,11 @@ import static io.temporal.samples.updatabletimer.DynamicSleepWorkflowWorker.DYNAMIC_SLEEP_WORKFLOW_ID; import static io.temporal.samples.updatabletimer.DynamicSleepWorkflowWorker.TASK_LIST; -import io.temporal.client.DuplicateWorkflowException; import io.temporal.client.WorkflowClient; +import io.temporal.client.WorkflowExecutionAlreadyStarted; import io.temporal.client.WorkflowOptions; -import io.temporal.proto.common.WorkflowExecution; -import io.temporal.proto.common.WorkflowIdReusePolicy; +import io.temporal.common.v1.WorkflowExecution; +import io.temporal.enums.v1.WorkflowIdReusePolicy; import io.temporal.serviceclient.WorkflowServiceStubs; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -45,7 +45,8 @@ public static void main(String[] args) { WorkflowOptions.newBuilder() .setTaskList(TASK_LIST) .setWorkflowId(DYNAMIC_SLEEP_WORKFLOW_ID) - .setWorkflowIdReusePolicy(WorkflowIdReusePolicy.AllowDuplicate) + .setWorkflowIdReusePolicy( + WorkflowIdReusePolicy.WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE) .build()); try { @@ -53,7 +54,7 @@ public static void main(String[] args) { WorkflowExecution execution = WorkflowClient.start(workflow::execute, System.currentTimeMillis() + 60000); logger.info("Workflow started: " + execution); - } catch (DuplicateWorkflowException e) { + } catch (WorkflowExecutionAlreadyStarted e) { logger.info("Workflow already running: " + e.getExecution()); } } diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index 64bbddde3..608083ffb 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -26,7 +26,7 @@ - + \ No newline at end of file diff --git a/src/test/java/io/temporal/samples/bookingsaga/TripBookingWorkflowTest.java b/src/test/java/io/temporal/samples/bookingsaga/TripBookingWorkflowTest.java index 5603ae432..7e9a1609b 100644 --- a/src/test/java/io/temporal/samples/bookingsaga/TripBookingWorkflowTest.java +++ b/src/test/java/io/temporal/samples/bookingsaga/TripBookingWorkflowTest.java @@ -28,6 +28,7 @@ import io.temporal.client.WorkflowClient; import io.temporal.client.WorkflowException; import io.temporal.client.WorkflowOptions; +import io.temporal.failure.ApplicationFailure; import io.temporal.testing.TestWorkflowEnvironment; import io.temporal.worker.Worker; import org.junit.After; @@ -70,7 +71,9 @@ public void testTripBookingFails() { workflow.bookTrip("trip1"); fail("unreachable"); } catch (WorkflowException e) { - assertEquals("Flight booking did not work", e.getCause().getCause().getMessage()); + assertEquals( + "Flight booking did not work", + ((ApplicationFailure) e.getCause().getCause()).getOriginalMessage()); } } @@ -93,7 +96,9 @@ public void testSAGA() { workflow.bookTrip("trip1"); fail("unreachable"); } catch (WorkflowException e) { - assertEquals("Flight booking did not work", e.getCause().getCause().getMessage()); + assertEquals( + "Flight booking did not work", + ((ApplicationFailure) e.getCause().getCause()).getOriginalMessage()); } verify(activities).cancelHotel(eq("HotelBookingID1"), eq("trip1")); diff --git a/src/test/java/io/temporal/samples/fileprocessing/FileProcessingTest.java b/src/test/java/io/temporal/samples/fileprocessing/FileProcessingTest.java index 2106af206..f5db5f5f0 100644 --- a/src/test/java/io/temporal/samples/fileprocessing/FileProcessingTest.java +++ b/src/test/java/io/temporal/samples/fileprocessing/FileProcessingTest.java @@ -25,9 +25,9 @@ import io.temporal.client.WorkflowClient; import io.temporal.client.WorkflowOptions; -import io.temporal.proto.common.TimeoutType; +import io.temporal.enums.v1.TimeoutType; +import io.temporal.failure.TimeoutFailure; import io.temporal.samples.fileprocessing.StoreActivities.TaskListFileNamePair; -import io.temporal.testing.SimulatedTimeoutException; import io.temporal.testing.TestWorkflowEnvironment; import io.temporal.worker.Worker; import java.net.MalformedURLException; @@ -142,7 +142,8 @@ public void testHostFailover() { StoreActivities activitiesHost1 = mock(StoreActivities.class); when(activitiesHost1.process(FILE_NAME_UNPROCESSED)) - .thenThrow(new SimulatedTimeoutException(TimeoutType.ScheduleToStart)); + .thenThrow( + new TimeoutFailure("simulated", null, TimeoutType.TIMEOUT_TYPE_SCHEDULE_TO_START)); workerHost1.registerActivitiesImplementations(activitiesHost1); StoreActivities activitiesHost2 = mock(StoreActivities.class); diff --git a/src/test/java/io/temporal/samples/hello/HelloCronTest.java b/src/test/java/io/temporal/samples/hello/HelloCronTest.java index 34eabaa43..40135f565 100644 --- a/src/test/java/io/temporal/samples/hello/HelloCronTest.java +++ b/src/test/java/io/temporal/samples/hello/HelloCronTest.java @@ -27,7 +27,7 @@ import io.temporal.client.WorkflowClient; import io.temporal.client.WorkflowOptions; -import io.temporal.proto.common.WorkflowExecution; +import io.temporal.common.v1.WorkflowExecution; import io.temporal.samples.hello.HelloCron.GreetingActivities; import io.temporal.samples.hello.HelloCron.GreetingWorkflow; import io.temporal.samples.hello.HelloCron.GreetingWorkflowImpl; diff --git a/src/test/java/io/temporal/samples/hello/HelloExceptionTest.java b/src/test/java/io/temporal/samples/hello/HelloExceptionTest.java index 4b2d9d8d3..788277eb9 100644 --- a/src/test/java/io/temporal/samples/hello/HelloExceptionTest.java +++ b/src/test/java/io/temporal/samples/hello/HelloExceptionTest.java @@ -29,19 +29,17 @@ import io.temporal.client.WorkflowClient; import io.temporal.client.WorkflowException; import io.temporal.client.WorkflowOptions; -import io.temporal.proto.common.TimeoutType; +import io.temporal.enums.v1.TimeoutType; +import io.temporal.failure.ActivityFailure; +import io.temporal.failure.ApplicationFailure; +import io.temporal.failure.ChildWorkflowFailure; +import io.temporal.failure.TimeoutFailure; import io.temporal.samples.hello.HelloException.GreetingActivities; import io.temporal.samples.hello.HelloException.GreetingChildImpl; import io.temporal.samples.hello.HelloException.GreetingWorkflow; import io.temporal.samples.hello.HelloException.GreetingWorkflowImpl; -import io.temporal.testing.SimulatedTimeoutException; import io.temporal.testing.TestWorkflowEnvironment; import io.temporal.worker.Worker; -import io.temporal.workflow.ActivityFailureException; -import io.temporal.workflow.ActivityTimeoutException; -import io.temporal.workflow.ChildWorkflowFailureException; -import io.temporal.workflow.ChildWorkflowTimedOutException; -import java.io.IOException; import org.junit.After; import org.junit.Before; import org.junit.Ignore; @@ -95,10 +93,12 @@ public void testIOException() { workflow.getGreeting("World"); throw new IllegalStateException("unreachable"); } catch (WorkflowException e) { - assertTrue(e.getCause() instanceof ChildWorkflowFailureException); - assertTrue(e.getCause().getCause() instanceof ActivityFailureException); - assertTrue(e.getCause().getCause().getCause() instanceof IOException); - assertEquals("Hello World!", e.getCause().getCause().getCause().getMessage()); + assertTrue(e.getCause() instanceof ChildWorkflowFailure); + assertTrue(e.getCause().getCause() instanceof ActivityFailure); + assertTrue(e.getCause().getCause().getCause() instanceof ApplicationFailure); + assertEquals( + "Hello World!", + ((ApplicationFailure) e.getCause().getCause().getCause()).getOriginalMessage()); } } @@ -110,7 +110,8 @@ public void testActivityTimeout() { // Mock an activity that times out. GreetingActivities activities = mock(GreetingActivities.class); when(activities.composeGreeting(anyString(), anyString())) - .thenThrow(new SimulatedTimeoutException(TimeoutType.ScheduleToStart)); + .thenThrow( + new TimeoutFailure("simulated", null, TimeoutType.TIMEOUT_TYPE_SCHEDULE_TO_START)); worker.registerActivitiesImplementations(activities); testEnv.start(); @@ -121,11 +122,14 @@ public void testActivityTimeout() { workflow.getGreeting("World"); throw new IllegalStateException("unreachable"); } catch (WorkflowException e) { - assertTrue(e.getCause() instanceof ChildWorkflowFailureException); + assertTrue(e.getCause() instanceof ChildWorkflowFailure); Throwable doubleCause = e.getCause().getCause(); - assertTrue(doubleCause instanceof ActivityTimeoutException); - ActivityTimeoutException timeoutException = (ActivityTimeoutException) doubleCause; - assertEquals(TimeoutType.ScheduleToStart, timeoutException.getTimeoutType()); + assertTrue(doubleCause instanceof ActivityFailure); + Throwable tripleCause = doubleCause.getCause(); + assertTrue(tripleCause instanceof TimeoutFailure); + assertEquals( + TimeoutType.TIMEOUT_TYPE_SCHEDULE_TO_START, + ((TimeoutFailure) tripleCause).getTimeoutType()); } } @@ -139,7 +143,8 @@ public void testChildWorkflowTimeout() { () -> { GreetingChildImpl child = mock(GreetingChildImpl.class); when(child.composeGreeting(anyString(), anyString())) - .thenThrow(new SimulatedTimeoutException()); + .thenThrow( + new TimeoutFailure("simulated", null, TimeoutType.TIMEOUT_TYPE_START_TO_CLOSE)); return child; }); @@ -151,7 +156,8 @@ public void testChildWorkflowTimeout() { workflow.getGreeting("World"); throw new IllegalStateException("unreachable"); } catch (WorkflowException e) { - assertTrue(e.getCause() instanceof ChildWorkflowTimedOutException); + assertTrue(e.getCause() instanceof ChildWorkflowFailure); + assertTrue(e.getCause().getCause() instanceof TimeoutFailure); } } } diff --git a/src/test/java/io/temporal/samples/hello/HelloPeriodicTest.java b/src/test/java/io/temporal/samples/hello/HelloPeriodicTest.java index 1bf3f2524..e3231193e 100644 --- a/src/test/java/io/temporal/samples/hello/HelloPeriodicTest.java +++ b/src/test/java/io/temporal/samples/hello/HelloPeriodicTest.java @@ -28,18 +28,18 @@ import io.temporal.client.WorkflowClient; import io.temporal.client.WorkflowOptions; -import io.temporal.proto.common.WorkflowExecution; -import io.temporal.proto.execution.WorkflowExecutionInfo; -import io.temporal.proto.execution.WorkflowExecutionStatus; -import io.temporal.proto.filter.WorkflowExecutionFilter; -import io.temporal.proto.workflowservice.ListClosedWorkflowExecutionsRequest; -import io.temporal.proto.workflowservice.ListClosedWorkflowExecutionsResponse; +import io.temporal.common.v1.WorkflowExecution; +import io.temporal.enums.v1.WorkflowExecutionStatus; +import io.temporal.filter.v1.WorkflowExecutionFilter; import io.temporal.samples.hello.HelloPeriodic.GreetingActivities; import io.temporal.samples.hello.HelloPeriodic.GreetingActivitiesImpl; import io.temporal.samples.hello.HelloPeriodic.GreetingWorkflow; import io.temporal.samples.hello.HelloPeriodic.GreetingWorkflowImpl; import io.temporal.testing.TestWorkflowEnvironment; import io.temporal.worker.Worker; +import io.temporal.workflow.v1.WorkflowExecutionInfo; +import io.temporal.workflowservice.v1.ListClosedWorkflowExecutionsRequest; +import io.temporal.workflowservice.v1.ListClosedWorkflowExecutionsResponse; import java.time.Duration; import org.junit.After; import org.junit.Before; @@ -114,7 +114,8 @@ public void testPeriodicActivityInvocation() { testEnv.getWorkflowService().blockingStub().listClosedWorkflowExecutions(request); assertTrue(listResponse.getExecutionsCount() > 1); for (WorkflowExecutionInfo e : listResponse.getExecutionsList()) { - assertEquals(WorkflowExecutionStatus.ContinuedAsNew, e.getStatus()); + assertEquals( + WorkflowExecutionStatus.WORKFLOW_EXECUTION_STATUS_CONTINUED_AS_NEW, e.getStatus()); } } diff --git a/src/test/java/io/temporal/samples/hello/HelloSignalTest.java b/src/test/java/io/temporal/samples/hello/HelloSignalTest.java index 93d70721c..32e1e12f6 100644 --- a/src/test/java/io/temporal/samples/hello/HelloSignalTest.java +++ b/src/test/java/io/temporal/samples/hello/HelloSignalTest.java @@ -23,7 +23,7 @@ import io.temporal.client.WorkflowClient; import io.temporal.client.WorkflowOptions; -import io.temporal.proto.common.WorkflowIdReusePolicy; +import io.temporal.enums.v1.WorkflowIdReusePolicy; import io.temporal.samples.hello.HelloSignal.GreetingWorkflow; import io.temporal.testing.TestWorkflowEnvironment; import io.temporal.worker.Worker; @@ -78,7 +78,8 @@ public void testSignal() { WorkflowOptions workflowOptions = WorkflowOptions.newBuilder() .setTaskList(HelloSignal.TASK_LIST) - .setWorkflowIdReusePolicy(WorkflowIdReusePolicy.RejectDuplicate) + .setWorkflowIdReusePolicy( + WorkflowIdReusePolicy.WORKFLOW_ID_REUSE_POLICY_REJECT_DUPLICATE) .build(); GreetingWorkflow workflow = client.newWorkflowStub(GreetingWorkflow.class, workflowOptions); From c73b08435ab1cd798670ffdb32bb7f6ff8f87f4c Mon Sep 17 00:00:00 2001 From: Maxim Fateev Date: Fri, 26 Jun 2020 19:26:33 -0700 Subject: [PATCH 2/7] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 70143385f..35a75386e 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ choose **Gradle** and then click **Next**->**Finish**. Run Temporal Server using Docker Compose: - curl -L https://github.com/temporalio/temporal/releases/download/v0.23.1/docker.tar.gz | tar -xz --strip-components 1 docker/docker-compose.yml + curl -L https://github.com/temporalio/temporal/releases/download/v0.25.0/docker.tar.gz | tar -xz --strip-components 1 docker/docker-compose.yml docker-compose up If this does not work, see the instructions for running Temporal Server at https://github.com/temporalio/temporal/blob/master/README.md. From 76713f24490a0cec2a0ead458f3c5a4a0a56bf83 Mon Sep 17 00:00:00 2001 From: Maxim Fateev Date: Sun, 28 Jun 2020 00:14:17 -0700 Subject: [PATCH 3/7] Change to v0.26.0 release of SDK (#21) SDK renamed task list to task queue. --- README.md | 2 +- build.gradle | 2 +- .../samples/bookingsaga/TripBookingSaga.java | 12 ++++----- .../fileprocessing/FileProcessingStarter.java | 4 +-- .../fileprocessing/FileProcessingWorker.java | 26 +++++++++---------- .../FileProcessingWorkflowImpl.java | 22 ++++++++-------- .../fileprocessing/StoreActivities.java | 18 ++++++------- .../fileprocessing/StoreActivitiesImpl.java | 10 +++---- .../temporal/samples/hello/HelloActivity.java | 14 +++++----- .../samples/hello/HelloActivityRetry.java | 14 +++++----- .../io/temporal/samples/hello/HelloAsync.java | 14 +++++----- .../hello/HelloAsyncActivityCompletion.java | 14 +++++----- .../samples/hello/HelloAsyncLambda.java | 14 +++++----- .../io/temporal/samples/hello/HelloChild.java | 14 +++++----- .../io/temporal/samples/hello/HelloCron.java | 12 ++++----- .../samples/hello/HelloException.java | 10 +++---- .../temporal/samples/hello/HelloPeriodic.java | 12 ++++----- .../hello/HelloPolymorphicActivity.java | 14 +++++----- .../io/temporal/samples/hello/HelloQuery.java | 12 ++++----- .../io/temporal/samples/hello/HelloSaga.java | 12 ++++----- .../samples/hello/HelloSearchAttributes.java | 14 +++++----- .../temporal/samples/hello/HelloSignal.java | 8 +++--- .../moneybatch/AccountActivityWorker.java | 6 ++--- .../moneybatch/AccountTransferWorker.java | 4 +-- .../samples/moneybatch/TransferRequester.java | 2 +- .../moneytransfer/AccountActivityWorker.java | 8 +++--- .../moneytransfer/AccountTransferWorker.java | 12 ++++----- .../moneytransfer/TransferRequester.java | 4 +-- .../DynamicSleepWorkflowStarter.java | 4 +-- .../DynamicSleepWorkflowWorker.java | 6 ++--- .../temporal/samples/updatabletimer/README.md | 2 +- .../bookingsaga/TripBookingWorkflowTest.java | 10 ++++--- .../fileprocessing/FileProcessingTest.java | 16 ++++++------ .../samples/hello/HelloActivityRetryTest.java | 8 +++--- .../samples/hello/HelloActivityTest.java | 12 ++++----- .../HelloAsyncActivityCompletionTest.java | 6 ++--- .../samples/hello/HelloAsyncLambdaTest.java | 8 +++--- .../samples/hello/HelloAsyncTest.java | 8 +++--- .../samples/hello/HelloChildTest.java | 12 ++++----- .../temporal/samples/hello/HelloCronTest.java | 6 ++--- .../samples/hello/HelloExceptionTest.java | 10 +++---- .../samples/hello/HelloPeriodicTest.java | 12 ++++----- .../hello/HelloPolymorphicActivityTest.java | 12 ++++----- .../samples/hello/HelloQueryTest.java | 8 +++--- .../samples/hello/HelloSignalTest.java | 6 ++--- .../moneybatch/TransferWorkflowTest.java | 6 ++--- .../moneytransfer/TransferWorkflowTest.java | 6 ++--- 47 files changed, 235 insertions(+), 233 deletions(-) diff --git a/README.md b/README.md index 35a75386e..4b91fcdd8 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ choose **Gradle** and then click **Next**->**Finish**. Run Temporal Server using Docker Compose: - curl -L https://github.com/temporalio/temporal/releases/download/v0.25.0/docker.tar.gz | tar -xz --strip-components 1 docker/docker-compose.yml + curl -L https://github.com/temporalio/temporal/releases/download/v0.26.0/docker.tar.gz | tar -xz --strip-components 1 docker/docker-compose.yml docker-compose up If this does not work, see the instructions for running Temporal Server at https://github.com/temporalio/temporal/blob/master/README.md. diff --git a/build.gradle b/build.gradle index 098d844d1..1fc0ca0fe 100644 --- a/build.gradle +++ b/build.gradle @@ -27,7 +27,7 @@ repositories { } dependencies { - implementation group: 'io.temporal', name: 'temporal-sdk', version: '0.25.0' + implementation group: 'io.temporal', name: 'temporal-sdk', version: '0.26.0' implementation group: 'commons-configuration', name: 'commons-configuration', version: '1.9' implementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3' diff --git a/src/main/java/io/temporal/samples/bookingsaga/TripBookingSaga.java b/src/main/java/io/temporal/samples/bookingsaga/TripBookingSaga.java index cb42cf1ee..94a58f73e 100644 --- a/src/main/java/io/temporal/samples/bookingsaga/TripBookingSaga.java +++ b/src/main/java/io/temporal/samples/bookingsaga/TripBookingSaga.java @@ -28,7 +28,7 @@ public class TripBookingSaga { - static final String TASK_LIST = "TripBooking"; + static final String TASK_QUEUE = "TripBooking"; @SuppressWarnings("CatchAndPrintStackTrace") public static void main(String[] args) { @@ -37,11 +37,11 @@ public static void main(String[] args) { // client that can be used to start and signal workflows WorkflowClient client = WorkflowClient.newInstance(service); - // worker factory that can be used to create workers for specific task lists + // worker factory that can be used to create workers for specific task queues WorkerFactory factory = WorkerFactory.newInstance(client); - // Worker that listens on a task list and hosts both workflow and activity implementations. - Worker worker = factory.newWorker(TASK_LIST); + // Worker that listens on a task queue and hosts both workflow and activity implementations. + Worker worker = factory.newWorker(TASK_QUEUE); // Workflows are stateful. So you need a type to create instances. worker.registerWorkflowImplementationTypes(TripBookingWorkflowImpl.class); @@ -52,10 +52,10 @@ public static void main(String[] args) { // Start all workers created by this factory. factory.start(); - System.out.println("Worker started for task list: " + TASK_LIST); + System.out.println("Worker started for task queue: " + TASK_QUEUE); // now we can start running instances of our saga - its state will be persisted - WorkflowOptions options = WorkflowOptions.newBuilder().setTaskList(TASK_LIST).build(); + WorkflowOptions options = WorkflowOptions.newBuilder().setTaskQueue(TASK_QUEUE).build(); TripBookingWorkflow trip1 = client.newWorkflowStub(TripBookingWorkflow.class, options); try { trip1.bookTrip("trip1"); diff --git a/src/main/java/io/temporal/samples/fileprocessing/FileProcessingStarter.java b/src/main/java/io/temporal/samples/fileprocessing/FileProcessingStarter.java index 9bcc607c3..0100b6f69 100644 --- a/src/main/java/io/temporal/samples/fileprocessing/FileProcessingStarter.java +++ b/src/main/java/io/temporal/samples/fileprocessing/FileProcessingStarter.java @@ -19,7 +19,7 @@ package io.temporal.samples.fileprocessing; -import static io.temporal.samples.fileprocessing.FileProcessingWorker.TASK_LIST; +import static io.temporal.samples.fileprocessing.FileProcessingWorker.TASK_QUEUE; import io.temporal.client.WorkflowClient; import io.temporal.client.WorkflowOptions; @@ -37,7 +37,7 @@ public static void main(String[] args) throws Exception { FileProcessingWorkflow workflow = client.newWorkflowStub( FileProcessingWorkflow.class, - WorkflowOptions.newBuilder().setTaskList(TASK_LIST).build()); + WorkflowOptions.newBuilder().setTaskQueue(TASK_QUEUE).build()); System.out.println("Executing FileProcessingWorkflow"); diff --git a/src/main/java/io/temporal/samples/fileprocessing/FileProcessingWorker.java b/src/main/java/io/temporal/samples/fileprocessing/FileProcessingWorker.java index 090bd47c7..10a59ede0 100644 --- a/src/main/java/io/temporal/samples/fileprocessing/FileProcessingWorker.java +++ b/src/main/java/io/temporal/samples/fileprocessing/FileProcessingWorker.java @@ -34,32 +34,32 @@ */ public class FileProcessingWorker { - static final String TASK_LIST = "FileProcessing"; + static final String TASK_QUEUE = "FileProcessing"; public static void main(String[] args) { - String hostSpecifiTaskList = ManagementFactory.getRuntimeMXBean().getName(); + String hostSpecifiTaskQueue = ManagementFactory.getRuntimeMXBean().getName(); // gRPC stubs wrapper that talks to the local docker instance of temporal service. WorkflowServiceStubs service = WorkflowServiceStubs.newInstance(); // client that can be used to start and signal workflows WorkflowClient client = WorkflowClient.newInstance(service); - // worker factory that can be used to create workers for specific task lists + // worker factory that can be used to create workers for specific task queues WorkerFactory factory = WorkerFactory.newInstance(client); - // Worker that listens on a task list and hosts both workflow and activity implementations. - final Worker workerForCommonTaskList = factory.newWorker(TASK_LIST); - workerForCommonTaskList.registerWorkflowImplementationTypes(FileProcessingWorkflowImpl.class); - StoreActivitiesImpl storeActivityImpl = new StoreActivitiesImpl(hostSpecifiTaskList); - workerForCommonTaskList.registerActivitiesImplementations(storeActivityImpl); + // Worker that listens on a task queue and hosts both workflow and activity implementations. + final Worker workerForCommonTaskQueue = factory.newWorker(TASK_QUEUE); + workerForCommonTaskQueue.registerWorkflowImplementationTypes(FileProcessingWorkflowImpl.class); + StoreActivitiesImpl storeActivityImpl = new StoreActivitiesImpl(hostSpecifiTaskQueue); + workerForCommonTaskQueue.registerActivitiesImplementations(storeActivityImpl); - // Get worker to poll the host-specific task list. - final Worker workerForHostSpecificTaskList = factory.newWorker(hostSpecifiTaskList); - workerForHostSpecificTaskList.registerActivitiesImplementations(storeActivityImpl); + // Get worker to poll the host-specific task queue. + final Worker workerForHostSpecificTaskQueue = factory.newWorker(hostSpecifiTaskQueue); + workerForHostSpecificTaskQueue.registerActivitiesImplementations(storeActivityImpl); // Start all workers created by this factory. factory.start(); - System.out.println("Worker started for task list: " + TASK_LIST); - System.out.println("Worker Started for activity task List: " + hostSpecifiTaskList); + System.out.println("Worker started for task queue: " + TASK_QUEUE); + System.out.println("Worker Started for activity task Queue: " + hostSpecifiTaskQueue); } } diff --git a/src/main/java/io/temporal/samples/fileprocessing/FileProcessingWorkflowImpl.java b/src/main/java/io/temporal/samples/fileprocessing/FileProcessingWorkflowImpl.java index 95145d3dd..5d200bd85 100644 --- a/src/main/java/io/temporal/samples/fileprocessing/FileProcessingWorkflowImpl.java +++ b/src/main/java/io/temporal/samples/fileprocessing/FileProcessingWorkflowImpl.java @@ -30,23 +30,23 @@ * This implementation of FileProcessingWorkflow downloads the file, zips it, and uploads it to a * destination. An important requirement for such a workflow is that while a first activity can run * on any host, the second and third must run on the same host as the first one. This is achieved - * through use of a host specific task list. The first activity returns the name of the host - * specific task list and all other activities are dispatched using the stub that is configured with - * it. This assumes that FileProcessingWorker has a worker running on the same task list. + * through use of a host specific task queue. The first activity returns the name of the host + * specific task queue and all other activities are dispatched using the stub that is configured + * with it. This assumes that FileProcessingWorker has a worker running on the same task queue. */ public class FileProcessingWorkflowImpl implements FileProcessingWorkflow { - // Uses the default task list shared by the pool of workers. - private final StoreActivities defaultTaskListStore; + // Uses the default task queue shared by the pool of workers. + private final StoreActivities defaultTaskQueueStore; public FileProcessingWorkflowImpl() { // Create activity clients. ActivityOptions ao = ActivityOptions.newBuilder() .setScheduleToCloseTimeout(Duration.ofSeconds(10)) - .setTaskList(FileProcessingWorker.TASK_LIST) + .setTaskQueue(FileProcessingWorker.TASK_QUEUE) .build(); - this.defaultTaskListStore = Workflow.newActivityStub(StoreActivities.class, ao); + this.defaultTaskQueueStore = Workflow.newActivityStub(StoreActivities.class, ao); } @Override @@ -61,19 +61,19 @@ public void processFile(URL source, URL destination) { } private void processFileImpl(URL source, URL destination) { - StoreActivities.TaskListFileNamePair downloaded = defaultTaskListStore.download(source); + StoreActivities.TaskQueueFileNamePair downloaded = defaultTaskQueueStore.download(source); - // Now initialize stubs that are specific to the returned task list. + // Now initialize stubs that are specific to the returned task queue. ActivityOptions hostActivityOptions = ActivityOptions.newBuilder() - .setTaskList(downloaded.getHostTaskList()) + .setTaskQueue(downloaded.getHostTaskQueue()) .setScheduleToCloseTimeout(Duration.ofSeconds(10)) .build(); StoreActivities hostSpecificStore = Workflow.newActivityStub(StoreActivities.class, hostActivityOptions); // Call processFile activity to zip the file. - // Call the activity to process the file using worker-specific task list. + // Call the activity to process the file using worker-specific task queue. String processed = hostSpecificStore.process(downloaded.getFileName()); // Call upload activity to upload the zipped file. hostSpecificStore.upload(processed, destination); diff --git a/src/main/java/io/temporal/samples/fileprocessing/StoreActivities.java b/src/main/java/io/temporal/samples/fileprocessing/StoreActivities.java index 79cf072a4..1326a8ad7 100644 --- a/src/main/java/io/temporal/samples/fileprocessing/StoreActivities.java +++ b/src/main/java/io/temporal/samples/fileprocessing/StoreActivities.java @@ -25,20 +25,20 @@ @ActivityInterface public interface StoreActivities { - final class TaskListFileNamePair { - private String hostTaskList; + final class TaskQueueFileNamePair { + private String hostTaskQueue; private String fileName; - public TaskListFileNamePair(String hostTaskList, String fileName) { - this.hostTaskList = hostTaskList; + public TaskQueueFileNamePair(String hostTaskQueue, String fileName) { + this.hostTaskQueue = hostTaskQueue; this.fileName = fileName; } /** Jackson needs it */ - public TaskListFileNamePair() {} + public TaskQueueFileNamePair() {} - public String getHostTaskList() { - return hostTaskList; + public String getHostTaskQueue() { + return hostTaskQueue; } public String getFileName() { @@ -65,7 +65,7 @@ public String getFileName() { * Downloads file to local disk. * * @param url remote file location - * @return local task list and downloaded file name + * @return local task queue and downloaded file name */ - TaskListFileNamePair download(URL url); + TaskQueueFileNamePair download(URL url); } diff --git a/src/main/java/io/temporal/samples/fileprocessing/StoreActivitiesImpl.java b/src/main/java/io/temporal/samples/fileprocessing/StoreActivitiesImpl.java index bf5d7cea2..1318f91e4 100644 --- a/src/main/java/io/temporal/samples/fileprocessing/StoreActivitiesImpl.java +++ b/src/main/java/io/temporal/samples/fileprocessing/StoreActivitiesImpl.java @@ -30,21 +30,21 @@ /** Store activities implementation. */ public class StoreActivitiesImpl implements StoreActivities { - private final String hostSpecificTaskList; + private final String hostSpecificTaskQueue; - public StoreActivitiesImpl(String taskList) { - this.hostSpecificTaskList = taskList; + public StoreActivitiesImpl(String taskQueue) { + this.hostSpecificTaskQueue = taskQueue; } @Override - public TaskListFileNamePair download(URL url) { + public TaskQueueFileNamePair download(URL url) { try { byte[] binary = Resources.toByteArray(url); File destination = new File(Files.createTempDir(), "downloaded"); Files.write(binary, destination); System.out.println( "download activity: downloaded from " + url + " to " + destination.getAbsolutePath()); - return new TaskListFileNamePair(hostSpecificTaskList, destination.getAbsolutePath()); + return new TaskQueueFileNamePair(hostSpecificTaskQueue, destination.getAbsolutePath()); } catch (IOException e) { throw Workflow.wrap(e); } diff --git a/src/main/java/io/temporal/samples/hello/HelloActivity.java b/src/main/java/io/temporal/samples/hello/HelloActivity.java index 64fff3d53..d8e22644e 100644 --- a/src/main/java/io/temporal/samples/hello/HelloActivity.java +++ b/src/main/java/io/temporal/samples/hello/HelloActivity.java @@ -38,7 +38,7 @@ */ public class HelloActivity { - static final String TASK_LIST = "HelloActivity"; + static final String TASK_QUEUE = "HelloActivity"; /** Workflow interface has to have at least one method annotated with @WorkflowMethod. */ @WorkflowInterface @@ -88,22 +88,22 @@ public static void main(String[] args) { // client that can be used to start and signal workflows WorkflowClient client = WorkflowClient.newInstance(service); - // worker factory that can be used to create workers for specific task lists + // worker factory that can be used to create workers for specific task queues WorkerFactory factory = WorkerFactory.newInstance(client); - // Worker that listens on a task list and hosts both workflow and activity implementations. - Worker worker = factory.newWorker(TASK_LIST); + // Worker that listens on a task queue and hosts both workflow and activity implementations. + Worker worker = factory.newWorker(TASK_QUEUE); // Workflows are stateful. So you need a type to create instances. worker.registerWorkflowImplementationTypes(GreetingWorkflowImpl.class); // Activities are stateless and thread safe. So a shared instance is used. worker.registerActivitiesImplementations(new GreetingActivitiesImpl()); - // Start listening to the workflow and activity task lists. + // Start listening to the workflow and activity task queues. factory.start(); // Start a workflow execution. Usually this is done from another program. - // Uses task list from the GreetingWorkflow @WorkflowMethod annotation. + // Uses task queue from the GreetingWorkflow @WorkflowMethod annotation. GreetingWorkflow workflow = client.newWorkflowStub( - GreetingWorkflow.class, WorkflowOptions.newBuilder().setTaskList(TASK_LIST).build()); + GreetingWorkflow.class, WorkflowOptions.newBuilder().setTaskQueue(TASK_QUEUE).build()); // Execute a workflow waiting for it to complete. See {@link // io.temporal.samples.hello.HelloSignal} // for an example of starting workflow without waiting synchronously for its result. diff --git a/src/main/java/io/temporal/samples/hello/HelloActivityRetry.java b/src/main/java/io/temporal/samples/hello/HelloActivityRetry.java index bcca4528c..8c87649b2 100644 --- a/src/main/java/io/temporal/samples/hello/HelloActivityRetry.java +++ b/src/main/java/io/temporal/samples/hello/HelloActivityRetry.java @@ -39,7 +39,7 @@ */ public class HelloActivityRetry { - static final String TASK_LIST = "HelloActivityRetry"; + static final String TASK_QUEUE = "HelloActivityRetry"; @WorkflowInterface public interface GreetingWorkflow { @@ -109,19 +109,19 @@ public static void main(String[] args) { // client that can be used to start and signal workflows WorkflowClient client = WorkflowClient.newInstance(service); - // worker factory that can be used to create workers for specific task lists + // worker factory that can be used to create workers for specific task queues WorkerFactory factory = WorkerFactory.newInstance(client); - // Worker that listens on a task list and hosts both workflow and activity implementations. - Worker worker = factory.newWorker(TASK_LIST); + // Worker that listens on a task queue and hosts both workflow and activity implementations. + Worker worker = factory.newWorker(TASK_QUEUE); // Workflows are stateful. So you need a type to create instances. worker.registerWorkflowImplementationTypes(GreetingWorkflowImpl.class); // Activities are stateless and thread safe. So a shared instance is used. worker.registerActivitiesImplementations(new GreetingActivitiesImpl()); - // Start listening to the workflow and activity task lists. + // Start listening to the workflow and activity task queues. factory.start(); - // Get a workflow stub using the same task list the worker uses. - WorkflowOptions workflowOptions = WorkflowOptions.newBuilder().setTaskList(TASK_LIST).build(); + // Get a workflow stub using the same task queue the worker uses. + WorkflowOptions workflowOptions = WorkflowOptions.newBuilder().setTaskQueue(TASK_QUEUE).build(); GreetingWorkflow workflow = client.newWorkflowStub(GreetingWorkflow.class, workflowOptions); // Execute a workflow waiting for it to complete. String greeting = workflow.getGreeting("World"); diff --git a/src/main/java/io/temporal/samples/hello/HelloAsync.java b/src/main/java/io/temporal/samples/hello/HelloAsync.java index 51e6d7bb7..8bfdbb41d 100644 --- a/src/main/java/io/temporal/samples/hello/HelloAsync.java +++ b/src/main/java/io/temporal/samples/hello/HelloAsync.java @@ -40,7 +40,7 @@ */ public class HelloAsync { - static final String TASK_LIST = "HelloAsync"; + static final String TASK_QUEUE = "HelloAsync"; @WorkflowInterface public interface GreetingWorkflow { @@ -93,22 +93,22 @@ public static void main(String[] args) { // client that can be used to start and signal workflows WorkflowClient client = WorkflowClient.newInstance(service); - // worker factory that can be used to create workers for specific task lists + // worker factory that can be used to create workers for specific task queues WorkerFactory factory = WorkerFactory.newInstance(client); - // Worker that listens on a task list and hosts both workflow and activity implementations. - Worker worker = factory.newWorker(TASK_LIST); + // Worker that listens on a task queue and hosts both workflow and activity implementations. + Worker worker = factory.newWorker(TASK_QUEUE); // Workflows are stateful. So you need a type to create instances. worker.registerWorkflowImplementationTypes(GreetingWorkflowImpl.class); // Activities are stateless and thread safe. So a shared instance is used. worker.registerActivitiesImplementations(new GreetingActivitiesImpl()); - // Start listening to the workflow and activity task lists. + // Start listening to the workflow and activity task queues. factory.start(); // Start a workflow execution. Usually this is done from another program.\n' - // Uses task list from the GreetingWorkflow @WorkflowMethod annotation. + // Uses task queue from the GreetingWorkflow @WorkflowMethod annotation. GreetingWorkflow workflow = client.newWorkflowStub( - GreetingWorkflow.class, WorkflowOptions.newBuilder().setTaskList(TASK_LIST).build()); + GreetingWorkflow.class, WorkflowOptions.newBuilder().setTaskQueue(TASK_QUEUE).build()); // Execute a workflow waiting for it to complete. String greeting = workflow.getGreeting("World"); System.out.println(greeting); diff --git a/src/main/java/io/temporal/samples/hello/HelloAsyncActivityCompletion.java b/src/main/java/io/temporal/samples/hello/HelloAsyncActivityCompletion.java index 352f4f388..15451e3ae 100644 --- a/src/main/java/io/temporal/samples/hello/HelloAsyncActivityCompletion.java +++ b/src/main/java/io/temporal/samples/hello/HelloAsyncActivityCompletion.java @@ -43,7 +43,7 @@ */ public class HelloAsyncActivityCompletion { - static final String TASK_LIST = "HelloAsyncActivityCompletion"; + static final String TASK_QUEUE = "HelloAsyncActivityCompletion"; @WorkflowInterface public interface GreetingWorkflow { @@ -117,24 +117,24 @@ public static void main(String[] args) throws ExecutionException, InterruptedExc // client that can be used to start and signal workflows WorkflowClient client = WorkflowClient.newInstance(service); - // worker factory that can be used to create workers for specific task lists + // worker factory that can be used to create workers for specific task queues WorkerFactory factory = WorkerFactory.newInstance(client); - // Worker that listens on a task list and hosts both workflow and activity implementations. - Worker worker = factory.newWorker(TASK_LIST); + // Worker that listens on a task queue and hosts both workflow and activity implementations. + Worker worker = factory.newWorker(TASK_QUEUE); // Workflows are stateful. So you need a type to create instances. worker.registerWorkflowImplementationTypes(GreetingWorkflowImpl.class); // Activities are stateless and thread safe. So a shared instance is used. // CompletionClient is passed to activity here only to support unit testing. ActivityCompletionClient completionClient = client.newActivityCompletionClient(); worker.registerActivitiesImplementations(new GreetingActivitiesImpl(completionClient)); - // Start listening to the workflow and activity task lists. + // Start listening to the workflow and activity task queues. factory.start(); // Start a workflow execution. Usually this is done from another program. - // Uses task list from the GreetingWorkflow @WorkflowMethod annotation. + // Uses task queue from the GreetingWorkflow @WorkflowMethod annotation. GreetingWorkflow workflow = client.newWorkflowStub( - GreetingWorkflow.class, WorkflowOptions.newBuilder().setTaskList(TASK_LIST).build()); + GreetingWorkflow.class, WorkflowOptions.newBuilder().setTaskQueue(TASK_QUEUE).build()); // Execute a workflow asynchronously returning a future that can be used to wait for the // workflow // completion. diff --git a/src/main/java/io/temporal/samples/hello/HelloAsyncLambda.java b/src/main/java/io/temporal/samples/hello/HelloAsyncLambda.java index 7dd7a2579..c9a574685 100644 --- a/src/main/java/io/temporal/samples/hello/HelloAsyncLambda.java +++ b/src/main/java/io/temporal/samples/hello/HelloAsyncLambda.java @@ -39,7 +39,7 @@ */ public class HelloAsyncLambda { - static final String TASK_LIST = "HelloAsyncLambda"; + static final String TASK_QUEUE = "HelloAsyncLambda"; @WorkflowInterface public interface GreetingWorkflow { @@ -109,21 +109,21 @@ public static void main(String[] args) { // client that can be used to start and signal workflows WorkflowClient client = WorkflowClient.newInstance(service); - // worker factory that can be used to create workers for specific task lists + // worker factory that can be used to create workers for specific task queues WorkerFactory factory = WorkerFactory.newInstance(client); - // Worker that listens on a task list and hosts both workflow and activity implementations. - Worker worker = factory.newWorker(TASK_LIST); + // Worker that listens on a task queue and hosts both workflow and activity implementations. + Worker worker = factory.newWorker(TASK_QUEUE); // Workflows are stateful. So you need a type to create instances. worker.registerWorkflowImplementationTypes(GreetingWorkflowImpl.class); // Activities are stateless and thread safe. So a shared instance is used. worker.registerActivitiesImplementations(new GreetingActivitiesImpl()); - // Start listening to the workflow and activity task lists. + // Start listening to the workflow and activity task queues. factory.start(); - // Get a workflow stub using the same task list the worker uses. + // Get a workflow stub using the same task queue the worker uses. // As the required ExecutionStartToCloseTimeout is not specified through the @WorkflowMethod // annotation it has to be specified through the options. - WorkflowOptions workflowOptions = WorkflowOptions.newBuilder().setTaskList(TASK_LIST).build(); + WorkflowOptions workflowOptions = WorkflowOptions.newBuilder().setTaskQueue(TASK_QUEUE).build(); GreetingWorkflow workflow = client.newWorkflowStub(GreetingWorkflow.class, workflowOptions); // Execute a workflow waiting for it to complete. String greeting = workflow.getGreeting("World"); diff --git a/src/main/java/io/temporal/samples/hello/HelloChild.java b/src/main/java/io/temporal/samples/hello/HelloChild.java index 3c03f07d7..3a198f1c1 100644 --- a/src/main/java/io/temporal/samples/hello/HelloChild.java +++ b/src/main/java/io/temporal/samples/hello/HelloChild.java @@ -35,7 +35,7 @@ */ public class HelloChild { - static final String TASK_LIST = "HelloChild"; + static final String TASK_QUEUE = "HelloChild"; /** The parent workflow interface. */ @WorkflowInterface @@ -85,19 +85,19 @@ public static void main(String[] args) { // client that can be used to start and signal workflows WorkflowClient client = WorkflowClient.newInstance(service); - // worker factory that can be used to create workers for specific task lists + // worker factory that can be used to create workers for specific task queues WorkerFactory factory = WorkerFactory.newInstance(client); - // Worker that listens on a task list and hosts both workflow and activity implementations. - Worker worker = factory.newWorker(TASK_LIST); + // Worker that listens on a task queue and hosts both workflow and activity implementations. + Worker worker = factory.newWorker(TASK_QUEUE); worker.registerWorkflowImplementationTypes(GreetingWorkflowImpl.class, GreetingChildImpl.class); - // Start listening to the workflow task list. + // Start listening to the workflow task queue. factory.start(); // Start a workflow execution. Usually this is done from another program. - // Uses task list from the GreetingWorkflow @WorkflowMethod annotation. + // Uses task queue from the GreetingWorkflow @WorkflowMethod annotation. GreetingWorkflow workflow = client.newWorkflowStub( - GreetingWorkflow.class, WorkflowOptions.newBuilder().setTaskList(TASK_LIST).build()); + GreetingWorkflow.class, WorkflowOptions.newBuilder().setTaskQueue(TASK_QUEUE).build()); // Execute a workflow waiting for it to complete. String greeting = workflow.getGreeting("World"); System.out.println(greeting); diff --git a/src/main/java/io/temporal/samples/hello/HelloCron.java b/src/main/java/io/temporal/samples/hello/HelloCron.java index 6049b52dc..be4893969 100644 --- a/src/main/java/io/temporal/samples/hello/HelloCron.java +++ b/src/main/java/io/temporal/samples/hello/HelloCron.java @@ -42,7 +42,7 @@ */ public class HelloCron { - static final String TASK_LIST = "HelloCron"; + static final String TASK_QUEUE = "HelloCron"; static final String CRON_WORKFLOW_ID = "HelloCron"; @WorkflowInterface @@ -93,15 +93,15 @@ public static void main(String[] args) throws InterruptedException { // client that can be used to start and signal workflows WorkflowClient client = WorkflowClient.newInstance(service); - // worker factory that can be used to create workers for specific task lists + // worker factory that can be used to create workers for specific task queues WorkerFactory factory = WorkerFactory.newInstance(client); - // Worker that listens on a task list and hosts both workflow and activity implementations. - Worker worker = factory.newWorker(TASK_LIST); + // Worker that listens on a task queue and hosts both workflow and activity implementations. + Worker worker = factory.newWorker(TASK_QUEUE); // Workflows are stateful. So you need a type to create instances. worker.registerWorkflowImplementationTypes(GreetingWorkflowImpl.class); // Activities are stateless and thread safe. So a shared instance is used. worker.registerActivitiesImplementations(new GreetingActivitiesImpl()); - // Start listening to the workflow and activity task lists. + // Start listening to the workflow and activity task queues. factory.start(); // Sets the cron schedule using the WorkflowOptions. @@ -113,7 +113,7 @@ public static void main(String[] args) throws InterruptedException { WorkflowOptions workflowOptions = WorkflowOptions.newBuilder() .setWorkflowId(CRON_WORKFLOW_ID) - .setTaskList(TASK_LIST) + .setTaskQueue(TASK_QUEUE) .setCronSchedule("* * * * *") // Execution timeout limits total time. Cron will stop executing after this timeout. .setWorkflowExecutionTimeout(Duration.ofMinutes(10)) diff --git a/src/main/java/io/temporal/samples/hello/HelloException.java b/src/main/java/io/temporal/samples/hello/HelloException.java index 3dec3a868..26ff68c12 100644 --- a/src/main/java/io/temporal/samples/hello/HelloException.java +++ b/src/main/java/io/temporal/samples/hello/HelloException.java @@ -107,7 +107,7 @@ */ public class HelloException { - static final String TASK_LIST = "HelloException"; + static final String TASK_QUEUE = "HelloException"; @WorkflowInterface public interface GreetingWorkflow { @@ -169,15 +169,15 @@ public static void main(String[] args) { // client that can be used to start and signal workflows WorkflowClient client = WorkflowClient.newInstance(service); - // worker factory that can be used to create workers for specific task lists + // worker factory that can be used to create workers for specific task queues WorkerFactory factory = WorkerFactory.newInstance(client); - // Worker that listens on a task list and hosts both workflow and activity implementations. - Worker worker = factory.newWorker(TASK_LIST); + // Worker that listens on a task queue and hosts both workflow and activity implementations. + Worker worker = factory.newWorker(TASK_QUEUE); worker.registerWorkflowImplementationTypes(GreetingWorkflowImpl.class, GreetingChildImpl.class); worker.registerActivitiesImplementations(new GreetingActivitiesImpl()); factory.start(); - WorkflowOptions workflowOptions = WorkflowOptions.newBuilder().setTaskList(TASK_LIST).build(); + WorkflowOptions workflowOptions = WorkflowOptions.newBuilder().setTaskQueue(TASK_QUEUE).build(); GreetingWorkflow workflow = client.newWorkflowStub(GreetingWorkflow.class, workflowOptions); try { workflow.getGreeting("World"); diff --git a/src/main/java/io/temporal/samples/hello/HelloPeriodic.java b/src/main/java/io/temporal/samples/hello/HelloPeriodic.java index dde317948..209beade9 100644 --- a/src/main/java/io/temporal/samples/hello/HelloPeriodic.java +++ b/src/main/java/io/temporal/samples/hello/HelloPeriodic.java @@ -48,7 +48,7 @@ */ public class HelloPeriodic { - static final String TASK_LIST = "HelloPeriodic"; + static final String TASK_QUEUE = "HelloPeriodic"; static final String PERIODIC_WORKFLOW_ID = "HelloPeriodic"; @WorkflowInterface @@ -123,15 +123,15 @@ public static void main(String[] args) throws InterruptedException { // client that can be used to start and signal workflows WorkflowClient client = WorkflowClient.newInstance(service); - // worker factory that can be used to create workers for specific task lists + // worker factory that can be used to create workers for specific task queues WorkerFactory factory = WorkerFactory.newInstance(client); - // Worker that listens on a task list and hosts both workflow and activity implementations. - Worker worker = factory.newWorker(TASK_LIST); + // Worker that listens on a task queue and hosts both workflow and activity implementations. + Worker worker = factory.newWorker(TASK_QUEUE); // Workflows are stateful. So you need a type to create instances. worker.registerWorkflowImplementationTypes(GreetingWorkflowImpl.class); // Activities are stateless and thread safe. So a shared instance is used. worker.registerActivitiesImplementations(new GreetingActivitiesImpl()); - // Start listening to the workflow and activity task lists. + // Start listening to the workflow and activity task queues. factory.start(); // To ensure that this daemon type workflow is always running try to start it periodically @@ -156,7 +156,7 @@ public static void main(String[] args) throws InterruptedException { // At most one instance. WorkflowOptions.newBuilder() .setWorkflowId(PERIODIC_WORKFLOW_ID) - .setTaskList(TASK_LIST) + .setTaskQueue(TASK_QUEUE) .build()); try { execution = WorkflowClient.start(workflow::greetPeriodically, "World"); diff --git a/src/main/java/io/temporal/samples/hello/HelloPolymorphicActivity.java b/src/main/java/io/temporal/samples/hello/HelloPolymorphicActivity.java index 812039cde..4b250314c 100644 --- a/src/main/java/io/temporal/samples/hello/HelloPolymorphicActivity.java +++ b/src/main/java/io/temporal/samples/hello/HelloPolymorphicActivity.java @@ -41,7 +41,7 @@ */ public class HelloPolymorphicActivity { - static final String TASK_LIST = "HelloPolymorphicActivity"; + static final String TASK_QUEUE = "HelloPolymorphicActivity"; @WorkflowInterface public interface GreetingWorkflow { @@ -119,22 +119,22 @@ public static void main(String[] args) { // client that can be used to start and signal workflows WorkflowClient client = WorkflowClient.newInstance(service); - // worker factory that can be used to create workers for specific task lists + // worker factory that can be used to create workers for specific task queues WorkerFactory factory = WorkerFactory.newInstance(client); - // Worker that listens on a task list and hosts both workflow and activity implementations. - Worker worker = factory.newWorker(TASK_LIST); + // Worker that listens on a task queue and hosts both workflow and activity implementations. + Worker worker = factory.newWorker(TASK_QUEUE); // Workflows are stateful. So you need a type to create instances. worker.registerWorkflowImplementationTypes(GreetingWorkflowImpl.class); // Activities are stateless and thread safe. So a shared instance is used. worker.registerActivitiesImplementations(new HelloActivityImpl(), new ByeActivityImpl()); - // Start listening to the workflow and activity task lists. + // Start listening to the workflow and activity task queues. factory.start(); // Start a workflow execution. Usually this is done from another program. - // Uses task list from the GreetingWorkflow @WorkflowMethod annotation. + // Uses task queue from the GreetingWorkflow @WorkflowMethod annotation. GreetingWorkflow workflow = client.newWorkflowStub( - GreetingWorkflow.class, WorkflowOptions.newBuilder().setTaskList(TASK_LIST).build()); + GreetingWorkflow.class, WorkflowOptions.newBuilder().setTaskQueue(TASK_QUEUE).build()); // Execute a workflow waiting for it to complete. See {@link // io.temporal.samples.hello.HelloSignal} // for an example of starting workflow without waiting synchronously for its result. diff --git a/src/main/java/io/temporal/samples/hello/HelloQuery.java b/src/main/java/io/temporal/samples/hello/HelloQuery.java index 5d0763f85..50b9ace52 100644 --- a/src/main/java/io/temporal/samples/hello/HelloQuery.java +++ b/src/main/java/io/temporal/samples/hello/HelloQuery.java @@ -33,7 +33,7 @@ /** Demonstrates query capability. Requires a local instance of Temporal server to be running. */ public class HelloQuery { - static final String TASK_LIST = "HelloQuery"; + static final String TASK_QUEUE = "HelloQuery"; @WorkflowInterface public interface GreetingWorkflow { @@ -72,15 +72,15 @@ public static void main(String[] args) throws InterruptedException { // client that can be used to start and signal workflows WorkflowClient client = WorkflowClient.newInstance(service); - // worker factory that can be used to create workers for specific task lists + // worker factory that can be used to create workers for specific task queues WorkerFactory factory = WorkerFactory.newInstance(client); - // Worker that listens on a task list and hosts both workflow and activity implementations. - Worker worker = factory.newWorker(TASK_LIST); + // Worker that listens on a task queue and hosts both workflow and activity implementations. + Worker worker = factory.newWorker(TASK_QUEUE); worker.registerWorkflowImplementationTypes(GreetingWorkflowImpl.class); factory.start(); - // Get a workflow stub using the same task list the worker uses. - WorkflowOptions workflowOptions = WorkflowOptions.newBuilder().setTaskList(TASK_LIST).build(); + // Get a workflow stub using the same task queue the worker uses. + WorkflowOptions workflowOptions = WorkflowOptions.newBuilder().setTaskQueue(TASK_QUEUE).build(); GreetingWorkflow workflow = client.newWorkflowStub(GreetingWorkflow.class, workflowOptions); // Start workflow asynchronously to not use another thread to query. WorkflowClient.start(workflow::createGreeting, "World"); diff --git a/src/main/java/io/temporal/samples/hello/HelloSaga.java b/src/main/java/io/temporal/samples/hello/HelloSaga.java index 51e2ee8c3..a9c0f00b2 100644 --- a/src/main/java/io/temporal/samples/hello/HelloSaga.java +++ b/src/main/java/io/temporal/samples/hello/HelloSaga.java @@ -37,7 +37,7 @@ /** Demonstrates implementing saga transaction and compensation logic using Temporal. */ public class HelloSaga { - static final String TASK_LIST = "HelloSaga"; + static final String TASK_QUEUE = "HelloSaga"; @WorkflowInterface public interface ChildWorkflowOperation { @@ -150,10 +150,10 @@ public static void main(String[] args) { // client that can be used to start and signal workflows WorkflowClient client = WorkflowClient.newInstance(service); - // worker factory that can be used to create workers for specific task lists + // worker factory that can be used to create workers for specific task queues WorkerFactory factory = WorkerFactory.newInstance(client); - // Worker that listens on a task list and hosts both workflow and activity implementations. - Worker worker = factory.newWorker(TASK_LIST); + // Worker that listens on a task queue and hosts both workflow and activity implementations. + Worker worker = factory.newWorker(TASK_QUEUE); worker.registerWorkflowImplementationTypes( HelloSaga.SagaWorkflowImpl.class, HelloSaga.ChildWorkflowOperationImpl.class, @@ -161,8 +161,8 @@ public static void main(String[] args) { worker.registerActivitiesImplementations(new ActivityOperationImpl()); factory.start(); - // Get a workflow stub using the same task list the worker uses. - WorkflowOptions workflowOptions = WorkflowOptions.newBuilder().setTaskList(TASK_LIST).build(); + // Get a workflow stub using the same task queue the worker uses. + WorkflowOptions workflowOptions = WorkflowOptions.newBuilder().setTaskQueue(TASK_QUEUE).build(); HelloSaga.SagaWorkflow workflow = client.newWorkflowStub(HelloSaga.SagaWorkflow.class, workflowOptions); workflow.execute(); diff --git a/src/main/java/io/temporal/samples/hello/HelloSearchAttributes.java b/src/main/java/io/temporal/samples/hello/HelloSearchAttributes.java index e5578b0ca..30461da8e 100644 --- a/src/main/java/io/temporal/samples/hello/HelloSearchAttributes.java +++ b/src/main/java/io/temporal/samples/hello/HelloSearchAttributes.java @@ -48,7 +48,7 @@ */ public class HelloSearchAttributes { - static final String TASK_LIST = "HelloSearchAttributes"; + static final String TASK_QUEUE = "HelloSearchAttributes"; /** Workflow interface has to have at least one method annotated with @WorkflowMethod. */ @WorkflowInterface @@ -98,26 +98,26 @@ public static void main(String[] args) { // client that can be used to start and signal workflows WorkflowClient client = WorkflowClient.newInstance(service); - // worker factory that can be used to create workers for specific task lists + // worker factory that can be used to create workers for specific task queues WorkerFactory factory = WorkerFactory.newInstance(client); - // Worker that listens on a task list and hosts both workflow and activity implementations. - Worker worker = factory.newWorker(TASK_LIST); + // Worker that listens on a task queue and hosts both workflow and activity implementations. + Worker worker = factory.newWorker(TASK_QUEUE); // Workflows are stateful. So you need a type to create instances. worker.registerWorkflowImplementationTypes(HelloSearchAttributes.GreetingWorkflowImpl.class); // Activities are stateless and thread safe. So a shared instance is used. worker.registerActivitiesImplementations(new HelloSearchAttributes.GreetingActivitiesImpl()); - // Start listening to the workflow and activity task lists. + // Start listening to the workflow and activity task queues. factory.start(); // Set search attributes in workflowOptions String workflowID = UUID.randomUUID().toString(); WorkflowOptions workflowOptions = WorkflowOptions.newBuilder() - .setTaskList(TASK_LIST) + .setTaskQueue(TASK_QUEUE) .setWorkflowId(workflowID) .setSearchAttributes(generateSearchAttributes()) .build(); - // Get a workflow stub using the same task list the worker uses. + // Get a workflow stub using the same task queue the worker uses. HelloSearchAttributes.GreetingWorkflow workflow = client.newWorkflowStub(HelloSearchAttributes.GreetingWorkflow.class, workflowOptions); // Execute a workflow waiting for it to complete. diff --git a/src/main/java/io/temporal/samples/hello/HelloSignal.java b/src/main/java/io/temporal/samples/hello/HelloSignal.java index 91f282ce3..240897920 100644 --- a/src/main/java/io/temporal/samples/hello/HelloSignal.java +++ b/src/main/java/io/temporal/samples/hello/HelloSignal.java @@ -39,7 +39,7 @@ @SuppressWarnings("ALL") public class HelloSignal { - static final String TASK_LIST = "HelloSignal"; + static final String TASK_QUEUE = "HelloSignal"; /** Workflow interface must have a method annotated with @WorkflowMethod. */ @WorkflowInterface @@ -95,7 +95,7 @@ public static void main(String[] args) throws Exception { WorkflowServiceStubs service = WorkflowServiceStubs.newInstance(); WorkflowClient client = WorkflowClient.newInstance(service); WorkerFactory factory = WorkerFactory.newInstance(client); - Worker worker = factory.newWorker(TASK_LIST); + Worker worker = factory.newWorker(TASK_QUEUE); worker.registerWorkflowImplementationTypes(GreetingWorkflowImpl.class); factory.start(); @@ -103,10 +103,10 @@ public static void main(String[] args) throws Exception { String workflowId = RandomStringUtils.randomAlphabetic(10); // Start a workflow execution. Usually this is done from another program. - // Get a workflow stub using the same task list the worker uses. + // Get a workflow stub using the same task queue the worker uses. // The newly started workflow is going to have the workflowId generated above. WorkflowOptions workflowOptions = - WorkflowOptions.newBuilder().setTaskList(TASK_LIST).setWorkflowId(workflowId).build(); + WorkflowOptions.newBuilder().setTaskQueue(TASK_QUEUE).setWorkflowId(workflowId).build(); GreetingWorkflow workflow = client.newWorkflowStub(GreetingWorkflow.class, workflowOptions); // Start workflow asynchronously to not use another thread to signal. WorkflowClient.start(workflow::getGreetings); diff --git a/src/main/java/io/temporal/samples/moneybatch/AccountActivityWorker.java b/src/main/java/io/temporal/samples/moneybatch/AccountActivityWorker.java index 0b93a6302..c8d062538 100644 --- a/src/main/java/io/temporal/samples/moneybatch/AccountActivityWorker.java +++ b/src/main/java/io/temporal/samples/moneybatch/AccountActivityWorker.java @@ -26,7 +26,7 @@ public class AccountActivityWorker { - static final String TASK_LIST = "Account"; + static final String TASK_QUEUE = "Account"; @SuppressWarnings("CatchAndPrintStackTrace") public static void main(String[] args) { @@ -34,12 +34,12 @@ public static void main(String[] args) { WorkflowClient client = WorkflowClient.newInstance(service); WorkerFactory factory = WorkerFactory.newInstance(client); - Worker worker = factory.newWorker(TASK_LIST); + Worker worker = factory.newWorker(TASK_QUEUE); Account account = new AccountImpl(); worker.registerActivitiesImplementations(account); factory.start(); - System.out.println("Activity Worker started for task list: " + TASK_LIST); + System.out.println("Activity Worker started for task queue: " + TASK_QUEUE); } } diff --git a/src/main/java/io/temporal/samples/moneybatch/AccountTransferWorker.java b/src/main/java/io/temporal/samples/moneybatch/AccountTransferWorker.java index 02413ab5b..8ff3f8302 100644 --- a/src/main/java/io/temporal/samples/moneybatch/AccountTransferWorker.java +++ b/src/main/java/io/temporal/samples/moneybatch/AccountTransferWorker.java @@ -32,10 +32,10 @@ public static void main(String[] args) { WorkflowClient client = WorkflowClient.newInstance(service); WorkerFactory factory = WorkerFactory.newInstance(client); - Worker worker = factory.newWorker(AccountActivityWorker.TASK_LIST); + Worker worker = factory.newWorker(AccountActivityWorker.TASK_QUEUE); worker.registerWorkflowImplementationTypes(AccountTransferWorkflowImpl.class); factory.start(); - System.out.println("Worker started for task list: " + AccountActivityWorker.TASK_LIST); + System.out.println("Worker started for task queue: " + AccountActivityWorker.TASK_QUEUE); } } diff --git a/src/main/java/io/temporal/samples/moneybatch/TransferRequester.java b/src/main/java/io/temporal/samples/moneybatch/TransferRequester.java index 394a39469..4b3eb3648 100644 --- a/src/main/java/io/temporal/samples/moneybatch/TransferRequester.java +++ b/src/main/java/io/temporal/samples/moneybatch/TransferRequester.java @@ -42,7 +42,7 @@ public static void main(String[] args) { String to = "account2"; WorkflowOptions options = WorkflowOptions.newBuilder() - .setTaskList(AccountActivityWorker.TASK_LIST) + .setTaskQueue(AccountActivityWorker.TASK_QUEUE) .setWorkflowId(to) .build(); AccountTransferWorkflow transferWorkflow = diff --git a/src/main/java/io/temporal/samples/moneytransfer/AccountActivityWorker.java b/src/main/java/io/temporal/samples/moneytransfer/AccountActivityWorker.java index 29196ca82..dca9d9fe6 100644 --- a/src/main/java/io/temporal/samples/moneytransfer/AccountActivityWorker.java +++ b/src/main/java/io/temporal/samples/moneytransfer/AccountActivityWorker.java @@ -26,7 +26,7 @@ public class AccountActivityWorker { - static final String TASK_LIST = "AcccountTransfer"; + static final String TASK_QUEUE = "AcccountTransfer"; @SuppressWarnings("CatchAndPrintStackTrace") public static void main(String[] args) { @@ -35,14 +35,14 @@ public static void main(String[] args) { // client that can be used to start and signal workflows WorkflowClient client = WorkflowClient.newInstance(service); - // worker factory that can be used to create workers for specific task lists + // worker factory that can be used to create workers for specific task queues WorkerFactory factory = WorkerFactory.newInstance(client); - Worker worker = factory.newWorker(TASK_LIST); + Worker worker = factory.newWorker(TASK_QUEUE); Account account = new AccountImpl(); worker.registerActivitiesImplementations(account); // Start all workers created by this factory. factory.start(); - System.out.println("Activity Worker started for task list: " + TASK_LIST); + System.out.println("Activity Worker started for task queue: " + TASK_QUEUE); } } diff --git a/src/main/java/io/temporal/samples/moneytransfer/AccountTransferWorker.java b/src/main/java/io/temporal/samples/moneytransfer/AccountTransferWorker.java index ac2ec0bbf..fc4272bc5 100644 --- a/src/main/java/io/temporal/samples/moneytransfer/AccountTransferWorker.java +++ b/src/main/java/io/temporal/samples/moneytransfer/AccountTransferWorker.java @@ -19,7 +19,7 @@ package io.temporal.samples.moneytransfer; -import static io.temporal.samples.moneytransfer.AccountActivityWorker.TASK_LIST; +import static io.temporal.samples.moneytransfer.AccountActivityWorker.TASK_QUEUE; import io.temporal.client.WorkflowClient; import io.temporal.serviceclient.WorkflowServiceStubs; @@ -30,18 +30,18 @@ public class AccountTransferWorker { @SuppressWarnings("CatchAndPrintStackTrace") public static void main(String[] args) { - // Get worker to poll the common task list. + // Get worker to poll the common task queue. // gRPC stubs wrapper that talks to the local docker instance of temporal service. WorkflowServiceStubs service = WorkflowServiceStubs.newInstance(); // client that can be used to start and signal workflows WorkflowClient client = WorkflowClient.newInstance(service); - // worker factory that can be used to create workers for specific task lists + // worker factory that can be used to create workers for specific task queues WorkerFactory factory = WorkerFactory.newInstance(client); - Worker workerForCommonTaskList = factory.newWorker(TASK_LIST); - workerForCommonTaskList.registerWorkflowImplementationTypes(AccountTransferWorkflowImpl.class); + Worker workerForCommonTaskQueue = factory.newWorker(TASK_QUEUE); + workerForCommonTaskQueue.registerWorkflowImplementationTypes(AccountTransferWorkflowImpl.class); // Start all workers created by this factory. factory.start(); - System.out.println("Worker started for task list: " + TASK_LIST); + System.out.println("Worker started for task queue: " + TASK_QUEUE); } } diff --git a/src/main/java/io/temporal/samples/moneytransfer/TransferRequester.java b/src/main/java/io/temporal/samples/moneytransfer/TransferRequester.java index 2e60eb60c..35abb6ded 100644 --- a/src/main/java/io/temporal/samples/moneytransfer/TransferRequester.java +++ b/src/main/java/io/temporal/samples/moneytransfer/TransferRequester.java @@ -19,7 +19,7 @@ package io.temporal.samples.moneytransfer; -import static io.temporal.samples.moneytransfer.AccountActivityWorker.TASK_LIST; +import static io.temporal.samples.moneytransfer.AccountActivityWorker.TASK_QUEUE; import io.temporal.client.WorkflowClient; import io.temporal.client.WorkflowOptions; @@ -45,7 +45,7 @@ public static void main(String[] args) { WorkflowClient workflowClient = WorkflowClient.newInstance(service); // now we can start running instances of our saga - its state will be persisted - WorkflowOptions options = WorkflowOptions.newBuilder().setTaskList(TASK_LIST).build(); + WorkflowOptions options = WorkflowOptions.newBuilder().setTaskQueue(TASK_QUEUE).build(); AccountTransferWorkflow transferWorkflow = workflowClient.newWorkflowStub(AccountTransferWorkflow.class, options); String from = "account1"; diff --git a/src/main/java/io/temporal/samples/updatabletimer/DynamicSleepWorkflowStarter.java b/src/main/java/io/temporal/samples/updatabletimer/DynamicSleepWorkflowStarter.java index 4f8cf3ca2..f6d5248e4 100644 --- a/src/main/java/io/temporal/samples/updatabletimer/DynamicSleepWorkflowStarter.java +++ b/src/main/java/io/temporal/samples/updatabletimer/DynamicSleepWorkflowStarter.java @@ -20,7 +20,7 @@ package io.temporal.samples.updatabletimer; import static io.temporal.samples.updatabletimer.DynamicSleepWorkflowWorker.DYNAMIC_SLEEP_WORKFLOW_ID; -import static io.temporal.samples.updatabletimer.DynamicSleepWorkflowWorker.TASK_LIST; +import static io.temporal.samples.updatabletimer.DynamicSleepWorkflowWorker.TASK_QUEUE; import io.temporal.client.WorkflowClient; import io.temporal.client.WorkflowExecutionAlreadyStarted; @@ -43,7 +43,7 @@ public static void main(String[] args) { client.newWorkflowStub( DynamicSleepWorkflow.class, WorkflowOptions.newBuilder() - .setTaskList(TASK_LIST) + .setTaskQueue(TASK_QUEUE) .setWorkflowId(DYNAMIC_SLEEP_WORKFLOW_ID) .setWorkflowIdReusePolicy( WorkflowIdReusePolicy.WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE) diff --git a/src/main/java/io/temporal/samples/updatabletimer/DynamicSleepWorkflowWorker.java b/src/main/java/io/temporal/samples/updatabletimer/DynamicSleepWorkflowWorker.java index cc4f82c50..e04725130 100644 --- a/src/main/java/io/temporal/samples/updatabletimer/DynamicSleepWorkflowWorker.java +++ b/src/main/java/io/temporal/samples/updatabletimer/DynamicSleepWorkflowWorker.java @@ -28,7 +28,7 @@ public class DynamicSleepWorkflowWorker { - static final String TASK_LIST = "TimerUpdate"; + static final String TASK_QUEUE = "TimerUpdate"; private static final Logger logger = LoggerFactory.getLogger(DynamicSleepWorkflowWorker.class); /** Create just one workflow instance for the sake of the sample. */ @@ -38,9 +38,9 @@ public static void main(String[] args) { WorkflowServiceStubs service = WorkflowServiceStubs.newInstance(); WorkflowClient client = WorkflowClient.newInstance(service); WorkerFactory factory = WorkerFactory.newInstance(client); - final Worker worker = factory.newWorker(TASK_LIST); + final Worker worker = factory.newWorker(TASK_QUEUE); worker.registerWorkflowImplementationTypes(DynamicSleepWorkflowImpl.class); factory.start(); - logger.info("Worker started for task list: " + TASK_LIST); + logger.info("Worker started for task queue: " + TASK_QUEUE); } } diff --git a/src/main/java/io/temporal/samples/updatabletimer/README.md b/src/main/java/io/temporal/samples/updatabletimer/README.md index d5e7f8ffb..2e094c8ea 100644 --- a/src/main/java/io/temporal/samples/updatabletimer/README.md +++ b/src/main/java/io/temporal/samples/updatabletimer/README.md @@ -22,7 +22,7 @@ Then in a different terminal window start the workflow instance: Check the output of the worker window. The expected output is: ```bash -10:38:56.282 [main] INFO i.t.s.timerupdate.DynamicSleepWorker - Worker started for task list: TimerUpdate +10:38:56.282 [main] INFO i.t.s.timerupdate.DynamicSleepWorker - Worker started for task queue: TimerUpdate 10:39:07.359 [workflow-732875527] INFO i.t.s.t.DynamicSleepWorkflowImpl - sleepUntil: Thu May 28 10:40:06 PDT 2020 10:39:07.360 [workflow-732875527] INFO i.t.s.t.DynamicSleepWorkflowImpl - Going to sleep for PT59.688S ``` diff --git a/src/test/java/io/temporal/samples/bookingsaga/TripBookingWorkflowTest.java b/src/test/java/io/temporal/samples/bookingsaga/TripBookingWorkflowTest.java index 7e9a1609b..66e1012e3 100644 --- a/src/test/java/io/temporal/samples/bookingsaga/TripBookingWorkflowTest.java +++ b/src/test/java/io/temporal/samples/bookingsaga/TripBookingWorkflowTest.java @@ -19,7 +19,7 @@ package io.temporal.samples.bookingsaga; -import static io.temporal.samples.bookingsaga.TripBookingSaga.TASK_LIST; +import static io.temporal.samples.bookingsaga.TripBookingSaga.TASK_QUEUE; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import static org.mockito.Matchers.eq; @@ -44,7 +44,7 @@ public class TripBookingWorkflowTest { @Before public void setUp() { testEnv = TestWorkflowEnvironment.newInstance(); - worker = testEnv.newWorker(TASK_LIST); + worker = testEnv.newWorker(TASK_QUEUE); worker.registerWorkflowImplementationTypes(TripBookingWorkflowImpl.class); client = testEnv.getWorkflowClient(); @@ -66,7 +66,8 @@ public void testTripBookingFails() { TripBookingWorkflow workflow = client.newWorkflowStub( - TripBookingWorkflow.class, WorkflowOptions.newBuilder().setTaskList(TASK_LIST).build()); + TripBookingWorkflow.class, + WorkflowOptions.newBuilder().setTaskQueue(TASK_QUEUE).build()); try { workflow.bookTrip("trip1"); fail("unreachable"); @@ -91,7 +92,8 @@ public void testSAGA() { TripBookingWorkflow workflow = client.newWorkflowStub( - TripBookingWorkflow.class, WorkflowOptions.newBuilder().setTaskList(TASK_LIST).build()); + TripBookingWorkflow.class, + WorkflowOptions.newBuilder().setTaskQueue(TASK_QUEUE).build()); try { workflow.bookTrip("trip1"); fail("unreachable"); diff --git a/src/test/java/io/temporal/samples/fileprocessing/FileProcessingTest.java b/src/test/java/io/temporal/samples/fileprocessing/FileProcessingTest.java index f5db5f5f0..64b16d542 100644 --- a/src/test/java/io/temporal/samples/fileprocessing/FileProcessingTest.java +++ b/src/test/java/io/temporal/samples/fileprocessing/FileProcessingTest.java @@ -19,7 +19,7 @@ package io.temporal.samples.fileprocessing; -import static io.temporal.samples.fileprocessing.FileProcessingWorker.TASK_LIST; +import static io.temporal.samples.fileprocessing.FileProcessingWorker.TASK_QUEUE; import static org.mockito.Matchers.anyObject; import static org.mockito.Mockito.*; @@ -27,7 +27,7 @@ import io.temporal.client.WorkflowOptions; import io.temporal.enums.v1.TimeoutType; import io.temporal.failure.TimeoutFailure; -import io.temporal.samples.fileprocessing.StoreActivities.TaskListFileNamePair; +import io.temporal.samples.fileprocessing.StoreActivities.TaskQueueFileNamePair; import io.temporal.testing.TestWorkflowEnvironment; import io.temporal.worker.Worker; import java.net.MalformedURLException; @@ -86,7 +86,7 @@ protected void failed(Throwable e, Description description) { @Before public void setUp() { testEnv = TestWorkflowEnvironment.newInstance(); - worker = testEnv.newWorker(TASK_LIST); + worker = testEnv.newWorker(TASK_QUEUE); worker.registerWorkflowImplementationTypes(FileProcessingWorkflowImpl.class); workerHost1 = testEnv.newWorker(HOST_NAME_1); workerHost2 = testEnv.newWorker(HOST_NAME_2); @@ -103,7 +103,7 @@ public void tearDown() { public void testHappyPath() { StoreActivities activities = mock(StoreActivities.class); when(activities.download(anyObject())) - .thenReturn(new TaskListFileNamePair(HOST_NAME_1, FILE_NAME_UNPROCESSED)); + .thenReturn(new TaskQueueFileNamePair(HOST_NAME_1, FILE_NAME_UNPROCESSED)); worker.registerActivitiesImplementations(activities); StoreActivities activitiesHost1 = mock(StoreActivities.class); @@ -117,7 +117,7 @@ public void testHappyPath() { FileProcessingWorkflow workflow = client.newWorkflowStub( FileProcessingWorkflow.class, - WorkflowOptions.newBuilder().setTaskList(TASK_LIST).build()); + WorkflowOptions.newBuilder().setTaskQueue(TASK_QUEUE).build()); // Execute workflow waiting for completion. workflow.processFile(SOURCE, DESTINATION); @@ -135,8 +135,8 @@ public void testHappyPath() { public void testHostFailover() { StoreActivities activities = mock(StoreActivities.class); when(activities.download(anyObject())) - .thenReturn(new TaskListFileNamePair(HOST_NAME_1, FILE_NAME_UNPROCESSED)) - .thenReturn(new TaskListFileNamePair(HOST_NAME_2, FILE_NAME_UNPROCESSED)); + .thenReturn(new TaskQueueFileNamePair(HOST_NAME_1, FILE_NAME_UNPROCESSED)) + .thenReturn(new TaskQueueFileNamePair(HOST_NAME_2, FILE_NAME_UNPROCESSED)); worker.registerActivitiesImplementations(activities); @@ -156,7 +156,7 @@ public void testHostFailover() { FileProcessingWorkflow workflow = client.newWorkflowStub( FileProcessingWorkflow.class, - WorkflowOptions.newBuilder().setTaskList(TASK_LIST).build()); + WorkflowOptions.newBuilder().setTaskQueue(TASK_QUEUE).build()); workflow.processFile(SOURCE, DESTINATION); diff --git a/src/test/java/io/temporal/samples/hello/HelloActivityRetryTest.java b/src/test/java/io/temporal/samples/hello/HelloActivityRetryTest.java index e1e6a8967..f0558b1a9 100644 --- a/src/test/java/io/temporal/samples/hello/HelloActivityRetryTest.java +++ b/src/test/java/io/temporal/samples/hello/HelloActivityRetryTest.java @@ -61,7 +61,7 @@ protected void failed(Throwable e, Description description) { @Before public void setUp() { testEnv = TestWorkflowEnvironment.newInstance(); - worker = testEnv.newWorker(HelloActivityRetry.TASK_LIST); + worker = testEnv.newWorker(HelloActivityRetry.TASK_QUEUE); worker.registerWorkflowImplementationTypes(GreetingWorkflowImpl.class); client = testEnv.getWorkflowClient(); @@ -78,7 +78,7 @@ public void testActivityImpl() { testEnv.start(); WorkflowOptions workflowOptions = - WorkflowOptions.newBuilder().setTaskList(HelloActivityRetry.TASK_LIST).build(); + WorkflowOptions.newBuilder().setTaskQueue(HelloActivityRetry.TASK_QUEUE).build(); GreetingWorkflow workflow = client.newWorkflowStub(GreetingWorkflow.class, workflowOptions); // Execute a workflow waiting for it to complete. @@ -98,9 +98,9 @@ public void testMockedActivity() { worker.registerActivitiesImplementations(activities); testEnv.start(); - // Get a workflow stub using the same task list the worker uses. + // Get a workflow stub using the same task queue the worker uses. WorkflowOptions workflowOptions = - WorkflowOptions.newBuilder().setTaskList(HelloActivityRetry.TASK_LIST).build(); + WorkflowOptions.newBuilder().setTaskQueue(HelloActivityRetry.TASK_QUEUE).build(); GreetingWorkflow workflow = client.newWorkflowStub(GreetingWorkflow.class, workflowOptions); // Execute a workflow waiting for it to complete. String greeting = workflow.getGreeting("World"); diff --git a/src/test/java/io/temporal/samples/hello/HelloActivityTest.java b/src/test/java/io/temporal/samples/hello/HelloActivityTest.java index f931c3b80..8f9f87e57 100644 --- a/src/test/java/io/temporal/samples/hello/HelloActivityTest.java +++ b/src/test/java/io/temporal/samples/hello/HelloActivityTest.java @@ -19,7 +19,7 @@ package io.temporal.samples.hello; -import static io.temporal.samples.hello.HelloActivity.TASK_LIST; +import static io.temporal.samples.hello.HelloActivity.TASK_QUEUE; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -46,7 +46,7 @@ public class HelloActivityTest { @Before public void setUp() { testEnv = TestWorkflowEnvironment.newInstance(); - worker = testEnv.newWorker(TASK_LIST); + worker = testEnv.newWorker(TASK_QUEUE); worker.registerWorkflowImplementationTypes(GreetingWorkflowImpl.class); client = testEnv.getWorkflowClient(); @@ -62,10 +62,10 @@ public void testActivityImpl() { worker.registerActivitiesImplementations(new GreetingActivitiesImpl()); testEnv.start(); - // Get a workflow stub using the same task list the worker uses. + // Get a workflow stub using the same task queue the worker uses. GreetingWorkflow workflow = client.newWorkflowStub( - GreetingWorkflow.class, WorkflowOptions.newBuilder().setTaskList(TASK_LIST).build()); + GreetingWorkflow.class, WorkflowOptions.newBuilder().setTaskQueue(TASK_QUEUE).build()); // Execute a workflow waiting for it to complete. String greeting = workflow.getGreeting("World"); assertEquals("Hello World!", greeting); @@ -78,10 +78,10 @@ public void testMockedActivity() { worker.registerActivitiesImplementations(activities); testEnv.start(); - // Get a workflow stub using the same task list the worker uses. + // Get a workflow stub using the same task queue the worker uses. GreetingWorkflow workflow = client.newWorkflowStub( - GreetingWorkflow.class, WorkflowOptions.newBuilder().setTaskList(TASK_LIST).build()); + GreetingWorkflow.class, WorkflowOptions.newBuilder().setTaskQueue(TASK_QUEUE).build()); // Execute a workflow waiting for it to complete. String greeting = workflow.getGreeting("World"); assertEquals("Hello World!", greeting); diff --git a/src/test/java/io/temporal/samples/hello/HelloAsyncActivityCompletionTest.java b/src/test/java/io/temporal/samples/hello/HelloAsyncActivityCompletionTest.java index 2ec026c1c..9cccdfa94 100644 --- a/src/test/java/io/temporal/samples/hello/HelloAsyncActivityCompletionTest.java +++ b/src/test/java/io/temporal/samples/hello/HelloAsyncActivityCompletionTest.java @@ -19,7 +19,7 @@ package io.temporal.samples.hello; -import static io.temporal.samples.hello.HelloAsyncActivityCompletion.TASK_LIST; +import static io.temporal.samples.hello.HelloAsyncActivityCompletion.TASK_QUEUE; import static org.junit.Assert.assertEquals; import io.temporal.client.ActivityCompletionClient; @@ -65,7 +65,7 @@ protected void failed(Throwable e, Description description) { @Before public void setUp() { testEnv = TestWorkflowEnvironment.newInstance(); - worker = testEnv.newWorker(TASK_LIST); + worker = testEnv.newWorker(TASK_QUEUE); worker.registerWorkflowImplementationTypes(GreetingWorkflowImpl.class); client = testEnv.getWorkflowClient(); @@ -84,7 +84,7 @@ public void testActivityImpl() throws ExecutionException, InterruptedException { GreetingWorkflow workflow = client.newWorkflowStub( - GreetingWorkflow.class, WorkflowOptions.newBuilder().setTaskList(TASK_LIST).build()); + GreetingWorkflow.class, WorkflowOptions.newBuilder().setTaskQueue(TASK_QUEUE).build()); // Execute a workflow asynchronously. CompletableFuture greeting = WorkflowClient.execute(workflow::getGreeting, "World"); // Wait for workflow completion. diff --git a/src/test/java/io/temporal/samples/hello/HelloAsyncLambdaTest.java b/src/test/java/io/temporal/samples/hello/HelloAsyncLambdaTest.java index 8e1063ca3..3a5b6ce8e 100644 --- a/src/test/java/io/temporal/samples/hello/HelloAsyncLambdaTest.java +++ b/src/test/java/io/temporal/samples/hello/HelloAsyncLambdaTest.java @@ -64,7 +64,7 @@ protected void failed(Throwable e, Description description) { @Before public void setUp() { testEnv = TestWorkflowEnvironment.newInstance(); - worker = testEnv.newWorker(HelloAsyncLambda.TASK_LIST); + worker = testEnv.newWorker(HelloAsyncLambda.TASK_QUEUE); worker.registerWorkflowImplementationTypes(GreetingWorkflowImpl.class); client = testEnv.getWorkflowClient(); @@ -80,9 +80,9 @@ public void testActivityImpl() { worker.registerActivitiesImplementations(new GreetingActivitiesImpl()); testEnv.start(); - // Get a workflow stub using the same task list the worker uses. + // Get a workflow stub using the same task queue the worker uses. WorkflowOptions workflowOptions = - WorkflowOptions.newBuilder().setTaskList(HelloAsyncLambda.TASK_LIST).build(); + WorkflowOptions.newBuilder().setTaskQueue(HelloAsyncLambda.TASK_QUEUE).build(); GreetingWorkflow workflow = client.newWorkflowStub(GreetingWorkflow.class, workflowOptions); // Execute a workflow waiting for it to complete. String greeting = workflow.getGreeting("World"); @@ -98,7 +98,7 @@ public void testMockedActivity() { testEnv.start(); WorkflowOptions workflowOptions = - WorkflowOptions.newBuilder().setTaskList(HelloAsyncLambda.TASK_LIST).build(); + WorkflowOptions.newBuilder().setTaskQueue(HelloAsyncLambda.TASK_QUEUE).build(); GreetingWorkflow workflow = client.newWorkflowStub(GreetingWorkflow.class, workflowOptions); // Execute a workflow waiting for it to complete. String greeting = workflow.getGreeting("World"); diff --git a/src/test/java/io/temporal/samples/hello/HelloAsyncTest.java b/src/test/java/io/temporal/samples/hello/HelloAsyncTest.java index ef1c5023d..e306a28d6 100644 --- a/src/test/java/io/temporal/samples/hello/HelloAsyncTest.java +++ b/src/test/java/io/temporal/samples/hello/HelloAsyncTest.java @@ -19,7 +19,7 @@ package io.temporal.samples.hello; -import static io.temporal.samples.hello.HelloAsync.TASK_LIST; +import static io.temporal.samples.hello.HelloAsync.TASK_QUEUE; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -65,7 +65,7 @@ protected void failed(Throwable e, Description description) { @Before public void setUp() { testEnv = TestWorkflowEnvironment.newInstance(); - worker = testEnv.newWorker(TASK_LIST); + worker = testEnv.newWorker(TASK_QUEUE); worker.registerWorkflowImplementationTypes(GreetingWorkflowImpl.class); client = testEnv.getWorkflowClient(); @@ -83,7 +83,7 @@ public void testActivityImpl() { GreetingWorkflow workflow = client.newWorkflowStub( - GreetingWorkflow.class, WorkflowOptions.newBuilder().setTaskList(TASK_LIST).build()); + GreetingWorkflow.class, WorkflowOptions.newBuilder().setTaskQueue(TASK_QUEUE).build()); // Execute a workflow waiting for it to complete. String greeting = workflow.getGreeting("World"); assertEquals("Hello World!\nBye World!", greeting); @@ -99,7 +99,7 @@ public void testMockedActivity() { GreetingWorkflow workflow = client.newWorkflowStub( - GreetingWorkflow.class, WorkflowOptions.newBuilder().setTaskList(TASK_LIST).build()); + GreetingWorkflow.class, WorkflowOptions.newBuilder().setTaskQueue(TASK_QUEUE).build()); // Execute a workflow waiting for it to complete. String greeting = workflow.getGreeting("World"); assertEquals("Hello World!\nBye World!", greeting); diff --git a/src/test/java/io/temporal/samples/hello/HelloChildTest.java b/src/test/java/io/temporal/samples/hello/HelloChildTest.java index 99ed02517..e614727fd 100644 --- a/src/test/java/io/temporal/samples/hello/HelloChildTest.java +++ b/src/test/java/io/temporal/samples/hello/HelloChildTest.java @@ -19,7 +19,7 @@ package io.temporal.samples.hello; -import static io.temporal.samples.hello.HelloChild.TASK_LIST; +import static io.temporal.samples.hello.HelloChild.TASK_QUEUE; import static org.junit.Assert.assertEquals; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.*; @@ -63,7 +63,7 @@ protected void failed(Throwable e, Description description) { @Before public void setUp() { testEnv = TestWorkflowEnvironment.newInstance(); - worker = testEnv.newWorker(TASK_LIST); + worker = testEnv.newWorker(TASK_QUEUE); client = testEnv.getWorkflowClient(); } @@ -79,10 +79,10 @@ public void testChild() { testEnv.start(); - // Get a workflow stub using the same task list the worker uses. + // Get a workflow stub using the same task queue the worker uses. GreetingWorkflow workflow = client.newWorkflowStub( - GreetingWorkflow.class, WorkflowOptions.newBuilder().setTaskList(TASK_LIST).build()); + GreetingWorkflow.class, WorkflowOptions.newBuilder().setTaskQueue(TASK_QUEUE).build()); // Execute a workflow waiting for it to complete. String greeting = workflow.getGreeting("World"); assertEquals("Hello World!", greeting); @@ -104,10 +104,10 @@ public void testMockedChild() { }); testEnv.start(); - // Get a workflow stub using the same task list the worker uses. + // Get a workflow stub using the same task queue the worker uses. GreetingWorkflow workflow = client.newWorkflowStub( - GreetingWorkflow.class, WorkflowOptions.newBuilder().setTaskList(TASK_LIST).build()); + GreetingWorkflow.class, WorkflowOptions.newBuilder().setTaskQueue(TASK_QUEUE).build()); // Execute a workflow waiting for it to complete. String greeting = workflow.getGreeting("World"); assertEquals("Hello World!", greeting); diff --git a/src/test/java/io/temporal/samples/hello/HelloCronTest.java b/src/test/java/io/temporal/samples/hello/HelloCronTest.java index 40135f565..b18454ea1 100644 --- a/src/test/java/io/temporal/samples/hello/HelloCronTest.java +++ b/src/test/java/io/temporal/samples/hello/HelloCronTest.java @@ -20,7 +20,7 @@ package io.temporal.samples.hello; import static io.temporal.samples.hello.HelloCron.CRON_WORKFLOW_ID; -import static io.temporal.samples.hello.HelloCron.TASK_LIST; +import static io.temporal.samples.hello.HelloCron.TASK_QUEUE; import static org.junit.Assert.assertEquals; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.*; @@ -67,7 +67,7 @@ protected void failed(Throwable e, Description description) { @Before public void setUp() { testEnv = TestWorkflowEnvironment.newInstance(); - worker = testEnv.newWorker(HelloCron.TASK_LIST); + worker = testEnv.newWorker(HelloCron.TASK_QUEUE); worker.registerWorkflowImplementationTypes(GreetingWorkflowImpl.class); client = testEnv.getWorkflowClient(); @@ -89,7 +89,7 @@ public void testMockedActivity() { WorkflowOptions workflowOptions = WorkflowOptions.newBuilder() .setCronSchedule("0 * * * *") - .setTaskList(TASK_LIST) + .setTaskQueue(TASK_QUEUE) .setWorkflowId(CRON_WORKFLOW_ID) .build(); GreetingWorkflow workflow = client.newWorkflowStub(GreetingWorkflow.class, workflowOptions); diff --git a/src/test/java/io/temporal/samples/hello/HelloExceptionTest.java b/src/test/java/io/temporal/samples/hello/HelloExceptionTest.java index 788277eb9..b4ece52ea 100644 --- a/src/test/java/io/temporal/samples/hello/HelloExceptionTest.java +++ b/src/test/java/io/temporal/samples/hello/HelloExceptionTest.java @@ -19,7 +19,7 @@ package io.temporal.samples.hello; -import static io.temporal.samples.hello.HelloException.TASK_LIST; +import static io.temporal.samples.hello.HelloException.TASK_QUEUE; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.anyString; @@ -70,7 +70,7 @@ protected void failed(Throwable e, Description description) { @Before public void setUp() { testEnv = TestWorkflowEnvironment.newInstance(); - worker = testEnv.newWorker(HelloException.TASK_LIST); + worker = testEnv.newWorker(HelloException.TASK_QUEUE); client = testEnv.getWorkflowClient(); } @@ -87,7 +87,7 @@ public void testIOException() { worker.registerActivitiesImplementations(new HelloException.GreetingActivitiesImpl()); testEnv.start(); - WorkflowOptions workflowOptions = WorkflowOptions.newBuilder().setTaskList(TASK_LIST).build(); + WorkflowOptions workflowOptions = WorkflowOptions.newBuilder().setTaskQueue(TASK_QUEUE).build(); GreetingWorkflow workflow = client.newWorkflowStub(GreetingWorkflow.class, workflowOptions); try { workflow.getGreeting("World"); @@ -116,7 +116,7 @@ public void testActivityTimeout() { testEnv.start(); - WorkflowOptions workflowOptions = WorkflowOptions.newBuilder().setTaskList(TASK_LIST).build(); + WorkflowOptions workflowOptions = WorkflowOptions.newBuilder().setTaskQueue(TASK_QUEUE).build(); GreetingWorkflow workflow = client.newWorkflowStub(GreetingWorkflow.class, workflowOptions); try { workflow.getGreeting("World"); @@ -150,7 +150,7 @@ public void testChildWorkflowTimeout() { testEnv.start(); - WorkflowOptions workflowOptions = WorkflowOptions.newBuilder().setTaskList(TASK_LIST).build(); + WorkflowOptions workflowOptions = WorkflowOptions.newBuilder().setTaskQueue(TASK_QUEUE).build(); GreetingWorkflow workflow = client.newWorkflowStub(GreetingWorkflow.class, workflowOptions); try { workflow.getGreeting("World"); diff --git a/src/test/java/io/temporal/samples/hello/HelloPeriodicTest.java b/src/test/java/io/temporal/samples/hello/HelloPeriodicTest.java index e3231193e..a4e5ac2a9 100644 --- a/src/test/java/io/temporal/samples/hello/HelloPeriodicTest.java +++ b/src/test/java/io/temporal/samples/hello/HelloPeriodicTest.java @@ -20,7 +20,7 @@ package io.temporal.samples.hello; import static io.temporal.samples.hello.HelloPeriodic.PERIODIC_WORKFLOW_ID; -import static io.temporal.samples.hello.HelloPeriodic.TASK_LIST; +import static io.temporal.samples.hello.HelloPeriodic.TASK_QUEUE; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.anyString; @@ -74,7 +74,7 @@ protected void failed(Throwable e, Description description) { @Before public void setUp() { testEnv = TestWorkflowEnvironment.newInstance(); - worker = testEnv.newWorker(TASK_LIST); + worker = testEnv.newWorker(TASK_QUEUE); worker.registerWorkflowImplementationTypes(GreetingWorkflowImpl.class); client = testEnv.getWorkflowClient(); @@ -90,12 +90,12 @@ public void testPeriodicActivityInvocation() { worker.registerActivitiesImplementations(new GreetingActivitiesImpl()); testEnv.start(); - // Get a workflow stub using the same task list the worker uses. + // Get a workflow stub using the same task queue the worker uses. GreetingWorkflow workflow = client.newWorkflowStub( GreetingWorkflow.class, WorkflowOptions.newBuilder() - .setTaskList(TASK_LIST) + .setTaskQueue(TASK_QUEUE) .setWorkflowId(PERIODIC_WORKFLOW_ID) .build()); // Execute a workflow waiting for it to complete. @@ -125,12 +125,12 @@ public void testMockedActivity() { worker.registerActivitiesImplementations(activities); testEnv.start(); - // Get a workflow stub using the same task list the worker uses. + // Get a workflow stub using the same task queue the worker uses. GreetingWorkflow workflow = client.newWorkflowStub( GreetingWorkflow.class, WorkflowOptions.newBuilder() - .setTaskList(TASK_LIST) + .setTaskQueue(TASK_QUEUE) .setWorkflowId(PERIODIC_WORKFLOW_ID) .build()); // Execute a workflow waiting for it to complete. diff --git a/src/test/java/io/temporal/samples/hello/HelloPolymorphicActivityTest.java b/src/test/java/io/temporal/samples/hello/HelloPolymorphicActivityTest.java index e00f73635..c6571659b 100644 --- a/src/test/java/io/temporal/samples/hello/HelloPolymorphicActivityTest.java +++ b/src/test/java/io/temporal/samples/hello/HelloPolymorphicActivityTest.java @@ -19,7 +19,7 @@ package io.temporal.samples.hello; -import static io.temporal.samples.hello.HelloActivity.TASK_LIST; +import static io.temporal.samples.hello.HelloActivity.TASK_QUEUE; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -46,7 +46,7 @@ public class HelloPolymorphicActivityTest { @Before public void setUp() { testEnv = TestWorkflowEnvironment.newInstance(); - worker = testEnv.newWorker(TASK_LIST); + worker = testEnv.newWorker(TASK_QUEUE); worker.registerWorkflowImplementationTypes(GreetingWorkflowImpl.class); client = testEnv.getWorkflowClient(); @@ -62,10 +62,10 @@ public void testActivityImpl() { worker.registerActivitiesImplementations(new HelloActivityImpl(), new ByeActivityImpl()); testEnv.start(); - // Get a workflow stub using the same task list the worker uses. + // Get a workflow stub using the same task queue the worker uses. GreetingWorkflow workflow = client.newWorkflowStub( - GreetingWorkflow.class, WorkflowOptions.newBuilder().setTaskList(TASK_LIST).build()); + GreetingWorkflow.class, WorkflowOptions.newBuilder().setTaskQueue(TASK_QUEUE).build()); // Execute a workflow waiting for it to complete. String greeting = workflow.getGreeting("World"); assertEquals("Hello World!\nBye World!\n", greeting); @@ -81,10 +81,10 @@ public void testMockedActivity() { worker.registerActivitiesImplementations(hello, bye); testEnv.start(); - // Get a workflow stub using the same task list the worker uses. + // Get a workflow stub using the same task queue the worker uses. GreetingWorkflow workflow = client.newWorkflowStub( - GreetingWorkflow.class, WorkflowOptions.newBuilder().setTaskList(TASK_LIST).build()); + GreetingWorkflow.class, WorkflowOptions.newBuilder().setTaskQueue(TASK_QUEUE).build()); // Execute a workflow waiting for it to complete. String greeting = workflow.getGreeting("World"); assertEquals("Hello World!\nBye World!\n", greeting); diff --git a/src/test/java/io/temporal/samples/hello/HelloQueryTest.java b/src/test/java/io/temporal/samples/hello/HelloQueryTest.java index 4a08a42fe..47449c6da 100644 --- a/src/test/java/io/temporal/samples/hello/HelloQueryTest.java +++ b/src/test/java/io/temporal/samples/hello/HelloQueryTest.java @@ -58,10 +58,10 @@ protected void failed(Throwable e, Description description) { public void setUp() { testEnv = TestWorkflowEnvironment.newInstance(); - worker = testEnv.newWorker(HelloQuery.TASK_LIST); + worker = testEnv.newWorker(HelloQuery.TASK_QUEUE); // Comment the above line and uncomment the below one to see how the TestWatcher rule prints // the history of the stuck workflow as its decision task is never picked up. - // worker = testEnv.newWorker("InvalidTaskList"); + // worker = testEnv.newWorker("InvalidTaskQueue"); worker.registerWorkflowImplementationTypes(HelloQuery.GreetingWorkflowImpl.class); testEnv.start(); @@ -76,9 +76,9 @@ public void tearDown() { @Test(timeout = 5000) public void testQuery() { - // Get a workflow stub using the same task list the worker uses. + // Get a workflow stub using the same task queue the worker uses. WorkflowOptions workflowOptions = - WorkflowOptions.newBuilder().setTaskList(HelloQuery.TASK_LIST).build(); + WorkflowOptions.newBuilder().setTaskQueue(HelloQuery.TASK_QUEUE).build(); GreetingWorkflow workflow = client.newWorkflowStub(GreetingWorkflow.class, workflowOptions); // Start workflow asynchronously to not use another thread to query. diff --git a/src/test/java/io/temporal/samples/hello/HelloSignalTest.java b/src/test/java/io/temporal/samples/hello/HelloSignalTest.java index 32e1e12f6..a2b553bdb 100644 --- a/src/test/java/io/temporal/samples/hello/HelloSignalTest.java +++ b/src/test/java/io/temporal/samples/hello/HelloSignalTest.java @@ -60,7 +60,7 @@ protected void failed(Throwable e, Description description) { public void setUp() { testEnv = TestWorkflowEnvironment.newInstance(); - worker = testEnv.newWorker(HelloSignal.TASK_LIST); + worker = testEnv.newWorker(HelloSignal.TASK_QUEUE); worker.registerWorkflowImplementationTypes(HelloSignal.GreetingWorkflowImpl.class); testEnv.start(); @@ -74,10 +74,10 @@ public void tearDown() { @Test public void testSignal() { - // Get a workflow stub using the same task list the worker uses. + // Get a workflow stub using the same task queue the worker uses. WorkflowOptions workflowOptions = WorkflowOptions.newBuilder() - .setTaskList(HelloSignal.TASK_LIST) + .setTaskQueue(HelloSignal.TASK_QUEUE) .setWorkflowIdReusePolicy( WorkflowIdReusePolicy.WORKFLOW_ID_REUSE_POLICY_REJECT_DUPLICATE) .build(); diff --git a/src/test/java/io/temporal/samples/moneybatch/TransferWorkflowTest.java b/src/test/java/io/temporal/samples/moneybatch/TransferWorkflowTest.java index 957b7e053..597942b1b 100644 --- a/src/test/java/io/temporal/samples/moneybatch/TransferWorkflowTest.java +++ b/src/test/java/io/temporal/samples/moneybatch/TransferWorkflowTest.java @@ -19,7 +19,7 @@ package io.temporal.samples.moneybatch; -import static io.temporal.samples.moneybatch.AccountActivityWorker.TASK_LIST; +import static io.temporal.samples.moneybatch.AccountActivityWorker.TASK_QUEUE; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; @@ -61,7 +61,7 @@ protected void failed(Throwable e, Description description) { @Before public void setUp() { testEnv = TestWorkflowEnvironment.newInstance(); - worker = testEnv.newWorker(TASK_LIST); + worker = testEnv.newWorker(TASK_QUEUE); worker.registerWorkflowImplementationTypes(AccountTransferWorkflowImpl.class); workflowClient = testEnv.getWorkflowClient(); @@ -82,7 +82,7 @@ public void testTransfer() { String to = "account2"; int batchSize = 5; WorkflowOptions options = - WorkflowOptions.newBuilder().setTaskList(TASK_LIST).setWorkflowId(to).build(); + WorkflowOptions.newBuilder().setTaskQueue(TASK_QUEUE).setWorkflowId(to).build(); AccountTransferWorkflow transferWorkflow = workflowClient.newWorkflowStub(AccountTransferWorkflow.class, options); WorkflowClient.start(transferWorkflow::deposit, to, batchSize); diff --git a/src/test/java/io/temporal/samples/moneytransfer/TransferWorkflowTest.java b/src/test/java/io/temporal/samples/moneytransfer/TransferWorkflowTest.java index d121ad4b9..95fe82194 100644 --- a/src/test/java/io/temporal/samples/moneytransfer/TransferWorkflowTest.java +++ b/src/test/java/io/temporal/samples/moneytransfer/TransferWorkflowTest.java @@ -19,7 +19,7 @@ package io.temporal.samples.moneytransfer; -import static io.temporal.samples.moneytransfer.AccountActivityWorker.TASK_LIST; +import static io.temporal.samples.moneytransfer.AccountActivityWorker.TASK_QUEUE; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -41,7 +41,7 @@ public class TransferWorkflowTest { @Before public void setUp() { testEnv = TestWorkflowEnvironment.newInstance(); - worker = testEnv.newWorker(TASK_LIST); + worker = testEnv.newWorker(TASK_QUEUE); worker.registerWorkflowImplementationTypes(AccountTransferWorkflowImpl.class); workflowClient = testEnv.getWorkflowClient(); @@ -57,7 +57,7 @@ public void testTransfer() { Account activities = mock(Account.class); worker.registerActivitiesImplementations(activities); testEnv.start(); - WorkflowOptions options = WorkflowOptions.newBuilder().setTaskList(TASK_LIST).build(); + WorkflowOptions options = WorkflowOptions.newBuilder().setTaskQueue(TASK_QUEUE).build(); AccountTransferWorkflow workflow = workflowClient.newWorkflowStub(AccountTransferWorkflow.class, options); long starty = testEnv.currentTimeMillis(); From 1cbb2ef2497713605a5e9abe8d6c656203ffd29d Mon Sep 17 00:00:00 2001 From: Maxim Fateev Date: Fri, 3 Jul 2020 10:42:36 -0700 Subject: [PATCH 4/7] Addedname.remal.check-updates --- build.gradle | 3 +++ 1 file changed, 3 insertions(+) diff --git a/build.gradle b/build.gradle index 1fc0ca0fe..1e23aa56c 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,10 @@ +// Run 'gradle checkUpdates' to find out which dependencies have newer versions + plugins { id 'net.minecrell.licenser' version '0.4.1' id 'com.github.sherter.google-java-format' version '0.8' id "net.ltgt.errorprone" version "0.6" + id 'name.remal.check-updates' version '1.0.200' } apply plugin: 'java' From ba804b65fb6b31d3b2f2b0a8cead54f621e6e999 Mon Sep 17 00:00:00 2001 From: Maxim Fateev Date: Fri, 3 Jul 2020 10:46:38 -0700 Subject: [PATCH 5/7] Updated to the latest versions --- build.gradle | 12 ++++++------ gradle/wrapper/gradle-wrapper.jar | Bin 58702 -> 58694 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew.bat | 3 +++ 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/build.gradle b/build.gradle index 1e23aa56c..27948be61 100644 --- a/build.gradle +++ b/build.gradle @@ -2,8 +2,8 @@ plugins { id 'net.minecrell.licenser' version '0.4.1' - id 'com.github.sherter.google-java-format' version '0.8' - id "net.ltgt.errorprone" version "0.6" + id 'com.github.sherter.google-java-format' version '0.9' + id "net.ltgt.errorprone" version "1.2.1" id 'name.remal.check-updates' version '1.0.200' } @@ -31,15 +31,15 @@ repositories { dependencies { implementation group: 'io.temporal', name: 'temporal-sdk', version: '0.26.0' - implementation group: 'commons-configuration', name: 'commons-configuration', version: '1.9' + implementation group: 'commons-configuration', name: 'commons-configuration', version: '1.10' implementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3' - testImplementation group: 'junit', name: 'junit', version: '4.12' + testImplementation group: 'junit', name: 'junit', version: '4.13' testImplementation group: 'org.mockito', name: 'mockito-all', version: '1.10.19' - testImplementation group: 'org.powermock', name: 'powermock-api-mockito', version: '1.7.3' + testImplementation group: 'org.powermock', name: 'powermock-api-mockito', version: '1.7.4' errorproneJavac("com.google.errorprone:javac:9+181-r4173-1") - errorprone("com.google.errorprone:error_prone_core:2.3.1") + errorprone("com.google.errorprone:error_prone_core:2.4.0") } compileJava { diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index cc4fdc293d0e50b0ad9b65c16e7ddd1db2f6025b..490fda8577df6c95960ba7077c43220e5bb2c0d9 100644 GIT binary patch delta 18348 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 H|2F2obH5>< delta 18428 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a4b442974..bb8b2fc26 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.5.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew.bat b/gradlew.bat index 24467a141..9109989e3 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -29,6 +29,9 @@ if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" From 5ea6f498bed8468197b9332b7e92f58d6a8747ca Mon Sep 17 00:00:00 2001 From: Maxim Fateev Date: Fri, 3 Jul 2020 10:57:41 -0700 Subject: [PATCH 6/7] Fixed warnings due to updated stylecheck --- .../samples/bookingsaga/TripBookingActivities.java | 12 ++++++++++++ .../io/temporal/samples/hello/HelloActivity.java | 1 - .../temporal/samples/hello/HelloActivityRetry.java | 1 - .../samples/hello/HelloAsyncActivityCompletion.java | 1 - .../io/temporal/samples/hello/HelloAsyncLambda.java | 1 - .../java/io/temporal/samples/hello/HelloChild.java | 1 - .../java/io/temporal/samples/hello/HelloCron.java | 6 ------ .../samples/hello/HelloSearchAttributes.java | 7 ++++--- .../java/io/temporal/samples/hello/HelloSignal.java | 4 ++-- .../samples/updatabletimer/UpdatableTimer.java | 8 ++++++-- 10 files changed, 24 insertions(+), 18 deletions(-) diff --git a/src/main/java/io/temporal/samples/bookingsaga/TripBookingActivities.java b/src/main/java/io/temporal/samples/bookingsaga/TripBookingActivities.java index 40e2b7909..ce02c963d 100644 --- a/src/main/java/io/temporal/samples/bookingsaga/TripBookingActivities.java +++ b/src/main/java/io/temporal/samples/bookingsaga/TripBookingActivities.java @@ -25,24 +25,32 @@ public interface TripBookingActivities { /** + * Request a car rental reservation. + * * @param name customer name * @return reservationID */ String reserveCar(String name); /** + * Request a flight reservation. + * * @param name customer name * @return reservationID */ String bookFlight(String name); /** + * Request a hotel reservation. + * * @param name customer name * @return reservationID */ String bookHotel(String name); /** + * Cancel a flight reservation. + * * @param name customer name * @param reservationID id returned by bookFlight * @return cancellationConfirmationID @@ -50,6 +58,8 @@ public interface TripBookingActivities { String cancelFlight(String reservationID, String name); /** + * Cancel a hotel reservation. + * * @param name customer name * @param reservationID id returned by bookHotel * @return cancellationConfirmationID @@ -57,6 +67,8 @@ public interface TripBookingActivities { String cancelHotel(String reservationID, String name); /** + * Cancel a car rental reservation. + * * @param name customer name * @param reservationID id returned by reserveCar * @return cancellationConfirmationID diff --git a/src/main/java/io/temporal/samples/hello/HelloActivity.java b/src/main/java/io/temporal/samples/hello/HelloActivity.java index d8e22644e..837c90754 100644 --- a/src/main/java/io/temporal/samples/hello/HelloActivity.java +++ b/src/main/java/io/temporal/samples/hello/HelloActivity.java @@ -43,7 +43,6 @@ public class HelloActivity { /** Workflow interface has to have at least one method annotated with @WorkflowMethod. */ @WorkflowInterface public interface GreetingWorkflow { - /** @return greeting string */ @WorkflowMethod String getGreeting(String name); } diff --git a/src/main/java/io/temporal/samples/hello/HelloActivityRetry.java b/src/main/java/io/temporal/samples/hello/HelloActivityRetry.java index 8c87649b2..843e3793b 100644 --- a/src/main/java/io/temporal/samples/hello/HelloActivityRetry.java +++ b/src/main/java/io/temporal/samples/hello/HelloActivityRetry.java @@ -43,7 +43,6 @@ public class HelloActivityRetry { @WorkflowInterface public interface GreetingWorkflow { - /** @return greeting string */ @WorkflowMethod String getGreeting(String name); } diff --git a/src/main/java/io/temporal/samples/hello/HelloAsyncActivityCompletion.java b/src/main/java/io/temporal/samples/hello/HelloAsyncActivityCompletion.java index 15451e3ae..1d4df0264 100644 --- a/src/main/java/io/temporal/samples/hello/HelloAsyncActivityCompletion.java +++ b/src/main/java/io/temporal/samples/hello/HelloAsyncActivityCompletion.java @@ -47,7 +47,6 @@ public class HelloAsyncActivityCompletion { @WorkflowInterface public interface GreetingWorkflow { - /** @return greeting string */ @WorkflowMethod String getGreeting(String name); } diff --git a/src/main/java/io/temporal/samples/hello/HelloAsyncLambda.java b/src/main/java/io/temporal/samples/hello/HelloAsyncLambda.java index c9a574685..ba63a7ada 100644 --- a/src/main/java/io/temporal/samples/hello/HelloAsyncLambda.java +++ b/src/main/java/io/temporal/samples/hello/HelloAsyncLambda.java @@ -43,7 +43,6 @@ public class HelloAsyncLambda { @WorkflowInterface public interface GreetingWorkflow { - /** @return greeting string */ @WorkflowMethod String getGreeting(String name); } diff --git a/src/main/java/io/temporal/samples/hello/HelloChild.java b/src/main/java/io/temporal/samples/hello/HelloChild.java index 3a198f1c1..f1c1b8adf 100644 --- a/src/main/java/io/temporal/samples/hello/HelloChild.java +++ b/src/main/java/io/temporal/samples/hello/HelloChild.java @@ -40,7 +40,6 @@ public class HelloChild { /** The parent workflow interface. */ @WorkflowInterface public interface GreetingWorkflow { - /** @return greeting string */ @WorkflowMethod String getGreeting(String name); } diff --git a/src/main/java/io/temporal/samples/hello/HelloCron.java b/src/main/java/io/temporal/samples/hello/HelloCron.java index be4893969..398cf6375 100644 --- a/src/main/java/io/temporal/samples/hello/HelloCron.java +++ b/src/main/java/io/temporal/samples/hello/HelloCron.java @@ -67,12 +67,6 @@ public static class GreetingWorkflowImpl implements GreetingWorkflow { GreetingActivities.class, ActivityOptions.newBuilder().setScheduleToCloseTimeout(Duration.ofSeconds(10)).build()); - /** - * Stub used to terminate this workflow run and create the next one with the same ID atomically. - */ - private final GreetingWorkflow continueAsNew = - Workflow.newContinueAsNewStub(GreetingWorkflow.class); - @Override public void greet(String name) { activities.greet("Hello " + name + "!"); diff --git a/src/main/java/io/temporal/samples/hello/HelloSearchAttributes.java b/src/main/java/io/temporal/samples/hello/HelloSearchAttributes.java index 30461da8e..0e551a67a 100644 --- a/src/main/java/io/temporal/samples/hello/HelloSearchAttributes.java +++ b/src/main/java/io/temporal/samples/hello/HelloSearchAttributes.java @@ -38,7 +38,8 @@ import io.temporal.workflowservice.v1.DescribeWorkflowExecutionResponse; import java.text.SimpleDateFormat; import java.time.Duration; -import java.util.Date; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.HashMap; import java.util.Map; import java.util.UUID; @@ -53,7 +54,6 @@ public class HelloSearchAttributes { /** Workflow interface has to have at least one method annotated with @WorkflowMethod. */ @WorkflowInterface public interface GreetingWorkflow { - /** @return greeting string */ @WorkflowMethod String getGreeting(String name); } @@ -161,7 +161,8 @@ private static Map generateSearchAttributes() { // CustomDatetimeField takes times encoded in the RFC 3339 format. private static String generateDateTimeFieldValue() { - return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX").format(new Date()); + return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX") + .format(LocalDateTime.now(ZoneId.systemDefault())); } // example for extract value from search attributes diff --git a/src/main/java/io/temporal/samples/hello/HelloSignal.java b/src/main/java/io/temporal/samples/hello/HelloSignal.java index 240897920..dc46d47b4 100644 --- a/src/main/java/io/temporal/samples/hello/HelloSignal.java +++ b/src/main/java/io/temporal/samples/hello/HelloSignal.java @@ -45,8 +45,8 @@ public class HelloSignal { @WorkflowInterface public interface GreetingWorkflow { /** - * @return list of greeting strings that were received through the waitForNameMethod. This - * method will block until the number of greetings specified are received. + * list of greeting strings that were received through the waitForNameMethod. This method will + * block until the number of greetings specified are received. */ @WorkflowMethod List getGreetings(); diff --git a/src/main/java/io/temporal/samples/updatabletimer/UpdatableTimer.java b/src/main/java/io/temporal/samples/updatabletimer/UpdatableTimer.java index 847e826de..06451e9dc 100644 --- a/src/main/java/io/temporal/samples/updatabletimer/UpdatableTimer.java +++ b/src/main/java/io/temporal/samples/updatabletimer/UpdatableTimer.java @@ -21,7 +21,9 @@ import io.temporal.workflow.Workflow; import java.time.Duration; -import java.util.Date; +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.ZoneId; import org.slf4j.Logger; public final class UpdatableTimer { @@ -32,7 +34,9 @@ public final class UpdatableTimer { private boolean wakeUpTimeUpdated; public void sleepUntil(long wakeUpTime) { - logger.info("sleepUntil: " + new Date(wakeUpTime)); + Instant wakeUpInstant = Instant.ofEpochMilli(wakeUpTime); + LocalDateTime date = wakeUpInstant.atZone(ZoneId.systemDefault()).toLocalDateTime(); + logger.info("sleepUntil: " + date); this.wakeUpTime = wakeUpTime; while (true) { wakeUpTimeUpdated = false; From dca0b9c873e22cd34e1c5f7fcacc425f466fc3a8 Mon Sep 17 00:00:00 2001 From: Maxim Fateev Date: Tue, 7 Jul 2020 11:58:40 -0700 Subject: [PATCH 7/7] Updated check-updates to 1.0.201 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index e449b9f35..211573848 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { id 'net.minecrell.licenser' version '0.4.1' id 'com.github.sherter.google-java-format' version '0.9' id "net.ltgt.errorprone" version "1.2.1" - id 'name.remal.check-updates' version '1.0.200' + id 'name.remal.check-updates' version '1.0.201' } apply plugin: 'java'