国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于JSF/EJB3的JBossSeam應用框架研究與應用

2012-04-29 00:44劉偉
電腦知識與技術 2012年30期
關鍵詞:攔截器生命周期應用程序

摘要:JBoss Seam是一個強大的用來構建下一代Web 2.0的應用程序框架。JBoss Seam以EJB3.0為核心,擴展POJO加注釋的設計模式到整個Web應用中。該文主要介紹 JBoss Seam的框架特點和工作原理,并通過一個簡單的實例說明了Seam的基本用法,使讀者對Seam框架有了一個清楚的了解。

關鍵詞:Seam;EJB3.0;JSF;POJOs;注釋

中圖法分類號:TP393.09 文獻標識碼:A文章編號:1009-3044(2012)30-7236-04

Java EE5的核心框架定義了三個層次的標準實現:表示層采用JSF(Java Server Faces),業(yè)務層和持久層分別采用EJB3.0的Session Bean和Entity Bean。EJB3.0是基于POJO(Plain Old Java Objects)的業(yè)務服務和數據庫持久化輕型框架,JSF是基于MVC的Web應用框架,兩者雖然功能互補,但設計理念相對獨立,很難在Java EE5框架中進行整合。本文將介紹JBoss 針對Java EE5標準所實現的應用開發(fā)框架——JBoss Seam。正如它取其“縫合”的意義,Seam采用注解方式整合了EJB 3.0和JSF這兩個Java EE5核心標準。

1 Seam框架分析

1.1 Seam的框架特點

Seam是一個集JSF、EJB3.0、AJAX和jBPM于一體的全新應用框架,下面介紹Seam的主要特點。

1) 基于EJB3.0的開發(fā)

EJB3.0擯棄了傳統EJB粗粒度和重量級的性質,轉變?yōu)閾碛屑毩6茸⑨尩妮p量級POJO。因此,Seam框架中表示層組件和業(yè)務邏輯組件都是EJB。

2) 基于AJAX的遠程層

Seam提供了內置的Javascript遠程訪問層,允許開發(fā)者通過Ajax異步地從瀏覽器端調用EJB3.0的Session Bean組件。同時,Seam提供的Ajax解決方案隱藏了XMLHttpRequest API和XML序列化的復雜性。

3) 富狀態(tài)應用程序

傳統的Web應用程序中,Http Session是管理Web應用狀態(tài)的唯一方法。Seam框架為開發(fā)者提供了多種富狀態(tài)的上下文(Context),支持從會話狀態(tài)到業(yè)務過程的多種粒度,讓開發(fā)者在Http Session之外有了更多狀態(tài)管理的選擇。

4) 過程驅動應用程序

企業(yè)級應用存在許多業(yè)務流程和規(guī)則,需要實現復雜的工作流和頁面流,Seam框架通過JBoss jBPM對業(yè)務過程管理提供強大支持。

1.2 Seam的工作原理

Seam使用帶注釋的POJOs作為組件進行開發(fā),下面從幾個方面介紹Seam的工作原理。

1) 雙向注入

Seam使用POJO作為服務組件,并采用依賴注入(DI)聯結所有POJO組件。當某組件需要使用另一個組件時,通過注釋(Annotation)向Seam聲明依賴。Seam依據應用當前狀態(tài)將這個依賴組件注入到所需組件中。

同時,Seam擴展了依賴注入的概念,允許進行雙向注入(bijection)。一方面,組件可以作為一個變量被注入。另一方面,組件被Session Bean“拋還”給Seam,返回到JSF中。組件利用@In或者@Out注釋可以在JSF頁面和業(yè)務邏輯之間雙向地傳遞數據。

2) 攔截器

Seam引入攔截器與注釋組合,為POJO對象提供功能支持。Seam構建攔截器的方式是采用標準的Java EE體系。攔截器類中定義攔截方法時,需要使用@AroundInvoke和@InvocationContext注釋。@AroundInvoke注釋用于指定具體的檢查方法,檢查操作完成后,利用ic.proceed()返回到被攔截檢查的業(yè)務方法。攔截器類通過配置文件和框架代碼進行自動調用,實現執(zhí)行Session Bean中的業(yè)務邏輯時進行攔截檢查。

3) Seam的多粒度上下文

Seam在傳統上下文的基礎上,添加了多種不同粒度的上下文,并自動管理上下文和組件狀態(tài)。下面重點介紹Seam中兩個重要的上下文。

會話 (Conversation): 一個會話通常包含了許多相關或串行的用戶請求。比如,一次交談往往需要用戶完成多次請求并響應的周期。典型的案例是向導式對話框,或者電子商務中的購物車。 Seam使用會話上下文管理這些交談,解決了頁面回退、刷新、重復提交、多窗口瀏覽等帶來的問題。

