【发布时间】:2018-03-07 09:05:58
【问题描述】:
我需要一个使用 vert.x、resteasy 和weld-cdi 的示例应用程序。我可以使用 vert.x 和 resteasy。但我不知道如何集成weld-cdi。
请帮帮我。
【问题讨论】:
我需要一个使用 vert.x、resteasy 和weld-cdi 的示例应用程序。我可以使用 vert.x 和 resteasy。但我不知道如何集成weld-cdi。
请帮帮我。
【问题讨论】:
我将 Vertx 与 Resteasy 和 Weld 一起使用。这不是那么简单,但我已经设法做到了。您将需要:
org.jboss.resteasy:resteasy-cdi 和 org.jboss.resteasy:resteasy-vertx Resteasy 集成模块org.jboss.weld.se:weld-se-core 模块org.jboss.weld.vertx:weld-vertx-core 用于 Weld + Vertx 集成您使用 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
});
请注意,您仍然需要调整:
如果你需要,我也可以给你代码。
【讨论】:
您可能想看看 weld-vertx project。
如果您已经可以使用 vertx,这将允许您在 Weld 中进行编织。 该项目包含一些示例,您还可以检查测试以了解更多用途。
【讨论】: