Update on weld-vertx
This is a follow-up on the article Weld meets Vert.x.
Weld team has just released the first alpha version of weld-vertx (artifacts are available in Maven Central).
Since the last time we talked about weld-vertx
two new features were added.
First, it’s possible to inject the relevant io.vertx.core.Vertx
and io.vertx.core.Context
instances direcly into beans.
Also there is a new module called weld-vertx-web
which extends functionality of weld-vertx-core
and io.vertx:vertx-web
and allows to register Route
handlers discovered during container initialization.
In other words, it’s possible to configure a Route
in a declarative way:
import javax.inject.Inject;
import org.jboss.weld.vertx.web.WebRoute;
import io.vertx.core.Handler;
import io.vertx.ext.web.RoutingContext;
// This annotation is used to configure a Route
@WebRoute("/hello")
public class HelloHandler implements Handler<RoutingContext> {
@Inject
SayHelloService service;
@Override
public void handle(RoutingContext ctx) {
ctx.response().setStatusCode(200).end(service.hello());
}
}
The registered handler instances are NOT real bean instances, i.e. they’re not managed by the CDI container (similarly as Java EE components). However, the dependency injection is supported.
The central point of integration is the org.jboss.weld.vertx.web.WeldWebVerticle
.
This Verticle extends org.jboss.weld.vertx.WeldVerticle
and provides the WeldWebVerticle.registerRoutes(Router)
method:
class MyApp {
public static void main(String[] args) {
final Vertx vertx = Vertx.vertx();
final WeldWebVerticle weldVerticle = new WeldWebVerticle();
vertx.deployVerticle(weldVerticle, result -> {
if (result.succeeded()) {
// Configure the router after Weld bootstrap finished
Router router = Router.router(vertx);
router.route().handler(BodyHandler.create());
weldVerticle.registerRoutes(router);
vertx.createHttpServer().requestHandler(router::accept).listen(8080);
}
});
}
}
Give it a try and let us know if you have any idea how to extend the functionality of weld-vertx
.
Any feedback is appreciated!