Example usage for io.vertx.core CompositeFuture all

List of usage examples for io.vertx.core CompositeFuture all

Introduction

In this page you can find the example usage for io.vertx.core CompositeFuture all.

Prototype

static CompositeFuture all(List<Future> futures) 

Source Link

Document

Like #all(Future,Future) but with a list of futures.

When the list is empty, the returned future will be already completed.

Usage

From source file:com.chibchasoft.vertx.verticle.deployment.DependentVerticleDeployer.java

License:Open Source License

/**
 * Gets a composite future using a future for each verticle to be deployed. This composite
 * future is successful if all verticles deployed and fails if any verticle fails to deploy.
 * @return The composite future/*w  w  w .  j  a  v a 2  s . co m*/
 */
private CompositeFuture getCompositeFuture() {
    List<Future<String>> futures = new ArrayList<>();
    dependentsDeployment.getConfigurations().forEach(cfg -> futures.addAll(getFutures(cfg)));

    return CompositeFuture.all(new ArrayList<>(futures));
}

From source file:examples.CoreExamples.java

License:Open Source License

public void exampleFutureAll2(Future future1, Future future2, Future future3) {
    CompositeFuture.all(Arrays.asList(future1, future2, future3));
}

From source file:io.apiman.gateway.engine.vertx.shareddata.SharedGlobalDataRegistry.java

License:Apache License

@SuppressWarnings("rawtypes") // CompositeFuture.all(list) requires raw futures.
@Override/*from  w ww. ja  v  a 2 s  .co m*/
public void registerClient(Client client, IAsyncResultHandler<Void> resultHandler) {
    List<Future> futures = new ArrayList<>(client.getContracts().size());
    List<Contract> contracts = new ArrayList<>(client.getContracts());
    String clientIndex = getClientIndex(client);

    // Future for each contract and execute get.
    for (Contract contract : contracts) {
        Future future = Future.future();
        futures.add(future);
        String apiIndex = getApiIndex(contract.getApiOrgId(), contract.getApiId(), contract.getApiVersion());
        objectMap.get(apiIndex, future.completer());
    }

    CompositeFuture.all(futures).setHandler(compositeResult -> {
        if (compositeResult.succeeded()) {
            // If any contract didn't correspond to a stored API.
            Contract failedContract = null;
            for (int i = 0; i < futures.size(); i++) {
                if (futures.get(i).result() == null) {
                    failedContract = contracts.get(0);
                    break;
                }
            }
            // If we found an invalid contract.
            if (failedContract != null) {
                Exception ex = new RegistrationException(
                        Messages.i18n.format("InMemoryRegistry.ApiNotFoundInOrg", failedContract.getApiId(),
                                failedContract.getApiOrgId()));
                resultHandler.handle(AsyncResultImpl.create(ex));
            } else {
                Future<Object> putNewApiKeyFuture = Future.future();
                Future<Object> endFuture = Future.future();

                // Order: Create new API Key reference; Replace old ID -> API mapping; Delete old key reference)
                // This should ensure no breaking/irreconcilable behaviour.
                objectMap.putIfAbsent(client.getApiKey(), client, putNewApiKeyFuture.completer());

                // Replace API Key reference
                putNewApiKeyFuture.compose(clientWithSameApiKey -> {
                    Future<Object> replaceClientFuture = Future.future();
                    // There's a small chance the same key will replace the old one, usually
                    // only in hard-coded tests. Generally sameKeyReplace will be null.
                    if (clientWithSameApiKey != null) {
                        //System.err.println("!!!!! Same API Key -- Replacing. Must not delete later. !!!!!!");
                        objectMap.replace(client.getApiKey(), client, replaceClientFuture.completer());
                    } else {
                        objectMap.putIfAbsent(clientIndex, client, replaceClientFuture.completer());
                    }
                    return replaceClientFuture;
                    // Remove old API key reference
                }).compose(oldClientRaw -> {
                    Client oldClient = (Client) oldClientRaw;
                    if (oldClientRaw != null && !oldClient.getApiKey().equals(client.getApiKey())) {
                        objectMap.remove(oldClient.getApiKey(), endFuture.completer());
                    } else {
                        endFuture.complete();
                    }
                }, endFuture)
                        // When finished, call this handler and then resultHandler
                        .setHandler(handleResult(resultHandler));
            }
        } else {
            resultHandler.handle(AsyncResultImpl.create(compositeResult.cause()));
        }
    });
}

