顯示具有 JavaEE 標籤的文章。 顯示所有文章
顯示具有 JavaEE 標籤的文章。 顯示所有文章

2011年12月7日 星期三

Java MVC sample #2 with Maven

takeshi這幾天花了點時間,把sample project#2 從eclipse專案配置改成Apache Maven專案配置;之前的sample project #1 & #2,純粹是為了教導新人方便,所以直接基於Eclispe專案配置,讓新人直接把專案匯入Eclipse之後,就可快速運作程式並學習

但在實務上,takeshi比較偏好使用Maven來建置專案,原因主要如下

1. 依靠特定IDE的專案配置是不理想的
在Java的世界裡,有太多IDE在競爭了(Eclipse、Netbeans、IntelliJ、JDeveloper,etc...),所以你不能保證你的環境在使用的IDE,未來的某一天會不會被取代掉;像takeshi自己和同事就有遇過要把JBuilder-based專案配置 換成 Eclispe-based專案配置 的需求

使用了Maven,由Maven來提供一個預設的配置環境和完整建置流程,所有使用Maven的專案,大家的專案配置都一模一樣,這樣從別的專案過來支援的Developer,很快地就可以對你的專案上手;因為Maven是Apache Foundation的標準建置工具,所以理所當然地,所有還想繼續混下去的IDE,也不得不支援它囉!這樣的好處是你可以隨時抽換你使用的IDE或是不同Developer使用自己喜好的IDE,而不會帶來專案配置結構的任何改變,仍然可以維持版本控制系統source的一致性!

2. 相依性管理
使用Maven的另一個好處,就是它會幫你管理jar檔之間的一致性,你只需要在Maven的pom.xml設定檔,把相依性設定好,在運行Maven的時候,它就會自動地到Maven Repository去尋找你所指定的jar檔,並且幫你放置在你專案建置好的最終檔案中(例如war檔,就會把相依jar檔放置在/WEB-INF/lib中)

例如在pom.xml檔案中加入以下設定,請Maven在建置專案時,幫你把commons-lang-2.6.jar加入到你的專案中

    commons-lang
    commons-lang
    2.6


以下是sample project#2的相依性圖
在執行專案的時候,只要把專案和pom.xml一起放置在版本控制系統中,任何新加入專案的Developer,只要把整個專案從版本控制系統copy下來,運行Maven一次,專案的環境就建置完成了!(不包含IDE的設定啦...)

3. 完整的建置流程
隨著近代軟體開發方法論的演進,自動化可回歸的測試已成了顯學,像takeshi自己就有「無測試程式恐慌症」,就是看到沒有測試程式的案子,就會頭痛、暈眩、上吐下瀉等症狀一一浮現...假如你跟我有同樣症狀,那就恭喜你稍稍跟上時代的腳步了:p

但即使你撰寫了涵蓋率高的測試程式,仍然需要把它們整合到你的專案建置(build)流程中,這樣才能確保你的專案在每一次建置時,都通過了大家擠破腦袋、流血流汗產生的測試程式,藉以提高專案的品質;而Maven天生就提供了完整的建置流程,從compile class檔...運行單元測試...運行整合測試...到建置結果檔案(jar、war,etc),甚至是自動幫你佈署到特定環境(dev、test、prod,etc),這些都可以交給Maven幫你處理ㄛ!
Maven的建置流程基本如下圖所示,詳細文件請看這

更有甚者,Maven也可以整合進近年相當火紅的Continuous Integration開發模式中,不過takeshi目前也還沒接觸過這一塊,未來有機會再來討論囉~


講了這麼多,我還沒把sample project #2 with Maven的連結給大家哩:p,連結在這~
使用步驟如下...
1. 把專案下載至本機後,解壓縮至安裝路徑

2. 下載Maven並安裝,跟一般的Java程式(Ant、Tomcat,etc)安裝步驟大同小異,詳情請看這裡

3. 在專案安裝目錄(有pom.xml的那層目錄),執行mvn install,Maven就會幫你把專案執行測試並建置成war檔

