SAP JCo客户端vs服务器
我们正尝试从独立的Java应用程序与SAP R3进行通信 我们将使用JCo 3.0库。SAP JCo客户端vs服务器
从文档中我了解到有两种方式可以与SAP连接。
- 为JCO 客户
- 为JCO 服务器
起初我确信,我们的应用程序将需要连接的客户端JCO。但我开始怀疑。
我们的应用发送数据。 (例如订单状态的更新) 但是,我们的应用程序也接收数据(例如,SAP推动对主数据的改变 - MATMAS)。
那么,它是否需要成为一个客户端或服务器?
JCo 3.0 API模型中没有JCo客户端,但只有JCoDestinations
而不是从2.1 API模型替换旧的JCO.Client
。
而且2种方式经由RFC协议连接到SAP是:
- 内向RFC通信(作为RFC客户机/ Java调用ABAP)
- 外向RFC通信(作为RFC服务器/ ABAP调用Java)
对于入站RFC,您需要使用JCoDestination
在ABAP端执行远程功能模块。对于出站RFC,您需要在SAP网关注册JCoServer
,SAP网关将接收来自ABAP端的传入请求,以便在Java端处理远程功能模块。 在这两个通信方向都有一个请求,并且可能还有对这个请求的响应,所以数据流在入站和出站RFC通信中都是双向的。入站和出站只区分谁启动RFC调用。
而且关于JCoServer
,通常还需要定义一些JCoDestination
以及对储存,因为这是一个默认的JCoServer
用于从ABAP后端查询所需的RFC元数据需要。如果没有这样的JCoRepository
,JCoServer
将无法解释传入的RFC请求数据。因此,在典型的JCo服务器场景中,您需要:JCoServer
和JCoDestination
(用于服务器的JCoRepository
)。
对于两种用例(客户端调用和存储库查询),您都可以对JCoDestination
使用相同的配置,但SAP建议定义单独的配置,这些配置在连接池大小的定义方面更加灵活,并且允许单独的RFC授权用例。
即使该类不再被称为客户端,它的功能仍然充当客户端。 – vwegert
@vwegert:客户端和目的地在语义上有区别。旧的'JCO.Client'表示一个具体的RFC连接,而新的'JCoDestination'表示一个抽象的目标系统,就像在ABAP侧的事务SM59中定义的目标一样。 – Trixx
我部分同意@vwegert;在我看来'JCODestination'仍然是一个客户端。 SAP提供了示例java文件来说明JCODestination的用法,甚至他们称之为“分步客户端”。另一方面,我喜欢你在答案中提出的方式。你清楚地解释说,使用“客户端”这个词可能会引起混淆,因为它也可能涉及遗留类。 - 从现在开始,我将使用“入站”和“出站”两个字。 – bvdb