Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将Apache Cayenne配置为以异步方式与Vertx一起使用_Java_Postgresql_Kotlin_Vert.x_Apache Cayenne - Fatal编程技术网

Java 将Apache Cayenne配置为以异步方式与Vertx一起使用

Java 将Apache Cayenne配置为以异步方式与Vertx一起使用,java,postgresql,kotlin,vert.x,apache-cayenne,Java,Postgresql,Kotlin,Vert.x,Apache Cayenne,我正在将Apache Cayenne与Vertx一起使用。Vertx依赖于异步的一切,它主动寻找阻塞的线程 所以表演一些像 List<Artist> artists = ObjectSelect.query(Artist.class).select(context); 请注意,实际上有一些方法可以通过将代码包装到ExecuteBlock函数中来解决此问题,如下所示: // Turning synchronous code to async in Vertx vertx.execut

我正在将Apache Cayenne与Vertx一起使用。Vertx依赖于异步的一切,它主动寻找阻塞的线程

所以表演一些像

List<Artist> artists = ObjectSelect.query(Artist.class).select(context);
请注意,实际上有一些方法可以通过将代码包装到ExecuteBlock函数中来解决此问题,如下所示:

// Turning synchronous code to async in Vertx
vertx.executeBlocking<Any>({ future ->
     List<Artist> artists = ObjectSelect.query(Artist.class).select(context)
     future.complete(artists)
}, { res ->
     // The result
})
然而,一直这样包装我的ORM函数是一件痛苦的事情


我想知道是否有一个标志或一个开关来打开它?或者,如果没有这样的标志,我想知道是否有一种方法可以使用。我选择那个特定的异步驱动程序是因为Vertx。

对不起,没有神奇的开关使Cayenne异步。Cayenne内部严重依赖JDBC,而JDBC又是同步的,而且可能永远都是同步的,请参阅精彩讨论

此外,对JDBC的依赖使得使用非JDBC驱动程序非常困难,所以这里也没有运气


因此,适合您的环境的定制包装器似乎是您的最佳选择。

这是一个Apache Cayenne问题,所以请留下一条评论:为什么不将您的db服务打包为worker verticle?您将摆脱阻塞线程警告,并可以通过在eventbus之外公开此服务轻松地进行扩展。这是一个很好的建议。如果我通过事件总线与vertx cayenne verticle进行通信,那么我假设我需要在事件总线上创建一个抽象层来与ORM进行通信?您可以使用一些关于JDK 10中声明要发布的抽象层的讨论,因此希望他们能够及时地实现这一点。
// Turning synchronous code to async in Vertx
vertx.executeBlocking<Any>({ future ->
     List<Artist> artists = ObjectSelect.query(Artist.class).select(context)
     future.complete(artists)
}, { res ->
     // The result
})