4. 如果要在Maven中運行專案,可以執行mvn jetty:run,然後使用此URLhttp://localhost:8080/takeshi-mvc/bin-debug/連結至專案首頁,便可使用專案

5. 如果要把專案匯入到Eclispe的話,請先安裝m2eclispe,官網有教學影片,相當friendly

6. 安裝完m2eclispe之後,你就可以透過Eclispe來執行Maven,更重要的是,還可以使用Eclispe的debuggerㄛ!使用細節如下影片~

 
最後takeshi要提醒的是,Maven只是takeshi現階段喜好的專案管理工具,不過它已經是Java世界的老人了...現在也有其它的選擇,如Ivy、Buildr等,喜歡嘗鮮的朋友可以去試試看,到時記得要跟takeshi分享ㄛ ^^

2011年11月27日 星期日

Java MVC sample #2

很快地,一個禮拜又過去了,這次takeshi要介紹的是Sample Project#2
經過Sample Project#1使用標準JavaEE技術實作的MVC架構介紹後
這次的Sample Project#2使用的主要技術如下
視 專案需求/不同的Device 抽換/同時使用 不同的UI技術,就takeshi的理解,
要作到RIA(Rich Internet Application),目前的主要技術有兩種,一種是Ajax技術 ,另外一種是Plug-in based技術(以後takeshi再詳細討論吧...)

而這次主要是使用plug-in based中相當主流的Adobe Flex(之後takeshi也打算再介紹Spring-MVC)
  • UI MVC使用技術:PureMVC for FLEX3 2.0.4
由於雲端運算和Web2.0概念的流行,現今網站應用程式(Web AP) 的操作都越來越接近傳統的Rich GUI(也就是需要安裝在客戶端的應用程式),亦或是更為複雜,所以除了使用系統整體架構上的MVC之外,也在UI層中再使用一層MVC架構,來讓專屬於UI操作的邏輯可以切分清楚,並且達到程式碼重用等好處

PureMVC不但有Flex的版本,它還有其它平台的版本,例如Java、JS等
但說真的,takeshi認為Pure MVC的架構蠻不錯的,但學習曲線不低...
不過takeshi以後有機會,也會在其它平台上使用PureMVC啦(Learn once Write Anywhere :p)
這個framework就不用多說了 吧,這是takeshi最喜愛的frameworkㄛ!
說到ORM技術,一般都是聽到hibernate、JPA等名稱,但takeshi對myBatis可是情有獨鍾
嚴格來說,它是SQL mapping技術,而不是ORM技術,它目的很簡單,就是幫助使用者可以很簡單的使用SQL,可以省掉很多像使用JDBC要撰寫的繁瑣程式碼,如getConnection、prepareStatement、ResultSet.close等,好學、易用、輕量!


在takeshi參與專案的經驗,架構的設計通常都是Multitier Architecture,例如本文後續所附之架構圖,就分為Client、Presentation、Biz Logic、Data Integration和Resource等,在此框架內使用哪一種技術,就必須基於系統的運行環境、限制和開發團隊(主要是Architect)的經驗做判斷

