diff --git a/services-api/src/main/java/io/scalecube/services/DeprecatedServiceProviderAdapter.java b/services-api/src/main/java/io/scalecube/services/DeprecatedServiceProviderAdapter.java new file mode 100644 index 000000000..e971d94b2 --- /dev/null +++ b/services-api/src/main/java/io/scalecube/services/DeprecatedServiceProviderAdapter.java @@ -0,0 +1,30 @@ +package io.scalecube.services; + +import static java.util.Objects.requireNonNull; + +import java.util.Collection; +import java.util.function.Supplier; +import java.util.stream.Collectors; +import reactor.core.publisher.Mono; + +@Deprecated +public class DeprecatedServiceProviderAdapter implements ServicesProvider { + + private final Collection delegates; + + public DeprecatedServiceProviderAdapter(Collection delegates) { + this.delegates = requireNonNull(delegates); + } + + @Override + public Mono> provide(Microservices microservices) { + Supplier>> beanSupplier = + () -> + Mono.just( + delegates.stream() + .map(delegate -> delegate.provide(microservices.call())) + .flatMap(Collection::stream) + .collect(Collectors.toList())); + return Mono.defer(beanSupplier); + } +} diff --git a/services-api/src/main/java/io/scalecube/services/Microservices.java b/services-api/src/main/java/io/scalecube/services/Microservices.java new file mode 100644 index 000000000..3de736a49 --- /dev/null +++ b/services-api/src/main/java/io/scalecube/services/Microservices.java @@ -0,0 +1,13 @@ +package io.scalecube.services; + +import io.scalecube.net.Address; +import io.scalecube.services.discovery.api.ServiceDiscovery; + +public interface Microservices { + + ServiceCall call(); + + Address serviceAddress(); + + ServiceDiscovery discovery(); +} diff --git a/services-api/src/main/java/io/scalecube/services/Reflect.java b/services-api/src/main/java/io/scalecube/services/Reflect.java index 7171ff7c3..f52a7fe16 100644 --- a/services-api/src/main/java/io/scalecube/services/Reflect.java +++ b/services-api/src/main/java/io/scalecube/services/Reflect.java @@ -25,6 +25,8 @@ import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; +import java.util.stream.Stream; + import org.reactivestreams.Publisher; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @@ -249,14 +251,13 @@ public static Map serviceMethods(Class serviceInterface) { /** * Util function to get service interfaces collections from service instance. * - * @param serviceObject with extends service interface with @Service annotation. + * @param serviceType type with extends service interface with @Service annotation. * @return service interface class. */ - public static Collection> serviceInterfaces(Object serviceObject) { - Class[] interfaces = serviceObject.getClass().getInterfaces(); + public static Stream> serviceInterfaces(Class serviceType) { + Class[] interfaces = serviceType.getInterfaces(); return Arrays.stream(interfaces) - .filter(interfaceClass -> interfaceClass.isAnnotationPresent(Service.class)) - .collect(Collectors.toList()); + .filter(interfaceClass -> interfaceClass.isAnnotationPresent(Service.class)); } public static String methodName(Method method) { diff --git a/services-api/src/main/java/io/scalecube/services/ServiceInfo.java b/services-api/src/main/java/io/scalecube/services/ServiceInfo.java index f99630563..4037e19ae 100644 --- a/services-api/src/main/java/io/scalecube/services/ServiceInfo.java +++ b/services-api/src/main/java/io/scalecube/services/ServiceInfo.java @@ -7,18 +7,21 @@ import java.util.HashMap; import java.util.Map; import java.util.StringJoiner; +import java.util.function.Supplier; @SuppressWarnings("rawtypes") public class ServiceInfo { - private final Object serviceInstance; + private final Class serviceType; + private final Supplier serviceInstanceSupplier; private final Map tags; private final ServiceProviderErrorMapper errorMapper; private final ServiceMessageDataDecoder dataDecoder; private final Authenticator authenticator; private ServiceInfo(Builder builder) { - this.serviceInstance = builder.serviceInstance; + this.serviceType = builder.serviceType; + this.serviceInstanceSupplier = builder.serviceInstanceSupplier; this.tags = Collections.unmodifiableMap(new HashMap<>(builder.tags)); this.errorMapper = builder.errorMapper; this.dataDecoder = builder.dataDecoder; @@ -30,11 +33,11 @@ public static Builder from(ServiceInfo serviceInfo) { } public static Builder fromServiceInstance(Object serviceInstance) { - return new Builder(serviceInstance); + return new Builder(serviceInstance.getClass(), () -> serviceInstance); } - public Object serviceInstance() { - return serviceInstance; + public Supplier serviceInstanceSupplier() { + return serviceInstanceSupplier; } public Map tags() { @@ -53,10 +56,14 @@ public Authenticator authenticator() { return authenticator; } + public Class type() { + return serviceType; + } + @Override public String toString() { return new StringJoiner(", ", ServiceInfo.class.getSimpleName() + "[", "]") - .add("serviceInstance=" + serviceInstance) + .add("serviceInstance=" + serviceInstanceSupplier) .add("tags=" + tags) .add("errorMapper=" + errorMapper) .add("dataDecoder=" + dataDecoder) @@ -67,22 +74,25 @@ public String toString() { @SuppressWarnings("rawtypes") public static class Builder { - private Object serviceInstance; + private final Class serviceType; + private final Supplier serviceInstanceSupplier; private Map tags = new HashMap<>(); private ServiceProviderErrorMapper errorMapper; private ServiceMessageDataDecoder dataDecoder; private Authenticator authenticator; private Builder(ServiceInfo serviceInfo) { - this.serviceInstance = serviceInfo.serviceInstance; + this.serviceInstanceSupplier = serviceInfo.serviceInstanceSupplier; + this.serviceType = serviceInfo.serviceType; this.tags.putAll(new HashMap<>(serviceInfo.tags)); this.errorMapper = serviceInfo.errorMapper; this.dataDecoder = serviceInfo.dataDecoder; this.authenticator = serviceInfo.authenticator; } - private Builder(Object serviceInstance) { - this.serviceInstance = serviceInstance; + private Builder(Class serviceType, Supplier serviceInstanceSupplier) { + this.serviceType = serviceType; + this.serviceInstanceSupplier = serviceInstanceSupplier; } public Builder tag(String key, String value) { diff --git a/services-api/src/main/java/io/scalecube/services/ServiceProvider.java b/services-api/src/main/java/io/scalecube/services/ServiceProvider.java index 3c55e23f4..92faa6f1e 100644 --- a/services-api/src/main/java/io/scalecube/services/ServiceProvider.java +++ b/services-api/src/main/java/io/scalecube/services/ServiceProvider.java @@ -2,7 +2,13 @@ import java.util.Collection; +/** + * Provide service instances. + * + * @deprecated use {@link ServicesProvider} + */ @FunctionalInterface +@Deprecated public interface ServiceProvider { Collection provide(ServiceCall call); diff --git a/services-api/src/main/java/io/scalecube/services/ServiceScanner.java b/services-api/src/main/java/io/scalecube/services/ServiceScanner.java index 460deb58f..208e5dda6 100644 --- a/services-api/src/main/java/io/scalecube/services/ServiceScanner.java +++ b/services-api/src/main/java/io/scalecube/services/ServiceScanner.java @@ -22,8 +22,7 @@ private ServiceScanner() { * @return list of {@code ServiceRegistration}-s */ public static List scanServiceInfo(ServiceInfo serviceInfo) { - return Arrays.stream(serviceInfo.serviceInstance().getClass().getInterfaces()) - .filter(serviceInterface -> serviceInterface.isAnnotationPresent(Service.class)) + return Reflect.serviceInterfaces(serviceInfo.type()) .map( serviceInterface -> { Map serviceInfoTags = serviceInfo.tags(); diff --git a/services-api/src/main/java/io/scalecube/services/ServicesProvider.java b/services-api/src/main/java/io/scalecube/services/ServicesProvider.java new file mode 100644 index 000000000..12fa242cc --- /dev/null +++ b/services-api/src/main/java/io/scalecube/services/ServicesProvider.java @@ -0,0 +1,10 @@ +package io.scalecube.services; + +import java.util.Collection; +import reactor.core.publisher.Mono; + +@FunctionalInterface +public interface ServicesProvider { + + Mono> provide(Microservices microservices); +} diff --git a/services-api/src/main/java/io/scalecube/services/methods/ServiceMethodInvoker.java b/services-api/src/main/java/io/scalecube/services/methods/ServiceMethodInvoker.java index cea6bd210..7184548f7 100644 --- a/services-api/src/main/java/io/scalecube/services/methods/ServiceMethodInvoker.java +++ b/services-api/src/main/java/io/scalecube/services/methods/ServiceMethodInvoker.java @@ -11,7 +11,10 @@ import java.lang.reflect.Method; import java.util.Optional; import java.util.StringJoiner; +import java.util.concurrent.atomic.AtomicReference; import java.util.function.Consumer; +import java.util.function.Supplier; + import org.reactivestreams.Publisher; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @@ -25,11 +28,12 @@ public final class ServiceMethodInvoker { private static final Object NO_PRINCIPAL = new Object(); private final Method method; - private final Object service; + private final Supplier service; private final MethodInfo methodInfo; private final ServiceProviderErrorMapper errorMapper; private final ServiceMessageDataDecoder dataDecoder; private final Authenticator authenticator; + private final Class serviceType; /** * Constructs a service method invoker out of real service object instance and method info. @@ -41,15 +45,26 @@ public final class ServiceMethodInvoker { * @param dataDecoder data decoder */ @SuppressWarnings({"unchecked", "rawtypes"}) - public ServiceMethodInvoker( + public ServiceMethodInvoker( + Class serviceType, Method method, - Object service, + Supplier service, MethodInfo methodInfo, ServiceProviderErrorMapper errorMapper, ServiceMessageDataDecoder dataDecoder, Authenticator authenticator) { + this.serviceType = serviceType; this.method = method; - this.service = service; + this.service = + new Supplier() { + private final AtomicReference instance = new AtomicReference<>(); + + @Override + public Object get() { + instance.compareAndSet(null, service.get()); + return instance.get(); + } + }; this.methodInfo = methodInfo; this.errorMapper = errorMapper; this.dataDecoder = dataDecoder; @@ -114,10 +129,10 @@ private Publisher invoke(Object request, Object principal) { Throwable throwable = null; try { if (methodInfo.parameterCount() == 0) { - result = (Publisher) method.invoke(service); + result = (Publisher) method.invoke(service.get()); } else { Object[] arguments = prepareArguments(request, principal); - result = (Publisher) method.invoke(service, arguments); + result = (Publisher) method.invoke(service.get(), arguments); } if (result == null) { result = Mono.empty(); @@ -199,8 +214,13 @@ private void applyRequestReleaser(ServiceMessage request, Consumer reque } } + public Class serviceType() { + return serviceType; + } + + @Deprecated public Object service() { - return service; + return service.get(); } public MethodInfo methodInfo() { @@ -211,7 +231,7 @@ public MethodInfo methodInfo() { public String toString() { return new StringJoiner(", ", ServiceMethodInvoker.class.getSimpleName() + "[", "]") .add("method=" + method) - .add("service=" + service) + .add("service=" + serviceType) .add("methodInfo=" + methodInfo) .add("errorMapper=" + errorMapper) .add("dataDecoder=" + dataDecoder) diff --git a/services-api/src/test/java/io/scalecube/services/methods/ServiceMethodInvokerTest.java b/services-api/src/test/java/io/scalecube/services/methods/ServiceMethodInvokerTest.java index c30e41bec..0d2c8d731 100644 --- a/services-api/src/test/java/io/scalecube/services/methods/ServiceMethodInvokerTest.java +++ b/services-api/src/test/java/io/scalecube/services/methods/ServiceMethodInvokerTest.java @@ -48,10 +48,12 @@ void testInvokeOneWhenReturnNull() throws Exception { false, AUTH); + // FIXME: 19.02.2020 serviceMethodInvoker = new ServiceMethodInvoker( + stubService.getClass(), method, - stubService, + () -> stubService, methodInfo, DefaultErrorMapper.INSTANCE, dataDecoder, @@ -81,11 +83,12 @@ void testInvokeManyWhenReturnNull() throws Exception { Void.TYPE, false, AUTH); - + // FIXME: 19.02.2020 serviceMethodInvoker = new ServiceMethodInvoker( + stubService.getClass(), method, - stubService, + () -> stubService, methodInfo, DefaultErrorMapper.INSTANCE, dataDecoder, @@ -116,10 +119,12 @@ void testInvokeBidirectionalWhenReturnNull() throws Exception { false, AUTH); + // FIXME: 19.02.2020 serviceMethodInvoker = new ServiceMethodInvoker( + stubService.getClass(), method, - stubService, + () -> stubService, methodInfo, DefaultErrorMapper.INSTANCE, dataDecoder, @@ -152,10 +157,12 @@ void testInvokeOneWhenThrowException() throws Exception { false, AUTH); + // FIXME: 19.02.2020 serviceMethodInvoker = new ServiceMethodInvoker( + stubService.getClass(), method, - stubService, + () -> stubService, methodInfo, DefaultErrorMapper.INSTANCE, dataDecoder, @@ -189,10 +196,12 @@ void testInvokeManyWhenThrowException() throws Exception { false, AUTH); + // FIXME: 19.02.2020 serviceMethodInvoker = new ServiceMethodInvoker( + stubService.getClass(), method, - stubService, + () -> stubService, methodInfo, DefaultErrorMapper.INSTANCE, dataDecoder, @@ -226,10 +235,12 @@ void testInvokeBidirectionalWhenThrowException() throws Exception { false, AUTH); + // FIXME: 19.02.2020 serviceMethodInvoker = new ServiceMethodInvoker( + stubService.getClass(), method, - stubService, + () -> stubService, methodInfo, DefaultErrorMapper.INSTANCE, dataDecoder, diff --git a/services-benchmarks/src/main/java/io/scalecube/services/benchmarks/transport/BenchmarkServiceState.java b/services-benchmarks/src/main/java/io/scalecube/services/benchmarks/transport/BenchmarkServiceState.java index 29722131a..8996f8cd5 100644 --- a/services-benchmarks/src/main/java/io/scalecube/services/benchmarks/transport/BenchmarkServiceState.java +++ b/services-benchmarks/src/main/java/io/scalecube/services/benchmarks/transport/BenchmarkServiceState.java @@ -3,7 +3,7 @@ import io.scalecube.benchmarks.BenchmarkSettings; import io.scalecube.benchmarks.BenchmarkState; import io.scalecube.net.Address; -import io.scalecube.services.Microservices; +import io.scalecube.services.ScaleCube; import io.scalecube.services.ServiceCall; import io.scalecube.services.discovery.ScalecubeServiceDiscovery; import io.scalecube.services.transport.rsocket.RSocketServiceTransport; @@ -20,8 +20,8 @@ public class BenchmarkServiceState extends BenchmarkState private final Object[] services; - private Microservices seed; - private Microservices node; + private ScaleCube seed; + private ScaleCube node; public BenchmarkServiceState(BenchmarkSettings settings, Object... services) { super(settings); @@ -31,7 +31,7 @@ public BenchmarkServiceState(BenchmarkSettings settings, Object... services) { @Override public void beforeAll() { seed = - Microservices.builder() + ScaleCube.builder() .metrics(registry()) .discovery(ScalecubeServiceDiscovery::new) .transport(RSocketServiceTransport::new) @@ -40,7 +40,7 @@ public void beforeAll() { final Address seedAddress = seed.discovery().address(); node = - Microservices.builder() + ScaleCube.builder() .metrics(registry()) .discovery( endpoint -> @@ -66,7 +66,7 @@ public void afterAll() { } } - public Microservices seed() { + public ScaleCube seed() { return seed; } diff --git a/services-examples-parent/services-examples-runner/src/main/java/io/scalecube/services/examples/ExamplesRunner.java b/services-examples-parent/services-examples-runner/src/main/java/io/scalecube/services/examples/ExamplesRunner.java index 631e505fe..a5d7c3da9 100644 --- a/services-examples-parent/services-examples-runner/src/main/java/io/scalecube/services/examples/ExamplesRunner.java +++ b/services-examples-parent/services-examples-runner/src/main/java/io/scalecube/services/examples/ExamplesRunner.java @@ -7,7 +7,7 @@ import io.scalecube.config.source.SystemEnvironmentConfigSource; import io.scalecube.config.source.SystemPropertiesConfigSource; import io.scalecube.net.Address; -import io.scalecube.services.Microservices; +import io.scalecube.services.ScaleCube; import io.scalecube.services.ServiceEndpoint; import io.scalecube.services.discovery.ScalecubeServiceDiscovery; import io.scalecube.services.discovery.api.ServiceDiscovery; @@ -51,7 +51,7 @@ public static void main(String[] args) { .orElse(Runtime.getRuntime().availableProcessors()); LOGGER.info("Number of worker threads: " + numOfThreads); - Microservices.builder() + ScaleCube.builder() .discovery(endpoint -> serviceDiscovery(endpoint, config)) .transport( () -> diff --git a/services-examples-parent/services-examples/src/main/java/io/scalecube/services/examples/exceptions/ExceptionMapperExample.java b/services-examples-parent/services-examples/src/main/java/io/scalecube/services/examples/exceptions/ExceptionMapperExample.java index bafd07b87..6487fc40d 100644 --- a/services-examples-parent/services-examples/src/main/java/io/scalecube/services/examples/exceptions/ExceptionMapperExample.java +++ b/services-examples-parent/services-examples/src/main/java/io/scalecube/services/examples/exceptions/ExceptionMapperExample.java @@ -1,7 +1,7 @@ package io.scalecube.services.examples.exceptions; import io.scalecube.net.Address; -import io.scalecube.services.Microservices; +import io.scalecube.services.ScaleCube; import io.scalecube.services.ServiceInfo; import io.scalecube.services.discovery.ScalecubeServiceDiscovery; import io.scalecube.services.transport.rsocket.RSocketServiceTransport; @@ -16,8 +16,8 @@ public class ExceptionMapperExample { * @throws InterruptedException exception. */ public static void main(String[] args) throws InterruptedException { - Microservices ms1 = - Microservices.builder() + ScaleCube ms1 = + ScaleCube.builder() .discovery(ScalecubeServiceDiscovery::new) .transport(RSocketServiceTransport::new) .defaultErrorMapper(new ServiceAProviderErrorMapper()) // default mapper for whole node @@ -31,8 +31,8 @@ public static void main(String[] args) throws InterruptedException { final Address address1 = ms1.discovery().address(); - Microservices ms2 = - Microservices.builder() + ScaleCube ms2 = + ScaleCube.builder() .discovery( endpoint -> new ScalecubeServiceDiscovery(endpoint) diff --git a/services-examples-parent/services-examples/src/main/java/io/scalecube/services/examples/helloworld/Example1.java b/services-examples-parent/services-examples/src/main/java/io/scalecube/services/examples/helloworld/Example1.java index 1ca40f956..403c05922 100644 --- a/services-examples-parent/services-examples/src/main/java/io/scalecube/services/examples/helloworld/Example1.java +++ b/services-examples-parent/services-examples/src/main/java/io/scalecube/services/examples/helloworld/Example1.java @@ -1,7 +1,7 @@ package io.scalecube.services.examples.helloworld; import io.scalecube.net.Address; -import io.scalecube.services.Microservices; +import io.scalecube.services.ScaleCube; import io.scalecube.services.discovery.ScalecubeServiceDiscovery; import io.scalecube.services.examples.helloworld.service.GreetingServiceImpl; import io.scalecube.services.examples.helloworld.service.api.GreetingsService; @@ -24,8 +24,8 @@ public class Example1 { */ public static void main(String[] args) { // ScaleCube Node node with no members - Microservices seed = - Microservices.builder() + ScaleCube seed = + ScaleCube.builder() .discovery(ScalecubeServiceDiscovery::new) .transport(RSocketServiceTransport::new) .startAwait(); @@ -33,8 +33,8 @@ public static void main(String[] args) { final Address seedAddress = seed.discovery().address(); // Construct a ScaleCube node which joins the cluster hosting the Greeting Service - Microservices ms = - Microservices.builder() + ScaleCube ms = + ScaleCube.builder() .discovery( endpoint -> new ScalecubeServiceDiscovery(endpoint) diff --git a/services-examples-parent/services-examples/src/main/java/io/scalecube/services/examples/helloworld/Example2.java b/services-examples-parent/services-examples/src/main/java/io/scalecube/services/examples/helloworld/Example2.java index fc20274db..b4944fc2f 100644 --- a/services-examples-parent/services-examples/src/main/java/io/scalecube/services/examples/helloworld/Example2.java +++ b/services-examples-parent/services-examples/src/main/java/io/scalecube/services/examples/helloworld/Example2.java @@ -1,7 +1,7 @@ package io.scalecube.services.examples.helloworld; import io.scalecube.net.Address; -import io.scalecube.services.Microservices; +import io.scalecube.services.ScaleCube; import io.scalecube.services.ServiceCall; import io.scalecube.services.api.ServiceMessage; import io.scalecube.services.discovery.ScalecubeServiceDiscovery; @@ -32,8 +32,8 @@ public class Example2 { */ public static void main(String[] args) { // ScaleCube Node node with no members - Microservices seed = - Microservices.builder() + ScaleCube seed = + ScaleCube.builder() .discovery(ScalecubeServiceDiscovery::new) .transport(RSocketServiceTransport::new) .startAwait(); @@ -41,8 +41,8 @@ public static void main(String[] args) { // Construct a ScaleCube node which joins the cluster hosting the Greeting Service final Address seedAddress = seed.discovery().address(); - Microservices ms = - Microservices.builder() + ScaleCube ms = + ScaleCube.builder() .discovery( endpoint -> new ScalecubeServiceDiscovery(endpoint) diff --git a/services-examples-parent/services-examples/src/main/java/io/scalecube/services/examples/helloworld/Example3.java b/services-examples-parent/services-examples/src/main/java/io/scalecube/services/examples/helloworld/Example3.java index 8891ffa1e..cacffaf7a 100644 --- a/services-examples-parent/services-examples/src/main/java/io/scalecube/services/examples/helloworld/Example3.java +++ b/services-examples-parent/services-examples/src/main/java/io/scalecube/services/examples/helloworld/Example3.java @@ -1,7 +1,7 @@ package io.scalecube.services.examples.helloworld; import io.scalecube.net.Address; -import io.scalecube.services.Microservices; +import io.scalecube.services.ScaleCube; import io.scalecube.services.discovery.ScalecubeServiceDiscovery; import io.scalecube.services.examples.helloworld.service.BidiGreetingImpl; import io.scalecube.services.examples.helloworld.service.api.BidiGreetingService; @@ -25,8 +25,8 @@ public class Example3 { */ public static void main(String[] args) { // ScaleCube Node node with no members - Microservices seed = - Microservices.builder() + ScaleCube seed = + ScaleCube.builder() .discovery(ScalecubeServiceDiscovery::new) .transport(RSocketServiceTransport::new) .startAwait(); @@ -34,8 +34,8 @@ public static void main(String[] args) { final Address seedAddress = seed.discovery().address(); // Construct a ScaleCube node which joins the cluster hosting the Greeting Service - Microservices ms = - Microservices.builder() + ScaleCube ms = + ScaleCube.builder() .discovery( endpoint -> new ScalecubeServiceDiscovery(endpoint) diff --git a/services-examples-parent/services-examples/src/main/java/io/scalecube/services/examples/orderbook/Example1.java b/services-examples-parent/services-examples/src/main/java/io/scalecube/services/examples/orderbook/Example1.java index b2bd1b737..a57a3d39f 100644 --- a/services-examples-parent/services-examples/src/main/java/io/scalecube/services/examples/orderbook/Example1.java +++ b/services-examples-parent/services-examples/src/main/java/io/scalecube/services/examples/orderbook/Example1.java @@ -1,7 +1,7 @@ package io.scalecube.services.examples.orderbook; import io.scalecube.net.Address; -import io.scalecube.services.Microservices; +import io.scalecube.services.ScaleCube; import io.scalecube.services.discovery.ScalecubeServiceDiscovery; import io.scalecube.services.examples.orderbook.service.DefaultMarketDataService; import io.scalecube.services.examples.orderbook.service.OrderBookSnapshoot; @@ -32,16 +32,16 @@ public class Example1 { */ public static void main(String[] args) throws InterruptedException { - Microservices gateway = - Microservices.builder() + ScaleCube gateway = + ScaleCube.builder() .discovery(ScalecubeServiceDiscovery::new) .transport(RSocketServiceTransport::new) .startAwait(); final Address gatewayAddress = gateway.discovery().address(); - Microservices ms = - Microservices.builder() + ScaleCube ms = + ScaleCube.builder() .discovery( endpoint -> new ScalecubeServiceDiscovery(endpoint) diff --git a/services-examples-parent/services-examples/src/main/java/io/scalecube/services/examples/services/Example1.java b/services-examples-parent/services-examples/src/main/java/io/scalecube/services/examples/services/Example1.java index b6b039151..c0d3f2480 100644 --- a/services-examples-parent/services-examples/src/main/java/io/scalecube/services/examples/services/Example1.java +++ b/services-examples-parent/services-examples/src/main/java/io/scalecube/services/examples/services/Example1.java @@ -1,7 +1,7 @@ package io.scalecube.services.examples.services; import io.scalecube.net.Address; -import io.scalecube.services.Microservices; +import io.scalecube.services.ScaleCube; import io.scalecube.services.discovery.ScalecubeServiceDiscovery; import io.scalecube.services.transport.rsocket.RSocketServiceTransport; import reactor.core.publisher.Mono; @@ -15,16 +15,16 @@ public class Example1 { * @param args - program arguments */ public static void main(String[] args) { - Microservices gateway = - Microservices.builder() + ScaleCube gateway = + ScaleCube.builder() .discovery(ScalecubeServiceDiscovery::new) .transport(RSocketServiceTransport::new) .startAwait(); final Address gatewayAddress = gateway.discovery().address(); - Microservices service2Node = - Microservices.builder() + ScaleCube service2Node = + ScaleCube.builder() .discovery( endpoint -> new ScalecubeServiceDiscovery(endpoint) @@ -33,8 +33,8 @@ public static void main(String[] args) { .services(new Service2Impl()) .startAwait(); - Microservices service1Node = - Microservices.builder() + ScaleCube service1Node = + ScaleCube.builder() .discovery( endpoint -> new ScalecubeServiceDiscovery(endpoint) diff --git a/services-examples-parent/services-examples/src/main/java/io/scalecube/services/examples/services/Example2.java b/services-examples-parent/services-examples/src/main/java/io/scalecube/services/examples/services/Example2.java index a5c528d20..a9769c862 100644 --- a/services-examples-parent/services-examples/src/main/java/io/scalecube/services/examples/services/Example2.java +++ b/services-examples-parent/services-examples/src/main/java/io/scalecube/services/examples/services/Example2.java @@ -1,7 +1,7 @@ package io.scalecube.services.examples.services; import io.scalecube.net.Address; -import io.scalecube.services.Microservices; +import io.scalecube.services.ScaleCube; import io.scalecube.services.discovery.ScalecubeServiceDiscovery; import io.scalecube.services.transport.rsocket.RSocketServiceTransport; import reactor.core.publisher.Mono; @@ -15,16 +15,16 @@ public class Example2 { * @param args - program arguments */ public static void main(String[] args) { - Microservices gateway = - Microservices.builder() + ScaleCube gateway = + ScaleCube.builder() .discovery(ScalecubeServiceDiscovery::new) .transport(RSocketServiceTransport::new) .startAwait(); final Address gatewayAddress = gateway.discovery().address(); - Microservices service2Node = - Microservices.builder() + ScaleCube service2Node = + ScaleCube.builder() .discovery( endpoint -> new ScalecubeServiceDiscovery(endpoint) @@ -33,8 +33,8 @@ public static void main(String[] args) { .services(new Service2Impl()) .startAwait(); - Microservices service1Node = - Microservices.builder() + ScaleCube service1Node = + ScaleCube.builder() .discovery( endpoint -> new ScalecubeServiceDiscovery(endpoint) diff --git a/services/src/main/java/io/scalecube/services/Injector.java b/services/src/main/java/io/scalecube/services/Injector.java index c7433dbfe..892167bd7 100644 --- a/services/src/main/java/io/scalecube/services/Injector.java +++ b/services/src/main/java/io/scalecube/services/Injector.java @@ -26,7 +26,7 @@ private Injector() { * @param services services set * @return microservices instance */ - public static Microservices inject(Microservices microservices, Collection services) { + public static ScaleCube inject(ScaleCube microservices, Collection services) { services.forEach( service -> Arrays.stream(service.getClass().getDeclaredFields()) @@ -35,8 +35,8 @@ public static Microservices inject(Microservices microservices, Collection void processMethodWithAnnotation( - Microservices microservices, Object targetInstance, Class annotation) { + ScaleCube microservices, Object targetInstance, Class annotation) { Method[] declaredMethods = targetInstance.getClass().getDeclaredMethods(); Arrays.stream(declaredMethods) .filter(method -> method.isAnnotationPresent(annotation)) @@ -80,7 +80,7 @@ private static void processMethodWithAnnotation( Arrays.stream(targetMethod.getParameters()) .map( mapper -> { - if (mapper.getType().equals(Microservices.class)) { + if (mapper.getType().equals(ScaleCube.class)) { return microservices; } else if (Reflect.isService(mapper.getType())) { return microservices.call().api(mapper.getType()); diff --git a/services/src/main/java/io/scalecube/services/Microservices.java b/services/src/main/java/io/scalecube/services/ScaleCube.java similarity index 92% rename from services/src/main/java/io/scalecube/services/Microservices.java rename to services/src/main/java/io/scalecube/services/ScaleCube.java index 2db2514e4..cff383c68 100644 --- a/services/src/main/java/io/scalecube/services/Microservices.java +++ b/services/src/main/java/io/scalecube/services/ScaleCube.java @@ -23,6 +23,7 @@ import io.scalecube.services.transport.api.ServerTransport; import io.scalecube.services.transport.api.ServiceMessageDataDecoder; import io.scalecube.services.transport.api.ServiceTransport; + import java.lang.management.ManagementFactory; import java.util.ArrayList; import java.util.Arrays; @@ -113,9 +114,9 @@ * * } */ -public final class Microservices { +public final class ScaleCube implements Microservices { - public static final Logger LOGGER = LoggerFactory.getLogger(Microservices.class); + public static final Logger LOGGER = LoggerFactory.getLogger(ScaleCube.class); private final String id = generateId(); private final Metrics metrics; @@ -132,7 +133,7 @@ public final class Microservices { private final MonoProcessor shutdown = MonoProcessor.create(); private final MonoProcessor onShutdown = MonoProcessor.create(); - private Microservices(Builder builder) { + private ScaleCube(Builder builder) { this.metrics = builder.metrics; this.tags = new HashMap<>(builder.tags); this.serviceProviders = new ArrayList<>(builder.serviceProviders); @@ -170,7 +171,7 @@ public String toString() { return "Microservices@" + id; } - private Mono start() { + private Mono start() { LOGGER.info("[{}][start] Starting", id); // Create bootstrap scheduler @@ -192,23 +193,27 @@ private Mono start() { .tags(tags); // invoke service providers and register services - List serviceInstances = - serviceProviders.stream() - .flatMap(serviceProvider -> serviceProvider.provide(call).stream()) - .peek(this::registerInMethodRegistry) - .peek( + ServicesProvider servicesProvider = + new DeprecatedServiceProviderAdapter(serviceProviders); + Mono> serviceInstanceSuppliers = + servicesProvider + .provide(this) + .flatMapIterable(i -> i) + .doOnNext(this::registerInMethodRegistry) + .doOnNext( serviceInfo -> serviceEndpointBuilder.appendServiceRegistrations( ServiceScanner.scanServiceInfo(serviceInfo))) - .map(ServiceInfo::serviceInstance) - .collect(Collectors.toList()); + .collectList(); - return discoveryBootstrap - .createInstance(serviceEndpointBuilder.build()) + return serviceInstanceSuppliers + .publishOn(scheduler) + // FIXME: 19.02.2020 if use then(Mono), incorrect order of operations + .flatMap( + ignore -> discoveryBootstrap.createInstance(serviceEndpointBuilder.build())) .publishOn(scheduler) .then(startGateway(call)) .publishOn(scheduler) - .then(Mono.fromCallable(() -> Injector.inject(this, serviceInstances))) .then(Mono.fromCallable(() -> JmxMonitorMBean.start(this))) .then(discoveryBootstrap.startListen(this)) .publishOn(scheduler) @@ -217,7 +222,7 @@ private Mono start() { .onErrorResume( ex -> { // return original error then shutdown - return Mono.whenDelayError(Mono.error(ex), shutdown()).cast(Microservices.class); + return Mono.whenDelayError(Mono.error(ex), shutdown()).cast(ScaleCube.class); }) .doOnSuccess(m -> listenJvmShutdown()) .doOnSuccess(m -> LOGGER.info("[{}][start] Started", id)) @@ -241,6 +246,7 @@ public Metrics metrics() { return this.metrics; } + @Override public Address serviceAddress() { return transportBootstrap.address; } @@ -250,6 +256,7 @@ public Address serviceAddress() { * * @return new {@code ServiceCall} instance. */ + @Override public ServiceCall call() { return new ServiceCall() .transport(transportBootstrap.clientTransport) @@ -266,6 +273,7 @@ public Gateway gateway(String id) { return gatewayBootstrap.gateway(id); } + @Override public ServiceDiscovery discovery() { return discoveryBootstrap.discovery; } @@ -310,7 +318,7 @@ private Mono doShutdown() { private Mono processBeforeDestroy() { return Mono.whenDelayError( methodRegistry.listServices().stream() - .map(ServiceInfo::serviceInstance) + .map(ServiceInfo::serviceInstanceSupplier) .map(s -> Mono.fromRunnable(() -> Injector.processBeforeDestroy(this, s))) .collect(Collectors.toList())); } @@ -331,11 +339,11 @@ public static final class Builder { Optional.ofNullable(ServiceMessageDataDecoder.INSTANCE) .orElse((message, dataType) -> message); - public Mono start() { - return Mono.defer(() -> new Microservices(this).start()); + public Mono start() { + return Mono.defer(() -> new ScaleCube(this).start()); } - public Microservices startAwait() { + public ScaleCube startAwait() { return start().block(); } @@ -442,7 +450,7 @@ private Mono createInstance(ServiceEndpoint serviceEndpoint) { : Mono.defer(() -> Mono.just(discovery = factory.apply(serviceEndpoint))); } - private Mono startListen(Microservices microservices) { + private Mono startListen(ScaleCube microservices) { return Mono.defer( () -> { if (discovery == null) { @@ -475,7 +483,7 @@ private Mono startListen(Microservices microservices) { }); } - private void onDiscoveryEvent(Microservices microservices, ServiceDiscoveryEvent event) { + private void onDiscoveryEvent(ScaleCube microservices, ServiceDiscoveryEvent event) { if (event.isEndpointAdded()) { microservices.serviceRegistry.registerService(event.serviceEndpoint()); } @@ -505,7 +513,7 @@ private GatewayBootstrap addFactory(Function factory) { return this; } - private Mono start(Microservices microservices, GatewayOptions options) { + private Mono start(ScaleCube microservices, GatewayOptions options) { return Flux.fromIterable(factories) .flatMap( factory -> { @@ -574,7 +582,7 @@ public ServiceTransportBootstrap(Supplier supplier) { this.supplier = supplier; } - private Mono start(Microservices microservices) { + private Mono start(ScaleCube microservices) { if (supplier == NULL_SUPPLIER || (serviceTransport = supplier.get()) == null) { LOGGER.info("[{}] ServiceTransport not set", microservices.id()); return Mono.just(NULL_INSTANCE); @@ -639,9 +647,9 @@ public interface MonitorMBean { private static class JmxMonitorMBean implements MonitorMBean { - private final Microservices microservices; + private final ScaleCube microservices; - private static JmxMonitorMBean start(Microservices instance) throws Exception { + private static JmxMonitorMBean start(ScaleCube instance) throws Exception { MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer(); JmxMonitorMBean jmxMBean = new JmxMonitorMBean(instance); ObjectName objectName = new ObjectName("io.scalecube.services:name=" + instance.toString()); @@ -650,7 +658,7 @@ private static JmxMonitorMBean start(Microservices instance) throws Exception { return jmxMBean; } - private JmxMonitorMBean(Microservices microservices) { + private JmxMonitorMBean(ScaleCube microservices) { this.microservices = microservices; } @@ -685,7 +693,7 @@ private static String asString(ServiceMethodInvoker invoker) { .add("methodInfo=" + asString(invoker.methodInfo())) .add( "serviceMethod=" - + invoker.service().getClass().getCanonicalName() + + invoker.serviceType().getCanonicalName() + "." + invoker.methodInfo().methodName() + "(" @@ -703,7 +711,7 @@ private static String asString(MethodInfo methodInfo) { private static String asString(ServiceInfo serviceInfo) { return new StringJoiner(", ", ServiceMethodInvoker.class.getSimpleName() + "[", "]") - .add("serviceInstance=" + serviceInfo.serviceInstance()) + .add("serviceInstance=" + serviceInfo.serviceInstanceSupplier()) .add("tags=" + serviceInfo.tags()) .add("authenticator=" + serviceInfo.authenticator()) .toString(); diff --git a/services/src/main/java/io/scalecube/services/methods/ServiceMethodRegistryImpl.java b/services/src/main/java/io/scalecube/services/methods/ServiceMethodRegistryImpl.java index 01850d025..61fa9595e 100644 --- a/services/src/main/java/io/scalecube/services/methods/ServiceMethodRegistryImpl.java +++ b/services/src/main/java/io/scalecube/services/methods/ServiceMethodRegistryImpl.java @@ -19,7 +19,7 @@ public final class ServiceMethodRegistryImpl implements ServiceMethodRegistry { public void registerService(ServiceInfo serviceInfo) { serviceInfos.add(serviceInfo); - Reflect.serviceInterfaces(serviceInfo.serviceInstance()) + Reflect.serviceInterfaces(serviceInfo.type()) .forEach( serviceInterface -> Reflect.serviceMethods(serviceInterface) @@ -51,8 +51,9 @@ public void registerService(ServiceInfo serviceInfo) { ServiceMethodInvoker invoker = new ServiceMethodInvoker( + serviceInfo.type(), method, - serviceInfo.serviceInstance(), + serviceInfo.serviceInstanceSupplier(), methodInfo, serviceInfo.errorMapper(), serviceInfo.dataDecoder(), diff --git a/services/src/test/java/io/scalecube/services/ErrorFlowTest.java b/services/src/test/java/io/scalecube/services/ErrorFlowTest.java index bd6f56ef0..20ac3bfef 100644 --- a/services/src/test/java/io/scalecube/services/ErrorFlowTest.java +++ b/services/src/test/java/io/scalecube/services/ErrorFlowTest.java @@ -23,13 +23,13 @@ public class ErrorFlowTest extends BaseTest { private static AtomicInteger port = new AtomicInteger(4000); - private static Microservices provider; - private static Microservices consumer; + private static ScaleCube provider; + private static ScaleCube consumer; @BeforeAll public static void initNodes() { provider = - Microservices.builder() + ScaleCube.builder() .discovery( endpoint -> new ScalecubeServiceDiscovery(endpoint) @@ -41,7 +41,7 @@ public static void initNodes() { final Address seedAddress = provider.discovery().address(); consumer = - Microservices.builder() + ScaleCube.builder() .discovery( endpoint -> new ScalecubeServiceDiscovery(endpoint) diff --git a/services/src/test/java/io/scalecube/services/ServiceAuthLocalTest.java b/services/src/test/java/io/scalecube/services/ServiceAuthLocalTest.java index 40605d399..e07b4928f 100644 --- a/services/src/test/java/io/scalecube/services/ServiceAuthLocalTest.java +++ b/services/src/test/java/io/scalecube/services/ServiceAuthLocalTest.java @@ -45,7 +45,7 @@ final class ServiceAuthLocalTest extends BaseTest { return Mono.error(new UnauthorizedException("Authentication failed")); }; - private Microservices service; + private ScaleCube service; @BeforeAll static void beforeAll() { @@ -63,7 +63,7 @@ void afterEach() { @DisplayName("Successful authentication") void successfulAuthentication() { service = - Microservices.builder() + ScaleCube.builder() .authenticator(authenticator) .services(new SecuredServiceImpl()) .startAwait(); @@ -87,7 +87,7 @@ void successfulAuthentication() { @Test @DisplayName("Authentication failed if authenticator not provided") void failedAuthenticationWhenAuthenticatorNotProvided() { - service = Microservices.builder().services(new SecuredServiceImpl()).startAwait(); + service = ScaleCube.builder().services(new SecuredServiceImpl()).startAwait(); SecuredService securedService = service.call().credentials(CREDENTIALS).api(SecuredService.class); @@ -115,7 +115,7 @@ void failedAuthenticationWhenAuthenticatorNotProvided() { @DisplayName("Authentication failed with invalid or empty credentials") void failedAuthenticationWithInvalidOrEmptyCredentials() { service = - Microservices.builder() + ScaleCube.builder() .authenticator(authenticator) .services(new SecuredServiceImpl()) .startAwait(); @@ -145,7 +145,7 @@ void failedAuthenticationWithInvalidOrEmptyCredentials() { @DisplayName("Successful authentication of partially secured service") void successfulAuthenticationOnPartiallySecuredService() { service = - Microservices.builder() + ScaleCube.builder() .authenticator(authenticator) .services(new PartiallySecuredServiceImpl()) .startAwait(); @@ -161,7 +161,7 @@ void successfulAuthenticationOnPartiallySecuredService() { @Test @DisplayName("Successful call public method of partially secured service without authentication") void successfulCallOfPublicMethodWithoutAuthentication() { - service = Microservices.builder().services(new PartiallySecuredServiceImpl()).startAwait(); + service = ScaleCube.builder().services(new PartiallySecuredServiceImpl()).startAwait(); PartiallySecuredService proxy = service.call().api(PartiallySecuredService.class); diff --git a/services/src/test/java/io/scalecube/services/ServiceAuthRemoteTest.java b/services/src/test/java/io/scalecube/services/ServiceAuthRemoteTest.java index 78fb41d7f..fb8145152 100644 --- a/services/src/test/java/io/scalecube/services/ServiceAuthRemoteTest.java +++ b/services/src/test/java/io/scalecube/services/ServiceAuthRemoteTest.java @@ -48,21 +48,21 @@ final class ServiceAuthRemoteTest { return Mono.error(new UnauthorizedException("Authentication failed")); }; - private static Microservices caller; - private static Microservices service; + private static ScaleCube caller; + private static ScaleCube service; @BeforeAll static void beforeAll() { StepVerifier.setDefaultTimeout(TIMEOUT); caller = - Microservices.builder() + ScaleCube.builder() .discovery(ScalecubeServiceDiscovery::new) .transport(RSocketServiceTransport::new) .startAwait(); service = - Microservices.builder() + ScaleCube.builder() .discovery(ServiceAuthRemoteTest::serviceDiscovery) .transport(RSocketServiceTransport::new) .authenticator(authenticator) @@ -103,8 +103,8 @@ void successfulAuthentication() { @Test @DisplayName("Authentication failed if authenticator not provided") void failedAuthenticationWhenAuthenticatorNotProvided() { - Microservices service = - Microservices.builder() + ScaleCube service = + ScaleCube.builder() .discovery(ServiceAuthRemoteTest::serviceDiscovery) .transport(RSocketServiceTransport::new) .services(new SecuredServiceImpl()) @@ -161,8 +161,8 @@ void failedAuthenticationWithInvalidOrEmptyCredentials() { @Test @DisplayName("Successful authentication of partially secured service") void successfulAuthenticationOnPartiallySecuredService() { - Microservices service = - Microservices.builder() + ScaleCube service = + ScaleCube.builder() .discovery(ServiceAuthRemoteTest::serviceDiscovery) .transport(RSocketServiceTransport::new) .authenticator(authenticator) @@ -182,8 +182,8 @@ void successfulAuthenticationOnPartiallySecuredService() { @Test @DisplayName("Successful call public method of partially secured service without authentication") void successfulCallOfPublicMethodWithoutAuthentication() { - Microservices service = - Microservices.builder() + ScaleCube service = + ScaleCube.builder() .discovery(ServiceAuthRemoteTest::serviceDiscovery) .transport(RSocketServiceTransport::new) .services(new PartiallySecuredServiceImpl()) diff --git a/services/src/test/java/io/scalecube/services/ServiceCallLocalTest.java b/services/src/test/java/io/scalecube/services/ServiceCallLocalTest.java index e39bfda6a..0ecc79c57 100644 --- a/services/src/test/java/io/scalecube/services/ServiceCallLocalTest.java +++ b/services/src/test/java/io/scalecube/services/ServiceCallLocalTest.java @@ -37,7 +37,7 @@ public class ServiceCallLocalTest extends BaseTest { public static final int TIMEOUT = 3; private Duration timeout = Duration.ofSeconds(TIMEOUT); - private static Microservices provider; + private static ScaleCube provider; @BeforeAll public static void setup() { @@ -63,8 +63,8 @@ public void test_local_async_no_params() { GREETING_NO_PARAMS_REQUEST.qualifier(), message.qualifier(), "Didn't get desired response"); } - private static Microservices serviceProvider() { - return Microservices.builder() + private static ScaleCube serviceProvider() { + return ScaleCube.builder() .discovery(ScalecubeServiceDiscovery::new) .transport(RSocketServiceTransport::new) .services(new GreetingServiceImpl()) diff --git a/services/src/test/java/io/scalecube/services/ServiceCallRemoteTest.java b/services/src/test/java/io/scalecube/services/ServiceCallRemoteTest.java index 4143c90db..a1cae8148 100644 --- a/services/src/test/java/io/scalecube/services/ServiceCallRemoteTest.java +++ b/services/src/test/java/io/scalecube/services/ServiceCallRemoteTest.java @@ -40,8 +40,8 @@ public class ServiceCallRemoteTest extends BaseTest { public static final int TIMEOUT = 3; private Duration timeout = Duration.ofSeconds(TIMEOUT); - private static Microservices gateway; - private static Microservices provider; + private static ScaleCube gateway; + private static ScaleCube provider; @BeforeAll public static void setup() { @@ -64,8 +64,8 @@ public static void tearDown() { } } - private static Microservices serviceProvider(Object service) { - return Microservices.builder() + private static ScaleCube serviceProvider(Object service) { + return ScaleCube.builder() .discovery( endpoint -> new ScalecubeServiceDiscovery(endpoint) @@ -226,7 +226,7 @@ public void test_service_address_lookup_occur_only_after_subscription() { // Add service to cluster AFTER creating a call object. // (prove address lookup occur only after subscription) - Microservices quotesService = serviceProvider(new SimpleQuoteService()); + ScaleCube quotesService = serviceProvider(new SimpleQuoteService()); StepVerifier.create(quotes.take(1)).expectNextCount(1).expectComplete().verify(timeout); @@ -255,8 +255,8 @@ public void test_many_stream_block_first() { } } - private static Microservices gateway() { - return Microservices.builder() + private static ScaleCube gateway() { + return ScaleCube.builder() .discovery(ScalecubeServiceDiscovery::new) .transport(RSocketServiceTransport::new) .startAwait(); diff --git a/services/src/test/java/io/scalecube/services/ServiceLifecycleAnnotationsTest.java b/services/src/test/java/io/scalecube/services/ServiceLifecycleAnnotationsTest.java index 0255e28d9..4155bf109 100644 --- a/services/src/test/java/io/scalecube/services/ServiceLifecycleAnnotationsTest.java +++ b/services/src/test/java/io/scalecube/services/ServiceLifecycleAnnotationsTest.java @@ -18,8 +18,8 @@ void testAfterConstructThenBeforeDestroy() throws Exception { final CountDownLatch afterConstruct = new CountDownLatch(1); final CountDownLatch beforeDestroy = new CountDownLatch(1); - Microservices microservices = - Microservices.builder() + ScaleCube microservices = + ScaleCube.builder() .services( ServiceInfo.fromServiceInstance( new TestService() { @@ -55,7 +55,7 @@ void testAfterConstructFailsThenBeforeDestroy() throws Exception { Assertions.assertThrows( Exception.class, () -> - Microservices.builder() + ScaleCube.builder() .services( ServiceInfo.fromServiceInstance( new TestService() { diff --git a/services/src/test/java/io/scalecube/services/ServiceLocalTest.java b/services/src/test/java/io/scalecube/services/ServiceLocalTest.java index 16c62d3f2..7a212acc2 100644 --- a/services/src/test/java/io/scalecube/services/ServiceLocalTest.java +++ b/services/src/test/java/io/scalecube/services/ServiceLocalTest.java @@ -23,11 +23,11 @@ public class ServiceLocalTest extends BaseTest { private static final Duration timeout = Duration.ofSeconds(3); - private Microservices microservices; + private ScaleCube microservices; @BeforeEach public void setUp() { - microservices = Microservices.builder().services(new GreetingServiceImpl()).startAwait(); + microservices = ScaleCube.builder().services(new GreetingServiceImpl()).startAwait(); } @AfterEach @@ -304,7 +304,7 @@ public void test_local_bidi_greeting_expect_GreetingResponse() { .verify(Duration.ofSeconds(3)); } - private GreetingService createProxy(Microservices gateway) { + private GreetingService createProxy(ScaleCube gateway) { return gateway.call().api(GreetingService.class); // create proxy for GreetingService API } } diff --git a/services/src/test/java/io/scalecube/services/ServiceRegistryTest.java b/services/src/test/java/io/scalecube/services/ServiceRegistryTest.java index a064b556f..9c4106c2d 100644 --- a/services/src/test/java/io/scalecube/services/ServiceRegistryTest.java +++ b/services/src/test/java/io/scalecube/services/ServiceRegistryTest.java @@ -47,8 +47,8 @@ public void test_added_removed_registration_events(MetadataCodec metadataCodec) List events = new ArrayList<>(); - Microservices seed = - Microservices.builder() + ScaleCube seed = + ScaleCube.builder() .discovery(defServiceDiscovery(metadataCodec)) .transport(RSocketServiceTransport::new) .startAwait(); @@ -57,15 +57,15 @@ public void test_added_removed_registration_events(MetadataCodec metadataCodec) Address seedAddress = seed.discovery().address(); - Microservices ms1 = - Microservices.builder() + ScaleCube ms1 = + ScaleCube.builder() .discovery(defServiceDiscovery(seedAddress, metadataCodec)) .transport(RSocketServiceTransport::new) .services(new GreetingServiceImpl()) .startAwait(); - Microservices ms2 = - Microservices.builder() + ScaleCube ms2 = + ScaleCube.builder() .discovery(defServiceDiscovery(seedAddress, metadataCodec)) .transport(RSocketServiceTransport::new) .services(new GreetingServiceImpl()) @@ -89,10 +89,10 @@ public void test_added_removed_registration_events(MetadataCodec metadataCodec) public void test_listen_to_discovery_events(MetadataCodec metadataCodec) { ReplayProcessor processor = ReplayProcessor.create(); - List cluster = new CopyOnWriteArrayList<>(); + List cluster = new CopyOnWriteArrayList<>(); - Microservices seed = - Microservices.builder() + ScaleCube seed = + ScaleCube.builder() .discovery(defServiceDiscovery(metadataCodec)) .transport(RSocketServiceTransport::new) .services(new AnnotationServiceImpl()) @@ -106,8 +106,8 @@ public void test_listen_to_discovery_events(MetadataCodec metadataCodec) { StepVerifier.create(processor) .then( () -> { - Microservices ms1 = - Microservices.builder() + ScaleCube ms1 = + ScaleCube.builder() .discovery(defServiceDiscovery(seedAddress, metadataCodec)) .transport(RSocketServiceTransport::new) .services(new GreetingServiceImpl()) @@ -117,8 +117,8 @@ public void test_listen_to_discovery_events(MetadataCodec metadataCodec) { .assertNext(event -> assertEquals(ENDPOINT_ADDED, event.type())) .then( () -> { - Microservices ms2 = - Microservices.builder() + ScaleCube ms2 = + ScaleCube.builder() .discovery(defServiceDiscovery(seedAddress, metadataCodec)) .transport(RSocketServiceTransport::new) .services(new GreetingServiceImpl()) @@ -147,7 +147,7 @@ public void test_listen_to_discovery_events(MetadataCodec metadataCodec) { .thenCancel() .verify(TIMEOUT); - Mono.when(cluster.stream().map(Microservices::shutdown).toArray(Mono[]::new)) + Mono.when(cluster.stream().map(ScaleCube::shutdown).toArray(Mono[]::new)) .then(Mono.delay(TIMEOUT)) .block(); } @@ -157,10 +157,10 @@ public void test_listen_to_discovery_events(MetadataCodec metadataCodec) { public void test_delayed_listen_to_discovery_events(MetadataCodec metadataCodec) { ReplayProcessor processor = ReplayProcessor.create(); - List cluster = new CopyOnWriteArrayList<>(); + List cluster = new CopyOnWriteArrayList<>(); - Microservices seed = - Microservices.builder() + ScaleCube seed = + ScaleCube.builder() .discovery(defServiceDiscovery(metadataCodec)) .transport(RSocketServiceTransport::new) .services(new GreetingServiceImpl()) @@ -174,8 +174,8 @@ public void test_delayed_listen_to_discovery_events(MetadataCodec metadataCodec) StepVerifier.create(processor) .then( () -> { - Microservices ms1 = - Microservices.builder() + ScaleCube ms1 = + ScaleCube.builder() .discovery(defServiceDiscovery(seedAddress, metadataCodec)) .transport(RSocketServiceTransport::new) .services(new GreetingServiceImpl(), new AnnotationServiceImpl()) @@ -185,8 +185,8 @@ public void test_delayed_listen_to_discovery_events(MetadataCodec metadataCodec) .assertNext(event -> assertEquals(ENDPOINT_ADDED, event.type())) .then( () -> { - Microservices ms2 = - Microservices.builder() + ScaleCube ms2 = + ScaleCube.builder() .discovery(defServiceDiscovery(seedAddress, metadataCodec)) .transport(RSocketServiceTransport::new) .services(new GreetingServiceImpl()) @@ -203,7 +203,7 @@ public void test_delayed_listen_to_discovery_events(MetadataCodec metadataCodec) .thenCancel() .verify(TIMEOUT); - Mono.when(cluster.stream().map(Microservices::shutdown).toArray(Mono[]::new)) + Mono.when(cluster.stream().map(ScaleCube::shutdown).toArray(Mono[]::new)) .then(Mono.delay(TIMEOUT)) .block(); } diff --git a/services/src/test/java/io/scalecube/services/ServiceRemoteTest.java b/services/src/test/java/io/scalecube/services/ServiceRemoteTest.java index 03ddfb7ca..a90c4c4f7 100644 --- a/services/src/test/java/io/scalecube/services/ServiceRemoteTest.java +++ b/services/src/test/java/io/scalecube/services/ServiceRemoteTest.java @@ -36,8 +36,8 @@ public class ServiceRemoteTest extends BaseTest { private static final Duration TIMEOUT = Duration.ofSeconds(10); public static final Duration TIMEOUT2 = Duration.ofSeconds(6); - private static Microservices gateway; - private static Microservices provider; + private static ScaleCube gateway; + private static ScaleCube provider; @BeforeAll public static void setup() { @@ -61,15 +61,15 @@ public static void tearDown() { } } - private static Microservices gateway() { - return Microservices.builder() + private static ScaleCube gateway() { + return ScaleCube.builder() .discovery(ScalecubeServiceDiscovery::new) .transport(RSocketServiceTransport::new) .startAwait(); } - private static Microservices serviceProvider() { - return Microservices.builder() + private static ScaleCube serviceProvider() { + return ScaleCube.builder() .discovery(ServiceRemoteTest::serviceDiscovery) .transport(RSocketServiceTransport::new) .services(new GreetingServiceImpl()) @@ -264,8 +264,8 @@ public void test_remote_serviceA_calls_serviceB_using_setter() { // Create microservices instance cluster. // noinspection unused - Microservices provider = - Microservices.builder() + ScaleCube provider = + ScaleCube.builder() .discovery(ServiceRemoteTest::serviceDiscovery) .transport(RSocketServiceTransport::new) .services(new CoarseGrainedServiceImpl()) // add service a and b @@ -287,8 +287,8 @@ public void test_remote_serviceA_calls_serviceB() { // Create microservices instance cluster. // noinspection unused - Microservices provider = - Microservices.builder() + ScaleCube provider = + ScaleCube.builder() .discovery(ServiceRemoteTest::serviceDiscovery) .transport(RSocketServiceTransport::new) .services(another) @@ -307,8 +307,8 @@ public void test_remote_serviceA_calls_serviceB_with_timeout() { CoarseGrainedServiceImpl another = new CoarseGrainedServiceImpl(); // Create microservices instance cluster. - Microservices ms = - Microservices.builder() + ScaleCube ms = + ScaleCube.builder() .discovery(ServiceRemoteTest::serviceDiscovery) .transport(RSocketServiceTransport::new) .services(another) // add service a and b @@ -332,8 +332,8 @@ public void test_remote_serviceA_calls_serviceB_with_dispatcher() { CoarseGrainedServiceImpl another = new CoarseGrainedServiceImpl(); // Create microservices instance cluster. - Microservices provider = - Microservices.builder() + ScaleCube provider = + ScaleCube.builder() .discovery(ServiceRemoteTest::serviceDiscovery) .transport(RSocketServiceTransport::new) .services(another) // add service a and b @@ -416,8 +416,8 @@ public void test_services_contribute_to_cluster_metadata() { Map tags = new HashMap<>(); tags.put("HOSTNAME", "host1"); - Microservices ms = - Microservices.builder() + ScaleCube ms = + ScaleCube.builder() .discovery(ScalecubeServiceDiscovery::new) .transport(RSocketServiceTransport::new) .tags(tags) diff --git a/services/src/test/java/io/scalecube/services/StreamingServiceTest.java b/services/src/test/java/io/scalecube/services/StreamingServiceTest.java index db4c56a8b..941080a7e 100644 --- a/services/src/test/java/io/scalecube/services/StreamingServiceTest.java +++ b/services/src/test/java/io/scalecube/services/StreamingServiceTest.java @@ -21,20 +21,20 @@ public class StreamingServiceTest extends BaseTest { - private static Microservices gateway; - private static Microservices node; + private static ScaleCube gateway; + private static ScaleCube node; @BeforeAll public static void setup() { gateway = - Microservices.builder() + ScaleCube.builder() .discovery(ScalecubeServiceDiscovery::new) .transport(RSocketServiceTransport::new) .defaultDataDecoder(ServiceMessageCodec::decodeData) .startAwait(); node = - Microservices.builder() + ScaleCube.builder() .discovery( endpoint -> new ScalecubeServiceDiscovery(endpoint) diff --git a/services/src/test/java/io/scalecube/services/routings/RoutersTest.java b/services/src/test/java/io/scalecube/services/routings/RoutersTest.java index 8e588e62c..5e714a54b 100644 --- a/services/src/test/java/io/scalecube/services/routings/RoutersTest.java +++ b/services/src/test/java/io/scalecube/services/routings/RoutersTest.java @@ -11,7 +11,7 @@ import io.scalecube.net.Address; import io.scalecube.services.BaseTest; -import io.scalecube.services.Microservices; +import io.scalecube.services.ScaleCube; import io.scalecube.services.Reflect; import io.scalecube.services.ServiceCall; import io.scalecube.services.ServiceInfo; @@ -47,16 +47,16 @@ public class RoutersTest extends BaseTest { public static final int TIMEOUT = 10; private Duration timeout = Duration.ofSeconds(TIMEOUT); - private static Microservices gateway; + private static ScaleCube gateway; private static Address gatewayAddress; - private static Microservices provider1; - private static Microservices provider2; - private static Microservices provider3; + private static ScaleCube provider1; + private static ScaleCube provider2; + private static ScaleCube provider3; @BeforeAll public static void setup() { gateway = - Microservices.builder() // + ScaleCube.builder() // .discovery(ScalecubeServiceDiscovery::new) .transport(RSocketServiceTransport::new) .startAwait(); @@ -65,7 +65,7 @@ public static void setup() { // Create microservices instance cluster. provider1 = - Microservices.builder() + ScaleCube.builder() .discovery( endpoint -> new ScalecubeServiceDiscovery(endpoint) @@ -83,7 +83,7 @@ public static void setup() { // Create microservices instance cluster. provider2 = - Microservices.builder() + ScaleCube.builder() .discovery( endpoint -> new ScalecubeServiceDiscovery(endpoint) @@ -101,7 +101,7 @@ public static void setup() { TagService tagService = input -> input.map(String::toUpperCase); provider3 = - Microservices.builder() + ScaleCube.builder() .discovery( endpoint -> new ScalecubeServiceDiscovery(endpoint) diff --git a/services/src/test/java/io/scalecube/services/routings/ServiceTagsExample.java b/services/src/test/java/io/scalecube/services/routings/ServiceTagsExample.java index 1151880c8..eb92945ad 100644 --- a/services/src/test/java/io/scalecube/services/routings/ServiceTagsExample.java +++ b/services/src/test/java/io/scalecube/services/routings/ServiceTagsExample.java @@ -1,7 +1,7 @@ package io.scalecube.services.routings; import io.scalecube.net.Address; -import io.scalecube.services.Microservices; +import io.scalecube.services.ScaleCube; import io.scalecube.services.ServiceInfo; import io.scalecube.services.discovery.ScalecubeServiceDiscovery; import io.scalecube.services.routings.sut.CanaryService; @@ -20,16 +20,16 @@ public class ServiceTagsExample { * @param args arguments */ public static void main(String[] args) { - Microservices gateway = - Microservices.builder() + ScaleCube gateway = + ScaleCube.builder() .discovery(ScalecubeServiceDiscovery::new) .transport(RSocketServiceTransport::new) .startAwait(); Address seedAddress = gateway.discovery().address(); - Microservices services1 = - Microservices.builder() + ScaleCube services1 = + ScaleCube.builder() .discovery( endpoint -> new ScalecubeServiceDiscovery(endpoint) @@ -41,8 +41,8 @@ public static void main(String[] args) { .build()) .startAwait(); - Microservices services2 = - Microservices.builder() + ScaleCube services2 = + ScaleCube.builder() .discovery( endpoint -> new ScalecubeServiceDiscovery(endpoint) diff --git a/services/src/test/java/io/scalecube/services/sut/AnnotationServiceImpl.java b/services/src/test/java/io/scalecube/services/sut/AnnotationServiceImpl.java index 3beee526f..5186d4539 100644 --- a/services/src/test/java/io/scalecube/services/sut/AnnotationServiceImpl.java +++ b/services/src/test/java/io/scalecube/services/sut/AnnotationServiceImpl.java @@ -1,6 +1,6 @@ package io.scalecube.services.sut; -import io.scalecube.services.Microservices; +import io.scalecube.services.ScaleCube; import io.scalecube.services.annotations.AfterConstruct; import io.scalecube.services.discovery.api.ServiceDiscoveryEvent; import reactor.core.publisher.Flux; @@ -11,7 +11,7 @@ public class AnnotationServiceImpl implements AnnotationService { private ReplayProcessor serviceDiscoveryEvents; @AfterConstruct - void init(Microservices microservices) { + void init(ScaleCube microservices) { this.serviceDiscoveryEvents = ReplayProcessor.create(); microservices.discovery().listenDiscovery().subscribe(serviceDiscoveryEvents); } diff --git a/services/src/test/java/io/scalecube/services/sut/CoarseGrainedServiceImpl.java b/services/src/test/java/io/scalecube/services/sut/CoarseGrainedServiceImpl.java index be297b306..d697695e6 100644 --- a/services/src/test/java/io/scalecube/services/sut/CoarseGrainedServiceImpl.java +++ b/services/src/test/java/io/scalecube/services/sut/CoarseGrainedServiceImpl.java @@ -1,6 +1,6 @@ package io.scalecube.services.sut; -import io.scalecube.services.Microservices; +import io.scalecube.services.ScaleCube; import io.scalecube.services.annotations.Inject; import io.scalecube.services.api.ServiceMessage; import java.time.Duration; @@ -12,7 +12,7 @@ public class CoarseGrainedServiceImpl implements CoarseGrainedService { @Inject private GreetingService greetingService; - @Inject private Microservices microservices; + @Inject private ScaleCube microservices; @Override public Mono callGreeting(String name) { diff --git a/services/src/test/java/io/scalecube/services/sut/GreetingServiceImpl.java b/services/src/test/java/io/scalecube/services/sut/GreetingServiceImpl.java index 01c87f7fc..76fe63e8c 100644 --- a/services/src/test/java/io/scalecube/services/sut/GreetingServiceImpl.java +++ b/services/src/test/java/io/scalecube/services/sut/GreetingServiceImpl.java @@ -1,6 +1,6 @@ package io.scalecube.services.sut; -import io.scalecube.services.Microservices; +import io.scalecube.services.ScaleCube; import io.scalecube.services.annotations.Inject; import io.scalecube.services.api.ServiceMessage; import io.scalecube.services.exceptions.UnauthorizedException; @@ -12,7 +12,8 @@ public final class GreetingServiceImpl implements GreetingService { - @Inject Microservices ms; + @Inject + ScaleCube ms; private int instanceId; diff --git a/services/src/test/java/io/scalecube/services/transport/rsocket/RSocketNettyColocatedEventLoopGroupTest.java b/services/src/test/java/io/scalecube/services/transport/rsocket/RSocketNettyColocatedEventLoopGroupTest.java index d333a1b93..ba64df20c 100644 --- a/services/src/test/java/io/scalecube/services/transport/rsocket/RSocketNettyColocatedEventLoopGroupTest.java +++ b/services/src/test/java/io/scalecube/services/transport/rsocket/RSocketNettyColocatedEventLoopGroupTest.java @@ -3,7 +3,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import io.scalecube.services.BaseTest; -import io.scalecube.services.Microservices; +import io.scalecube.services.ScaleCube; import io.scalecube.services.ServiceCall; import io.scalecube.services.annotations.Inject; import io.scalecube.services.annotations.Service; @@ -19,20 +19,20 @@ public class RSocketNettyColocatedEventLoopGroupTest extends BaseTest { - private Microservices ping; - private Microservices pong; - private Microservices gateway; + private ScaleCube ping; + private ScaleCube pong; + private ScaleCube gateway; @BeforeEach public void setUp() { this.gateway = - Microservices.builder() + ScaleCube.builder() .discovery(ScalecubeServiceDiscovery::new) .transport(RSocketServiceTransport::new) .startAwait(); - Microservices facade = - Microservices.builder() + ScaleCube facade = + ScaleCube.builder() .discovery( endpoint -> new ScalecubeServiceDiscovery(endpoint) @@ -42,7 +42,7 @@ public void setUp() { .startAwait(); this.ping = - Microservices.builder() + ScaleCube.builder() .discovery( endpoint -> new ScalecubeServiceDiscovery(endpoint) @@ -52,7 +52,7 @@ public void setUp() { .startAwait(); this.pong = - Microservices.builder() + ScaleCube.builder() .discovery( endpoint -> new ScalecubeServiceDiscovery(endpoint) @@ -80,9 +80,9 @@ public void testColocatedEventLoopGroup() { public void tearDown() { try { Mono.whenDelayError( - Optional.ofNullable(gateway).map(Microservices::shutdown).orElse(Mono.empty()), - Optional.ofNullable(ping).map(Microservices::shutdown).orElse(Mono.empty()), - Optional.ofNullable(pong).map(Microservices::shutdown).orElse(Mono.empty())) + Optional.ofNullable(gateway).map(ScaleCube::shutdown).orElse(Mono.empty()), + Optional.ofNullable(ping).map(ScaleCube::shutdown).orElse(Mono.empty()), + Optional.ofNullable(pong).map(ScaleCube::shutdown).orElse(Mono.empty())) .block(); } catch (Throwable ignore) { // no-op diff --git a/services/src/test/java/io/scalecube/services/transport/rsocket/RSocketServiceTransportTest.java b/services/src/test/java/io/scalecube/services/transport/rsocket/RSocketServiceTransportTest.java index ac042a89d..415e62151 100644 --- a/services/src/test/java/io/scalecube/services/transport/rsocket/RSocketServiceTransportTest.java +++ b/services/src/test/java/io/scalecube/services/transport/rsocket/RSocketServiceTransportTest.java @@ -4,7 +4,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import io.scalecube.services.BaseTest; -import io.scalecube.services.Microservices; +import io.scalecube.services.ScaleCube; import io.scalecube.services.ServiceCall; import io.scalecube.services.api.ServiceMessage; import io.scalecube.services.discovery.ScalecubeServiceDiscovery; @@ -32,19 +32,19 @@ public class RSocketServiceTransportTest extends BaseTest { private static final ServiceMessage ONLY_ONE_AND_THEN_NEVER = ServiceMessage.builder().qualifier(QuoteService.NAME, "onlyOneAndThenNever").build(); - private Microservices gateway; - private Microservices serviceNode; + private ScaleCube gateway; + private ScaleCube serviceNode; @BeforeEach public void setUp() { gateway = - Microservices.builder() + ScaleCube.builder() .discovery(ScalecubeServiceDiscovery::new) .transport(RSocketServiceTransport::new) .startAwait(); serviceNode = - Microservices.builder() + ScaleCube.builder() .discovery( serviceEndpoint -> new ScalecubeServiceDiscovery(serviceEndpoint) @@ -58,8 +58,8 @@ public void setUp() { public void cleanUp() { try { Mono.whenDelayError( - Optional.ofNullable(gateway).map(Microservices::shutdown).orElse(Mono.empty()), - Optional.ofNullable(serviceNode).map(Microservices::shutdown).orElse(Mono.empty())) + Optional.ofNullable(gateway).map(ScaleCube::shutdown).orElse(Mono.empty()), + Optional.ofNullable(serviceNode).map(ScaleCube::shutdown).orElse(Mono.empty())) .block(); } catch (Throwable ignore) { // no-op