Iterator loadProxyServiceMockJVM()

in sdk/host/src/main/java/org/apache/teaclave/javasdk/host/AbstractEnclave.java [73:93]


    <T> Iterator<T> loadProxyServiceMockJVM(Class<?> service) throws ServicesLoadingException {
        try (MetricTraceContext trace = new MetricTraceContext(
                this.getEnclaveInfo(),
                MetricTraceContext.LogPrefix.METRIC_LOG_ENCLAVE_SERVICE_LOADING_PATTERN,
                service.getName())) {
            List<T> serviceProxies = new ArrayList<>();
            Class<?>[] serviceInterface = new Class[]{service};

            ServiceLoader<T> innerProxyServices = (ServiceLoader<T>) ServiceLoader.load(service);
            for (T innerProxyService : innerProxyServices) {
                ProxyMockJvmInvocationHandler handler = new ProxyMockJvmInvocationHandler(this, innerProxyService);
                T proxy = (T) Proxy.newProxyInstance(service.getClassLoader(), serviceInterface, handler);
                serviceProxies.add(proxy);
                // Register proxy handler for enclave's corresponding service gc recycling.
                enclaveContext.getEnclaveServicesRecycler().registerProxyHandler(proxy, handler);
            }
            return serviceProxies.iterator();
        } catch (MetricTraceLogWriteException e) {
            throw new ServicesLoadingException(e);
        }
    }