Home / Class/ CompositeNameResolver Class — netty Architecture

CompositeNameResolver Class — netty Architecture

Architecture documentation for the CompositeNameResolver class in CompositeNameResolver.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  75d4943c_966e_29f6_2ec2_09e480037a9d["CompositeNameResolver"]
  dffefd64_a1e4_0bdf_013a_9042346f2d12["CompositeNameResolver.java"]
  75d4943c_966e_29f6_2ec2_09e480037a9d -->|defined in| dffefd64_a1e4_0bdf_013a_9042346f2d12
  30b23230_3a1e_2151_2550_219764069386["CompositeNameResolver()"]
  75d4943c_966e_29f6_2ec2_09e480037a9d -->|method| 30b23230_3a1e_2151_2550_219764069386
  c1374aab_0057_2cf7_3993_3223f89799ce["doResolve()"]
  75d4943c_966e_29f6_2ec2_09e480037a9d -->|method| c1374aab_0057_2cf7_3993_3223f89799ce
  578e4655_3360_dcb2_6170_d9ae581db28b["doResolveRec()"]
  75d4943c_966e_29f6_2ec2_09e480037a9d -->|method| 578e4655_3360_dcb2_6170_d9ae581db28b
  17598bdd_0804_f702_741b_12c60b0fc8de["doResolveAll()"]
  75d4943c_966e_29f6_2ec2_09e480037a9d -->|method| 17598bdd_0804_f702_741b_12c60b0fc8de
  74b968c4_c9a6_a534_9864_0a52599b8f23["doResolveAllRec()"]
  75d4943c_966e_29f6_2ec2_09e480037a9d -->|method| 74b968c4_c9a6_a534_9864_0a52599b8f23

Relationship Graph

Source Code

resolver/src/main/java/io/netty/resolver/CompositeNameResolver.java lines 34–101

public final class CompositeNameResolver<T> extends SimpleNameResolver<T> {

    private final NameResolver<T>[] resolvers;

    /**
     * @param executor the {@link EventExecutor} which is used to notify the listeners of the {@link Future} returned
     *                 by {@link #resolve(String)}
     * @param resolvers the {@link NameResolver}s to be tried sequentially
     */
    public CompositeNameResolver(EventExecutor executor, NameResolver<T>... resolvers) {
        super(executor);
        checkNotNull(resolvers, "resolvers");
        for (int i = 0; i < resolvers.length; i++) {
            ObjectUtil.checkNotNull(resolvers[i], "resolvers[" + i + ']');
        }
        if (resolvers.length < 2) {
            throw new IllegalArgumentException("resolvers: " + Arrays.asList(resolvers) +
                    " (expected: at least 2 resolvers)");
        }
        this.resolvers = resolvers.clone();
    }

    @Override
    protected void doResolve(String inetHost, Promise<T> promise) throws Exception {
        doResolveRec(inetHost, promise, 0, null);
    }

    private void doResolveRec(final String inetHost,
                              final Promise<T> promise,
                              final int resolverIndex,
                              Throwable lastFailure) throws Exception {
        if (resolverIndex >= resolvers.length) {
            promise.setFailure(lastFailure);
        } else {
            NameResolver<T> resolver = resolvers[resolverIndex];
            resolver.resolve(inetHost).addListener((FutureListener<T>) future -> {
                if (future.isSuccess()) {
                    promise.setSuccess(future.getNow());
                } else {
                    doResolveRec(inetHost, promise, resolverIndex + 1, future.cause());
                }
            });
        }
    }

    @Override
    protected void doResolveAll(String inetHost, Promise<List<T>> promise) throws Exception {
        doResolveAllRec(inetHost, promise, 0, null);
    }

    private void doResolveAllRec(final String inetHost,
                              final Promise<List<T>> promise,
                              final int resolverIndex,
                              Throwable lastFailure) throws Exception {
        if (resolverIndex >= resolvers.length) {
            promise.setFailure(lastFailure);
        } else {
            NameResolver<T> resolver = resolvers[resolverIndex];
            resolver.resolveAll(inetHost).addListener((FutureListener<List<T>>) future -> {
                if (future.isSuccess()) {
                    promise.setSuccess(future.getNow());
                } else {
                    doResolveAllRec(inetHost, promise, resolverIndex + 1, future.cause());
                }
            });
        }
    }
}

Frequently Asked Questions

What is the CompositeNameResolver class?
CompositeNameResolver is a class in the netty codebase, defined in resolver/src/main/java/io/netty/resolver/CompositeNameResolver.java.
Where is CompositeNameResolver defined?
CompositeNameResolver is defined in resolver/src/main/java/io/netty/resolver/CompositeNameResolver.java at line 34.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free