業(yè)務流程(Business Process): Seam 還內置了在應用程序中集成業(yè)務流程管理的功能。一個業(yè)務流程要求工作流完成兩個操作:一是創(chuàng)建一個事務,二是批準這個事務。 兩個事務都需要與應用程序進行一次或者多次交談才能完成它們的任務。Seam 可以簡單明了地定義這些任務和交談。

4) 基于Seam的三層架構

下面介紹Seam如何將攔截器嵌入三層架構中。攔截過程對于用戶基本是透明的。用戶請求的完整生命周期如圖1所示。

①Seam集成MVC

大多數應用框架需要利用其特有的Servlets實現MVC架構,Seam與此不同,它通過在請求中加入監(jiān)聽器和生命周期控制各組件,維持原有JSF請求的生命周期。

在web.xml中,Seam加入了監(jiān)聽器: SeamListener。此監(jiān)聽器在整個生命周期中被最先請求,并為Lifecycle對象設置ServletContext和Session,Lifecyle類直接保存用于在web層管理狀態(tài)的上下文組件。接著SeamPhaseListener對象被請求,SeamPhaseListener對象用于與FacesServlet交互。在faces-config.xml中,SeamPhaseListener已經被定義為FacesServlet生命周期的一部分,用于進一步管理上下文和存儲請求狀態(tài)。此監(jiān)聽器將數據從表現層傳入到業(yè)務邏輯層。

②Seam集成EJB3.0

業(yè)務邏輯層的集成使用SeamInterceptor包裹調用EJB的請求,此攔截器包裹所有調用POJO EJB的請求,在生命周期中,每當包裹請求時,就間接訪問了在Application Context中存儲的組件對象。雖然組件對象包含了訪問的EJB,但是它不是簡單的包裹器對象。組件對象持有所有域級別的對象——從注入域到數據模型對象,再到驗證器?;竞w了任何與POJO屬性級別相關的Seam注釋。而且,另一個較大的擴展是包含了其他默認的攔截器。這些攔截器處理從雙向注入、驗證到業(yè)務管理的所有事情。

2 Seam的應用

2.1任務要求

用戶注冊程序要求輸入用戶名、真實名稱和密碼, 將信息存入數據庫。注冊成功,顯示已注冊頁面,否則,顯示失敗頁面。本例雖不能完全展示Seam的全部特性,但展示了Seam使用帶注釋的POJOs進行開發(fā),并集成JSF和EJB3的特性。

2.2程序結構

該程序需要建立:

1) 兩個頁面(register.jsp, registered.jsp)。

2) 一個實體Bean(User.java):保存用戶數據。

3) 一個無態(tài)的Session Bean(RegisterAction.java):作為JSF的action listener。程序結構由圖2所示:

圖2 程序結構圖

2.3 代碼實現

2.4 程序的工作流程

1) 當register.jsp中的表單被提交后,JSF請求Seam處理user變量。此時任何Seam 上下文中不存在與user變量名綁定的值。Seam實例化user組件并存儲在Seam Session 上下文中,隨后將User Entity Bean的實例返回給JSF。

2)Hibernate驗證器按照User Entity Bean中的約束定義對表單中的值進行驗證。如果與約束不符,JSF刷新頁面。否則,JSF將表單中的數據與User Entity Bean中對應屬性進行綁定。

3) JSF請求 Seam處理 register變量,Seam在Stateless 上下文中找到無態(tài)Bean RegisterAction,返回給JSF。JSF喚醒register()行為監(jiān)聽方法。

4) Seam攔截該方法調用,將Session上下文中的User實體注入到方法中。

5) register()檢查注冊用戶名是否已存在,若存在,則返回FacesMessages附帶的錯誤信息及null值,刷新頁面。若無此用戶名,則重定向到“/registered.jsp”。JSF生成頁面時仍請求Seam從Session上下文中返回User實體。

3 結束語

JBoss Seam進一步簡化了Java EE5,建立了更加集成化的EJB3和JSF,它的框架設計使 Web應用具有強壯性和伸縮性。JBoss Seam已成為現今流行的 Web應用框架。

參考文獻:

[1] JBoss Seam官方文檔[EB/OL].http://labs.jboss.com/portal/jbossseam/.

[2] Michael Juntao Yuan,Thomas Heute.JBoss(R) Seam: Simplicity and Power Beyond Java(TM) EE[M].US:Prentice Hall PTR,2007.

[3] Joseph Faisal Nusairat.Beginning JBoss? Seam:From Novice to Professional[M].US:Apress Inc,2007:131-140.

猜你喜歡
攔截器生命周期應用程序
動物的生命周期
全生命周期下呼吸機質量控制
多動能攔截器協同制導規(guī)律的研究及仿真
英國MARSS公司推出新型反無人機攔截器
以色列“天鎖”公司展出新式反無人機攔截器
從生命周期視角看并購保險
刪除Win10中自帶的應用程序
民用飛機全生命周期KPI的研究與應用
谷歌禁止加密貨幣應用程序
基于AOP理念的Struts2攔截器的研究與應用