1. 程式人生 > >SAP R3和JAVA交換數據之JCO

SAP R3和JAVA交換數據之JCO

append dclient 查找 結果 .net 邏輯 etc detail 多線程

SAP Java Connector (JCo)

SAP的JAVA中間件,使用它可以使SAP的客戶和合作夥伴使用JAVA語言輕松地建立可以和SAP系統通信的兼容的組件和應用程序下面是JCo一些顯著的特征:

1. 支持雙向調用(ABAP調用JAVA和JAVA調用ABAP)

2. 支持Unicode和非Unicode編碼的系統

3. 為程序員封裝了一些難以理解和處理的部分,比如代碼頁,數據類型轉換和連接池等等

4. 屏蔽了RFC和DDIC的一些細節,這樣可以讓程序員專註於業務邏輯的處理,而不必去理會過於底層的東西

5. 容易學習和使用的API和JAVA類的設計

6. 動態查找和緩存元數據

Java應用程序使用JCo的API進行連接,RFC中間件使用RFC庫通過JNI來連接SAP的R/3系統,如下圖所示:

技術分享圖片

連接過程:

1. 創建一個連接池 addClientPool()

2. 創建一個BOR,它包含運行時環境所有function模塊的元數據 createRepository()

3. 創建function template getFunctionTemplate()

4. 創建function getFunction()

5. 從連接池中取出一個連接的實例 getClient()

6. 設置傳遞給function模塊的輸入參數 getImportParameterList()

7. 執行這個function excute()

8. 得到function執行後得到的輸出參數 getExportParameterList()

9. 銷毀連接池 removeClientPool()

性能優化註意事項

1. 因為連接池中的連接是可重用和可保持的,所以可以降低系統開銷,最大並發連接數量的限制避免過多地占用SAP系統的資源,盡管如此,也不要使用過小的最大並發連接數從而造成應用系統的性能瓶頸,為了容納由應用系統造成的額外負載,SAP系統要經過一些配置。

2. 使用一個新的function對象時,為了提高性能而重用已有的function對象,不僅是多於的,而且還很危險,因為JCo的Repository為每個function模塊緩存了元數據,如果重用一個含有表參數的function,而這個function中的表中的行數據沒有被清除,那麽更多的行數據會添加到這個表上,從而會造成錯誤的結果,這是使用一個新的function對象時要註意的。

3. 只需使用一個Repository對象,因為Repository對象可以動態重新得到SAP function模塊中的元數據並重新緩存,所以使用一個就夠了,如果使用過多的Repository對象,會降低應用系統和SAP系統的性能

4. 應用系統只使用了function中的一小部分參數,為了提高性能,可以使用setActive()方法將那些應用程序不使用的參數設置為非活動狀態,包括Table Parameter、ParameterList以及JCO.Request對象

5. 添加多行數據到JCO的Table對象中時,使用appendRows(int num_rows)方法代替appendRow()方法,這樣可以提高性能

同步問題

為了提高性能,JCO只在訪問連接池和Repository對象時采取同步,其他的操作都是異步的,在多線程的環境下,不同線程之間共享對象(比如Table對象)是值得警惕的,並且一個連接對象是不能共享訪問的,這樣導致發生異常Exception

轉載至 http://blog.csdn.net/w5q7c3/article/details/8988982

SAP R3和JAVA交換數據之JCO