自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SEAM學(xué)習(xí)之SEAM的簡(jiǎn)介和優(yōu)點(diǎn)

開發(fā) 后端
本文介紹的是SEAM和SEAM的優(yōu)點(diǎn)。SEAM是Java EE 5.0的一個(gè)輕量級(jí)的框架。希望對(duì)你有幫助,一起來看。

 

什么是Seam呢?JBoss Seam是“Java EE 5.0的一個(gè)輕量級(jí)的框架”。這是什么意思?難道Java EE(Enterprise Edition) 5.0本身不是一套“框架嗎”?為什么在官方規(guī)范之外,還需要另外一個(gè)框架?好吧,我們就將seam看作是本應(yīng)該被包括在Java EE 5.0中的一個(gè)“遺漏的框架”吧。

它在Java EE 5.0框架的上層,為所有的在企業(yè)Web應(yīng)用中的組件提供了一個(gè)統(tǒng)一的、易于理解的編程模型。它同樣使基于狀態(tài)的應(yīng)用和業(yè)務(wù)流程驅(qū)動(dòng)的應(yīng)用的開發(fā)易如反掌。換句話說,Seam致力于開發(fā)者生產(chǎn)力和應(yīng)用擴(kuò)展性。 

1. 整合和強(qiáng)化Java EE框架

 

Java EE5.0的核心框架是EJB(Enterprise JavaBeans)3.0和JSF(JavaServer Faces)1.2。EJB 3.0(以下簡(jiǎn)稱EJB3)是基于一個(gè)POJO(Plain Old Java Objects)的業(yè)務(wù)服務(wù)和數(shù)據(jù)庫(kù)持久化的輕型框架。JSF是一個(gè)基于MVC(Model-View-Controller)的Web應(yīng)用框架。大多數(shù)的Web應(yīng)用都將包含有業(yè)務(wù)邏輯的EJB3組件和Web應(yīng)用前端顯示的JSF組件。EJB3和JSF雖然互補(bǔ),但是他們是根據(jù)各自的理念設(shè)計(jì)的獨(dú)立的框架。

例如,EJB3使用注解(annotation)來配置服務(wù),而JSF使用的是XML文件。更進(jìn)一步講,EJB3和JSF組件在框架層面上是互不敏感的。要整合EJB3和JSF,開發(fā)者必須手動(dòng)地構(gòu)造facade對(duì)象(如:JSF支持bean),將業(yè)務(wù)組件與Web頁(yè)面和樣板代碼(又稱plumbing代碼)聯(lián)結(jié)起來,以便能跨框架調(diào)用方法。將這些技術(shù)粘合起來是Seam的職責(zé)之一。

 

Seam打破了EJB3和JSF之間的人工層,它為整合EJB3和JSF提供了一個(gè)一致的,基于注解的途徑。只需要個(gè)別簡(jiǎn)單的注解,Seam中的EJB3業(yè)務(wù)組件就能直接被用來支持JSF Web表單或者處理Web UI事件。

Seam允許開發(fā)者將“同一種東西”——有注解的POJOs——應(yīng)用與所有的應(yīng)用組件。與其他Web框架開發(fā)的應(yīng)用相比,Seam應(yīng)用概念簡(jiǎn)潔,同樣的功能卻需要較少的代碼(在JAVA和XML中)。如果沒有耐心,或者想要快速預(yù)覽,一個(gè)Seam到底有多簡(jiǎn)單,你可以現(xiàn)看看本文描述的hello world一例。

 

在JSP來說困難的任務(wù),Seam可以輕易的完成。例如,JSF頭疼的一個(gè)問題就是過分依賴HTTP POST。這使得將一個(gè)添加到書簽中的JSF網(wǎng)頁(yè),通過HTTP GET訪問相當(dāng)困難。但是有了Seam,生成一個(gè)REST網(wǎng)頁(yè)是非常容易的。Seam提供了一系列JSF組件標(biāo)簽和注解,增加了“web友好”和JSF應(yīng)用的網(wǎng)頁(yè)效率。

 

