mirror of https://github.com/dapr/java-sdk.git
* Show registered workflow * Add `NewWorkflowOption` to config version, time, input, etc when start a new workflow (#945) * add NewWorkflowOption * fix style * add unit test * add more unit tests for improving coverage --------- * Update CLI link in example readme's (#951) * Updated pre-requisite link to Dapr CLI * Update JDK list to match all other examples --------- * remove static * Add determinstic UUID generation (#947) * add determinstic UUID generation * add unit test to improve coverage * update grpc version to 1.59.0 to be compatible updated durabletask-java --------- * fix flaky integration test ActorExceptionIT (#954) * fix flaky it ActorReminderRecovery (#958) * fix flaky integration test MethodInvokeIT (#959) * fix flaky it MethodInvokeIT * add debug print * add debug print * add more waiting time * wait before invoke * wait for health before invoke --------- * Fix errors * make thead safe * Fix code and test. --------- Signed-off-by: addjuarez <6789375+addjuarez@users.noreply.github.com> Signed-off-by: kaibocai <89094811+kaibocai@users.noreply.github.com> Signed-off-by: Michaël Hompus <michael@hompus.nl> Signed-off-by: kaibocai <kaibocai@microsoft.com> Signed-off-by: MregXN <mregxn@gmail.com> Signed-off-by: Artur Souza <artursouza.ms@outlook.com> Signed-off-by: Artur Souza <asouza.pro@gmail.com> Co-authored-by: addjuarez <6789375+addjuarez@users.noreply.github.com> Co-authored-by: kaibocai <89094811+kaibocai@users.noreply.github.com> Co-authored-by: Michaël Hompus <michael@hompus.nl> Co-authored-by: MregXN <46479059+MregXN@users.noreply.github.com> Co-authored-by: Dapr Bot <56698301+dapr-bot@users.noreply.github.com> Co-authored-by: Mukundan Sundararajan <65565396+mukundansundar@users.noreply.github.com>
This commit is contained in:
parent
b0702fdf8e
commit
07c241fad7
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2023 The Dapr Authors
|
||||
* Copyright 2024 The Dapr Authors
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
|
@ -18,11 +18,11 @@ import io.dapr.utils.NetworkUtils;
|
|||
import io.dapr.workflows.Workflow;
|
||||
import io.dapr.workflows.internal.ApiTokenClientInterceptor;
|
||||
import io.grpc.ClientInterceptor;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class WorkflowRuntimeBuilder {
|
||||
private static volatile WorkflowRuntime instance;
|
||||
|
@ -31,14 +31,20 @@ public class WorkflowRuntimeBuilder {
|
|||
private Set<String> workflows = new HashSet<String>();
|
||||
private Set<String> activities = new HashSet<String>();
|
||||
private static ClientInterceptor WORKFLOW_INTERCEPTOR = new ApiTokenClientInterceptor();
|
||||
private final Set<String> activitySet = Collections.synchronizedSet(new HashSet<>());
|
||||
private final Set<String> workflowSet = Collections.synchronizedSet(new HashSet<>());
|
||||
|
||||
/**
|
||||
* Constructs the WorkflowRuntimeBuilder.
|
||||
*/
|
||||
public WorkflowRuntimeBuilder() {
|
||||
this(LoggerFactory.getLogger(WorkflowRuntimeBuilder.class));
|
||||
}
|
||||
|
||||
WorkflowRuntimeBuilder(Logger logger) {
|
||||
this.builder = new DurableTaskGrpcWorkerBuilder().grpcChannel(
|
||||
NetworkUtils.buildGrpcManagedChannel(WORKFLOW_INTERCEPTOR));
|
||||
this.logger = Logger.getLogger(WorkflowRuntimeBuilder.class.getName());
|
||||
NetworkUtils.buildGrpcManagedChannel(WORKFLOW_INTERCEPTOR));
|
||||
this.logger = logger;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -54,7 +60,9 @@ public class WorkflowRuntimeBuilder {
|
|||
}
|
||||
}
|
||||
}
|
||||
this.logger.log(Level.INFO, "Successfully built dapr workflow runtime");
|
||||
this.logger.info("List of registered workflows: " + this.workflowSet);
|
||||
this.logger.info("List of registered activites: " + this.activitySet);
|
||||
this.logger.info("Successfully built dapr workflow runtime");
|
||||
return instance;
|
||||
}
|
||||
|
||||
|
@ -69,7 +77,8 @@ public class WorkflowRuntimeBuilder {
|
|||
this.builder = this.builder.addOrchestration(
|
||||
new OrchestratorWrapper<>(clazz)
|
||||
);
|
||||
this.logger.log(Level.INFO, "Registered Workflow: " + clazz.getSimpleName());
|
||||
this.workflowSet.add(clazz.getCanonicalName());
|
||||
this.logger.info("Registered Workflow: " + clazz.getSimpleName());
|
||||
this.workflows.add(clazz.getSimpleName());
|
||||
return this;
|
||||
}
|
||||
|
@ -84,7 +93,8 @@ public class WorkflowRuntimeBuilder {
|
|||
this.builder = this.builder.addActivity(
|
||||
new ActivityWrapper<>(clazz)
|
||||
);
|
||||
this.logger.log(Level.INFO, "Registered Activity: " + clazz.getSimpleName());
|
||||
this.activitySet.add(clazz.getCanonicalName());
|
||||
this.logger.info("Registered Activity: " + clazz.getSimpleName());
|
||||
this.activities.add(clazz.getSimpleName());
|
||||
}
|
||||
|
||||
|
|
|
@ -1,18 +1,28 @@
|
|||
/*
|
||||
* Copyright 2024 The Dapr Authors
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
package io.dapr.workflows.runtime;
|
||||
|
||||
|
||||
import io.dapr.workflows.Workflow;
|
||||
import io.dapr.workflows.WorkflowStub;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mockito.Mockito;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
import static org.junit.Assert.assertNotEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.PrintStream;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.logging.Handler;
|
||||
import java.util.logging.LogRecord;
|
||||
|
||||
public class WorkflowRuntimeBuilderTest {
|
||||
public static class TestWorkflow extends Workflow {
|
||||
|
@ -51,36 +61,19 @@ public class WorkflowRuntimeBuilderTest {
|
|||
ByteArrayOutputStream outStreamCapture = new ByteArrayOutputStream();
|
||||
System.setOut(new PrintStream(outStreamCapture));
|
||||
|
||||
LogCaptureHandler testLoggerHandler = new LogCaptureHandler();
|
||||
Logger testLogger = Logger.getLogger(WorkflowRuntimeBuilder.class.getName());
|
||||
Logger testLogger = Mockito.mock(Logger.class);
|
||||
|
||||
testLogger.addHandler(testLoggerHandler);
|
||||
|
||||
// indexOf will return -1 if the string is not found.
|
||||
assertDoesNotThrow(() -> new WorkflowRuntimeBuilder().registerWorkflow(TestWorkflow.class));
|
||||
assertNotEquals(-1, testLoggerHandler.capturedLog.indexOf("Registered Workflow: TestWorkflow"));
|
||||
assertDoesNotThrow(() -> new WorkflowRuntimeBuilder().registerActivity(TestActivity.class));
|
||||
assertNotEquals(-1, testLoggerHandler.capturedLog.indexOf("Registered Activity: TestActivity"));
|
||||
assertDoesNotThrow(() -> new WorkflowRuntimeBuilder(testLogger).registerWorkflow(TestWorkflow.class));
|
||||
assertDoesNotThrow(() -> new WorkflowRuntimeBuilder(testLogger).registerActivity(TestActivity.class));
|
||||
|
||||
WorkflowRuntimeBuilder wfRuntime = new WorkflowRuntimeBuilder();
|
||||
|
||||
wfRuntime.build();
|
||||
|
||||
Mockito.verify(testLogger, Mockito.times(1))
|
||||
.info(Mockito.eq("Registered Workflow: TestWorkflow"));
|
||||
Mockito.verify(testLogger, Mockito.times(1))
|
||||
.info(Mockito.eq("Registered Activity: TestActivity"));
|
||||
}
|
||||
|
||||
private static class LogCaptureHandler extends Handler {
|
||||
private StringBuilder capturedLog = new StringBuilder();
|
||||
|
||||
@Override
|
||||
public void publish(LogRecord record) {
|
||||
capturedLog.append(record.getMessage()).append(System.lineSeparator());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void flush(){
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() throws SecurityException {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue