Vertx3 - 从JDBC连接返回值? (sql db)。

时间:2015-07-16 21:50:43

标签: java asynchronous jdbc vert.x

我有一个接口,只有一个方法返回" config"对象

我想在Android和Vertx3环境中使用这个界面。

Config retrieveConfig(String authCreds);

我试图在vertx程序中实现它,利用它的JDBC客户端,但我遇到了问题。

jdbcClient.getConnection(sqlConnResult -> 
 //checks for success
 sqlConnResult.result().query(selectStatement, rows -> {
     //get result here, want to return it as answer to interface.
     //seems this is a "void" method in this scope.
});

这个界面甚至可以使用Vertx异步代码吗?

1 个答案:

答案 0 :(得分:2)

Async programming中,您无法真正将您的值返回给调用者,因为这将是一个阻塞调用 - async programming寻求删除的主要内容之一。这就是Vertx中许多方法返回thisvoid的原因。

作为替代方案存在各种范例:

  • Vert.x广泛使用Handler<T>接口,其中handler(T result)方法将与结果一起执行。

  • Vert.x 3也支持Rx Observable。这样您就可以返回Observable<T> subscribersasync task完成后会将结果发送到Future<T>

  • 此外,始终有一个选项可以返回Vert.x,一旦异步任务完成,它将包含结果。虽然common interface并没有真正使用它。

所以你可能会发现很难为blockingnon-blocking api提供Vertx这样的代价。 Vertx 3run blocking code提供了简单易行的方法,但我认为这不是一个很好的解决方案。

就个人而言,我会看一下RxJava。支持Rx on Android,并且已在Config retrieveConfig(String authCreds); 中得到很好的采用 - 几乎每个API调用都有Rx equivalent

搬离:

Observable<Config> retrieveConfig(String authCreds);

Android

可以让您拥有一个通用界面,并使其能够同时使用Vert.x&amp; Rx。它还可以带来额外的好处,即不必误入module lpm_mult ( dataa, datab, // multiplicand,multiplier sum, // partial sum clock, // pipeline clock clken, // clock enable aclr, // asynch clear result // product ); input clock; input clken; input aclr; input [31:0] dataa; input [31:0] datab; input [63:0] sum; output [63:0] result; always @ (clken or posedge clock) begin if (1==clken) begin assign result = dataa * datab; end end endmodule 寻求避免的回调地狱。

希望这有帮助,