隨筆-34  評(píng)論-1965  文章-0  trackbacks-0

          從本文開(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)備工作。

          1. 下載Seam框架  大家可以通過(guò)以下鏈接下載http://seamframework.org/Download。建議大家下載最新的2.1.1.GA版本。解壓到本地目錄,如d:\SeamDev\。
          2. 下載JBoss應(yīng)用服務(wù)器  大家可以通過(guò)以下鏈接下載http://www.jboss.org/jbossas/downloads/。建議大家下載最新5.0.1.GA的版本。解壓到本地目錄,如d:\SeamDev\。
          3. 下載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\。
          4. 下載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í)到正式版(將文件夾替換即可)。具體步驟:
            1. 開(kāi)打Eclipse下的links文件夾,如d:\SeamDev\eclipse\links。
            2. 新建后綴名為*.link的文件,如JBossTools.link。
            3. 向文件加入內(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)用啦。

          1. 運(yùn)行Eclipse,選擇菜單Window->Perferences,在出現(xiàn)對(duì)話框中在左上角的輸入框中輸入“seam”,如圖所示:
          2. 點(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”。
          3. 點(diǎn)擊“Perferences”對(duì)話框中的"OK",關(guān)閉對(duì)話框。
          4. 點(diǎn)擊菜單“File->New->Project”,在輸入框中輸入“Seam”,點(diǎn)擊“Seam Web Project”,點(diǎn)擊“Next”,如下圖所示:
          5. 在“Project Name:”輸入“Hello”,點(diǎn)擊“Target Runtime”中的“New”。
          6. 在出現(xiàn)的“New Server Runtime Environment”對(duì)話框中,展開(kāi)“JBoss, a division of Red Hat”,選擇“JBoss 5.0 Runtime”,點(diǎn)擊“Next”,如下圖所示:
          7. 在出現(xiàn)的對(duì)話框中,點(diǎn)擊“Browse”,選擇JBoss解壓的路徑,點(diǎn)擊“Finish”。
          8. 回到“New Seam Project”對(duì)話框,點(diǎn)擊“Target Server”中的“New”。
          9. 在出現(xiàn)的對(duì)話框中,選擇“JBoss AS 5.0”,點(diǎn)擊“Finish”。如圖所示:
          10. 再次回到“New Seam Project”,在“Configuration”中的下拉菜單中選擇“Dynamic Web Project with Seam 2.0(technical preview)”,點(diǎn)擊“Next”,如下圖所示:
          11. 在“Web Module”對(duì)話框,再點(diǎn)擊“Next”。
          12. 在“JSF Capabilities”對(duì)話框,再點(diǎn)擊“Next”。
          13. 在“Seam Facet”對(duì)話框中的“Deploy As”中選擇“EAR”,在“Connection Profile”中點(diǎn)擊“New”。
          14. 在“Connection Profile Types”中選擇“HSQLDB”,修改“Name”為“HelloDB”,點(diǎn)擊“Next”。
          15. 在出現(xiàn)的對(duì)話框中,點(diǎn)擊圖標(biāo)。
          16. 在出現(xiàn)的對(duì)話框中,選擇“HSQLDB JDBC Driver”,如下圖所示:
          17. 點(diǎn)擊“Jar List”,選擇“hsqldb.jar”,點(diǎn)擊“Remove JAR/Zip”。
          18. 點(diǎn)擊“Add JAR/Zip”,在文件選擇對(duì)話框中選擇Seam文件夾下的“lib”下的“hsqldb.jar”,路徑如:d:\SeamDev\jboss-seam-2.1.1.GA\lib\hsqldb.jar,點(diǎn)擊“OK”。
          19. 在“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”。
          20. 回到“New Web Project”對(duì)話框,如進(jìn)行下圖所示設(shè)置后,點(diǎn)擊“Finish”。
          21. 在可能出現(xiàn)的切換對(duì)話框中,點(diǎn)擊“OK”。
          22. 通過(guò)上述步驟,我們已經(jīng)新建一個(gè)Seam工程。在Eclipse的“Project Explorer”窗口中,你可能見(jiàn)到有紅色的交叉提示錯(cuò)誤,點(diǎn)擊屏幕下方的“Problems”窗口,雙擊錯(cuò)誤提示,打開(kāi)pages.xml文件,如下圖所示:
          23. 點(diǎn)擊垂直滾動(dòng)條右邊的紅色錯(cuò)誤提示,定位到出錯(cuò)內(nèi)容,如下圖所示:
          24. 將出錯(cuò)的“log-level”改為“logLevel”,即可消除錯(cuò)誤,保存文件。
          25. 點(diǎn)擊屏幕下方的“JBoss Server View”,開(kāi)啟JBoss服務(wù)器,如下圖所示:
          26. 打開(kāi)瀏覽器,鍵入http://localhost:8080/hello/,你將會(huì)看到如下圖所示頁(yè)面:
          27. 點(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ò)誤處理等。

          posted on 2009-03-12 01:13 Max 閱讀(7710) 評(píng)論(13)  編輯  收藏 所屬分類: Seam系列

          評(píng)論:
          # re: Seam之初體驗(yàn) 2009-03-12 08:25 | koumei
          That's cool, buddy.  回復(fù)  更多評(píng)論
            
          # re: Seam之初體驗(yàn)[未登錄](méi) 2009-03-12 10:30 | Vincent
          Good~ Thanks for sharing  回復(fù)  更多評(píng)論
            
          # re: Seam之初體驗(yàn) 2009-03-12 11:53 | Rique
          學(xué)習(xí)了!  回復(fù)  更多評(píng)論
            
          # re: Seam之初體驗(yàn) 2009-03-12 15:08 | 陽(yáng)衡鋒
          非常喜歡博主的文章,最開(kāi)始從struts2開(kāi)始的。
          你寫(xiě)的文章很好閱讀,謝了。  回復(fù)  更多評(píng)論
            
          # re: Seam之初體驗(yàn) 2009-03-12 15:50 | JArcher
          HO~~~終于更新了  回復(fù)  更多評(píng)論
            
          # re: Seam之初體驗(yàn) 2009-03-12 20:28 | Max
          @koumei
          @Vincent
          Nice to be back.  回復(fù)  更多評(píng)論
            
          # re: Seam之初體驗(yàn) 2009-03-13 19:24 | koumei
          I am expecting more. :-)  回復(fù)  更多評(píng)論
            
          # re: Seam之初體驗(yàn) 2009-03-27 14:36 | cx
          要支持一下.  回復(fù)  更多評(píng)論
            
          # re: Seam之初體驗(yàn) 2009-03-27 15:52 | shong
          支持樓主的奉獻(xiàn)!
          謝謝  回復(fù)  更多評(píng)論
            
          # re: Seam之初體驗(yàn) 2009-03-30 17:00 | liulili
          你好,想請(qǐng)教你一個(gè)關(guān)于seam的問(wèn)題:
          如何從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù),顯示在下拉列表中?
          下面是我寫(xiě)的測(cè)試代碼,但是值是固定的,現(xiàn)在想從數(shù)據(jù)庫(kù)中讀取,該怎么做呢?
          public List <SelectItem> getSelectItemList() {
          List <SelectItem> selectItemList = new ArrayList<SelectItem>();
          selectItemList.add(new SelectItem("1", "Label1"));
          selectItemList.add(new SelectItem("2", "Label2"));
          return selectItemList;
          }  回復(fù)  更多評(píng)論
            
          # re: Seam之初體驗(yàn) 2009-11-27 10:12 | AlanX
          寫(xiě)的很好,好東西要分享,我把你的博客加到了我的主頁(yè)鏈接上面。我對(duì)seam很感興趣,希望你堅(jiān)持寫(xiě)下去  回復(fù)  更多評(píng)論
            
          # re: Seam之初體驗(yàn) 2009-12-15 22:04 | dj861212
          樓主,加油

          誠(chéng)心的說(shuō)聲,謝謝您  回復(fù)  更多評(píng)論
            
          # re: Seam之初體驗(yàn) 2010-02-08 11:54 | sgw
          Jboss5.0有個(gè)嚴(yán)重的問(wèn)題,不能熱部署xhtml文件,因?yàn)閖boss運(yùn)行時(shí)都是執(zhí)行tmp下面的文件,熱部署時(shí)發(fā)到deploy下面,而tmp下面還是服務(wù)啟動(dòng)時(shí)候從deploy下拷過(guò)來(lái)的,每次要重啟seam的,要耗大量時(shí)間,實(shí)為雞肋??!然而jboss5.1就解決這個(gè)問(wèn)題了,但是要用jboss5.1又要下載最新的eclipse、jbossTools、seam,暈啊。。。。。  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 长兴县| 南靖县| 宜章县| 繁峙县| 家居| 五华县| 闸北区| 庆城县| 宜春市| 渭南市| 丹东市| 嘉鱼县| 建德市| 连城县| 黄石市| 津市市| 汕尾市| 湘阴县| 铜鼓县| 佛冈县| 临颍县| 梅河口市| 克什克腾旗| 木里| 西和县| 什邡市| 钟山县| 扎赉特旗| 磴口县| 天津市| 富顺县| 化德县| 凌云县| 北京市| 邹城市| 沙雅县| 正蓝旗| 清丰县| 麻栗坡县| 秦皇岛市| 石首市|