2011年3月7日 星期一

Ch04 Applicability of J2EE Technology

<<每日一字>> - intricate : 錯綜複雜的

J2EE platform使用的是一個多層次的分散式系統架構(multi-tiered distributed applicaiton model).

其中(in which) 應用程式的邏輯是被分散切割到不同的元件(component , ex: dao , dto, bizobj)中,每一個元件(component)佈署的位置都不盡相同,事實上是得看他適合被區分在哪一個層級(tier)當中而使用。

參看下圖的分類!!

1. Client tier components run on the client  machine.

2. Web tier components run on the J2EE Server.

3. Business tier components run on the J2EE Server.

4. Enterprise Information System (EIS) tier software runs on the EIS Server.

Multi-tiered JEE applications

雖說是J2EE 可支援的是多層級的架構,但在一般的姑念或常見的領域當中,還是採用了3-tiers的架構在運作.

3-tier 的應用程式在運作時主要擴展延伸了傳統的 Client/Server 架構概念,取代的是使用一個多執行緒的應用程式伺服器,在這裡開始讓我想起以前在考SCWCD, SCBCD時,很常看到的一句話( Single instance serve multi threads).

接下來來看看不同的tier當中都用了哪些技術...

  • The Client Layer

    • 使用相當標準又單純的 HTML - ~ wow,納基本上是把所有的運算及邏輯思考面的東西都放到middle tier去了

    • 使用HTML搭配AJAX / Javascript 的前端介面 - 這種的就比較常見




基本上,使用純HTML作為頁面顯示的方式是比較沒效率的,因為把所有的運作都放在Server上有點太過於操Server了,這讓我想起asp.net  的codebehind動作,在沒有搭配mvc的概念下,雖然開發很方便,反正就是直接抓取物件event然後下拉式選單 點一點,所有的前端事件我全數都能捕捉也可以直接寫,可是有時候我只是需要去隱藏前端畫面的按鈕(ex: 當跳下一個欄位之後就不能修改),這樣的需求竟然得render page again = = ,感覺有點過頭了...


而第二種使用HTML搭配AJAX / Javascript 的前端介面,就顯得友善多了,他可以幫助我們更有效的去區隔出BizLogic以及前端頁面呈現的部分,對 Server而言也比較沒有這麼多負擔,平心而論這樣的設計的程式在維護時也真的比較有機會快速看得懂,不然一堆html tag 搭配 expression tag,讓我想起新人時期寫的jsp,堪稱我腦袋最好的時候,一堆 <table> , <%%>,{},<%=%> 瘋狂混用,還可以寫到最後把有error改到沒error,真是太佩服我自己了XD


J2EE 的前端顯示技術,最普為人知且廣泛使用的就是JSP了。


J2EE application client是一種 thick ( RMI-IIOP - Remote Method Invocation Internet Inter-ORB Protocol)  java application,這有別於一般的單獨的java應用程式,而是一個J2EE的Client 元件,通常是在EAR當中,佈署時一同佈署在J2EE Container上,但同樣的也因為這樣他似乎是有點笨重的(需要能夠存取全數的lib path resource)。


