【單元課程】Enterprise Java/Spring 實作導引與範例詳解 (09/20,21,27)

推一下下個月 HSDc. 所推出新規劃的實務性操作課程 (以 Java/Spring 程式碼為重心),焦點是擺在以中間層為首要開發的模式,然後設定每一個階段的目標及開發產出 (每一個階段產出都個別儲存起來)。 可以讓學員看到每一個階段 “具體” 的 Model 與 程式碼的對應,並可以成為範本,直接方便應用在工作實務上。


各位好:

課程名稱; 「Enterprise Java/Spring 實作導引與範例詳解」
課程相關資訊: http://www.hsdc.com.tw/course_signup_20080920_enterprise_java_spring_practice

【台北場】09/20,21,27 (星期六、日、六),每次上課為六個小時(AM 9:30~PM 4:30)。

§課程說明:
系統的延展性設計,是知道不能把企業最重要的命脈—企業邏輯 (Business Logic),給實現在 UI 層或 資料庫的 stored-procedure;前者因為 UI (尤以 Web-based)的技術時常在變,而後者則是導致資料庫系統無法抽換(成本、分散等考量)的元兇。 所以,最基本的軟體開發態度,必然會實現 MVC (Model-View-Control),所謂三層式 (3-tier)架構的實體框架,然後將企業邏輯集中並實作在中間層 (Middle-tier)的物件。先不論是功能性的控制物件,抑或本質性領域的企業物件,反正就是必然要先集中在中間層,並以最單純的語言機制,如 Pure Java or .NET 語言來實現,如此才不致因廠商所制訂的規格的變動而跟著變動。

而關於系統的彈性度設計,則是因諸多功能性服務,經常會共用到某些企業邏輯,所以會把從原來置於控制性物件的邏輯,分派 (delegate)至處理該邏輯的企業物件上。這是屬於物件責任分派的議題,會影響到的是,當需求的變動時,能把變動的震盪影響,給侷限在某一小塊範圍之內,而不致「牽一髮而動全身」。

本次的課程內容,80% 著重在實作的導引上,藉由透過每個階段的程式碼範例,從行動中來展現上述的理念,與設計的成果。

透過課程中所提供從使用案例 (Use Case)的案例陳述,來導引「程式碼」的開發實作:
 1. 為每一個使用案例設計控制類別,並從 EA UML 工具 Code-Gen 至 Eclipse。
 2. 利用循序圖表達 UI, 控制類別, 資料庫 三者的訊息互動。
 3. 為每一個控制類別撰寫功能測試程式,以驗證功能的正確與完整性。
 4. 設計 DAO 類別,實現 Spring DAO 框架,並展示 JDBC 與 Hibernate 的實作,連結資料庫(HSQLDB and MySQL)。
 5. 利用 Struts(or JFS) Web UI,以及 Swing UI,來展現不同 UI 類型,連結控制類別取得相同的服務。
 6. 讓控制類別展現延展性,利用委派 (Delegate)的技巧,連結企業物件,取得運算邏輯結果。

§課程特色:
 o 將程式碼的開發,分為多個階段,每個階段均有明確的 “階段達成目標”, “開發產出”, “操作步驟(Step by Step)。
 o 每一個階段的開發產出,包括程式碼與設計模型檔,均會儲存在個別的目錄,讓學員可以很清楚地針對各個階段的產出來研究與實作練習。
 o 每一個階段的實作,講師會親自於課程中示範操作,並針對每一個步驟講解。(學員於課前先行透過所附教學光碟練習,再於課堂中提問,效果更好)
 o 所內含的 UML Model 檔與原始程式碼,可成為開發上的範本,均可以供學員應用在工作實務上。

————————————————————————————————————–
§報名資訊:
由於本站線上報名系統尚未測試啟用,煩請報名學員填寫下列資料報名 (下列欄位前為 * 者請務必填寫),並以 Email 寄至: service.hsdc@gmail.com
  =====================================================================================
  * 姓名:
  * 電子郵件:
  * 聯絡電話:
  任職公司與職位:
  備註(請填上如 ATM 轉帳帳號(後五碼即可)與新生或舊生等資訊):
  =====================================================================================
 o 為確保報名足額人數,煩請先以 ATM 轉帳預約費用($500),並請於報名表備註欄位內,註明您的轉帳帳號末 5 碼與轉帳金額
  (若實在不及轉帳者,仍可現場報名,但請在報名表內註明)。
  ATM 帳號: 新光銀行 (103) 帳號: 0772-50-100979-9
 o 報名經確認後,本站即會寄送確認通知信給報名學員。
 o 本課程上課學員需滿 20 人以上,若未達上課人數則延期至下一梯次開課,已報名學員,本中心會電話通知,並主動辦理退費(或可保留至下一梯次)。
