從本文開(kāi)始,我將會(huì)開(kāi)始一個(gè)全新系列的文章——《Seam系列》。如果有關(guān)心我的博客的朋友,應(yīng)該知道早前一年多的時(shí)間我都使用Seam使用開(kāi)發(fā)項(xiàng)目,可以算得上是略有小成。因此,我很希望與大家分享一下Seam的經(jīng)驗(yàn)。
為什么要使用Seam
這個(gè)問(wèn)題Seam的官方文檔以經(jīng)做了很好的回答。為了方便不喜歡看文檔的朋友(不過(guò),可以負(fù)責(zé)任地告訴你“這不是一種好習(xí)慣!” :-),如果你希望完整地了解一門(mén)技術(shù),反復(fù)閱讀文檔是必不可少的。甚至可能需要查看源代碼,當(dāng)然這是對(duì)開(kāi)源的技術(shù)而言),我將其中一些要點(diǎn)抽取出來(lái):
- 只有一種“工具” Seam中的表現(xiàn)層組件和業(yè)務(wù)邏輯組件之間并沒(méi)有區(qū)別。 你可以根據(jù)你設(shè)計(jì)的任何架構(gòu)給應(yīng)用程序進(jìn)行分層,而不是強(qiáng)制將你的應(yīng)用程序邏輯硬塞進(jìn)一個(gè)由你目前在使用的任何框架組合所強(qiáng)加給你的不適當(dāng)?shù)姆謱优渲弥小?
- 將JSF與EJB 3.0整合 Seam將JSF和EJB3的組件模型合二為一,消除了膠合代碼,使得開(kāi)發(fā)者專注于業(yè)務(wù)問(wèn)題。
- 集成AJAX Seam支持兩個(gè)最好的、開(kāi)源的基于JSF的AJAX解決方案:JBoss RichFaces和ICEfaces。
- 將業(yè)務(wù)流程作為首要的基礎(chǔ)建筑 Seam可以選擇通過(guò)jBPM提供透明的業(yè)務(wù)流程管理。
- 聲明式狀態(tài)管理 聲明式應(yīng)用程序狀態(tài)管理通過(guò)Seam定義的豐富的context model(上下文模型)而成為可能。Bijection(雙向注入) Bijection(雙向注入)和IoC的不同之處在于它是動(dòng)態(tài)的、語(yǔ)境相關(guān)的以及雙向的。
- 工作區(qū)(Workspace )管理和多窗口瀏覽 Seam應(yīng)用程序讓用戶自由地在多個(gè)瀏覽器窗口中切換,每個(gè)窗口都與一個(gè)不同的、安全隔離的對(duì)話關(guān)聯(lián)。
- 多些注解(Annotation),少些XML 這讓你擺脫了對(duì)繁瑣的JSF managed bean(JSF受管bean)的配置,減少了所需的XML,只剩下那些真正屬于XML的信息(JSF導(dǎo)航規(guī)則)。
- 集成測(cè)試輕而易舉 Seam組件作為POJO,天生就是可以進(jìn)行單元測(cè)試的。
- 規(guī)范也非盡善盡美 在規(guī)范中有許多漏洞(例如,GET請(qǐng)求的JSF生命周期中的局限性),Seam修正了這些漏洞。
- Web應(yīng)用程序不只是服務(wù)HTML頁(yè)面 Seam為持久化集成了JPA和Hibernate 3,為輕量化的異步性集成了EJB Timer Service和Quartz,為工作流集成了jBPM,為業(yè)務(wù)規(guī)則集成了JBoss規(guī)則,為電子郵件集成了Meldware Mail,為完整的文本搜索集成了Hibernate Search和Lucene,為消息集成了JMS,以及為頁(yè)面片斷捕捉集成了JBoss Cache。
準(zhǔn)備開(kāi)發(fā)環(huán)境
要方便地編寫(xiě)Seam應(yīng)用,我要做一些準(zhǔn)備工作。
- 下載Seam框架 大家可以通過(guò)以下鏈接下載http://seamframework.org/Download。建議大家下載最新的2.1.1.GA版本。解壓到本地目錄,如d:\SeamDev\。
- 下載JBoss應(yīng)用服務(wù)器 大家可以通過(guò)以下鏈接下載http://www.jboss.org/jbossas/downloads/。建議大家下載最新5.0.1.GA的版本。解壓到本地目錄,如d:\SeamDev\。
- 下載Ecplise開(kāi)發(fā)環(huán)境 大家可以通過(guò)以下鏈接下載http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/ganymede/SR2/eclipse-jee-ganymede-SR2-win32.zip。解壓到本地目錄,如d:\SeamDev\。
- 下載JBoss Tools插件 大家可以通過(guò)以下鏈接下載http://sourceforge.net/project/downloading.php?groupname=jboss&filename=JBossTools-ALL-win32-3.0.0.CR2-R200901280154.zip&use_mirror=biznetnetworks。解壓到本地目錄,如d:\SeamDev\。因?yàn)檫@是一個(gè)RC版本,大家可以通過(guò)LINK的方式將其安裝到Eclispe,這樣可以方便大家升級(jí)到正式版(將文件夾替換即可)。具體步驟:
- 開(kāi)打Eclipse下的links文件夾,如d:\SeamDev\eclipse\links。
- 新建后綴名為*.link的文件,如JBossTools.link。
- 向文件加入內(nèi)容如path=d:/SeamDev/JBossTools-3.0.0.CR2,保存并關(guān)閉文件。
第一個(gè)Seam應(yīng)用
在完成上述的準(zhǔn)備工作后,大家就可以通過(guò)Eclipse的向?qū)梢粋€(gè)簡(jiǎn)單的應(yīng)用啦。
- 運(yùn)行Eclipse,選擇菜單Window->Perferences,在出現(xiàn)對(duì)話框中在左上角的輸入框中輸入“seam”,如圖所示:
- 點(diǎn)擊“Add”,在出現(xiàn)的“New Seam
Runtime”的對(duì)話框中,點(diǎn)擊“Browse”,選擇Seam的解壓路徑如:D:\SeamDev\jboss-seam-2.1.1.GA,在“Version”下拉菜單中選擇“2.1”,點(diǎn)擊“Finish”。
- 點(diǎn)擊“Perferences”對(duì)話框中的"OK",關(guān)閉對(duì)話框。
- 點(diǎn)擊菜單“File->New->Project”,在輸入框中輸入“Seam”,點(diǎn)擊“Seam Web Project”,點(diǎn)擊“Next”,如下圖所示:
- 在“Project Name:”輸入“Hello”,點(diǎn)擊“Target Runtime”中的“New”。
- 在出現(xiàn)的“New Server Runtime Environment”對(duì)話框中,展開(kāi)“JBoss, a division of Red
Hat”,選擇“JBoss 5.0 Runtime”,點(diǎn)擊“Next”,如下圖所示:
- 在出現(xiàn)的對(duì)話框中,點(diǎn)擊“Browse”,選擇JBoss解壓的路徑,點(diǎn)擊“Finish”。
- 回到“New Seam Project”對(duì)話框,點(diǎn)擊“Target Server”中的“New”。
- 在出現(xiàn)的對(duì)話框中,選擇“JBoss AS 5.0”,點(diǎn)擊“Finish”。如圖所示:
- 再次回到“New Seam Project”,在“Configuration”中的下拉菜單中選擇“Dynamic Web Project with Seam
2.0(technical preview)”,點(diǎn)擊“Next”,如下圖所示:
- 在“Web Module”對(duì)話框,再點(diǎn)擊“Next”。
- 在“JSF Capabilities”對(duì)話框,再點(diǎn)擊“Next”。
- 在“Seam Facet”對(duì)話框中的“Deploy As”中選擇“EAR”,在“Connection Profile”中點(diǎn)擊“New”。
- 在“Connection Profile Types”中選擇“HSQLDB”,修改“Name”為“HelloDB”,點(diǎn)擊“Next”。
- 在出現(xiàn)的對(duì)話框中,點(diǎn)擊圖標(biāo)
。
- 在出現(xiàn)的對(duì)話框中,選擇“HSQLDB JDBC Driver”,如下圖所示:
- 點(diǎn)擊“Jar List”,選擇“hsqldb.jar”,點(diǎn)擊“Remove JAR/Zip”。
- 點(diǎn)擊“Add JAR/Zip”,在文件選擇對(duì)話框中選擇Seam文件夾下的“lib”下的“hsqldb.jar”,路徑如:d:\SeamDev\jboss-seam-2.1.1.GA\lib\hsqldb.jar,點(diǎn)擊“OK”。
- 在“Database”輸入框中輸入“HelloDB”,選擇“DB
Location”,路徑如:“F:\Workspace\BlogJava\HSQLDB\HelloDB”,可以點(diǎn)擊“Test
Connection”,如果設(shè)置正確應(yīng)該會(huì)出現(xiàn)“Success”對(duì)話框,點(diǎn)擊“OK”,再點(diǎn)擊“Finish”。
- 回到“New Web Project”對(duì)話框,如進(jìn)行下圖所示設(shè)置后,點(diǎn)擊“Finish”。
- 在可能出現(xiàn)的切換對(duì)話框中,點(diǎn)擊“OK”。
- 通過(guò)上述步驟,我們已經(jīng)新建一個(gè)Seam工程。在Eclipse的“Project
Explorer”窗口中,你可能見(jiàn)到有紅色的交叉提示錯(cuò)誤,點(diǎn)擊屏幕下方的“Problems”窗口,雙擊錯(cuò)誤提示,打開(kāi)pages.xml文件,如下圖所示:
- 點(diǎn)擊垂直滾動(dòng)條右邊的紅色錯(cuò)誤提示,定位到出錯(cuò)內(nèi)容,如下圖所示:
- 將出錯(cuò)的“log-level”改為“logLevel”,即可消除錯(cuò)誤,保存文件。
- 點(diǎn)擊屏幕下方的“JBoss Server View”,開(kāi)啟JBoss服務(wù)器,如下圖所示:
- 打開(kāi)瀏覽器,鍵入http://localhost:8080/hello/,你將會(huì)看到如下圖所示頁(yè)面:
- 點(diǎn)擊“Login”,在“Username”鍵入“admin”,再點(diǎn)擊“Login”,可以成功登陸。
小結(jié)
通過(guò)上述的步驟,我們已經(jīng)創(chuàng)建了一個(gè)簡(jiǎn)單Seam應(yīng)用。這個(gè)應(yīng)用正所謂是“麻雀必小五臟俱全”,包括WEB的常用的布局、圖片,樣式表和簡(jiǎn)單的登陸實(shí)現(xiàn)、錯(cuò)誤處理等。