同時(shí),Seam拓展了EJB3到POJO的組件模式, 從web層到業(yè)務(wù)層都有了狀態(tài)上下文。進(jìn)一步說,Seam整合了一系列主要的其他開放源代碼框架,例如jBPM、JBoss Rules(又名Drools)、JBoss Portal、JBoss Microcontainer等等。Seam不僅能將它們“有機(jī)結(jié)合”起來,而且可以像整合JSF和EJB3一樣強(qiáng)化原有的框架。

 

Seam位于Java EE 5.0底層,但它的應(yīng)用并不局限與Java EE 5.0服務(wù)器。一個(gè)Seam應(yīng)用可以部署在J2EE 1.4應(yīng)用服務(wù)器和Tomcat服務(wù)器上。這意味著現(xiàn)在能在Seam應(yīng)用中得到產(chǎn)品化支持。

 

1 + 1 > 2

 

或許有這樣一種誤解,認(rèn)為Seam僅僅是將各種不同框架串起來的另外一個(gè)集成框架。Seam提供了它自身管理的狀態(tài)上下文,允許框架通過注解和EL(表達(dá)式語(yǔ)言)表達(dá)式與其他框架進(jìn)行深度整合。整合的程序來自于Seam開發(fā)者對(duì)第三方框架的認(rèn)知。

2. 一個(gè)為ORM設(shè)計(jì)的Web框架

 

對(duì)象關(guān)系映射(ORM)解決方案在當(dāng)今企業(yè)應(yīng)用中廣為使用。但是,大多數(shù)當(dāng)前的業(yè)務(wù)和web框架并不是為ORM設(shè)計(jì)的,它們并不在整個(gè)Web交互生命周期——從請(qǐng)求來臨到響應(yīng)完成——管理持久上下文。這就導(dǎo)致了包括可怕的LazyInitializationException在內(nèi)的各種ORM異常,帶來了如“數(shù)據(jù)傳輸對(duì)象(DTO)”等丑陋的伎倆(ugly hacks)。

 

Gavin King發(fā)明了Seam,同時(shí)他也發(fā)明了在世界上廣為使用的ORM解決方案Hibernate。為了繼承和發(fā)揚(yáng)ORM的最佳實(shí)踐,Seam進(jìn)行了重新設(shè)計(jì)。有了Seam,就不必再寫DTO,你所做的就是延遲加載。因?yàn)閿U(kuò)展后的持久上下文就如同一個(gè)自然的高速緩存,可以減少和數(shù)據(jù)庫(kù)的交互,ORM的性能就會(huì)被極大地改進(jìn)。

 

進(jìn)一步講,因?yàn)镾eam整合了ORM層、業(yè)務(wù)層和表示層,開發(fā)者就能夠在表示層直接展示ORM對(duì)象,也能把數(shù)據(jù)庫(kù)驗(yàn)證注解用于輸入表單,以及重新定向ORM例外到定制的錯(cuò)誤頁(yè)面。

 

3.專為有狀態(tài)Web應(yīng)用而設(shè)計(jì)

 

Seam是專為有狀態(tài)Web應(yīng)用而設(shè)計(jì)的。Web應(yīng)用是天生的多用戶應(yīng)用,電子商務(wù)應(yīng)用天生也是有狀態(tài)的和有事務(wù)的。但是,大多數(shù)已有Web應(yīng)用框架是面向無狀態(tài)應(yīng)用的。開發(fā)者必須操作HTTP會(huì)話(session)對(duì)象來管理用戶狀態(tài),與核心業(yè)務(wù)邏輯無關(guān)的代碼不僅會(huì)混亂你的應(yīng)用,而且?guī)砹艘幌盗械男阅軉栴}。

 

