第08講:Java EE構(gòu)件技術(shù)_第1頁
第08講:Java EE構(gòu)件技術(shù)_第2頁
第08講:Java EE構(gòu)件技術(shù)_第3頁
第08講:Java EE構(gòu)件技術(shù)_第4頁
第08講:Java EE構(gòu)件技術(shù)_第5頁
已閱讀5頁,還剩55頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

哈爾濱工業(yè)大學(xué)計算機(jī)學(xué)院唐好選Email:tanghx@JavaEE的基本原理及

構(gòu)件開發(fā)技術(shù)基本內(nèi)容JavaEE概述EJB技術(shù)基于EJB構(gòu)件的開發(fā)過程三種構(gòu)件模型的關(guān)系J2EE概述J2SE(Java2Platform,StandardEdition)用于桌面程序和Java小程序開發(fā)稱為J2SDK,簡稱JDKJ2EE(Java2Platform,EnterpriseEdition)用于企業(yè)級開發(fā)稱為J2SDKEEJ2ME(Java2Platform,MicroEdition)用于手持設(shè)備的開發(fā)(手機(jī)和PDA)JRE(JavaRuntimeEnvironment)Java平臺的發(fā)展Java平臺的發(fā)展JavaEE的發(fā)展J2EE1.01999年發(fā)布J2EE1.22000年發(fā)布J2EE1.32001年發(fā)布J2EE1.42003年發(fā)布J2EE1.52005年發(fā)布,即JavaEEJavaEE1.62009年發(fā)布JavaEE1.7-2013年發(fā)布,最新版JavaEE

1.7的核心組件JavaEE應(yīng)用架構(gòu)示例(1)JavaEE應(yīng)用架構(gòu)示例(2)JavaEE核心技術(shù)瀏覽器Applet應(yīng)用程序客戶機(jī)RMIWeb/HTTP服務(wù)器JSP/JSFServlet表示層應(yīng)用服務(wù)器EJBEJBEJBEJBEJBEJBEJBJavaIDLJNDIJMSJPA專業(yè)服務(wù)層遺產(chǎn)系統(tǒng)數(shù)據(jù)庫分布式CORBA對象后端系統(tǒng)JavaEE核心技術(shù)(1)EJB(EnterpriseJavaBean)提供了讓客戶端使用遠(yuǎn)程的分布式對象的框架規(guī)定了EJB構(gòu)件如何與EJB容器進(jìn)行交互EJB容器提供了目錄服務(wù)、事務(wù)管理、安全、連接池管理和容錯服務(wù)等RMI(RemoteMethodInvocation)和RMI-IIOP是EJB構(gòu)件和客戶端的通信API允許進(jìn)程間通信并提供其它與通信相關(guān)的服務(wù)利用IIOP作為通信協(xié)議JNDI(JavaNamingandDirectoryInterface)是命名和目錄服務(wù)的標(biāo)準(zhǔn)實現(xiàn)對象的命名,包括Web組件、EJB組件、數(shù)據(jù)庫系統(tǒng)等對象的名字通過命名和目錄服務(wù)綁定到具體對象EJB依賴JNDI通過網(wǎng)絡(luò)查找分布式構(gòu)件在JavaEE環(huán)境下,任何構(gòu)件必須在JNDI服務(wù)器注冊JPA(JavaPersistenceAPI)用于對象持久化的API,本質(zhì)上是一種ORM規(guī)范支持XML和注解通過面向?qū)ο蠖敲嫦驍?shù)據(jù)庫的查詢語言查詢數(shù)據(jù),避免程序的SQL語句緊密耦合JavaEE核心技術(shù)(2)JTA(JavaTransactionAPI)是一個高層次的事務(wù)處理接口應(yīng)用程序可通過JTA控制事務(wù)處理JMS(JavaMessageServices)是與消息驅(qū)動構(gòu)件通訊的API同時支持點對點消息隊列服務(wù)和發(fā)布-訂閱消息服務(wù)支持可靠消息傳遞、消息傳遞事務(wù)及持續(xù)消息等是EJB消息驅(qū)動Bean的基礎(chǔ)JavaEE核心技術(shù)(3)JSP(JavaServerPage)和Servlet是服務(wù)器端的程序用于擴(kuò)展服務(wù)器功能,響應(yīng)用戶請求可將結(jié)果轉(zhuǎn)化為標(biāo)準(zhǔn)的HTML代碼返回給用戶JSF(JavaServer

Faces)用于構(gòu)建Web應(yīng)用程序的新標(biāo)準(zhǔn)Java框架提供一種以組件為中心來開發(fā)Java

