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