Renamed new registry implementation to BeanFactoryAwareFunctionRegistry
- added initila javadoc - polished few tests
This commit is contained in:
@@ -35,11 +35,13 @@ import reactor.core.publisher.Flux;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.beans.factory.BeanFactory;
|
||||
import org.springframework.beans.factory.SmartInitializingSingleton;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
|
||||
import org.springframework.cloud.function.context.AbstractSpringFunctionAdapterInitializer;
|
||||
import org.springframework.cloud.function.context.FunctionCatalog;
|
||||
import org.springframework.cloud.function.context.FunctionRegistration;
|
||||
import org.springframework.cloud.function.context.FunctionRegistry;
|
||||
import org.springframework.cloud.function.context.FunctionType;
|
||||
@@ -58,11 +60,14 @@ import org.springframework.util.MimeType;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
/**
|
||||
* Implementation of {@link FunctionRegistry} and {@link FunctionCatalog} which is aware of the
|
||||
* underlying {@link BeanFactory} to access available functions. Functions that are registered via
|
||||
* {@link #register(FunctionRegistration)} operation are stored/cached locally.
|
||||
*
|
||||
* @author Oleg Zhurakousky
|
||||
*
|
||||
* @since 3.0
|
||||
*/
|
||||
public class LazyFunctionRegistry
|
||||
public class BeanFactoryAwareFunctionRegistry
|
||||
implements FunctionRegistry, FunctionInspector, ApplicationContextAware, SmartInitializingSingleton {
|
||||
|
||||
private static Log logger = LogFactory.getLog(AbstractSpringFunctionAdapterInitializer.class);
|
||||
@@ -77,7 +82,7 @@ public class LazyFunctionRegistry
|
||||
|
||||
private final CompositeMessageConverter messageConverter;
|
||||
|
||||
public LazyFunctionRegistry(ConversionService conversionService,
|
||||
public BeanFactoryAwareFunctionRegistry(ConversionService conversionService,
|
||||
@Nullable CompositeMessageConverter messageConverter) {
|
||||
this.conversionService = conversionService;
|
||||
this.messageConverter = messageConverter;
|
||||
@@ -53,9 +53,9 @@ import org.springframework.cloud.function.context.FunctionRegistration;
|
||||
import org.springframework.cloud.function.context.FunctionRegistry;
|
||||
import org.springframework.cloud.function.context.FunctionType;
|
||||
import org.springframework.cloud.function.context.catalog.AbstractComposableFunctionRegistry;
|
||||
import org.springframework.cloud.function.context.catalog.BeanFactoryAwareFunctionRegistry;
|
||||
import org.springframework.cloud.function.context.catalog.FunctionInspector;
|
||||
import org.springframework.cloud.function.context.catalog.FunctionUnregistrationEvent;
|
||||
import org.springframework.cloud.function.context.catalog.LazyFunctionRegistry;
|
||||
import org.springframework.cloud.function.json.GsonMapper;
|
||||
import org.springframework.cloud.function.json.JacksonMapper;
|
||||
import org.springframework.context.ApplicationEventPublisher;
|
||||
@@ -107,7 +107,7 @@ public class ContextFunctionCatalogAutoConfiguration {
|
||||
messageConverters.add(new StringMessageConverter());
|
||||
messageConverter = new CompositeMessageConverter(messageConverters);
|
||||
}
|
||||
return new LazyFunctionRegistry(conversionService, messageConverter);
|
||||
return new BeanFactoryAwareFunctionRegistry(conversionService, messageConverter);
|
||||
}
|
||||
|
||||
@Bean(RoutingFunction.FUNCTION_NAME)
|
||||
|
||||
@@ -55,7 +55,7 @@ import org.springframework.util.MimeTypeUtils;
|
||||
* @author Oleg Zhurakousky
|
||||
*
|
||||
*/
|
||||
public class LazyFunctionRegistryMultiInOutTests {
|
||||
public class BeanFactoryAwareFunctionRegistryMultiInOutTests {
|
||||
|
||||
private FunctionCatalog configureCatalog() {
|
||||
ApplicationContext context = new SpringApplicationBuilder(SampleFunctionConfiguration.class)
|
||||
@@ -30,9 +30,6 @@ import reactor.util.function.Tuple2;
|
||||
import reactor.util.function.Tuple3;
|
||||
import reactor.util.function.Tuples;
|
||||
|
||||
|
||||
|
||||
|
||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||
import org.springframework.boot.builder.SpringApplicationBuilder;
|
||||
import org.springframework.cloud.function.context.FunctionCatalog;
|
||||
@@ -48,7 +45,7 @@ import static org.junit.Assert.fail;
|
||||
* @author Oleg Zhurakousky
|
||||
*
|
||||
*/
|
||||
public class LazyFunctionRegistryTests {
|
||||
public class BeanFactoryAwareFunctionRegistryTests {
|
||||
|
||||
private FunctionCatalog configureCatalog() {
|
||||
ApplicationContext context = new SpringApplicationBuilder(SampleFunctionConfiguration.class)
|
||||
@@ -70,17 +67,6 @@ public class LazyFunctionRegistryTests {
|
||||
assertThat(result.get(1)).isEqualTo("UPPERCASEFLUX2");
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testSerializationDeserialization() {
|
||||
FunctionCatalog catalog = this.configureCatalog();
|
||||
|
||||
//Function<byte[], byte[]> asIs = catalog.lookup("uppercase", new );
|
||||
|
||||
//ParameterizedType
|
||||
//
|
||||
}
|
||||
|
||||
/*
|
||||
* When invoking imperative function as reactive the rules are
|
||||
* - the input wrapper must match the output wrapper (e.g., <Flux, Flux> or <Mono, Mono>)
|
||||
@@ -167,13 +153,10 @@ public class LazyFunctionRegistryTests {
|
||||
@Test
|
||||
public void testCompositionSupplierAndFunction() {
|
||||
FunctionCatalog catalog = this.configureCatalog();
|
||||
// Supplier<String> numberSupplier = catalog.lookup("numberword|uppercase");
|
||||
// String result = numberSupplier.get();
|
||||
// System.out.println(result);
|
||||
|
||||
Supplier<Flux<String>> numberSupplierFlux = catalog.lookup("numberword|uppercaseFlux");
|
||||
String result = numberSupplierFlux.get().blockFirst();
|
||||
System.out.println(result);
|
||||
assertThat(result).isEqualTo("ONE");
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -203,6 +186,7 @@ public class LazyFunctionRegistryTests {
|
||||
FunctionCatalog catalog = this.configureCatalog();
|
||||
Function<Mono<Void>, Mono<Void>> monoToMono = catalog.lookup("monoVoidToMonoVoid");
|
||||
Void block = monoToMono.apply(Mono.empty()).block();
|
||||
assertThat(block).isNull();
|
||||
}
|
||||
|
||||
// MULTI INPUT/OUTPUT
|
||||
@@ -216,7 +200,10 @@ public class LazyFunctionRegistryTests {
|
||||
Flux<Integer> intStream = Flux.just(1, 2, 3);
|
||||
|
||||
List<String> result = multiInputFunction.apply(Tuples.of(stringStream, intStream)).collectList().block();
|
||||
System.out.println(result);
|
||||
assertThat(result.size()).isEqualTo(3);
|
||||
assertThat(result.get(0)).isEqualTo("one-1");
|
||||
assertThat(result.get(1)).isEqualTo("two-2");
|
||||
assertThat(result.get(2)).isEqualTo("three-3");
|
||||
}
|
||||
|
||||
|
||||
@@ -229,7 +216,10 @@ public class LazyFunctionRegistryTests {
|
||||
Flux<String> intStream = Flux.just("1", "2", "3");
|
||||
|
||||
List<String> result = multiInputFunction.apply(Tuples.of(stringStream, intStream)).collectList().block();
|
||||
System.out.println(result);
|
||||
assertThat(result.size()).isEqualTo(3);
|
||||
assertThat(result.get(0)).isEqualTo("ONE-1");
|
||||
assertThat(result.get(1)).isEqualTo("TWO-2");
|
||||
assertThat(result.get(2)).isEqualTo("THREE-3");
|
||||
}
|
||||
|
||||
|
||||
@@ -238,9 +228,10 @@ public class LazyFunctionRegistryTests {
|
||||
FunctionCatalog catalog = this.configureCatalog();
|
||||
Function<Flux<Person>, Tuple3<Flux<Person>, Flux<String>, Flux<Integer>>> multiOutputFunction =
|
||||
catalog.lookup("multiOutputAsTuple");
|
||||
Flux<Person> personStream = Flux.just(new Person("Uncle Sam", 1), new Person("Uncle Pierre", 2));
|
||||
Flux<Person> personStream = Flux.just(new Person("Uncle Sam", 1), new Person("Oncle Pierre", 2));
|
||||
|
||||
Tuple3<Flux<Person>, Flux<String>, Flux<Integer>> result = multiOutputFunction.apply(personStream);
|
||||
|
||||
result.getT1().subscribe(v -> System.out.println("=> 1: " + v));
|
||||
result.getT2().subscribe(v -> System.out.println("=> 2: " + v));
|
||||
result.getT3().subscribe(v -> System.out.println("=> 3: " + v));
|
||||
@@ -417,22 +408,4 @@ public class LazyFunctionRegistryTests {
|
||||
return "Person: " + name + "/" + id;
|
||||
}
|
||||
}
|
||||
|
||||
// System.out.println("==\n");
|
||||
//
|
||||
// Consumer<String> consumer = catalog.lookup("consumer");
|
||||
// consumer.accept("consumer");
|
||||
// System.out.println("==\n");
|
||||
//
|
||||
// Consumer<Flux<String>> fluxConsumer = catalog.lookup("consumer");
|
||||
// fluxConsumer.accept(Flux.just("fluxConsumer"));
|
||||
// System.out.println("==\n");
|
||||
//
|
||||
// Function<String, Void> consumerAsFunction = catalog.lookup("consumer");
|
||||
// System.out.println(consumerAsFunction.apply("consumerAsFunction"));
|
||||
// System.out.println("==\n");
|
||||
//
|
||||
// Function<Flux<String>, Mono<Void>> consumerAsFluxFunction = catalog.lookup("consumer");
|
||||
// consumerAsFluxFunction.apply(Flux.just("consumerAsFluxFunction", "consumerAsFluxFunction2")).subscribe();
|
||||
// System.out.println("==\n");
|
||||
}
|
||||
Reference in New Issue
Block a user