My Calendar

2014年10月16日 星期四

EJB - 簡介

EJB – 簡介
         EJB 的全名是Enterprise JavaBeans,簡單來說它是一個平台讓開發人員使用Java語言開發一個portable, reusable 和 scalable 的商業應用程式。自EJB推出的時候就一直宣導它是一個元件模組或框架且可以讓我們在開發商業應用程式時不需要重新開發一些服務例如:transactions, security, automated persistence 等等。EJB允許開發人員在開發應用程式時專注在商業邏輯不需要花費時間在建立基礎架構的程式碼。
        在開發人員的觀點來看,EJB只是一段的Java程式碼執行在一個特別的運行環境稱為 EJB container, 且提供大量的component services.

EJB as a Component
        在這每當提到EJBs時,指的是伺服端components可以用它來構建應用程序的某些部分例如:商業邏輯,persistence code. 很多人往往對 components這個詞聯想到開發一個複雜和重量級的CORBA, Microsoft COM+ 程式碼。但在EJB3.0這個嶄新的世界,component 它只是一個不外乎多了一些特別功能的POJO。更重要的是,這些功能在不需要的時候都是“隱形”,不要分散component真正用途上的注意力。
        Component 背後真正的想法是有效率的封裝應用程式的行為。Component的使用者不需要了解內部如何運作。他們只需要知道傳入什麼和回傳什麼。EJB components 有三種:session beans, message-driven beansentities. Session beansmessage-driven beans 是在EJB應用程式實作商業邏輯,而entities則使用在persistence.
        Component 是可以重複使用。假設現在公司開發一個賣書的網站,設計了一個用信用卡過賬的模組只是簡單的Java物件。然後另一組人又在不同的開發環境當中開發了賣CD的網站,這時候因為開發環境的不同所以不能直接套用之前信用卡的模組,另一組人需要將你整個模組複製到他們的網站才能使用,因為沒有更容易的方法可以存取之前的模組。如果是使用EJB components建立的信用卡模組,這會讓新使用者更簡單的重複使用該模組而不需要知道其內部運作(Figure 1)。

Figure 1


EJB as a Framework
        EJB components 是在container中。Componentscontainer可以看成對商業應用程式開發提供有價值服務的框架。
        雖然很多人認為使用EJB開發中等的網頁應用程式有點大材小用。但從頭開發一個商業應用程式是不實際的。大多數的伺服端應用程式有很多是普遍的 ,就像管理應用程式狀態 ,資料庫提取或儲存資料,安全性,非同步進程,整合系統等等。
        作為一個框架,EJB container提供了這些普遍的功能,那EJB components 可以直接使用這些功能到自己的應用程式也不需要重新開發這類功能。這些服務,當EJB components 部署在EJB container的時候就能使用,就像Figure 2. 這代表開發一個高品質,豐富功能的應用程式比你所想的還要快。


Figure 2

        Container使用了一些優雅的新方法提供服務給EJB componentsmetadata annotations 是當container部署EJBs用來預設EJBs 服務的類別。在Java 5中有介紹metadata annotations是設定一段程式碼的設定,如某些class需要特定屬性。這是程式語言的宣告方式讓開發者註明需要完成什麼然後系統將程式碼加上。
        EJB meta annotations 大大的簡化了應用程式的開發和測試,不需要額外的xml 設定檔案. 這允許當開發者需要的時可宣告式的增加愛服務到EJB components就像Figure
3 描繪,annotations 將一個簡單的POJO轉換成 EJB


Figure 3
Layered architectures and EJB
        大多數的企業應用程式包含大量的components.企業應用程式是為了解決客戶特定問題所設計,但它們共享很多common 特色。舉例來說,多數企業應用程式有些UI界面,商業模式,將資料儲存到資料庫特性。因為這些共同特性,在構建企業應用程式可以跟隨常見架構或設計原則稱為 “patterns”.
        對於伺服端開發,較好patternlayered architectures. layered architecture components被劃分在tiers應用程式的每一個tier都有很好定義。EJB在建立應用程式允許採用兩種不同的layered architecture分別是:traditional four-tier architecture domain-drive design (DDD).

Traditional four-tier layered architecture
Figure 4 顯示traditional four-tier layered architecture.這個架構非常直覺也非常普及。在這架構presentation layer是負責GUI和處理user input, 然後將每個得到的request傳給business logic layer. Business logic layer是應用程式的核心而且包含工作流程和processing的邏輯。Business logic layer透過persistence tier 從資料庫獲取或儲存資料。Persistence layer database layer之上提供高階的抽象的OODatabase layer 就是DBMS


Figure 4

EJB 明顯不是presentation layer. EJB完全支援在實作商業邏輯和persistence layer. Figure 5 顯示 EJB如何透過它的服務支援這些layers.在一開始有提到bean的種類session beans message-driven beans是用在business logic tier, entities實在persistence layer.

Figure 5
        Traditional four-tier architecture 是不完美的。其中一個常見的批評就是破壞了OO模組化商業領域為物件且封裝資料和行為的理想。因為traditional architecture 專注在business process的模組化而不是領域。而且persistence layer也比較像簡單的資料處理元件,像資料庫資料的定義而不是OO世界的第一級公民。

Domain-driven design
Domain-driven design (DDD )重點放在領域的物件應該包含商業邏輯和不應該只是複製資料庫的資料。Domain objects EJB3 也稱為entities。在DDD中,一個貿易應用程式的CatalogCustomer物件是entities的典型例子,它們應該包含商業邏輯。

        然而,就算EJB發布的時它的價值已經非常清楚,但還是很困難的實作DDD。在EJB 2 實作 domain model是不可能的,因為beans不是 POJOs 且沒有支援多數的OO特色,如:inheritance polymorphism。有個好消息是EJB 3 已經可以讓我們簡單的跟隨好的OO設計或DDD。在EJB 3 Java Persistence API (JPA)定義的entities 支援OO。我們可以簡單的實作persistence object,最重要的是可以簡單的增加商業邏輯在entities上,那在透過EJB 3實作一個rich domain 是在簡單不過的任務。


Reference:
1)EJB 3 in action

沒有留言:

張貼留言