首页 > 解决方案 > Rserve / R 堆栈并行处理

问题描述

我正在构建一个 Java REST 应用程序,它通过我在 Ubuntu 上运行的 Rserve 调用 R 函数。我正在调用的 R 函数通过 RJDBC 数据库调用 Oracle,收集数据等。

根据我了解的文档,如果我在 linux 系统上运行 Rserve,我不需要在不同的端口上启动单独的实例,并且运行一个 Rserve 实例就足够了。

所以我正在创建一个这样的连接:

public static synchronized RConnection getConnection() throws RserveException {
if(connection == null || !connection.isConnected()) {
    connection = new RConnection(HOST);
    init(connection);
}
return connection;

}

对于 1 个用户来说一切正常,但同时,我得到了错误:

Error in .jcall("java/sql/DriverManager", "Ljava/sql/Connection;", "getConnection",  : 
  ignoring SIGPIPE signal

我应该为每个呼叫创建单独的连接还是应该在一个连接中拨打电话?

标签: javarparallel-processingrserve

解决方案


您应该为每个请求建立新的 rjdbc 连接(我认为初始化 rjava),因为请求是在分叉中处理的。并且 db 连接现在是 fork 安全的。


推荐阅读