在Seam中,所有的基礎(chǔ)應(yīng)用組件天生地有狀態(tài)。它們使用起來要比HTTP session容易,因?yàn)樗鼈兊臓顟B(tài)由Seam公開管理。沒有必要在Seam應(yīng)用中編寫引起麻煩的狀態(tài)管理代碼——只需在其組件上注解其做用域、生命周期方法以及其他狀態(tài)屬性,Seam就會(huì)掌管其他[譯者注:指這些組件的生命周期]。Seam狀態(tài)組件要比HTTP會(huì)話(session)能更好的管理用戶狀態(tài)。例如,你能有多個(gè)“會(huì)話”進(jìn)行,每個(gè)“會(huì)話”由在一個(gè)HTTP會(huì)話(session)中一系列的Web請(qǐng)求和業(yè)務(wù)方法調(diào)用組成。

 

進(jìn)一步說,在Seam中,數(shù)據(jù)庫(kù)緩存和事務(wù)能自動(dòng)與應(yīng)用的狀態(tài)相連。Seam在內(nèi)存中自動(dòng)保存數(shù)據(jù)庫(kù)更新,等到對(duì)話結(jié)束后提交到數(shù)據(jù)庫(kù)。內(nèi)存中的緩存能大大減輕復(fù)雜狀態(tài)應(yīng)用中數(shù)據(jù)庫(kù)的負(fù)載。

 

除了以上這些,Seam支持整合開源JBoss jBPM業(yè)務(wù)程序引擎,大大提升了Web應(yīng)用中的狀態(tài)管理。你現(xiàn)在能為一個(gè)機(jī)構(gòu)中不同工作人員(諸如客戶、經(jīng)理、技術(shù)支持人員等等)的指定工作流程,利用工作流程來驅(qū)動(dòng)應(yīng)用,而不是依賴用戶界面事件處理和數(shù)據(jù)庫(kù)。

 

4. 支持Web 2.0

 

Seam為Web2.0應(yīng)用進(jìn)行了充分的優(yōu)化。它給AJAX(異步JavaScript和XML,增加網(wǎng)頁(yè)交互的一種技術(shù))提供了多種支持——從內(nèi)置“零Javascript”的AJAX組件到有AJAX支持的JSF組件,再到定制的JavaScript庫(kù),Seam為瀏覽器端的Javascript對(duì)象提供了直接訪問Seam服務(wù)器組件的途徑。Seam提供了一個(gè)先進(jìn)的并發(fā)模型,有效的管理來自同一用戶的多個(gè)AJAX請(qǐng)求。

 

對(duì)于AJAX應(yīng)用,不斷增長(zhǎng)的數(shù)據(jù)庫(kù)負(fù)載是一個(gè)巨大的挑戰(zhàn)。與一個(gè)非AJAX應(yīng)用相比,一個(gè)AJAX應(yīng)用要向服務(wù)器發(fā)送的更頻繁的請(qǐng)求。一但數(shù)據(jù)庫(kù)必須響應(yīng)這些AJAX請(qǐng)求,那么數(shù)據(jù)庫(kù)就不堪重荷。Seam中的狀態(tài)持久上下文正如一個(gè)內(nèi)存中的緩存,它能在會(huì)話始末保存信息,最終幫助減少數(shù)據(jù)庫(kù)交互。

 

Web2.0應(yīng)用往往為其數(shù)據(jù)使用復(fù)雜關(guān)系模型(例如,一個(gè)網(wǎng)絡(luò)交際站點(diǎn)所做的就是處理和顯示“用戶”之間的關(guān)系),對(duì)于這些站點(diǎn),延遲加載對(duì)于ORM層至關(guān)重要。否則,一個(gè)簡(jiǎn)單的查詢就能級(jí)聯(lián)地加載整個(gè)數(shù)據(jù)庫(kù)。正如我們前面所討論過的,Seam是現(xiàn)今唯一一個(gè)正確支持Web應(yīng)用延時(shí)加載的Web框架。

 

5.依賴雙向映射的Pojo服務(wù)

 

