我们正在尝试从独立的 Java 应用程序与 SAP R/3 进行通信,为此我们将使用 JCo 3.0 库。
从文档中我了解到有两种方式可以连接 SAP。
- 作为 JCo客户
- 作为 JCo服务器
起初我确信我们的应用程序需要作为 JCo 客户端进行连接。但我开始怀疑了。
我们的应用程序发送数据。(例如更新订单状态)但我们的应用程序也接收数据(例如 SAP 将更改推送到主数据 - MATMAS)。
那么,它需要是客户端还是服务器?
JCo 3.0 API 模型中没有 JCo 客户端,JCoDestinations
而是替换了旧JCO.Client
的 2.1 API 模型。
通过 RFC 协议连接到 SAP 的两种方式是:
对于入站 RFC,您需要使用 aJCoDestination
在 ABAP 端执行远程功能模块。对于出站 RFC,您需要JCoServer
在 SAP 网关上注册一个,然后它将接收来自 ABAP 端的传入请求,以便在 Java 端处理远程功能模块。在两个通信方向上都有一个请求,并且可能还有对此请求的响应,因此数据流在入站和出站 RFC 通信的两个方向上。入站和出站只是区分发起 RFC 调用的人。
关于JCoServer
,您通常还需要JCoDestination
为存储库定义一些,因为默认情况下JCoServer
需要从 ABAP 后端查询所需的 RFC 元数据。如果没有这样的 a JCoRepository
, aJCoServer
将无法解释传入的 RFC 请求数据。因此,在典型的 JCo 服务器场景中,您同时需要: aJCoServer
和 a JCoDestination
(用于服务器的JCoRepository
)。
您可以JCoDestination
为这两个用例(客户端调用和存储库查询)使用相同的配置,但 SAP 建议定义单独的配置,这在连接池大小的定义方面更加灵活,并允许对两个用例进行单独的 RFC 授权。
两个都。实际上,您需要一个客户端连接来启动服务器连接,因此当您设置服务器连接时,您也会自动获得客户端连接。