SAP Shared Object 01 (共享對象)

介紹

共享對象是在共享記憶體中的一個對象。共享記憶體是應用伺服器中的一個記憶體區域,可以被應用伺服器中的所有程式訪問。

在共享對象出現之前,ABAP使用EXPORT 和 IMPORT語句實現記憶體區域中內容的共享。

 EXPORT和IMPORT實現效率比較低下:因為發送方首先將需要傳遞的變數複製到記憶體中,然後接收方再從記憶體中將變數複製到接收方程式中,這兩次複製基本上沒有產生任何實際的意義。

共享記憶體通過存儲共享對象的共享對象記憶體得到增強。共享對象通過共享記憶體區域被存儲。可以通過事務程式碼SHMA對共享記憶體區域的進行創建和管理。

啟用共享記憶體的類

將類的實例存儲在共享記憶體中的前提是對象的類必須在CLASS語句中使用SHARE MEMORY ENABLED進行定義,或者在類編輯器中選擇「共享記憶體啟用」標識。

每一個區域都和全局區域根類相關聯。該根類可以包含單獨的數據和對其他啟用共享記憶體的類實例的引用,或者在自己的屬性中對匿名數據對象的引用。

區域類和區域抓手

當時用SHMA定了一個區域後,會同時創建一個相同名字的全局最終區域類,該全局類為CL_SHM_AREA(CL_ABAP_MEMORY_AREA的子類)的子類。

 在ABAP程式中,使用生成的區域類的方法專門訪問區域中的數據。有一些靜態方法可以將ABAP程式(或其他內部session)綁定到記憶體共享中的區域實例(attach methods)。

綁定創建區域類的實例作為區域抓手,同時會創建一個鎖。

ABAP程式可以使用區域抓手訪問綁定的區域實例版本,進而訪問存儲在共享對象中的數據。區域抓手還包含刪除連接或鎖定的方法(detach methods)。

 CRATE DATA – AREA HANDLE

這個語句在共享記憶體的區域實例版本中創建一個匿名數據對象做為共享對象,綁定到handle引用的區域抓手。

對於抓手,必須指定一個靜態類型為CL_ABAP_MEMORY_AREA或它的一個子類(area class)。

當這個語句執行的時候,handle必須指向一個區域抓手和這個區域抓手必須綁定一個帶有更改鎖的區域實例版本。

如果要創建這樣的引用,有以下選項:

  • 傳輸使用SHMA創建區域類的ATTACH_FOR_WRITE或ATTACH_FOR_UPDATE方法的返回值。
  • 傳輸任一區域類的GET_HANDLE_BY_OREF方法的返回值。
  • 傳輸預定義類CL_IMODE_AREA的GET_IMODE_HANDLE方法的返回值。

後者就是對當前內部模式區域抓手的引用,CREATE DATA語句就像沒有附加AREA HANDLE一樣。(這句簡單理解就是 AREA HANDLE 後面的對象只是一個簡單引用,CREATE DATA 後面的對象使用時和沒有附加AREA HANDLE一樣