Orkun
Orkun

Reputation: 7228

Vertx: Using AbstractVerticle Context to pass around objects

We have been using the Context object to in a long chain of async execution.

e.g.:

private void checkVehicle(final JsonObject cmd,
                              final RedisFleetStorage storage,
                              final Handler<AsyncResult<String>> handler) {

        // omitted for brevity

        // some async call to another verticle
        storage.getVehicle(fleetId, vehicleId, result -> {
            if (!result.succeeded()) {
                LOG.error(String.format("Impossible to get vehicleStatus %s:%s", fleetId, vehicleId), result.cause());
                handler.handle(Future.failedFuture("KO");
                return;
            }

            // put vehicle in context for later use
            final Vehicle vehicle = result.result();
            LOG.info("vehicle details {}", vehicle);
            context.put("vehicle", vehicle);

            handler.handle(Future.succeededFuture());
        });
    }

As seen above, we put an object (vehicle) in the context and then access later in the execution.

But we suspect that the vehicle object it's altered by another execution. Is it possible? Can another event-loop change the object in the context?

Upvotes: 0

Views: 267

Answers (1)

tsegismont
tsegismont

Reputation: 9128

A verticle instance handles all requests with the same event loop.

This why the Context object is not suited for storage of request specific data.

Upvotes: 2

Related Questions