2017-02-27 140 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