————————————————————————————————————–

————————————————————————————————————–
§課程名稱: Enterprise Java/Spring 實作導引與範例詳解 (18 Hrs)
§授課日期:
 o 2008/09/20,21,27 (星期六、日、六),每次上課為六個小時(AM 9:30~PM 4:30)。課後並留半個小時供學員自由提問。
§授課地點:
 o 開羅會議中心,地址:台北市光復南路65號B2 (光復南路、市民大道交接口)。
 o 參考交通與地圖。 http://www.hsdc.com.tw/education/cario_map
§使用工具:
 o EA(Enterprise Architect) 7.1(Trial) UML Tool、JDK 1.6、Java Eclipse IDE、TomCat Web Server 。
 o 所有需要使用到的工具(包括上述所提)、應用程式,以及原始碼、UML Model檔等,均會附於教學光碟內。
§授課講師:
 o 賴信仁(Ringle Lai)、王克明(Kenming Wang)、鄒順安(Steve Chou)。
 o 擅長以非常淺顯易懂的比喻及說明,將複雜的系統抽絲剝繭,重新釐清脈絡,讓學員一清二楚,並善於引導學員具備設計應有的反思能力。
§適合學員:
 o 系統分析/設計(SA/SD), PM, Programmer 等在職軟體開發者。
 o 學校資訊講師/在學相關資訊科系學生。
 o 學員最好有基本的程式設計能力(基本即可)。
§課程費用:
 o $5,800 (含稅)。
 o 曾經上課過本公司的「單元系列課程」學員,優惠 $5,200 (含稅)。 (請記得註明為舊生,本公司查詢確認即以優惠算)
 o 三人同行,或同時報名另一單元課程,亦比照舊生的優惠折扣,每位只需$5,200 (含稅)。
 o 大學/研究所 資訊相關科系講師、助教或教授,出示相關證明,我們會以建教合作方式計費。(請另以電話聯絡)
 o 清貧或由家扶中心推薦,能出示相關證明,所有費用 免費!!

————————————————————————————————————–
【課程大綱 — 18 Hrs 課程】

※ Code Engineering— 實現 EA 與 Eclipse 的正反向工程
 o 設計控制類別(Class),實現使用案例(Use Case)的需求陳述。
 o 設計循序圖,表達 UI 表單, 控制物件, 資料庫 的訊息互動。
 o 利用 EA UML 工具,轉出控制類別的程式碼框架至 Eclipse 。
 o 修改控制類別的程式碼結構,並反轉(Reverse)回 UML Class Model。

※ 中間層類別的開發實作
 o 建立可以完整開發 Spring Framework 的 Eclipse 專案。
 o 建立 Eclipse 與 EA 同步(Synchronize)的管道 (Class Model 與 程式碼的同步)。
 o 撰寫與修正 控制類別 的實作細節。
 o 利用 JUnit 測試框架,撰寫控制類別的功能測試 (Functional Test)程式碼。
 o 實現使用案例內的例外陳述,撰寫企業層級的例外處理 (Exception Handeling)程式碼。

※ 連結資料庫
 o 利用 EA 設計資料表格的 DDL (Data Definition Language) 陳述文字檔。
 o 建立測試用的資料庫 (利用 HSQLDB),執行 DDL SQL 敘述。
 o 透過 Spring DAO 框架連結資料庫。
  o 利用 JDBC 的實作方式
  o 利用 Hibernate 的實作方式

※ UI 表單的設計
 o Web 端 UI 的實作 by Struts。
 o Stand-alone 的 UI 實作 by Swing。
 o 利用上述不同型態的 UI 連結控制類別,並展現系統所提供的服務。

