Vertx具有重复性和焊接性

时间:2017-09-26 08:27:16

标签: resteasy vert.x weld

我需要使用vert.x,resteasy和weld-cdi的示例应用程序。我能够使用vert.x和resteasy。但我不知道如何整合weld-cdi。

请帮帮我。

2 个答案:

答案 0 :(得分:0)

您可能想看看 weld-vertx project

如果您已经可以使用vertx,这将允许您在Weld中编织。 该项目包含一些示例,您还可以检查测试以查看更多用途。

答案 1 :(得分:0)

我将Vertx与Resteasy和Weld一起使用。它不是那么简单,但我设法做到了。你需要:

  • org.jboss.resteasy:resteasy-cdiorg.jboss.resteasy:resteasy-vertx Resteasy集成模块
  • Java SE上的Weld org.jboss.weld.se:weld-se-core模块
  • Weld + Vertx集成的org.jboss.weld.vertx:weld-vertx-core

您使用Weld + Vertx扩展名设置CDI:

Weld weld = new Weld();
weld.addExtension(new VertxExtension());
weld.initialize();

部署Resteasy时,您希望使用CDI实例部署它:

VertxResteasyDeployment deployment = new VertxResteasyDeployment();
ResteasyCdiExtension cdiExtension = CDI.current().select(ResteasyCdiExtension.class).get();
deployment.setActualResourceClasses(cdiExtension.getResources());
deployment.setInjectorFactoryClass(CdiInjectorFactory.class.getName());
deployment.getActualProviderClasses().addAll(cdiExtension.getProviders());
deployment.start();

您希望通过在阻止块中注册使用者来设置Vertx-Weld扩展:

// Setup the Vertx-CDI integration
VertxExtension vertxExtension = CDI.current().select(VertxExtension.class).get();
BeanManager beanManager = CDI.current().getBeanManager();
// has to be done in a blocking thread
vertx.executeBlocking(future -> {
    vertxExtension.registerConsumers(vertx.getDelegate(), BeanManagerProxy.unwrap(beanManager).event());
    future.complete();
}, res -> {
    // you can now create your HTTP server
});

请注意,您仍需要调整:

  • 在Vert.x请求上创建CDI请求上下文
  • 在Vert.x异步处理程序上传播CDI和Resteasy线程本地文件
  • 使用CDI和Resteasy设置Bean验证

如果您需要,我也可以为您提供代码。