From source file:io.apiman.gateway.platforms.vertx3.verticles.InitVerticle.java

License:Apache License

@Override
public void start(Future<Void> start) {
    super.start(start);
    base = new DeploymentOptions().setConfig(config());

    @SuppressWarnings({ "rawtypes" }) // CompositeFuture doesn't accept generic type
    List<Future> deployList = new ArrayList<>();

    deploy(ApiVerticle.class.getCanonicalName(), ApiVerticle.VERTICLE_TYPE, deployList);
    deploy(HttpGatewayVerticle.class.getCanonicalName(), HttpGatewayVerticle.VERTICLE_TYPE, deployList);
    deploy(HttpsGatewayVerticle.class.getCanonicalName(), HttpsGatewayVerticle.VERTICLE_TYPE, deployList);

    CompositeFuture.all(deployList).setHandler(compositeResult -> {
        if (compositeResult.failed()) {
            compositeResult.cause().printStackTrace();
            log.fatal("Failed to deploy verticles: " + compositeResult.cause().getMessage()); //$NON-NLS-1$
            start.fail(compositeResult.cause());
        } else {/*ww  w. j  a v a2  s  .  com*/
            log.info("Successfully deployed all verticles"); //$NON-NLS-1$
            start.complete();
        }
    });
}

From source file:io.engagingspaces.graphql.servicediscovery.publisher.SchemaPublisher.java

License:Open Source License

/**
 * Publishes the provided schema definitions to the specified service discovery.
 * <p>/*from ww w . j ava  2 s  . c om*/
 * Upon success a list of {@link SchemaRegistration}s is returned in the result handler.
 *
 * @param options       the service discovery options
 * @param resultHandler the result handler
 * @param schemas       the GraphQL schema's to publish
 */
default void publishAll(ServiceDiscoveryOptions options,
        Handler<AsyncResult<List<SchemaRegistration>>> resultHandler, GraphQLSchema... schemas) {

    Objects.requireNonNull(resultHandler, "Publication result handler cannot be null");
    if (schemas == null || schemas.length == 0) {
        resultHandler.handle(Future.failedFuture("Nothing to publish. No schema definitions provided"));
        return;
    }
    List<Future> futures = new ArrayList<>();
    Arrays.asList(schemas).forEach(schema -> publish(options, schema, rh -> futures
            .add(rh.succeeded() ? Future.succeededFuture(rh.result()) : Future.failedFuture(rh.cause()))));

    CompositeFuture.all(futures).setHandler(rh -> {
        if (rh.failed()) {
            resultHandler.handle(Future.failedFuture(rh.cause()));
            return;
        }
        CompositeFuture composite = rh.result();
        List<SchemaRegistration> published = composite.list();
        if (published.size() != schemas.length) {
            List<Throwable> errors = rh.result().<Future<Void>>list().stream().filter(Future::failed)
                    .map(Future::cause).collect(Collectors.toList());
            resultHandler.handle(Future.failedFuture(new PartialPublishException(errors)));
        } else {
            resultHandler.handle(Future.succeededFuture(published));
        }
    });
}

From source file:io.engagingspaces.graphql.servicediscovery.publisher.SchemaRegistrar.java

License:Open Source License