一般來說,之前已建立的系統架構可以當作之後專案架構的template(例如Sample Project #1 & #2),稍作修改便可直接使用,所以每次基於不同專案所作的不同系統架構,都可以保存在版本控制系統內,讓架構設計之解決方案越來越豐富,加快開發團隊的效率(也歡迎你/妳拿takeshi整理的架構來用ㄛ ^^)

接下來又到了介紹如何使用Sample Project#2囉~
1. 下載Sample Project
Sample code在這裡,把下載之zip檔案解壓縮並匯入到Eclispe裡

2. Tomcat設定,請參考Sample Project#1

3. 資料庫設定和ER-Model設計,也請參照Sample Project#1

4. 執行和操作方式


5. 本專案使用到的技術和架構如下

6. 參考文件
由於此次Sample Project使用了不同的技術,所以特別註明參考網址,方便網友們參考
  • Adobe Flex
Getting Started
Reference
Flash Builder Download
  • PureMVC
documents
  • Adobe BlazeDS
Main Page 
  • Spring-Core
Java API docs
  •  Spring-Flex
Main Page
  • MyBatis
Main page for Java

takeshi當初在整這個專案時,也花了大約兩~三天的時間,過程中小問題不斷
所以網友們有問題可以提出來跟takeshi討論ㄛ~

2011年11月20日 星期日

Java MVC sample #1

前陣子因為公司長官的要求,現在負責訓練新進JavaEE工程師的training
目前大部分新進同仁都會被派駐在user site,提供資訊服務,如軟體開發、實作等
所以讓新進同仁能快速學習到實務上會遇到的情形是一大重點

因此takeshi寫了個簡單的sample project,期望此sample project能滿足以下目標
  • Trace code:在大多數情況,要先看懂前人寫的code,比自己會寫還重要
  • MVC Design:現今的資訊系統開發,大多有使用到MVC Pattern,但剛出社會的新鮮人可能還沒碰過
  • Requirement Change:在新人看懂sample project之後,takeshi會提出新功能需求,請新人依據此sample project之MVC架構,直接長出新功能並驗收
  • 熟悉工具:Eclipse IDE、WTP、Tomcat和Debugger(不是開玩笑的,takeshi還真遇到有不少人不會用debugger...)
  • Container的使用:本sample project #1有使用到Tomcat的安全性服務,takeshi在實務上也看到不少實作都是用自己開發的元件來作,但takeshi想提醒的是Java Container的功能遠遠比我們想像的還多...
  • 尋序漸進: sample project #1是簡單版本,尚未套用任何framework,主要是讓新人知道,使用JavaEE Web Spec.是如何實作出MVC架構的,之後還有#2(Flex版本,希望未來有空時,再加上其它的版本)
接下來是重頭戲啦~以下介紹如何使用Sample Project #1

1. 下載 Sample Code
1.1 sample code在這裡,SVN Borwser在這裡
1.2 接著把程式training01.zip解壓縮並匯入到Eclipse中

2. 設定Tomcat
2.1 Tomcat版本6.0.x,在這裡下載
2.2 因為本專案使用到Tomcat安全性服務,所以要另外下載設定檔在這裡
在ZIP檔案中有三個檔案
server.xml 要複製到 ${TOMCAT_HOME}\conf\
h2-1.2.121.jar 要複製到 ${TOMCAT_HOME}\lib\
keystore 要複製到 ${user.home} \
當然你也可以改成你要的路徑,也請一併更改server.xml的94行
<Connector SSLEnabled="true" clientAuth="false"
 keystoreFile="${user.home}/keystore" keystorePass="changeit"
 maxThreads="200" port="8443" 
 protocol="org.apache.coyote.http11.Http11Protocol" scheme="https"
 secure="true" sslProtocol="TLS"/>
2.3 如何使用SSL登入Tomcat在這裡,如何使用JDBC Realm在這裡
2.4 把Tomcat加入至Eclispe的WTP中,待會執行Sample Project時,Eclispe會把project佈署在Tomcat裡執行

3. 資料庫設定
假如是測試或學習的目的,takeshi很喜歡使用H2 DB,它非常輕量(一個JAR檔,h2-1.2.121.jar),且在embedded mode還可支援多個連線(不像Derby或其它DB)
3.1 運行H2 DB,把${sampleProject#1}\trainingWebAp02\docs\db\createData.sql檔案中的SQL Script丟到H2 DB執行
3.2 會長出以下Schema和相關測試資料


4. 終於可以執行專案了!
執行和操作方式粉簡單,如下影片所示

5. 在本專案主要使用到的技術和架構如下

 需要特別注意的是
  • MVC分別由 Biz/Data Integration Tier代表Model和Controller,Presentation代表View
  • Presentation只能使用JSP/EL,儘量不在View裡撰寫Java code(Scriptlet),如邏輯相當複雜,可考慮使用javax.servlet.jsp.tagext套件求解(SimpleTagSupport等類別)
  • 由Biz/Data Integration Tier來同時處理Request/Response/DAO等工作,之後的Sample會再切分

今天就先寫到這吧,之後takeshi會在把Sample Project #2給放上來~