Web用戶界面的方法將Web應(yīng)用開發(fā)者劃分為三個角色:網(wǎng)頁設(shè)計人員;應(yīng)用程序設(shè)計人員;UI組件開發(fā)人員JavaEE核心技術(shù)(4)WebSocketAPI是下一代客戶端-服務(wù)器的異步通信方法,取代了單個TCP套接字,可用于任意的客戶端和服務(wù)器程序,由W3C進(jìn)行標(biāo)準(zhǔn)化WebSocketAPI可使服務(wù)器和客戶端可以在給定時間范圍內(nèi)的任意時刻,相互推送信息WebSocket并不限于以Ajax(或XHR)方式通信,服務(wù)器和客戶端可以彼此相互推送信息WebSocket允許跨域通信

JavaIDL/CORBA是CORBA規(guī)約的一種Java實現(xiàn)通過JavaIDL可以讓Java對象發(fā)布到CORBA的ORB上,從而通過ORB與別的CORBA對象進(jìn)行交互JavaEE核心技術(shù)(5)Interceptors(攔截器)在訪問某個Action或Action的某個方法之前或之后實施攔截攔截器是可插拔的,是AOP的一種實現(xiàn)JAF(JavaActivationFramework)/JavaMail是一套允許在Java程序中以與平臺無關(guān)、協(xié)議無關(guān)的方式發(fā)送電子郵件的APIJavaMail可利用JAF處理郵件的編碼XML(可擴(kuò)展標(biāo)記語言)是一種描述數(shù)據(jù)的元語言Java用JAXP(JavaAPIforXMLParsing)對XML文件進(jìn)行解析EJB通常將XML作為元標(biāo)記語言表達(dá)內(nèi)容JavaEE核心技術(shù)(6)EJB技術(shù)EJB技術(shù)EJB簡介EJB體系結(jié)構(gòu)EJB編程模型EJB構(gòu)件接口EJB構(gòu)件規(guī)約EJB構(gòu)件分類EJB構(gòu)件的開發(fā)什么是EJB?EJB不是一種產(chǎn)品,而是為開發(fā)和使用“基于事務(wù)和分布對象應(yīng)用的服務(wù)器端構(gòu)件”而定義的一種技術(shù)規(guī)約,用戶可根據(jù)該規(guī)約開發(fā)EJB構(gòu)件EJB構(gòu)件是一組分布式的對象,可通過EJB容器的控制為分布在因特網(wǎng)上的用戶提供遠(yuǎn)程服務(wù)什么是EJB?EJB規(guī)約定義了EJB構(gòu)件與EJB容器之間的交互機(jī)制,描述了EJB構(gòu)件和EJB容器在運(yùn)行時的行為,保證了EJB構(gòu)件在容器間的可移植性安全訪問如何檢驗事務(wù)如何管理持久性如何應(yīng)用EJB容器運(yùn)行在EJB服務(wù)器中,EJB規(guī)約還定義了EJB容器和EJB服務(wù)器的標(biāo)準(zhǔn)模型EJB的目標(biāo)EJB的目標(biāo)是為服務(wù)器端構(gòu)件系統(tǒng)定義一個技術(shù)規(guī)范,該規(guī)范可實現(xiàn)如下要求:提供一個標(biāo)準(zhǔn)的、分布的、基于OO的體系結(jié)構(gòu)屏蔽復(fù)雜的系統(tǒng)級功能需求兼容CORBA標(biāo)準(zhǔn)具有與非Java應(yīng)用之間的互操作能力EJB的現(xiàn)狀-EJB3.0EJB3.0于2006年5月隨JAVAEE5發(fā)布EJB3.0完全拋棄了EJB2.x實體Bean的設(shè)計,僅僅保留原有的SessionBean和消息驅(qū)動Bean;引進(jìn)了全新的JPA規(guī)范作為持久化解決方案簡化了EJB2.x中SessionBean的開發(fā),SessionBean不再需要Home接口,只要求提供遠(yuǎn)程或本地的業(yè)務(wù)接口即可不再推薦使用XML文件作為部署描述文件,而是改為使用Annotation來設(shè)置部署描述信息EJB的現(xiàn)狀-EJB3.1EJB3.1于2009年隨JAVAEE1.6發(fā)布允許企業(yè)Bean只提供一個Bean類,甚至無須提供業(yè)務(wù)接口允許通過異步的方式調(diào)用SessionBean的業(yè)務(wù)方法簡化了EJB的類文件必須打包到JAR文件中的限制,允許直接將EJB類放到WAR文件中EJB的現(xiàn)狀-EJB3.2EJB3.2于2013年7月隨JAVAEE7發(fā)布支持本地異步會話Bean調(diào)用JavaI/O訪問權(quán)已放寬,用“應(yīng)謹(jǐn)慎行事”取代了“不允許”有狀態(tài)會話bean的生命周期回調(diào)攔截方法,可以在一個事務(wù)環(huán)境中執(zhí)行(由生命周期回調(diào)方法的事務(wù)屬性決定)可以完全禁用特定的有狀態(tài)會話bean的鈍化TimerServiceAPI已被擴(kuò)展,可以在同一個EJB模塊中查詢所有活動計時器會話bean指定實現(xiàn)接口(作為本地或遠(yuǎn)程業(yè)務(wù)接口)的默認(rèn)規(guī)則已經(jīng)放寬,可以包含多個接口JavaEE的應(yīng)用架構(gòu)-經(jīng)典JAVAEE架構(gòu)以EJB為核心,前端以JSF(JavaServerFaces)為MVC框架的技術(shù)架構(gòu),這種技術(shù)架構(gòu)以Sun提倡的官方JavaEE技術(shù)為主JavaEE的應(yīng)用架構(gòu)-輕量級JavaEE架構(gòu)以Spring+Hibernate為核心,前端以Struts1或Struts2為MVC框架的技術(shù)架構(gòu),這種技術(shù)架構(gòu)以主流的開源框架為主Spring框架組成Spring框架的每個模塊(或組件)都可以單獨存在,或者與其他一個或多個模塊聯(lián)合實現(xiàn)核心容器:核心容器提供Spring框架的基本功能。核心容器的主要組件是BeanFactory。BeanFactory使用控制反轉(zhuǎn)(IOC)模式將應(yīng)用程序的配置和依賴性規(guī)范與實際應(yīng)用程序代碼分開Spring上下文:Spring上下文是一個配置文件,向Spring框架提供上下文信息。Spring上下文包括企業(yè)服務(wù),例如JNDI、EJB、電子郵件、國際化、校驗和調(diào)度功能SpringMVC框架:MVC框架是一個全功能的構(gòu)建Web應(yīng)用程序的MVC實現(xiàn)。通過策略接口,MVC框架變成為高度可配置的,MVC容納了大量視圖技術(shù)Spring框架和EJBSpring框架實際上大量參考了EJB的設(shè)計理念,只是Spring擯棄了EJB開發(fā)中的3大煩瑣之處:(1)EJB組件的接口和類必須繼承指定接口或類(2)需要大量使用XML配置文件(3)EJB組件必須打包成JAR包Spring容器取代了原有的EJB容器,因此以Spring框架為核心的應(yīng)用無須EJB容器支持,可以在Web容器中運(yùn)行Spring容器管理的不再是復(fù)雜的EJB組件,而是POJO(PlainOldJavaObject)

