Skip to content

Commit 4aa0a4b

Browse files
Do some cleanup
1 parent 2c6e9c5 commit 4aa0a4b

2 files changed

Lines changed: 34 additions & 18 deletions

File tree

temporal-spring-boot-autoconfigure/src/main/java/io/temporal/spring/boot/autoconfigure/AutoConfigurationUtils.java

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import java.util.*;
1212
import java.util.Map.Entry;
1313
import java.util.stream.Collectors;
14+
import java.util.stream.Stream;
1415
import javax.annotation.Nullable;
1516
import org.springframework.beans.factory.ListableBeanFactory;
1617
import org.springframework.beans.factory.NoUniqueBeanDefinitionException;
@@ -96,6 +97,11 @@ static List<WorkerInterceptor> chooseWorkerInterceptors(
9697
return workerInterceptor;
9798
}
9899

100+
/**
101+
* Create a comparator that can extract @Order and @Priority from beans in the given bean factory.
102+
* This is needed because the default OrderComparator doesn't know about the bean factory and
103+
* therefore can't look up annotations on beans.
104+
*/
99105
private static Comparator<Object> beanFactoryAwareOrderComparator(
100106
ListableBeanFactory beanFactory) {
101107
return OrderComparator.INSTANCE.withSourceProvider(
@@ -134,25 +140,22 @@ static <T> List<TemporalOptionsCustomizer<T>> chooseTemporalCustomizerBeans(
134140
return null;
135141
}
136142
List<NonRootNamespaceProperties> nonRootNamespaceProperties = properties.getNamespaces();
137-
// If we only have one namespace (the root one), use all customizers
138-
if (Objects.isNull(nonRootNamespaceProperties) || nonRootNamespaceProperties.isEmpty()) {
139-
return customizerMap.entrySet().stream()
140-
.sorted(beanFactoryAwareOrderComparator(beanFactory))
141-
.map(Entry::getValue)
142-
.collect(Collectors.toList());
143+
Stream<Entry<String, TemporalOptionsCustomizer<T>>> customizerStream =
144+
customizerMap.entrySet().stream();
145+
if (!(Objects.isNull(nonRootNamespaceProperties) || nonRootNamespaceProperties.isEmpty())) {
146+
// Non-root namespace bean names, such as "nsWorkerFactoryCustomizer", "nsWorkerCustomizer"
147+
List<String> nonRootBeanNames =
148+
nonRootNamespaceProperties.stream()
149+
.map(
150+
ns ->
151+
temporalCustomizerBeanName(
152+
MoreObjects.firstNonNull(ns.getAlias(), ns.getNamespace()),
153+
genericOptionsBuilderClass))
154+
.collect(Collectors.toList());
155+
customizerStream =
156+
customizerStream.filter(entry -> !nonRootBeanNames.contains(entry.getKey()));
143157
}
144-
// Non-root namespace bean names, such as "nsWorkerFactoryCustomizer", "nsWorkerCustomizer"
145-
List<String> nonRootBeanNames =
146-
nonRootNamespaceProperties.stream()
147-
.map(
148-
ns ->
149-
temporalCustomizerBeanName(
150-
MoreObjects.firstNonNull(ns.getAlias(), ns.getNamespace()),
151-
genericOptionsBuilderClass))
152-
.collect(Collectors.toList());
153-
154-
return customizerMap.entrySet().stream()
155-
.filter(entry -> !nonRootBeanNames.contains(entry.getKey()))
158+
return customizerStream
156159
.sorted(beanFactoryAwareOrderComparator(beanFactory))
157160
.map(Entry::getValue)
158161
.collect(Collectors.toList());

temporal-spring-boot-autoconfigure/src/main/java/io/temporal/spring/boot/autoconfigure/NonRootBeanPostProcessor.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import io.temporal.worker.WorkflowImplementationOptions;
2727
import java.util.Collections;
2828
import java.util.List;
29+
import java.util.stream.Collectors;
2930
import javax.annotation.Nonnull;
3031
import javax.annotation.Nullable;
3132
import org.slf4j.Logger;
@@ -93,6 +94,16 @@ private void injectBeanByNonRootNamespace(NonRootNamespaceProperties ns) {
9394
findBeanByNameSpaceForTemporalCustomizer(beanPrefix, WorkerOptions.Builder.class);
9495
List<TemporalOptionsCustomizer<WorkflowClientOptions.Builder>> workflowClientCustomizers =
9596
findBeanByNameSpaceForTemporalCustomizer(beanPrefix, WorkflowClientOptions.Builder.class);
97+
if (workflowClientCustomizers != null) {
98+
workflowClientCustomizers =
99+
workflowClientCustomizers.stream()
100+
.map(
101+
c ->
102+
(TemporalOptionsCustomizer<WorkflowClientOptions.Builder>)
103+
(WorkflowClientOptions.Builder o) ->
104+
c.customize(o).setNamespace(ns.getNamespace()))
105+
.collect(Collectors.toList());
106+
}
96107
List<TemporalOptionsCustomizer<ScheduleClientOptions.Builder>> scheduleClientCustomizers =
97108
findBeanByNameSpaceForTemporalCustomizer(beanPrefix, ScheduleClientOptions.Builder.class);
98109
List<TemporalOptionsCustomizer<WorkflowImplementationOptions.Builder>>
@@ -189,6 +200,8 @@ private <T> List<TemporalOptionsCustomizer<T>> findBeanByNameSpaceForTemporalCus
189200
String beanName =
190201
AutoConfigurationUtils.temporalCustomizerBeanName(beanPrefix, genericOptionsBuilderClass);
191202
try {
203+
// TODO(https://github.com/temporalio/sdk-java/issues/2638): Support multiple customizers in
204+
// the non root namespace
192205
TemporalOptionsCustomizer<T> genericOptionsCustomizer =
193206
beanFactory.getBean(beanName, TemporalOptionsCustomizer.class);
194207
return Collections.singletonList(genericOptionsCustomizer);

0 commit comments

Comments
 (0)