33
loading...
This website collects cookies to deliver better user experience
class ProjectVerticle extends AbstractVerticle {
private ProjectClient client;
private ProjectRepository repository;
@Inject
ProjectVerticle(ProjectClient client, ProjectRepository repository){
this.client = client;
this.repository = repository;
}
// ...
class ProjectVerticleModule extends AbstractModule {
@Override
protected void configure() {
bind(ProjectClient.class).to(ProjectClientImpl.class);
bind(ProjectRepository.class).to(ProjectRepositoryImpl.class);
}
}
@Test
void injectTest(Vertx vertx, VertxTestContext context){
// create a module
ProjectVerticleModule module = new ProjectVerticleModule();
// create an injector
Injector injector = Guice.createInjector(module);
// get an instance of verticle
ProjectVerticle verticle = injector.getInstance(ProjectVerticle.class);
// deploy the ProjectVerticle
Future<String> deploy = vertx.deployVerticle(verticle);
deploy.onComplete(id -> {
context.verify(() -> {
String client = verticle.getProjectClientName();
String repository = verticle.getProjectRepositoryName();
Assertions.assertThat(client).isEqualTo("ProjectClientImpl");
Assertions.assertThat(repository).isEqualTo("ProjectRepositoryImpl");
context.completeNow();
});
}).onFailure(err -> context.failNow(err));
}
private ConfigRetriever configRetriever;
AppVerticleModule(Vertx vertx){
configRetriever = ConfigRetriever.create(vertx);
}
@Override
protected void configure() {
bind(ConfigRetriever.class)
.annotatedWith(Names.named("ConfigRetriever"))
.toInstance(configRetriever);
}
@Inject
AppVerticle(@Named("ConfigRetriever") ConfigRetriever configRetriever){
this.configRetriever = configRetriever;
}
Future<JsonObject> cr = configRetriever.getConfig();
Future<ProjectVerticle> vert = cr.map(c -> {
logger.info("Configuration obtained successfully");
Injector injector = Guice.createInjector(new ProjectVerticleModule(vertx, c));
ProjectVerticle verticle = injector.getInstance(ProjectVerticle.class);
return verticle;
}).onFailure(err -> {
logger.warning("Unable to obtain configuration");
startPromise.fail(err);
});
Future<String> dr = vert.compose(v -> vertx.deployVerticle(v));
dr.onSuccess(id -> {
logger.info("ProjectVerticle deployed");
startPromise.complete();
}).onFailure(err -> {
logger.warning("Unable to deploy ProjectVerticle");
logger.warning(err.getMessage());
startPromise.fail(err);
});
public static void main(String[] args) {
Vertx vertx = Vertx.vertx();
Injector injector = Guice.createInjector(new AppVerticleModule(vertx));
AppVerticle appVerticle = injector.getInstance(AppVerticle.class);
Future<String> dr = vertx.deployVerticle(appVerticle);
dr.onSuccess(id -> logger.info("AppVerticle started..."))
.onFailure(err -> {
logger.warning("Unable to start AppVerticle");
logger.warning(err.getMessage());
})
.onComplete(r -> {
vertx.close();
logger.info("Vertx closed");
});
}