Seam是一個(gè)“輕量級(jí)”框架,因?yàn)樗褂肞OJO(plain old Java objects)作為服務(wù)組件。在應(yīng)用中,POJO沒有使用接口或抽象類來"鉤住"組件。當(dāng)然,問題是如何使POJO交互來組成這個(gè)應(yīng)用?它們?nèi)绾闻c容器服務(wù)(例如,數(shù)據(jù)庫(kù)持久化服務(wù))交互?

 

Seam通過使用一個(gè)流行的、被稱作依賴注入(DI)的設(shè)計(jì)模式聯(lián)結(jié)所有POJO組件。在這個(gè)模式下,Seam框架管理著所有組件的生命周期。當(dāng)一個(gè)組件需要使用另外一個(gè)時(shí),它通過注解(annotation)向Seam聲明此依賴。Seam依據(jù)應(yīng)用當(dāng)前狀態(tài)得到這個(gè)依賴組件,并將它注入到所需求的組件中。

 

通過拓展依賴注入概念,一個(gè)Seam組件A不但可以構(gòu)造另外一個(gè)組件B,而且把此組件B“拋還”給Seam以備其他組件(例如組件C)以后使用。

 

這類雙向依賴管理甚至都廣泛的應(yīng)用于簡(jiǎn)單的Seam web應(yīng)用中(例如第二章的hello world一例)。在Seam術(shù)語(yǔ)中,我們稱這個(gè)為“依賴雙向映射”。

 

6.非常規(guī)的配置

 

[譯者注:指以隱式映射為主題,以顯式映射為例外的配置方式] 使Seam易用的主要設(shè)計(jì)原則是“非常規(guī)的配置”。其思想是為這些組件提供一系列默認(rèn)行為,開發(fā)者只需要在預(yù)期行為非默認(rèn)的時(shí)候,顯示地配置組件。例如, 當(dāng)Seam將組件A作為屬性注入到組件B時(shí),默認(rèn)地,組件A剛會(huì)以組件B被注入的屬性的名稱命名。Seam里還有很類似的細(xì)節(jié)??偟慕Y(jié)果是Seam中配置元數(shù)據(jù)要比其他Java框架簡(jiǎn)單的多。因此,大多數(shù)的Seam應(yīng)用能通過一系列簡(jiǎn)單的Java注解進(jìn)行充分配置。開發(fā)者從減化的復(fù)雜度中受益匪淺,最后,與其他Java框架相比,用更少的代碼實(shí)現(xiàn)同樣的功能。

 

7.避免濫用XML

 

或許你已經(jīng)注意到,Java注解在表述和處理Seam配置元數(shù)據(jù)時(shí)扮演著重要的角色。通過這樣的設(shè)計(jì)使框架更易于操作。

 

在J2EE發(fā)展早期,XML曾經(jīng)被看作配置管理的“圣杯”。框架設(shè)計(jì)者將所有的配置信息,包括Java類和方法名稱都統(tǒng)統(tǒng)丟進(jìn)XML文檔,而不考慮對(duì)開發(fā)者所帶來的后果。反省后,發(fā)現(xiàn)這是個(gè)嚴(yán)重的錯(cuò)誤。XML配置文檔太過重復(fù)。開發(fā)者必須重復(fù)代碼中已有的信息,從而將配置和代碼聯(lián)結(jié)起來。

這些重復(fù)使應(yīng)用易于出錯(cuò)(例如,一個(gè)拼寫錯(cuò)誤的類名可能在運(yùn)行時(shí)顯示為一個(gè)難于調(diào)試錯(cuò)誤)。缺少合理的默認(rèn)配置進(jìn)一步使這一問題復(fù)雜化。事實(shí)上,在一些框架中,相當(dāng)數(shù)量的樣板代碼偽裝為XML,可能相當(dāng)于或者超過實(shí)際應(yīng)用中JAVA代碼的數(shù)量。對(duì)于J2EE開發(fā)者,XML的濫用通常被稱為“XML地獄”。

 