BeanEJB的體系結(jié)構(gòu)請求EJB構(gòu)件服務(wù)的應(yīng)用程序,EJB規(guī)約為創(chuàng)建EJB構(gòu)件的客戶接口定義了一套標(biāo)準(zhǔn),主要包括:EJBHome接口:客戶使用JNDI來查找對EJBHome接口的引用,為客戶機(jī)創(chuàng)建、刪除、查找EJBRemote接口對象的句柄提供了相應(yīng)的操作EJB業(yè)務(wù)接口:通過該接口可調(diào)用構(gòu)件的業(yè)務(wù)方法RMI/IIOP或RMI/JRMP協(xié)議:客戶機(jī)和容器通信的標(biāo)準(zhǔn)協(xié)議,這些底層的分布式通信機(jī)制對于EJB客戶機(jī)和EJB構(gòu)件開發(fā)者都是透明的EJB的體系結(jié)構(gòu)-EJB客戶機(jī)為使用EJB構(gòu)件的應(yīng)用程序提供操作環(huán)境,并提供所有必要的服務(wù)來支持EJB體系結(jié)構(gòu)Java白皮書承諾:“EJB規(guī)約為每個支持Java程序的應(yīng)用服務(wù)器定義了一個標(biāo)準(zhǔn)模型,任何廠商都可以使用此模型來實現(xiàn)對EJB構(gòu)件的支持”EJB服務(wù)器的主要功能包括管理EJB容器提供對操作系統(tǒng)服務(wù)的訪問提供與Java相關(guān)的服務(wù)EJB的體系結(jié)構(gòu)-EJB服務(wù)器EJB容器為EJB構(gòu)件提供運(yùn)行環(huán)境,EJB容器對EJB應(yīng)用程序是透明的EJB白皮書描述:“EJB容器管理其中的EJB構(gòu)件,客戶機(jī)應(yīng)用程序并不直接與EJB構(gòu)件進(jìn)行交互,相反,客戶機(jī)應(yīng)用程序通過由容器生成的封裝接口與EJB構(gòu)件進(jìn)行交互,當(dāng)客戶機(jī)使用封裝接口調(diào)用各種操作時,容器截獲每個方法調(diào)用,并插入管理服務(wù)”EJB的體系結(jié)構(gòu)-EJB容器EJB的體系結(jié)構(gòu)-EJB容器面向?qū)ο蠓植际接嬎悖篍JB構(gòu)件在理論上是位置透明的使用代理對象:客戶機(jī)訪問EJB構(gòu)件時使用代理對象,構(gòu)件本身對客戶機(jī)是不可訪問的EJB的編程模型-關(guān)鍵特征EJB的邊界EJB構(gòu)件接口構(gòu)件接口是構(gòu)件提供者為便于復(fù)用者(客戶)復(fù)用該構(gòu)件所提供的必要信息構(gòu)件與容器協(xié)作實現(xiàn)這些接口EJB構(gòu)件規(guī)約EJB構(gòu)件規(guī)約EJB可使Java編寫的服務(wù)器組件開發(fā)和部署標(biāo)準(zhǔn)化EJB構(gòu)件規(guī)約定義了以下接口EJB和容器之間的接口容器和應(yīng)用服務(wù)器之間的接口容器和客戶端之間的接口容器和持久管理器之間的接口EJB構(gòu)件分類EJB構(gòu)件分為三(四)種基本的類型會話構(gòu)件(SessionBean)有態(tài)會話構(gòu)件(StatelessSessionBean)無態(tài)會話構(gòu)件(StatefullSessionBean)消息驅(qū)動構(gòu)件(Message-DrivenBean)實體構(gòu)件(EntityBean)會話構(gòu)件特征與單個客戶相對應(yīng)不直接表示數(shù)據(jù)庫中的共享數(shù)據(jù)生命周期相對較短當(dāng)EJB容器崩潰時,也隨著消失類別Stateful(有態(tài))Stateless(無態(tài))有態(tài)構(gòu)件的生命周期@PreDestroy超時@postConstruct業(yè)務(wù)方法@PrePassivate@PostActivate超時實例拋出系統(tǒng)異常無態(tài)構(gòu)件的生命周期@PreDestroy@PostConstruct業(yè)務(wù)方法兩種會話構(gòu)件的選擇Stateful?Stateless?過程需要保持狀態(tài)?加入過程中斷,恢復(fù)運(yùn)行時需要以前的信息嗎?兩種會話構(gòu)件的選擇發(fā)生下列情況時應(yīng)該考慮使用有狀態(tài)會話Bean在方法調(diào)用時,會話Bean需要維護(hù)成員變量的數(shù)據(jù)實例化會話Bean的時候,必須初始化會話Bean的狀態(tài)會話Bean需要跨越多個方法調(diào)用,并維護(hù)客戶端的信息會話Bean正在服務(wù)一個交互客戶端,EJB容器或應(yīng)用服務(wù)器需要了解該客戶端發(fā)生如下情況時應(yīng)考慮使用無狀態(tài)會話Bean不需要維護(hù)跨越方法調(diào)用的成員變量中的數(shù)據(jù)會話Bean提供的服務(wù)并不針對某種客戶端消息驅(qū)動構(gòu)件(MDB)MDB是一種JMS消息的使用者,MDB負(fù)責(zé)從消息隊列或者消息主題中讀取消息MDB只提供消息接受方法,客戶端不直接與MDB打交道MDB的輸入?yún)?shù)只有一種類型,即消息對象,是那些實現(xiàn)了Message接口的Java對象生命周期由EJB容器控制客戶端和MDB是完全獨立的,客戶端無法直接調(diào)用MDB方法,而是由消息服務(wù)器負(fù)責(zé)把消息發(fā)送給MDB無狀態(tài)消息驅(qū)動構(gòu)件(MDB)MDB的生命周期@PreDestroy@PostConstructMDB常用開發(fā)模式客戶端可直接調(diào)用SessionBean,發(fā)布消息到主題MDB接收并處理消息EJB構(gòu)件開發(fā)與應(yīng)用SessionBean有兩個共同的組成部分:業(yè)務(wù)接口(Businessinterface):定義EJB構(gòu)件的邏輯方法Bean類(Beanclass):實現(xiàn)主要的業(yè)務(wù)邏輯EJB構(gòu)件的開發(fā)(SessionBean)開發(fā)一個SessionBean,需要定義接口和Beanclass,接口分為遠(yuǎn)程接口(RemoteInterface)和本地接口(LocalInterface)遠(yuǎn)程接口(RemoteInterface)定義業(yè)務(wù)方法,可以被EJB容器之外的應(yīng)用訪問到本地接口(LocalInterfac)同樣定義業(yè)務(wù)方法,可以被同處于EJB容器內(nèi)的其它應(yīng)用使用。因為local接口允許bean之間直接通過內(nèi)存交互,沒有分布式對象協(xié)議的開銷,從而改善了性能Bean類包含了業(yè)務(wù)邏輯,必須具備一個遠(yuǎn)程或本地接口,Bean類應(yīng)實現(xiàn)接口的業(yè)務(wù)方法。在EJB3中,不要求同時實現(xiàn)remote和local接口,但實現(xiàn)兩者是比較好的做法開發(fā)SessionBean第一步:定義一個包含業(yè)務(wù)方法的接口。該接口不需要包含任何注釋,是一個普通的java接口。調(diào)用EJB的客戶端使用這個接口引用從EJB容器返回的存根(stub)開發(fā)SessionBean第一步第二步:編寫B(tài)eanClass開發(fā)SessionBean第二步SessionBean的客戶端開發(fā)publicstaticvoidmain(String[]args){ Propertiesprops=newProperties(); props.setProperty("java.naming.factory.initial","erfaces.NamingContextFactory"); props.setProperty("vider.url","localhost:1099");try{ InitialContextctx=newInitialContext(props); HelloWorldhelloworld=(HelloWorld)ctx.lookup("HelloWorldBean/remote"); System.out.println(helloworld.sayHello(“哈工大"));}catch

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論