private void handleCloseCompletion(Handler<AsyncResult<Void>> closeHandler, List<Future> futures) {
    CompositeFuture.all(futures).setHandler(rh -> {
        if (rh.succeeded()) {
            CompositeFuture composite = rh.result();
            for (int index = 0; index < composite.size(); index++) {
                if (composite.succeeded(index) && composite.resultAt(index) != null) {
                    composite.<SchemaRegistration>resultAt(index).unregisterServiceProxy();
                }// w w w  . j a  v a  2 s .co  m
            }
            doClose(closeHandler);
        } else {
            closeHandler.handle(Future.failedFuture(rh.cause()));
        }
    });
}

From source file:org.dfr.dfr.Main.java

@Override
public void start(Future<Void> start) {
    HttpServer server = vertx.createHttpServer();
    Future<String> dm1 = Future.future();
    vertx.deployVerticle("org.dfr.dfr.worker.MemberWorker", new DeploymentOptions().setWorkerPoolSize(10),
            dm1.completer());//ww  w .  j av  a2 s .c o m
    Future<HttpServer> depoyServerOK = Future.future();
    Router router = Router.router(vertx);
    StaticHandler staticH = StaticHandler.create();
    staticH.setWebRoot("templates");
    router.get("/*").handler(staticH);

    /**
     * Async block
     */
    router.post("/member/register").handler(h -> {
        h.request().bodyHandler(bH -> {
            vertx.eventBus().send("MemberWorker#Register", bH.toString(),
                    new DeliveryOptions().setSendTimeout(3000), evt -> {
                        if (evt.failed()) {
                            h.response().setStatusCode(408).end();
                        } else {
                            h.response().end(evt.result().body().toString());
                        }
                    });
        });
    });

    /**
     * Async block
     */
    router.post("/member/profileupdate").handler(h -> {
        h.request().bodyHandler(bH -> {
            vertx.eventBus().send("MemberWorker#ProfileUpdate", bH.toString(),
                    new DeliveryOptions().setSendTimeout(3000), evt -> {
                        if (evt.failed()) {
                            h.response().setStatusCode(408).end();
                        } else {
                            h.response().end(evt.result().body().toString());
                        }
                    });
        });
    });

    /**
     * Async block
     */
    router.post("/member/getprofile").handler(h -> {
        h.request().bodyHandler(bH -> {
            vertx.eventBus().send("MemberWorker#GetProfile", bH.toString(),
                    new DeliveryOptions().setSendTimeout(3000), evt -> {
                        if (evt.failed()) {
                            h.response().setStatusCode(408).end();
                        } else {
                            h.response().end(evt.result().body().toString());
                        }
                    });
        });
    });

    /**
     * Async block
     */
    router.post("/member/changepassword").handler(h -> {
        h.request().bodyHandler(bH -> {
            vertx.eventBus().send("MemberWorker#ChangePassword", bH.toString(),
                    new DeliveryOptions().setSendTimeout(3000), evt -> {
                        if (evt.failed()) {
                            h.response().setStatusCode(408).end();
                        } else {
                            h.response().end(evt.result().body().toString());
                        }
                    });
        });
    });

    /**
     * Async block
     */
    router.post("/member/asset/addasset").handler(h -> {
        h.request().bodyHandler(bH -> {
            vertx.eventBus().send("MembrWorker#AddAsset", bH.toString(),
                    new DeliveryOptions().setSendTimeout(3000), evt -> {
                        if (evt.failed()) {
                            h.response().setStatusCode(408).end();
                        } else {
                            h.response().end(evt.result().body().toString());
                        }
                    });
        });
    });

    router.post("/member/asset/getasset").handler(h -> {
        h.request().bodyHandler(bH -> {
            vertx.eventBus().send("AssetWorker#GetAsset", bH.toString(),
                    new DeliveryOptions().setSendTimeout(3000), evt -> {
                        if (evt.failed()) {
                            h.response().setStatusCode(408).end();
                        } else {
                            h.response().end(evt.result().body().toString());
                        }
                    });
        });
    });

    router.post("/member/asset/updateasset").handler(h -> {
        h.request().bodyHandler(bH -> {
            vertx.eventBus().send("AssetWorker#UpdateAsset", bH.toString(),
                    new DeliveryOptions().setSendTimeout(3000), evt -> {
                        if (evt.failed()) {
                            h.response().setStatusCode(408).end();
                        } else {
                            h.response().end(evt.result().body().toString());
                        }
                    });
        });
    });

    server.requestHandler(router::accept);
    Integer port = Integer.getInteger("http.port");
    String host = System.getProperty("http.address");

    log.info("port " + port);
    log.info("host " + host);

    if (port == null) {
        port = 8090;
    }
    if (host == null) {
        host = "127.0.0.1";
    }

    server.listen(port, host, depoyServerOK.completer());
    CompositeFuture.all(Arrays.asList(depoyServerOK, dm1)).setHandler(h -> {
        if (h.succeeded()) {
            start.complete();
            log.info("server start ok");
        } else {
            start.fail(h.cause());
            log.info("fail to deploy : " + h.cause().getMessage());
        }
    });
}