Java社區(qū)認(rèn)識(shí)到了XML的濫用問題,并且已經(jīng)非常成功地用Java代碼中的注解取代了XML。EJB3是Java官方標(biāo)準(zhǔn)化機(jī)構(gòu)促進(jìn)Java企業(yè)組件中注解使用的一項(xiàng)成果。EJB3完全可選擇的使用XML文檔,它向正確方向邁出了積極的一步。Seam加入了EJB3的注解,為整個(gè)web應(yīng)用拓展了基于注解的編程模型。

 

當(dāng)然,XML對(duì)于配置數(shù)據(jù)并非完全不利。Seam設(shè)計(jì)者認(rèn)識(shí)到XML適用于指定頁(yè)面流程或者定義業(yè)務(wù)流程的web應(yīng)用。XML文檔使開發(fā)者集中地管理整個(gè)web應(yīng)用的工作流程成為可能,同時(shí)也反對(duì)將配置信息分散于java源文件中。工作流程很少能與源代碼耦合,因此XML文檔中并不需要重復(fù)鍵入已存在于代碼中的信息。

 

8.為測(cè)試而設(shè)計(jì)

 

Seam為了易于測(cè)試而重新設(shè)計(jì)。因?yàn)樗械腟eam組件都是注解過的POJO,它們易于進(jìn)行單元測(cè)試。開發(fā)者僅僅通過利用常規(guī)的Java new關(guān)鍵詞來構(gòu)造實(shí)例,然后在測(cè)試框架(例如JUnit 或者TestNG)中運(yùn)行任何方法。如果需要測(cè)試多個(gè)Seam組件的交互,開發(fā)者則逐個(gè)實(shí)例化這些組件,然后手動(dòng)建立它們的相互關(guān)系(也就是顯示地使用setter 方法,而不是依靠Seam依賴注入功能)。

 

集成測(cè)試整個(gè)Seam應(yīng)用比較復(fù)雜,因?yàn)殚_發(fā)者必須在Seam容器中運(yùn)行應(yīng)用。Seam用嵌入的輕量級(jí)容器來幫助該類測(cè)試。在測(cè)試框架中,開發(fā)者能按步驟地加載Seam容器,然后運(yùn)行測(cè)試。

希望以上介紹的八方面,能夠幫助到你。

【編輯推薦】

  1. 經(jīng)驗(yàn)分享:seam+jsf開發(fā)心得
  2. 21.2.2 在JavaScript中訪問Seam組件
  3. 4.1 僅使用POJO的Seam應(yīng)用程序示例
  4. Seam與JSF的加減法
  5. JBoss Seam Web應(yīng)用開發(fā)入門篇
責(zé)任編輯:于鐵 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2009-06-16 09:19:13

JBoss Seam

2009-06-23 09:05:10

Seam框架JSF

2009-06-24 15:44:59

JSF的加減法Seam

2009-06-01 10:47:32

jboss seam例jboss seam開jboss seam

2009-06-26 11:24:15

Seam Remoti

2011-07-08 15:20:30

seamjsf

2010-03-18 09:02:06

JBoss Seam

2009-06-15 17:22:36

JBoss Seam

2012-01-17 10:22:07

JavaJ2EEJBoss

2011-12-05 09:32:25

JavaJBoss框架

2009-08-17 17:36:08

C# 枚舉

2009-07-02 16:36:04

JSP優(yōu)點(diǎn)ASP優(yōu)點(diǎn)

2019-07-10 14:23:50

大數(shù)據(jù)結(jié)構(gòu)運(yùn)營(yíng)

2010-04-26 14:24:58

Oracle數(shù)據(jù)庫(kù)索引

2022-10-17 06:30:23

PyLint

2010-10-22 10:59:43

SQL Server的

2009-06-01 09:30:51

JSF2.0FaceletsAjax4JSF

2013-06-13 13:19:38

多線程

2021-03-15 11:35:28

人工智能機(jī)器學(xué)習(xí)

2012-06-07 09:55:19

MPLSWAN
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)