public T newProxy() { return ReflectionUtil.newProxy(type, this); }
private <T> T createProxy(Class<T> proxyApi, final Object targetProvider) { return ReflectionUtil.newProxy(proxyApi, new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { try { Method targetMethod = targetProvider.getClass().getMethod(method.getName(), method.getParameterTypes()); Observable<Object> observableResult = Observable.create((s) -> { try { Object result = ReflectionUtil.invokeMethod(targetMethod, targetProvider, args); s.onNext(result); s.onCompleted(); } catch (Throwable e) { s.onError(e); } }); if (method.getReturnType().equals(Future.class)) { return observableResult.toBlocking().toFuture(); } if (method.getReturnType().equals(Observable.class)) { return observableResult; } return reactiveTypeConverter.toCustomReactiveType(method.getReturnType(), observableResult); } catch (NoSuchMethodException e) { throw new RuntimeException("Target service does not contain method: " + e.getMessage()); } } }); }
public static GigaSpace create(GigaSpace gigaSpace) { return ReflectionUtil.newProxy(GigaSpace.class, new GigaSpaceProxy(gigaSpace)); }
@Override public T create(AstrixBeans beans) { T rawBean = target.create(beans); BeanProxy ftProxy = faultToleranceProxyFactory.createFaultToleranceProxy(beanDefinition.getBeanKey()); BeanInvocationDispatcher beanProxyDispather = new BeanInvocationDispatcher(Arrays.asList(ftProxy), asyncTypeConverter, rawBean); return ReflectionUtil.newProxy(getBeanKey().getBeanType(), beanProxyDispather); }
@Override public T getProvider(ObjectSerializerFactory objectSerializerFactory, ObjectSerializerDefinition serializerDefinition) { if (serverSerializerDefinition.isVersioned() || serializerDefinition.isVersioned()) { VersionedServiceProviderProxy serializationHandlingProxy = new VersionedServiceProviderProxy(provider, serializerDefinition.version(), objectSerializerFactory.create(serializerDefinition), objectSerializerFactory.create(serverSerializerDefinition)); return ReflectionUtil.newProxy(type, serializationHandlingProxy); } return provider; } }