private RemotingProxy(Class<?> proxiedServiceApi, Class<?> targetServiceApi, AstrixObjectSerializer objectSerializer, RemotingTransport AstrixServiceTransport, RoutingStrategy defaultRoutingStrategy, ReactiveTypeConverter reactiveTypeConverter) { this.reactiveTypeConverter = reactiveTypeConverter; this.serviceApi = targetServiceApi.getName(); this.apiVersion = objectSerializer.version(); RemotingEngine remotingEngine = new RemotingEngine(AstrixServiceTransport, objectSerializer, apiVersion); this.remoteServiceMethodFactory = new RemoteServiceMethodFactory(remotingEngine, defaultRoutingStrategy); /* * For each of the following services the "targetServiceType" resolves to MyService: * - MyService * - MyServiceAsync * - ObservableMyService */ Class<?> targetServiceType = ReflectionUtil.classForName(this.serviceApi); for (Method proxiedMethod : proxiedServiceApi.getMethods()) { Type returnType = getReturnType(proxiedMethod); RemoteServiceMethod remoteServiceMethod = this.remoteServiceMethodFactory.createRemoteServiceMethod(targetServiceType, proxiedMethod, returnType); remoteServiceMethodByMethod.put(proxiedMethod, remoteServiceMethod); } }
@Override public <T> T create(ServiceDefinition<T> serviceDefinition, ServiceProperties serviceProperties, RemotingTransportSpi remotingTransportSpi, RoutingStrategy routingStrategy) { AstrixObjectSerializer objectSerializer = objectSerializerFactory.create(serviceDefinition.getObjectSerializerDefinition()); RemotingTransport remotingTransport = RemotingTransport.create(remotingTransportSpi); return RemotingProxy.create(serviceDefinition.getServiceType(), ReflectionUtil.classForName(serviceProperties.getProperty(ServiceProperties.API)) , remotingTransport, objectSerializer, routingStrategy, reactiveTypeConverter); }
@Override public <T> BoundServiceBeanInstance<T> bind(ServiceDefinition<T> serviceDefinition, ServiceProperties serviceProperties) { AstrixObjectSerializer objectSerializer = objectSerializerFactory.create(serviceDefinition.getObjectSerializerDefinition()); GigaSpaceInstance proxyInstance = proxyCache.getProxy(serviceProperties); GsRemotingTransport gsRemotingTransport = new GsRemotingTransport(proxyInstance.getSpaceTaskDispatcher()); RemotingTransport remotingTransport = RemotingTransport.create(gsRemotingTransport); T proxy = RemotingProxy.create(serviceDefinition.getServiceType(), ReflectionUtil.classForName(serviceProperties.getProperty(ServiceProperties.API)) , remotingTransport, objectSerializer, new GsRoutingStrategy(), reactiveTypeConverter); return BoundProxyServiceBeanInstance.create(proxy, proxyInstance); }