※ 程式碼的重整
 o 利用委派 (Delegate)的設計技巧,將企業邏輯從控制物件分派給企業物件,讓物件的責任更清晰。
 o 利用多型 (Polymorphism)的技巧,設計 一般化-特殊化 的企業物件,讓程式碼更易於維護與有彈性。

High-quality Software Design Consultant Team.
Email: service.hsdc@gmail.com
TEL:(02) 2722-7179
軟體專業設計: http://www.hsdc.com.tw

Java Spring 簡單範例操作與學習指引〈2〉

*** 第一個階段子目標 ***

  1. 確實在 Eclipse IDE工具內建立可以完整開發 Spring-based 的應用程式。
  2. 新增 middle-tier性質專案(純粹是 java class,沒有 UI),撰寫 {員工薪資管理Control.java} 這個控制物件的程式碼框架 (skeleton),新增一個 Spring Beans 的 XML設定檔 (config file),在設定檔內設定該控制物件的相關屬性。
  3. 利用 JUnit 測試框架 (Test Framework, Eclipse 內建),馬上撰寫該控制物件的功能測試程式碼。

一、新增專案

  1. 選擇 [File]→[New]→[Project…],當出現 [New Project] 的 wizard 對話框時,選擇 [Spring]→「Spring Project」,然後按下【Next】,出現 [New Spring Project] 對話框內,輸入新增的專案名稱: HRDemo,其它選項照預設即可,按下【Finish】完成,並將 eclipse的視界 (perspective)切至 Java EE。

    圖 3、新增 Spring Project 的對話框
    圖 3、新增 Spring Project 的對話框

  2. 在 [Project Explorer] 的專案視窗內,將滑鼠移至專案的根目錄 (HRDemo)下,右鍵點選 [Build Path]→[Configure Build Path …],出現 [Properties for HRDemo]的對話框,然後將標籤切換至 [Libraries],並點擊【Add Libraries…】,當出現 [Add Library] 對話框後,選擇 [User Library] 然後點擊 【Next】。

    閱讀全文 »

Java Spring 簡單範例操作與學習指引〈1〉

寫在前面

我想藉由一個小小的功能案例,來分享個人在學習所謂 “新的 IT 技術”,尤其是偏向實作面的 “How-to” ,包括工具的操作,與程式的寫碼等,是如何從所設定的主要完成目標,再分解成數個階段性的子目標,然後一次只克服一小段問題,再往前漸增推進,往下一個階段目標前進。 同時,這也算是一份提供給軟體開發入門的學習操作指引的分享文件。

實作的過程中,所有相關的參考文件,均是透過 Google 的查詢,以及與實作規格相關的線上文件。 當然若工作上的需要,也是可以考慮購買 “How-to” 操作性的參考書籍翻閱。 不過我是覺得好像透過網路上都可以查得到,雖然可能比較零散,但同時可以增進自己如何下關鍵字找 “How-to” 的技能,也是不錯的。

我想提供兩個不同平台的版本,一為本系列案例中的 Java + Spring;另一為 C#.NET + LINQ (會以另外一份操作指引文件分享)。 可以說是把 Spring 與 LINQ 主要實現在 O-R (Object-Relation) Mapping 的實作議題上。

這個功能案例很簡單: 系統提供 “計算員工薪資 By ID” 、 “計算所有員工薪資” 功能 (從使用案例的需求而來)。

案例雖然很簡單,但是它是可以 “成長” 的,而且也具延展性。 最起碼我把它可以區分為兩個階段的上線目標:

  • 第一個階段:快速實現功能需求,但保留了可以具延展性的框架。
  • 第二個階段:找出穩定的共用元素,讓系統更有彈性。

