package io.vertx.lang.ruby;
import io.vertx.core.Verticle;
import io.vertx.core.Vertx;
import io.vertx.core.spi.VerticleFactory;
import java.util.HashMap;
import java.util.Map;
public class JRubyVerticleFactory implements VerticleFactory {
final Map<String, ContainerHolder> holderMap = new HashMap<>();
private Vertx vertx;
@Override
public String prefix() {
return "rb";
}
@Override
public boolean blockingCreate() {
return true;
}
@Override
public void init(Vertx vertx) {
this.vertx = vertx;
}
@Override
public Verticle createVerticle(String verticleName, ClassLoader classLoader) throws Exception {
verticleName = VerticleFactory.removePrefix(verticleName);
ContainerHolder holder;
synchronized (holderMap) {
holder = holderMap.get(verticleName);
if (holder == null) {
holderMap.put(verticleName, holder = new ContainerHolder(this, verticleName));
}
}
return new JRubyVerticle(this, holder, classLoader, verticleName);
}
void removeVerticle(ContainerHolder holder) {
synchronized (holderMap) {
holderMap.remove(holder.getVerticleName());
}
}
public static synchronized void requireCallback(Runnable runnable) {
runnable.run();
}
}