2017-02-27 132 views
1

我们正尝试从独立的Java应用程序与SAP R3进行通信 我们将使用JCo 3.0库。SAP JCo客户端vs服务器

从文档中我了解到有两种方式可以与SAP连接。

  1. 为JCO 客户
  2. 为JCO 服务器

起初我确信,我们的应用程序将需要连接的客户端JCO。但我开始怀疑。

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

那么,它是否需要成为一个客户端或服务器?

回答

3

JCo 3.0 API模型中没有JCo客户端,但只有JCoDestinations而不是从2.1 API模型替换旧的JCO.Client

而且2种方式经由RFC协议连接到SAP是:

  1. 内向RFC通信(作为RFC客户机/ Java调用ABAP)
  2. 外向RFC通信(作为RFC服务器/ ABAP调用Java)

对于入站RFC,您需要使用JCoDestination在ABAP端执行远程功能模块。对于出站RFC,您需要在SAP网关注册JCoServer,SAP网关将接收来自ABAP端的传入请求,以便在Java端处理远程功能模块。 在这两个通信方向都有一个请求,并且可能还有对这个请求的响应,所以数据流在入站和出站RFC通信中都是双向的。入站和出站只区分谁启动RFC调用。

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

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

+0

即使该类不再被称为客户端,它的功能仍然充当客户端。 – vwegert

+0

@vwegert:客户端和目的地在语义上有区别。旧的'JCO.Client'表示一个具体的RFC连接,而新的'JCoDestination'表示一个抽象的目标系统,就像在ABAP侧的事务SM59中定义的目标一样。 – Trixx

+0

我部分同意@vwegert;在我看来'JCODestination'仍然是一个客户端。 SAP提供了示例java文件来说明JCODestination的用法,甚至他们称之为“分步客户端”。另一方面,我喜欢你在答案中提出的方式。你清楚地解释说,使用“客户端”这个词可能会引起混淆,因为它也可能涉及遗留类。 - 从现在开始,我将使用“入站”和“出站”两个字。 – bvdb

0

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

+0

你是指通信的两端,即客户端Jco连接到服务器Jco?或者你的意思是说1个单一实例需要同时成为客户端和服务器?因为我可以在没有创建客户端的情况下完美创建服务器:'JcoServer server = JCoServerFactory.getServer(SERVER_NAME);' – bvdb

+0

您可以这样做,因为您已指定客户端连接,告知JCo如何将该服务器连接到其他位置。 – vwegert