SAP JCo 客户端与服务器

SAP JCo client vs server

我们正在尝试从独立的 java 应用程序与 SAP R/3 通信 为此,我们将使用 JCo 3.0 库。

从文档中我了解到有 2 种方法可以连接 SAP。

  1. 作为 JCo 客户
  2. 作为 JCo 服务器

起初我确信我们的应用程序需要作为 JCo 客户端进行连接。但是我开始怀疑了。

我们的应用程序发送数据。 (例如更新订单状态) 但是我们的应用程序 也接收数据 (例如 SAP 将更改推送到主数据 - MATMAS)。

那么,它需要是客户端还是服务器?

两者都有。实际上,您需要一个客户端连接来启动服务器连接,因此当您设置服务器连接时,您也会自动获得客户端连接。

JCo 3.0 API 模型中没有 JCo 客户端,只有 JCoDestinations 替代了 2.1 API 模型中的旧 JCO.Client

通过RFC协议连接到SAP的2种方式是:

  1. 入站 RFC 通信(作为 RFC 客户端/Java 调用 ABAP)
  2. 出站 RFC 通信(作为 RFC 服务器/ABAP 调用 Java)

对于入站 RFC,您需要使用 JCoDestination 在 ABAP 端执行远程功能模块。对于出站 RFC,您需要在 SAP 网关上注册一个 JCoServer,然后它将接收来自 ABAP 端的传入请求,以便在 Java 端处理远程功能模块。 在两个通信方向上都有一个请求,也可能对该请求有一个响应,因此数据流是双向的,用于入站和出站 RFC 通信。 Inbound和outbound只是区分谁发起了RFC调用。

关于 JCoServer,您通常还需要为存储库定义一些 JCoDestination,因为默认情况下需要 JCoServer 从中查询所需的 RFC 元数据ABAP 后端。没有这样的 JCoRepositoryJCoServer 将无法解释传入的 RFC 请求数据。因此,在典型的 JCo 服务器场景中,您需要:JCoServerJCoDestination(对于服务器的 JCoRepository)。

对于两个用例(客户端调用和存储库查询),您可以对 JCoDestination 使用相同的配置,但 SAP 建议定义单独的配置,这样在连接池大小的定义方面更加灵活,并且允许两种用例的单独 RFC 授权。