為了能順應這兩個階段的目標,一些軟體設計的最基本原則就會隱含在內,同時這也是這個範例期能達成的標的:

  1. 從系統中間層(middleware),表達服務(service),也就是功能需求的控制物件(control object)開始,撰寫程式碼;而非從展示層(presentation)的 UI 表單開始。 (焦點應該是擺在以服務為中心、置於中間層的控制物件;不要再從 UI 開始來開發系統了,那很容易會是 2-tier 思維。)
  2. 實現企業邏輯於中間層的控制物件,而不會寫在 UI scripts 上,或是資料庫的 stored-procedure。否則系統即喪失了延展性。
  3. 寫完一個個實現系統功能的控制物件後 (本例只完成一個控制物件— {員工薪資管理Control.java}),馬上就撰寫可以測試該控制物件功能的測試程式碼 (Functional Test Code);當控制物件與測試程式碼開發告一段落後,才開始寫 UI 表單來驗證控制物件所提供的功能服務。
  4. 實現 Java Spring Framework 的開發— 以 Spring DAO, O-R Mapping 框架為主。
  5. 確實可以滿足使用者所需要的系統功能後 (確實可以上線使用),下一個階段則是結構的重整,也就是重構 (Refactoring), 而重構的前提就是不能影響到已上線的功能。 本例會採物件導向的委派 (delegate)與多型 (polymorphism)的技巧。

開發環境建置

需要軟件

  • Java JRE (Java runtime environment), JRE 5/6 以上版本。
    下載: http://java.sun.com/javase/downloads/
  • Eclipse IDE for Java EE Developers (目前使用 3.3.2 最新版, 06/25/2008)
    下載: http://www.eclipse.org/downloads/
  • Spring Framework (目前最新為 2.5.5 , 06/25/2008)
    下載: http://www.springframework.org/download
  • Spring IDE (目前使用 2.0.6, 06/25/2008,直接透過 Eclipse 下載安裝)
    安裝參考文件: http://springide.org/project/wiki/SpringideInstall

安裝 Spring Framework

  • 建議從上述網址所下載 Spring Framework 的壓縮檔為 spring-framework-2.X-with-dependencies.zip。 該壓縮檔內除了包括 Spring 所需的 library 外,還包括了諸多在系統開發上,其它經常用到的 Open Source 專案的相關連套件,包括 ant, axis, hibernate, log4j, struts …等。
  • 解壓縮該檔案,並將解壓縮的目錄放置在常用 java 開發的 library 路徑內,例如:
    C:\java\lib\spring-framework-2.X

在 Eclipse (Java EE 版本)上安裝 Spring IDE

  1. 在 Eclipse 的選單 [Help]→[Software Updates], 選擇 [Find and Install…], 當出現 [Features Update] 對話框時, 選擇 [Search for new features to install], 按下【Next】進入 [update site to visit] 對話框。 然後點選 【New Remote Site】, 當出現 [New Update Site] 對話框時, 在 [Name] 欄位輸入:Spring IDE;在 [URL] 欄位輸入:http://springide.org/update 。 輸入完成後按下【Finish】,Eclipse 即會至該網址搜尋並列出最新版本的 Spring IDE 與其相關連的套件列表。

    Spring 簡單範例操作指引 ScreenShot
    圖 1、新增 Update Site 的名字與 URL 位址

  2. 現的對話框內,勾選「Spring IDE」與「AJDT」套件, 其中「Spring IDE」內的「Dependencies」套件不要勾選(該套件是適用在 eclipse 3.2.x 版本)。 勾選完畢後選擇【Next】進入下一 License對話框, 點選同意後再按下【Next】到下個對話框, 最終選擇 【Finish】後,eclipse 即會開始安裝 Spring IDE 等套件。 安裝完後重新啟動 eclipse 即可開發 Spring-based 的專案。

    Spring 簡單範例操作指引 ScreenShot
    圖 2、勾選要安裝的 Spring IDE 與 相關連的套件

【課程大綱】活用 UML 與 Java Spring (48 hrs)

※ 關於課程說明與報名等資訊請參考:
【軟體設計塑模與實作課程】- 活用 UML 與 Java Spring (晚上班,09/05)

課程相關說明訊息與課程大綱文件下載

課程名稱:活用 UML 與 Java Spring — 課程大綱(48 hrs)

 Iteration #1
 (36 hrs)

  • 課程目標:
    捕捉系統功能需求,快速設計,立即產出程式碼。
基礎觀念
(6 hrs)
  • 物件思維基礎功
  • 開發方法論介紹
    • UML 2.0 綜觀(Overview)介紹
    • RUP and Agile 介紹
    • 實例 – 制訂符合團隊性格的開發流程
Modeling by UML 三劍客
(10 hrs)
  • 建構使用案例模型,實現企業流程的需求
  • 設計物件合作循序圖,實現使用案例
  • 類別圖與E-R圖基本設計
    • 設計控制(Control)與資料(Data)物件。
    • 產出符合 MySQL DB的 DDL SQL 敘述
  • 利用 EA 實現正向工程,產出 Java 程式碼框架
