/*
 * Copyright (c) 2011-2019 Contributors to the Eclipse Foundation
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
 * which is available at https://www.apache.org/licenses/LICENSE-2.0.
 *
 * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
 */

package io.vertx.core.spi;

import io.vertx.core.Promise;
import io.vertx.core.Verticle;
import io.vertx.core.Vertx;

import java.util.concurrent.Callable;

Has responsibility for creating verticle instances.

Implementations of this are responsible for creating verticle written in various different JVM languages and for other purposes.

Author:Tim Fox
/** * * Has responsibility for creating verticle instances. * <p> * Implementations of this are responsible for creating verticle written in various different JVM languages and * for other purposes. * * @author <a href="http://tfox.org">Tim Fox</a> */
public interface VerticleFactory {
Helper method to remove a prefix from an identifier string
Params:
  • identifer – the identifier
Returns: The identifier without the prefix (if it had any)
/** * Helper method to remove a prefix from an identifier string * @param identifer the identifier * @return The identifier without the prefix (if it had any) */
static String removePrefix(String identifer) { int pos = identifer.indexOf(':'); if (pos != -1) { if (pos == identifer.length() - 1) { throw new IllegalArgumentException("Invalid identifier: " + identifer); } return identifer.substring(pos + 1); } else { return identifer; } }
The order of the factory. If there is more than one matching verticle they will be tried in ascending order.
Returns: the order
/** * The order of the factory. If there is more than one matching verticle they will be tried in ascending order. * @return the order */
default int order() { return 0; }
Initialise the factory
Params:
  • vertx – The Vert.x instance
/** * Initialise the factory * @param vertx The Vert.x instance */
default void init(Vertx vertx) { }
Close the factory. The implementation must release all resources.
/** * Close the factory. The implementation must release all resources. */
default void close() { }
Returns: The prefix for the factory, e.g. "java", or "js".
/** * @return The prefix for the factory, e.g. "java", or "js". */
String prefix();
Create a verticle instance. If this method is likely to be slow (e.g. Ruby or JS verticles which might have to start up a language engine) then make sure it is run on a worker thread by Vertx.executeBlocking.
Params:
  • verticleName – The verticle name
  • classLoader – The class loader
  • promise – the promise to complete with the result
/** * Create a verticle instance. If this method is likely to be slow (e.g. Ruby or JS verticles which might have to * start up a language engine) then make sure it is run on a worker thread by {@link Vertx#executeBlocking}. * * @param verticleName The verticle name * @param classLoader The class loader * @param promise the promise to complete with the result */
void createVerticle(String verticleName, ClassLoader classLoader, Promise<Callable<Verticle>> promise); }