throw new PlatformManagerException("Parent has already been undeployed!");
}
parentDeployment.childDeployments.add(deploymentID);
}
final VerticleFactory verticleFactory;
try {
// TODO not one verticle factory per module ref, but one per language per module ref
verticleFactory = mr.getVerticleFactory(langImplInfo.factoryName, vertx, new DefaultContainer(this));
} catch (Throwable t) {
throw new PlatformManagerException("Failed to instantiate verticle factory", t);
}
final CountingCompletionHandler<Void> aggHandler = new CountingCompletionHandler<>(vertx, instances);
aggHandler.setHandler(new Handler<AsyncResult<Void>>() {
@Override
public void handle(AsyncResult<Void> res) {
if (res.failed()) {
doneHandler.handle(new DefaultFutureResult<String>(res.cause()));
} else {
doneHandler.handle(new DefaultFutureResult<>(deploymentID));
}
}
});
final Deployment deployment = new Deployment(deploymentID, main, modID, instances,
config == null ? new JsonObject() : config.copy(), urls, modDir, parentDeploymentName,
mr, autoRedeploy);
mr.incRef();
deployments.put(deploymentID, deployment);
ClassLoader oldTCCL = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(mr.mcl);
try {
for (int i = 0; i < instances; i++) {
// Launch the verticle instance
Runnable runner = new Runnable() {
public void run() {
Verticle verticle;
try {
verticle = verticleFactory.createVerticle(main);
} catch (Throwable t) {
handleDeployFailure(t, deploymentID, aggHandler);
return;
}
try {