實做面 by Spring Framework
(20 hrs)
  • Spring Framework 綜觀介紹
    • 輕量級(light-weigh)的應用系統容器架構介紹
    • Spring 在實體 3-tier 的角色定位與架構設計
    • Spring 重要特性介紹,包括 IOC與相依性關係、Domain-driven 的設計設計觀
  • 利用 Hibernate 實現永續性機制
    • Hibernate 設定與實作
    • HQL 語法與 O-R Mapping 原則
    • 使用 Hibernate Template
    • 交易與 Session 管理機制介紹
  • 利用 Struts 實做 Web Form
    • 將 UI 與企業邏輯確實分離的基礎設計觀
    • Web 表單連結至中間層控制物件,實現 MVC 設計樣式
案例分析與實作
– Iteration #1
(實做部分涵蓋於上述課程內)
  • 利用 EA UML 工具
    • 實做使用案例模型、類別圖與E-R圖、循序圖
    • 利用 Code-Generator 機制,產出程式碼框架
  • 利用 Java Eclipse IDE 撰寫
    • Struts Web 表單
    • Java 控制(Control) 物件 by Spring
    • Java 資料(Data)物件 by Hibernate
  • 應用程式的部署(Deploy) – JBoss Application Server
  • 利用 JUnit 撰寫功能與單元測試程式碼

 Iteration #2
 (12 hrs)

  • 課程目標:
    重構程式碼與類別結構,讓系統更有彈性。
程式碼的重構
(6 hrs)
  • 程式碼的重構
    • 運用設計樣式(Design Patterns)重構程式碼
    • 使用工具進行重構
Model 的 Refine
(4 hrs)
  • 運用交易樣式(Transaction Patterns)找出核心交易物件
  • 重新分派責任,將資料物件重整成為企業物件
  • 進行分析類別(Analysis Class)的設計
    • Control 物件
    • Entity 物件
    • Boundary 物件
案例分析與實作
– Iteration #2
(實做部分涵蓋於上述課程內)
  • 利用 Eclipse 新增與修改程式碼結構
  • 利用 EA 更新類別與E-R圖,並重新部署 DDL DB Schema 至 MySQL DB 內
  • 利用 EA 實現正反向工程,達成程式碼與 Model 的同步
  • 利用 Iteration #1 所撰寫的測試碼驗證與修正被重構的程式碼
整體開發流程總複習
(2 hrs)
  • 檢視兩個循環(Iteration)開發所各自產出的設計圖與程式碼
  • 回顧每一個流程開發階段的產出與所運用的設計、技術與技能

To Bean or Not to Bean, That’s the Question

J2EE, Java 2 Enterprise Edition,係以 Sun 為主導的眾多廠商,包括 IBM、Oracle、Bea、Sybase…等,針對企業用戶提供一個完整以 “Java-based Solution” 的整合開發環境的規格。

由“Enterprise”一字來看,即可知道,J2EE 的規格主要服務是以企業用戶為對象。為了能提供高產值、快速開發、高品質、易於維護的企業應用系統,有別於傳統 Client-Server 的架構,J2EE 是環繞以元件化(Component-based)為主的軟體設計開發。

而為了能支援以元件化為主的軟體開發,從使用者介面端(User Interface)至中間層(Middleware)的應用軟體伺服器(Application Server),乃至後端資料庫的存取等,都要一套完整的 “Total Solution”。事實上,J2EE 是結合了眾多 Java 的技術(每種技術均由 Sun 等來制訂規格),匯集而成的一種 Enterprise 架構。

1998 年三月,Sun 制訂了 EJB(Enterprise JavaBeans) 的規格,該規格提出的宗旨在於定義 Server-Side 的元件化(Component)標準架構,並藉由此來簡化分散式企業資訊系統的設計。

EJB 規格一直是 Sun 等系統廠商所力拱的 J2EE 核心規格。至今發展亦有 7 年了,泛 Java-based Solution 的系統廠商,依循同是以 EJB 標準規格為核心,投入非常多的資源來開發 J2EE 應用軟體伺服器(Application Server),這幾年下來,J2EE 應用伺服器在穩定、效能與安全性上,不可謂之已為成熟的應用系統平台了。