From source file:org.eclipse.hono.adapter.VertxBasedAdapterApplication.java

License:Open Source License

private void deployVerticle(final int instanceCount, final Future<Void> resultHandler) {

    LOG.debug("starting up {} instances of '{}' adapter verticle", instanceCount, this.getName());
    @SuppressWarnings("rawtypes")
    List<Future> results = new ArrayList<>();
    for (int i = 1; i <= instanceCount; i++) {
        final int instanceId = i;
        final Future<String> result = Future.future();
        results.add(result);/* w  ww . jav a 2 s. co m*/
        vertx.deployVerticle(this.getAdapter(), d -> {
            if (d.succeeded()) {
                LOG.debug("verticle instance {} deployed", instanceId);
                result.complete();
            } else {
                LOG.debug("failed to deploy verticle instance {}", instanceId, d.cause());
                result.fail(d.cause());
            }
        });
    }
    CompositeFuture.all(results).setHandler(done -> {
        if (done.succeeded()) {
            resultHandler.complete();
        } else {
            resultHandler.fail(done.cause());
        }
    });
}

From source file:org.eclipse.hono.application.HonoApplication.java

License:Open Source License

private void deployServer(final HonoServer firstInstance, final int instanceCount, Future<Void> startFuture) {
    @SuppressWarnings("rawtypes")
    List<Future> results = new ArrayList<>();
    deployServerInstance(firstInstance, results);
    for (int i = 1; i < instanceCount; i++) {
        HonoServer server = serverFactory.getHonoServer();
        deployServerInstance(server, results);
    }/*from  w  w w  . j  av a  2s  .  c o m*/
    CompositeFuture.all(results).setHandler(ar -> {
        if (ar.failed()) {
            startFuture.fail(ar.cause());
        } else {
            startFuture.complete();
        }
    });
}

From source file:org.eclipse.hono.service.AbstractApplication.java

License:Open Source License

private CompositeFuture deployServiceVerticles() {
    final int maxInstances = config.getMaxInstances();

    @SuppressWarnings("rawtypes")
    final List<Future> deploymentTracker = new ArrayList<>();

    for (ObjectFactory<? extends AbstractServiceBase<?>> serviceFactory : serviceFactories) {

        AbstractServiceBase<?> serviceInstance = serviceFactory.getObject();

        healthCheckServer.registerHealthCheckResources(serviceInstance);

        final Future<String> deployTracker = Future.future();
        vertx.deployVerticle(serviceInstance, deployTracker.completer());
        deploymentTracker.add(deployTracker);

        for (int i = 1; i < maxInstances; i++) { // first instance has already been deployed
            serviceInstance = serviceFactory.getObject();
            log.debug("created new instance of service: {}", serviceInstance);
            final Future<String> tracker = Future.future();
            vertx.deployVerticle(serviceInstance, tracker.completer());
            deploymentTracker.add(tracker);
        }/*from   ww  w.  ja va 2  s  . c om*/
    }

    return CompositeFuture.all(deploymentTracker);
}