• 沒有找到結果。

中介軟體框架

3.4 框架實作設計

3.4.5 Bytecode Transformation

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

與 CustomRelationship。find 開頭的方法則分別用來查詢 CustomObject 的資料與 Metadata 以及其 CustomRelationship。deleteCustomObject 的方法則負責刪除 CustomObject 的資料。藉此 CustomizationHandler,多租戶 SaaS 開發人員便可實 現租戶客製自有領域物件增刪修查詢之功能。CustomizationHandler 結構如下:

圖 3.19:CustomizationHandler 結構設計。

3.4.5 Bytecode Transformation

中介軟體框架透過 CustomizationHandler、CustomObject 以及 CustomField 讓多租 戶 SaaS 開發人員實現客製自有領域物件的功能。但對於讓租戶客製 SaaS 所設計 領域物件的功能,傳統的解決方案是多租戶 SaaS 開發人員在想要讓租戶客製的 領域物件上實現 CustomObject 這一介面,如此開發人員便可透過 CustomObject 獲得租戶客製的資料與 Metadata。

雖然由開發人員自行實現介面的做法可以實現租戶客製 SaaS 領域物件這一 功能,但開發人員除了必須實現 CustomObject 外,還必須實現 CustomField 內的 各個方法,但 CustomField 中如何取得 Field 資料與 Metadata 的相關邏輯,開發 人員並不是那麼熟悉。為了減輕開發人員的負擔以及增加中介軟體框架的可用 性,中介軟體框架將自動幫助替開發人員在欲給予租戶客製的領域物件上實現 CustomObject 這一介面。

自動實現 CustomObject 介面的設計主要將利用 Java Annotation 與 bytecdoe

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

transformation 的技術。中介軟體框架提供一個 Annotation 名稱為

@MultiTenantable,開發人員在其欲給予租戶客製的領域物件上宣告

@MultiTenantable。

@MultiTenantable Public class foo{

}

圖 3.20:@MultiTenantable 示意圖。

中介軟體框架便可透過此 Annotation 在 runtime 時期識別是否要幫 SaaS 的 領域物件實現 CustomObject 介面。至於在 runtime 時期如何進行 bytecode transformation,中介軟體框架利用 Javaagent[29](MTAJavaAgent)、Java

Instrumentation[30]以及 Java ClassFileTransformer[31](MTAClassFileTransformer) 類別來實現,其結構如下:

圖 3.21:MTAJavaAgent、MTAClassFileTransformer 結構關係。

SaaS 開發人員透過呼叫 MTAJavaAgent initialize 方法決定何時要動態載入 Javaagent,載入 agent 後,JVM 會自動 hook 此 agent,並在初始化 MTAJavaAgent 後執行 MTAJavaAgent 的 premain 方法,此方法內所執行的動作是把

MTAClassFileTransformer 註冊至 Java Instrumentation 中。Java Instrumentation 主

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

要是我們讓可以監控在 JVM 運行的程式,不過 Java Instrumentation 也提供了讓 我們可以修改 Bytecode 的機會。透過實現 ClassFileTransformer 介面

(MTAClassFileTransformer),並註冊到 Java Instrumentation 中,當 JVM 準備定義 Class 前 MTAClassFileTransformer 的 transform 方法會被執行,這時便可使用相 關研究中所介紹的 ASM 框架來修改 SaaS 開發人員所 Annotated 的 Class,替其 實現 CustomObject 介面。以下為中介軟體框架 bytecode transformation 機制:

圖 3.22:MTA Framework runtime bytecode transformation 機制。

中介軟體框架透過 Annotation 與 Bytecode Transformation 機制,讓開發人員 得以把原本 SaaS 所提供公有領域物件轉化成租戶可客製的私有領域物件。先前 在 3.4.2 中 UTbServiceHelper 的 isMTAAnnoated 方法則是 ORM 模組判斷對映的 物件是否被標註@MultiTenantable,如果有的話則要特別處理租戶客製既有領域 的相關邏輯,另外 doCustomField 方法則是 ORM 模組特別對映租戶所客製既有 領域物件之欄位。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

第四章

相關文件