但是,基於以 EJB 規格所開發的企業級應用系統,卻是在 Develper 心目中褒貶不一。採用 EJB 的設計開發與否,各有其擁護的觀點與理由。

回到當初制訂 EJB 規格制訂的本意:

  • 確定 IT 開發者的職掌。
    「IT 開發人員只需專注於企業邏輯的開發」;「系統層次的服務應該是交由廠商來負責提供」。
  • 平台的獨立。
    包括了作業系統、資料庫系統,甚至於 Middleware 應用平台 (EJB 規格制訂了不同廠商的 EJB Container 均可以相互溝通),都可以將 EJB 的開發與部署與實質的系統平台抽離。
  • 縮短開發的時程。
    元件化規格的用意在於期能達成 “彈性”、”延展性”、”可重用性” 等,而降低對於系統的維護成本;又,因 IT 開發者不再需要開發底層的系統服務機制,而可以專注於企業應用邏輯的開發。
  • 廣泛的工業支援。
    「合眾弱以攻一強」! 這已是以拱 Java-based 的系統廠商們的共識。任一家自行所推出的規格,均不足以成為標準的規格。結合廠商們的核心專業,共同制訂標準的工業規格,才有機會與 Microsoft 的 Enterprise Solution 相抗衡。

看來制訂 EJB 規格的系統廠商們是有一番好意的。但是,實際上,許多基於以 EJB 為核心的應用系統開發,卻又不如上述所提及真有這麼多的好處。

許多 Developer 心中的 “痛” 可能包括了:沒有一致的 IDE 開發環境、不容易界定 Session 與 Entity Bean 的責任分派、應用程式的部署(Deployment)與測試相形困難、EJB 應用伺服器系統的維護遠來得比資料庫維護困難太多...等。

原來期望的應該是 “light-weight” 的開發,而能享受到 “企業級” 的服務;結果卻是 “heavy-weight” 的開發,開發時程反而延長,並造成系統的維護與部署等的負擔。

那麼,是否就如同上述所提及的一點,因為期望系統的彈性、延展性與可重用性才會決定使用 EJB? 畢竟,EJB 是元件化的規格,以元件化的開發,即可以達成元件的 “可重用性”。

若真如此想,那可能又會再失望一次了。 “元件化(Component-based)一詞” 並非是採用了業界所提供的元件規格,而其內涵是指在設計的思維上,因為懂得將變動侷限在一小塊範圍,當需要抽離時,如同舊的 AGP 顯示卡,因效能不佳被抽換成更高階的顯示卡,而不至影響到整台 PC 主機的變動。

如此說來,那何時會考慮採用 EJB 的規格,難道 EJB 真的一無是處嗎?
不然不然, OLTP(Online Transaction Procss)-based 的應用系統,越是要求高效能、高穩定的巨量交易處理,採用以 EJB 為核心的應用系統,的確是可以享受到系統廠商所提供的底層服務,包括了:交易機制、遠端元件之間的緊密式(Tight Coupling)溝通、安全性等。

尤其是交易機制的處理,這是 EJB 應用伺服器最為擅長的,CTM(Component Transaction Monitor) 的機制,也是決定了J2EE 平台的優劣之分。

只要觀察制訂 EJB 規格的主要系統廠商,就可以瞭解為何這些系統廠商的核心專長是在於提供企業級應用程式的底層系統服務。因為絕大部分是資料庫系統的重量級廠商,如 Oracle、IBM、Sybase 等;或是如 BEA 擅長提供 Middleware 的交易機制的處理平台等。

作為一個 IT 的 Architect,會冷靜地去審慎、思考與評估,未來的願景與現實的環境,兩者之間的綜合考量下,來決定是否採用以 EJB 或是 Non-EJB 的 J2EE 應用系統平台的開發。

To Bean or Not to Bean, That’s your choice.

軟體思維顧問

專職軟體輔導與教育訓練的獨立顧問。輔導企業資訊單位如何有效組織系統開發與維護;輔導開發人員達成有效的專業分工。傳授如何把軟體作軟 (Keeping Software Soft)的技能,得以提昇系統的彈性/延展,並進而創造系統的再利用價值。

Personal