Kim's opinion : "ㄜ 有哪個技術的前端平台式超級輕量化的XD...又要能跨layer又要輕量不太可能吧!!"




  • The Presentation Layer

    • 展示(呈現)層進行了網頁頁面資料轉換( generate the backend bizlogc result via the jsp to pure html),動態的資料內容來源可透過legacy system , data source , db ...etc。

    • 在presentation layer實作的選擇上有很多種,像是早期的CGI,甚至是Netscape還提供過Server-side的JavaScript(@@"...我孤陋寡聞沒看過),也有微軟的asp / asp.net,Java 的jsp/servlet

    • 展示層的實作一般都會在常見的web server中完全可見其影,像是IIS / weblogic / websphere,web server 可以透過掌握http request 進行處理客戶端頁面需求,進而提供不管是純 html or dynamic page。



  • The Business Logic Layer   <<每日一字>>bulk - 體積 , adequate -充足


最大的挑戰是配置足夠的時間以及資源來具體的實作客戶需求以及相關業務邏輯,而業務邏輯則至少包括了以下這些資訊。






    • Performance of all required calculations and validations

    • Workflow management ( including keeping track of session data )

    • Management of all data access for the presentation layer




在J2EE的架構中,建議的最佳做法是把BizLogic都抽到EJB來進行,對於與平台相依性低的 CORBA (Common Object Request Broker Architecture)物件,j2ee 也能與之透過展示層進行溝通及存取。


CORBA的最主要核心物件是ORB,他封裝了物件之間的溝通架構基礎,用來處理物件配置、連線管理、以及資料傳遞等行為,ORB Core主要工作就是用來對request作溝通處理。(謎之音:我發誓我還沒用過CORBA =.=)


相較於展示層(Presentation layer)而言, 業務邏輯層(Biz Logic layer)大多都是實作在AP server上,AP Server自動化了很多的服務,像是交易、安全管理、資料儲存管理、連線池設置、訊息傳遞(JMS),甚至是naming services。基於現在大多的ap server 都很強大,可以讓系統開發時更專注於功能需求內容,但換句話說其實我們這些Coding 人員,就會越來越對架構底層一知半解,一旦有問題就只能付費charge,這也是一個值得思考的問題了!!!




  • The Data Layer


終於看到資料層了,這個常常被爭論不休的到底是不是該把dao , dto 放入biz logic裡面的討論,可說是不下百次,一般說法是要盡可能抽離,只是先前在看UML OOAD時,對於在繪製UML Active Diagram時有說到,若只是很單純的對資料面作一個查詢而以的話,事實上可以不再需要抽出來繪製,直接從參與的物件拉一條線到目的(資料)物件即可。


好! 回到正題,data layer 顧名思義就是要做資料的控管用的,資料層可以是db , file,另一方面也會包含了有資料存取機制的legacy large file... etc,data layer 提供給business layer 所需要的資料以及進行資料的處理細節。


<<每日一字>> strive  - 努力


為了避免讓不同layer之間的程式碼變的耦合性太高(書上是寫說要避免 more interoperable,過多的交互操作),系統架構師須努力(strive)的去把程式作有效的區隔,避免把業務邏輯資訊放進Data Layer,有一句所謂的biz is biz ~有時候可以透過基礎的資料庫設計就能把這問題給避免掉。


J2EE Application Components

  • Client Components - Application clients and applets

  • Web Components -  Java Servlet and JSP technology


web component 就只有jsp / servlet 而已其他的applet , html , server-side util class都不是


Web tier




  • Business Components - EJB Components  <<每日一字>> transient - 短瞬的、瞬間的

    • 包括有 Session Bean / Entity Bean / Message-Driven Bean

    • Message driven beans feature a session bean and a Java Message Service message listener.They allow business components to receive asynchronous JMS messages.




Business Tier


看到這三個有種三劍客的感覺~ 在J2EE 平台上這三者是被可以被包入企業應用等級的應用程式進行佈署的。


Development Methodology and Process

 




[caption id="attachment_124" align="alignnone" width="600" caption="J2EE APP 程式檔架構"][/caption]

一個標準的J2EE app包含了有兩種不同的模組組件:EJB and Web Components。


在開發app前我們需要好好地選擇一下開發的工具:




  • Modeling Tools - UML

  • Development Tools - Spring / Struts  / Sun's JEE BluePrints (這些是2010年推薦使用)


Development Phases of J2EE Applications

EJB creation / Web Component creation / Application assembly / Application deployment


雖然ejb , web 的開發不是循序進行的但是後面的組合動作與佈署卻是循序進行的


 




[caption id="attachment_125" align="alignnone" width="600" caption="EAR file"][/caption]

The Assembler dothing the followings - Setting the references in the specific  xml files

  • Database connection pools

  • Mail sessions

  • URL connections

  • JMS queues and topics

  • EJB references


J2EE application Deployment

  • 傳送J2EE app EAR在 J2EE Server上。(原文用stage(表演) the EAR ...),這裡我的感覺是有點像過去在使用weblogic時,常常遇到的stage / non-stage的名詞,而通常都是設置為是否cp同一份EAR/JAR/WAR再行布署,或者是直接以該檔案進行後續安裝作業,只能說對於stage這個動詞還有點不適那麼明確清楚了= =

  • 透過設定DD檔,調整系統環境參數,使得app足以正常運作。

  • 驗證EAR file檔案內容是否well formed,且確定可正確編譯完成。

  • Deploy(install) the EAR into the J2EE Server。


J2EE Patterns







[caption id="attachment_127" align="alignnone" width="600" caption="J2EE Pattern"][/caption]





沒有留言: