版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、JavaEE概念與體系結(jié)構(gòu)概念與體系結(jié)構(gòu)2013-07-16基礎(chǔ)平臺(tái)產(chǎn)品部基礎(chǔ)平臺(tái)產(chǎn)品部:李沖李沖通過學(xué)習(xí)通過學(xué)習(xí): : 參加培訓(xùn)人員在完成培訓(xùn)以后,能夠了解利用參加培訓(xùn)人員在完成培訓(xùn)以后,能夠了解利用Java EEJava EE進(jìn)行大型應(yīng)用系統(tǒng)開發(fā)的優(yōu)勢(shì);進(jìn)行大型應(yīng)用系統(tǒng)開發(fā)的優(yōu)勢(shì); 參加培訓(xùn)人員在完成培訓(xùn)以后,能夠熟悉參加培訓(xùn)人員在完成培訓(xùn)以后,能夠熟悉Java Java EEEE的基礎(chǔ)概念和體系架構(gòu),對(duì)于一個(gè)的基礎(chǔ)概念和體系架構(gòu),對(duì)于一個(gè)Java EEJava EE工程能夠清晰的表述其組織構(gòu)成;工程能夠清晰的表述其組織構(gòu)成;1.Java EE概述概述Java EE產(chǎn)生的背景和概念產(chǎn)生的背
2、景和概念企業(yè)級(jí)應(yīng)用程序體系結(jié)構(gòu)企業(yè)級(jí)應(yīng)用程序體系結(jié)構(gòu)Java EE體系結(jié)構(gòu)體系結(jié)構(gòu)2.Java EE基礎(chǔ)技術(shù)標(biāo)準(zhǔn)基礎(chǔ)技術(shù)標(biāo)準(zhǔn) JavaBEAN, JDBC, JNDI, RMI3.Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn)Servlet / JSPJAFJavaMail4.進(jìn)一步說明進(jìn)一步說明Java EE事務(wù)處理分析事務(wù)處理分析JNDI的擴(kuò)展使用的擴(kuò)展使用內(nèi)容提要內(nèi)容提要EJBJTAJMSJAASWebService其他技術(shù)標(biāo)準(zhǔn)其他技術(shù)標(biāo)準(zhǔn)RMI與與CORBA123Java EEJava EE產(chǎn)生的背景產(chǎn)生的背景 1995年 ,Sun公司推出Java技術(shù)。 十多年來,已發(fā)展成為全球第一大軟件開發(fā)
3、平臺(tái),是長(zhǎng)時(shí)間以來最卓越的程序設(shè)計(jì)語言。 特點(diǎn):跨平臺(tái)、面向?qū)ο?、多線程、半編譯半解釋等 1999年,Java從一種語言發(fā)展成為一種開發(fā)平臺(tái) ,出現(xiàn)Sun ONE體系結(jié)構(gòu),以Java語言為核心,包括以下三個(gè)版本:J2SE StandardJ2ME MicroJ2EE Enterprise 2005年8月, Java升級(jí)到1.5版,SUN公司將Java EE 1.5改名為java EE 5,以前J2EE版本還是稱為J2EE。java語言的發(fā)展語言的發(fā)展 Java EE不是編程語言! Java EE是一個(gè)標(biāo)準(zhǔn)中間件體系結(jié)構(gòu) Java EE是企業(yè)級(jí)分布式應(yīng)用開發(fā)標(biāo)準(zhǔn) Java EE定義定義在傳統(tǒng)的開
4、發(fā)模式(單層應(yīng)用結(jié)構(gòu))下,應(yīng)用普遍存在以下致命缺點(diǎn):- 數(shù)據(jù)、頁面和業(yè)務(wù)邏輯在一個(gè)邏輯層次中,功能緊密耦合;- 代碼重用性極低,可維護(hù)性差;- 應(yīng)用耦合度高,完全沒有可擴(kuò)展性;- 任何一個(gè)細(xì)小功能的更新,需要對(duì)整個(gè)應(yīng)用進(jìn)行重新部署;- 后臺(tái)數(shù)據(jù)結(jié)構(gòu)的改動(dòng),將導(dǎo)致所有相關(guān)代碼的改動(dòng);- 數(shù)據(jù)庫連接管理是個(gè)很大的瓶頸;因此,在很長(zhǎng)一段時(shí)間內(nèi),導(dǎo)致企業(yè)級(jí)應(yīng)用開發(fā)過程一直存在著以下瓶頸:- 應(yīng)用與功能的分布式;- 功能模塊的可移值性與可重用性;- 快速的WEB頁面的開發(fā);- 應(yīng)用邏輯層次的分離,避免耦合;- 功能的安全性與事務(wù)性;- 可擴(kuò)展與可維護(hù)性;Java EE的意義的意義 分布式 高速反應(yīng)性 安
5、全性 事務(wù)性 可擴(kuò)展性、可移植性、易維護(hù) 集成化Java EE的意義的意義-企業(yè)應(yīng)用程序的特點(diǎn)企業(yè)應(yīng)用程序的特點(diǎn)企業(yè)應(yīng)用的特點(diǎn)(分布式、面向web、開發(fā)的、集成的、可移植、易于擴(kuò)展和維護(hù),企業(yè)計(jì)算具有一致性、事務(wù)性、安全性等)決定了企業(yè)應(yīng)用的體系結(jié)構(gòu):- 分布式的、可移植組件的框架與結(jié)構(gòu);- 簡(jiǎn)化服務(wù)端中間件的設(shè)計(jì)(包括事務(wù)處理,安全性等等);- 為組件、應(yīng)用、以及服務(wù)端提供標(biāo)準(zhǔn)、開放的API,開放的、基于標(biāo)準(zhǔn)的平臺(tái); - 開發(fā)、部署與管理N層結(jié)構(gòu)、面向WEB、以服務(wù)器為中心的企業(yè)級(jí)應(yīng)用體系;JavaEE集上述特性為一身!Java EE的意義的意義-企業(yè)應(yīng)用程序的特點(diǎn)企業(yè)應(yīng)用程序的特點(diǎn)客戶層客
6、戶層(人機(jī)交互(人機(jī)交互/ /應(yīng)用邏輯應(yīng)用邏輯/ /數(shù)據(jù)訪問)數(shù)據(jù)訪問)服務(wù)層服務(wù)層(數(shù)據(jù)服務(wù))(數(shù)據(jù)服務(wù))客戶端應(yīng)用程序客戶端應(yīng)用程序數(shù)據(jù)庫服務(wù)器數(shù)據(jù)庫服務(wù)器企業(yè)級(jí)應(yīng)用程序體系結(jié)構(gòu)企業(yè)級(jí)應(yīng)用程序體系結(jié)構(gòu)C/S單層結(jié)構(gòu)單層結(jié)構(gòu)客戶層客戶層(表示邏輯)(表示邏輯)數(shù)據(jù)層數(shù)據(jù)層(數(shù)據(jù)服務(wù))(數(shù)據(jù)服務(wù))數(shù)據(jù)庫服務(wù)器數(shù)據(jù)庫服務(wù)器瀏覽器瀏覽器 應(yīng)用服務(wù)層應(yīng)用服務(wù)層(業(yè)務(wù)邏輯)(業(yè)務(wù)邏輯)應(yīng)用服務(wù)器應(yīng)用服務(wù)器數(shù)據(jù)庫服務(wù)器數(shù)據(jù)庫服務(wù)器企業(yè)級(jí)應(yīng)用程序體系結(jié)構(gòu)企業(yè)級(jí)應(yīng)用程序體系結(jié)構(gòu)B/S兩層結(jié)構(gòu)兩層結(jié)構(gòu)中間服務(wù)器又按應(yīng)用邏輯劃分成若干子層 應(yīng)用服務(wù)器應(yīng)用服務(wù)器Web表示層表示層客戶層客戶層數(shù)據(jù)層數(shù)據(jù)層(數(shù)據(jù)服務(wù)
7、)(數(shù)據(jù)服務(wù))數(shù)據(jù)庫服務(wù)器數(shù)據(jù)庫服務(wù)器瀏覽器瀏覽器業(yè)務(wù)邏輯層業(yè)務(wù)邏輯層.企業(yè)級(jí)應(yīng)用程序體系結(jié)構(gòu)企業(yè)級(jí)應(yīng)用程序體系結(jié)構(gòu)多層結(jié)構(gòu)多層結(jié)構(gòu)Java EE架構(gòu)圖:Java EE體系結(jié)構(gòu)體系結(jié)構(gòu)整體架構(gòu)整體架構(gòu)Java EE體系結(jié)構(gòu)體系結(jié)構(gòu) J2SE結(jié)構(gòu)結(jié)構(gòu)一個(gè)典型Java EE應(yīng)用結(jié)構(gòu)圖:Java EE體系結(jié)構(gòu)體系結(jié)構(gòu)應(yīng)用結(jié)構(gòu)應(yīng)用結(jié)構(gòu) Web 服務(wù)器服務(wù)器客戶客戶客戶層客戶層業(yè)務(wù)邏輯層業(yè)務(wù)邏輯層企業(yè)信息系統(tǒng)層企業(yè)信息系統(tǒng)層數(shù)據(jù)層數(shù)據(jù)層數(shù)據(jù)庫服務(wù)器郵件服務(wù)器瀏覽器瀏覽器HtmlApplet Web 服務(wù)器服務(wù)器表示層表示層(web層層)客戶端應(yīng)用程序客戶端應(yīng)用程序EJB 容器JSPServlet會(huì)話Be
8、an實(shí)體Bean消息Bean應(yīng)用服務(wù)器應(yīng)用服務(wù)器數(shù)據(jù)庫服務(wù)器數(shù)據(jù)庫服務(wù)器ServletJava EE體系結(jié)構(gòu)體系結(jié)構(gòu) Java EE的多層架構(gòu)的多層架構(gòu)JavaEE規(guī)范被眾多中間件廠商所實(shí)現(xiàn),不同廠家有不同的實(shí)現(xiàn),但都遵循同一JavaEE規(guī)范,可以互相部署開放性。 支持JavaEE的廠商和應(yīng)用服務(wù)器Sun 公司: Sun One 服務(wù)器 Netbeans自帶的GlassfishV2 服務(wù)器內(nèi)置Applicaition ServerBEA的weblogicIBM的WebSpereJBoss 開發(fā)環(huán)境NetBeans(內(nèi)置應(yīng)用服務(wù)器GlassFishV2)+MySQLEclipse+MyEclip
9、se+Tomcat+MySQLEclipse+MyEclipse+Jboss+MySQL 支持EJBJava EE體系結(jié)構(gòu)體系結(jié)構(gòu) Java EE容器廠商容器廠商組件:JavaEE基本的軟件單元面包容器:分布式組件的運(yùn)行環(huán)境 烤箱 容器為組件提供必需的底層基礎(chǔ)功能服務(wù) javaEE的容器由廠商實(shí)現(xiàn),javaEE服務(wù)器中均包含Web容器和EJB容器的實(shí)現(xiàn) 如JDNI服務(wù)、JDBC、JMS、持久化、事務(wù)支持、并發(fā)、安全性、資源和生命周期管理 程序員根據(jù)特定應(yīng)用需求編寫組件,專注于業(yè)務(wù)邏輯 而不必困擾在復(fù)雜的企業(yè)應(yīng)用環(huán)境這些由容器實(shí)現(xiàn)了面包師:面包是什么配比,什么餡的,什么形狀的,口味如何,多高溫度
10、,多久不用管烤箱的安全防護(hù)機(jī)制、容量,電、溫度的轉(zhuǎn)換、定時(shí)器的控制 都是烤箱的事,而烤箱的控制是廠家實(shí)現(xiàn)的Java EE體系結(jié)構(gòu)體系結(jié)構(gòu) Java EE組件和容器組件和容器Java EE體系結(jié)構(gòu)體系結(jié)構(gòu)容器及類型容器及類型容器容器是Java EE的運(yùn)行環(huán)境,這種環(huán)境是為應(yīng)用組件服務(wù)的例如web容器四類容器1. EJB容器2. Application Client容器3. Web容器4. Applet容器Java EE容器事務(wù)狀態(tài)管理多線程資源池復(fù)雜的底層細(xì)節(jié)容器服務(wù)安全事務(wù)管理JNDI遠(yuǎn)程連接可配置的服務(wù):如安全性不可配置的服務(wù) EJB和Servlet的生命周期、數(shù)據(jù)庫連接池 數(shù)據(jù)持久性、Ja
11、va EE平臺(tái)APIJava EE體系結(jié)構(gòu)體系結(jié)構(gòu)JavaEE容器服務(wù)與接口容器服務(wù)與接口Java EE基礎(chǔ)技術(shù)標(biāo)準(zhǔn)基礎(chǔ)技術(shù)標(biāo)準(zhǔn)JavaBEANJDBCJNDIRMI嚴(yán)格的說,JavaBEAN與JDBC,是J2SE的規(guī)范與標(biāo)準(zhǔn),在Java EE中得到了更好的擴(kuò)展;先來了解一下JavaBEAN: - JavaBEAN是在編程環(huán)境中能夠被可視化處理的可重用組件;這里所指編程環(huán)境包括:IDE(如Eclipse)等;一個(gè)JavaBEAN簡(jiǎn)單來說就是一個(gè)Java類,只有遵守了JavaBEAN的技術(shù)規(guī)范,才能被稱之為JavaBEAN,規(guī)范如下: - 該類必須為公共類,并且可序列化,即實(shí)現(xiàn)java.io.S
12、erializable接口; - 若有構(gòu)造函數(shù),必須是無參的,類中不能出現(xiàn)main函數(shù); - 所有屬性必須通過set,get方式來操作(如setName,getName,若是布爾型 則使用isName),所有屬性都必須是私有的(private),這種方式稱為setters 與getters方法對(duì); - 包含必要的事件處理方法;(若不需要事件機(jī)制,可忽略)Java EE基礎(chǔ)技術(shù)標(biāo)準(zhǔn)基礎(chǔ)技術(shù)標(biāo)準(zhǔn) JavaBEAN結(jié)合JavaBEAN規(guī)范,可以將JavaBEAN的元素歸納為:屬性、方法、事件;JavaBEAN屬性有4種類型: - Simple屬性:表示具有setter與getter方法對(duì)的屬性(fi
13、eld); - Indexed屬性:表示數(shù)據(jù)值,同樣具有setter與getter,可設(shè)置或獲取數(shù)組中的 某個(gè)值,也可以一次設(shè)置或獲取整個(gè)數(shù)組; - Bound屬性:屬性值發(fā)生變化時(shí),會(huì)觸發(fā)其他相關(guān)的JavaBEAN,至于被觸發(fā) 的JavaBEAN應(yīng)做什么動(dòng)作,由其自己定義; - Constrained屬性:屬性值將要發(fā)生變化時(shí),與該屬性建立關(guān)系的其他Java對(duì) 象可以否決該屬性值的改變;Java EE基礎(chǔ)技術(shù)標(biāo)準(zhǔn)基礎(chǔ)技術(shù)標(biāo)準(zhǔn) JavaBEANJavaBEAN事件;通過事件機(jī)制,JavaBEAN既是事件發(fā)起者,也是接收者,不同的組件就可以組合在一起,組件之間通過事件傳遞進(jìn)行通信,這樣就可構(gòu)成了
14、最簡(jiǎn)單的應(yīng)用;在事件模型中,包括以下構(gòu)成部分: - 事件狀態(tài)對(duì)象、事件監(jiān)聽者接口、事件監(jiān)聽者; - 適配類:核心部分,用于選擇并指派事件的響應(yīng)者(JavaBEAN); Java EE基礎(chǔ)技術(shù)標(biāo)準(zhǔn)基礎(chǔ)技術(shù)標(biāo)準(zhǔn) JavaBEAN結(jié)合JavaBEAN的元素與規(guī)范,可以將JavaBEAN的特征歸納為: - 定制:對(duì)屬性、方法、事件的設(shè)計(jì)定制; - 持久性:可以保存與恢復(fù)JavaBEAN的屬性值,通過可序列化來支持持久性; - 通信:以事件方式與外部進(jìn)行通信; - 自檢:開發(fā)工具通過該機(jī)制來分析JavaBEAN的結(jié)構(gòu),確定可支持的元素;其他: - JavaBEAN完成后,會(huì)被打包成jar文件,把所需求資
15、源都打包在同一個(gè)文件中; - 在jar的MANIFEST文件中指定所有的JavaBEAN文件; - jar文件在網(wǎng)絡(luò)傳輸過程中將會(huì)極大減少數(shù)據(jù)流量;Java EE基礎(chǔ)技術(shù)標(biāo)準(zhǔn)基礎(chǔ)技術(shù)標(biāo)準(zhǔn) JavaBEAN一個(gè)簡(jiǎn)單JavaBEAN例子:public class TestBean private String name;private boolean man;public String getName() return name;public void setName(String name) = name;public boolean isMan() return man;p
16、ublic void setMan(boolean man) this.man = man/. .Java EE基礎(chǔ)技術(shù)標(biāo)準(zhǔn)基礎(chǔ)技術(shù)標(biāo)準(zhǔn) JavaBEANJDBC的定義: - Java Database Connectivity Standard,是用于執(zhí)行SQL的Java API,為Java提 供了通用的訪問不同關(guān)系型數(shù)據(jù)庫(DBMS)的方法與接口,幾乎所有的DBMS 廠商都提供了JDBC的服務(wù)或驅(qū)動(dòng);Java EE基礎(chǔ)技術(shù)標(biāo)準(zhǔn)基礎(chǔ)技術(shù)標(biāo)準(zhǔn) JDBC在最新的J2SDK6中,JDBC API目錄已有4.0: - 核心API定義在java.sql包中; - 擴(kuò)展API定義在javax.sql包中
17、;主要的JDBC對(duì)象與接口如下: - java.sql.DriverManager:用于管理JDBC驅(qū)動(dòng)的服務(wù)類,當(dāng)JDBC驅(qū)動(dòng)加載至內(nèi)存后,DriverManager 會(huì)自動(dòng)注冊(cè)JDBC驅(qū)動(dòng),然后通過getConnection方法建立Java應(yīng)用至 DBMS的連接; - java.sql.Connection:數(shù)據(jù)庫連接對(duì)象,通過createStatement創(chuàng)建SQL申明; - java.sql.Statement:SQL語句接口,通過executeQuery或executeUpdate執(zhí)行一個(gè)靜態(tài)的SQL語句; - java.sql.ResultSet:SQL語句執(zhí)行結(jié)果對(duì)象,包含了若干
18、維護(hù)表記錄的操作方法; - java.sql.SQLException:SQL操作期間的異常處理,所以異常均通過該類拋出;Java EE基礎(chǔ)技術(shù)標(biāo)準(zhǔn)基礎(chǔ)技術(shù)標(biāo)準(zhǔn) JDBCJDBC連接生命周期如下:Java EE基礎(chǔ)技術(shù)標(biāo)準(zhǔn)基礎(chǔ)技術(shù)標(biāo)準(zhǔn) JDBCJDBC驅(qū)動(dòng)共有4種類型: - 類型 1:將JDBC映射到其他類型的數(shù)據(jù)訪問接口上,最為典型的是JDBC-ODBC Bridge,利用ODBC提供JDBC的訪問(如訪問MS Access),但必須在 每臺(tái)客戶機(jī)上都配置ODBC驅(qū)動(dòng)(所以這種方式不適用于單獨(dú)的Java 應(yīng)用),適用于服務(wù)端應(yīng)用程序,只需配置一次ODBC即可;Java EE基礎(chǔ)技術(shù)標(biāo)準(zhǔn)基礎(chǔ)技
19、術(shù)標(biāo)準(zhǔn) JDBC - 類型 2:基于本地API與廠商的驅(qū)動(dòng)程序?qū)崿F(xiàn),不同DBMS廠商提供了不同的驅(qū) 動(dòng)實(shí)現(xiàn)(遵照J(rèn)DBC標(biāo)準(zhǔn)實(shí)現(xiàn)),JDBC驅(qū)動(dòng)會(huì)將本地API的操作轉(zhuǎn)換成 具體廠商的JDBC操作; 如,Oracle提供的JDBC JAR為:classes12.jar, ojdbc14.jarJava EE基礎(chǔ)技術(shù)標(biāo)準(zhǔn)基礎(chǔ)技術(shù)標(biāo)準(zhǔn) JDBC - 類型 3:完全由Java實(shí)現(xiàn),將JDBC轉(zhuǎn)換為與DBMS無關(guān)的網(wǎng)絡(luò)協(xié)議,然后該協(xié) 議被中間件服務(wù)器轉(zhuǎn)換為不同的DBMS協(xié)議(由中間件服務(wù)提供與數(shù) 據(jù)庫之間的操作映射); 比如,銀行項(xiàng)目中常用的SOP協(xié)議,由中間件服務(wù)提供SOP協(xié)議規(guī)范 ,然后再將該協(xié)議轉(zhuǎn)
20、換成不同的DBMS通訊協(xié)議;Java EE基礎(chǔ)技術(shù)標(biāo)準(zhǔn)基礎(chǔ)技術(shù)標(biāo)準(zhǔn) JDBC - 類型 4:與第3種類型相似,唯一不同的是,在本地實(shí)現(xiàn)與不同DBMS通訊的協(xié) 議,因此缺點(diǎn)顯然易見,需要在本地API中實(shí)現(xiàn)不同的DBMS協(xié)義,所 以,使用場(chǎng)合較少;Java EE基礎(chǔ)技術(shù)標(biāo)準(zhǔn)基礎(chǔ)技術(shù)標(biāo)準(zhǔn) JDBCJDBC連接池: - 簡(jiǎn)單來說,是管理JDBC連接生命周期的容器,確保連接使用的安全性; - 一般通過mons.dbcp包實(shí)現(xiàn); - 可以為同一個(gè)或不同DB創(chuàng)建多個(gè)連接池;Java EE基礎(chǔ)技術(shù)標(biāo)準(zhǔn)基礎(chǔ)技術(shù)標(biāo)準(zhǔn) JDBCJDBC的事務(wù)支持 - 所有的JDBC驅(qū)動(dòng)都支持事務(wù); - 事務(wù)操作:提交,回滾;JDB
21、C、JAVA、SQL三者之間對(duì)于相同數(shù)據(jù)類型具有不同定義,下表羅列了一些:Java EE基礎(chǔ)技術(shù)標(biāo)準(zhǔn)基礎(chǔ)技術(shù)標(biāo)準(zhǔn) JDBCJDBC類型類型SQL類型類型Java類型類型ARRAYARRAYjava.sql.ArrayTIMETIMEjava.sql.TimestampBIGINTBIGINTLongVARCHARVARCHARStringCLOBCLOBjava.sql.ClobNULLNULLNULLJNDI的定義: - Java Naming and Directory Interface(Java命名目錄服務(wù)接口),是命名目錄 服務(wù)的抽象接口集合,為企業(yè)級(jí)應(yīng)用提供了統(tǒng)一的標(biāo)準(zhǔn)化連接,使J
22、ava能夠無 縫的獲取任何可目錄化的企業(yè)信息; - 是數(shù)據(jù)的最基本服務(wù)之一,常見的目錄服務(wù)有LDAP Server、RMI等; - 通過names與objects的綁定,形成唯一的描述字符串,以此獲得目錄條目,類 似于DNS通過主機(jī)名來獲得IP; - JNDI包含API與SPI(服務(wù)提供接口),JNDI SPI用于命名目錄服務(wù)的設(shè)計(jì)與實(shí) 現(xiàn),使各類數(shù)據(jù)服務(wù)標(biāo)準(zhǔn)化;因此Java能夠通過JNDI API快速方便的訪問任何 目錄服務(wù);Java EE基礎(chǔ)技術(shù)標(biāo)準(zhǔn)基礎(chǔ)技術(shù)標(biāo)準(zhǔn) JNDIJava應(yīng)用與JNID API、JNDI SPI,以及各類目錄服務(wù)的關(guān)系結(jié)構(gòu)圖如下:Java EE基礎(chǔ)技術(shù)標(biāo)準(zhǔn)基礎(chǔ)技術(shù)標(biāo)
23、準(zhǔn) JNDIJNDI由3個(gè)包組成: - javax.naming:定義了命名服務(wù)的類型,以及所有存取標(biāo)準(zhǔn)接口; - javax.naming.directory:是javax.naming的擴(kuò)展,提供了所有對(duì)于目錄服務(wù)的 訪問標(biāo)準(zhǔn)操作與接口; - javax.naming.spi:定義了命名目錄的服務(wù)接口,遵循這些標(biāo)準(zhǔn)接口,開發(fā)者 能夠?yàn)椴煌瑪?shù)據(jù)服務(wù)編寫出統(tǒng)一的命名目錄服務(wù);目錄較為成熟的JNDI實(shí)現(xiàn)包廠商有:SUN、IBM、Netscpe;Java EE基礎(chǔ)技術(shù)標(biāo)準(zhǔn)基礎(chǔ)技術(shù)標(biāo)準(zhǔn) JNDI首先來說明一下“分布式”這個(gè)概念: - 大多數(shù)傳統(tǒng)方式的Java應(yīng)用,所有的對(duì)象、程序都在同一臺(tái)服務(wù)器上,
24、并且在 同一個(gè)JVM或進(jìn)程中; - 而在“分布式”計(jì)算中,對(duì)象和程序可以在同一臺(tái)服務(wù)器上的不同進(jìn)程中,也可 存在于不同的機(jī)器上;Java EE基礎(chǔ)技術(shù)標(biāo)準(zhǔn)基礎(chǔ)技術(shù)標(biāo)準(zhǔn) RMI分布式的結(jié)構(gòu)與優(yōu)勢(shì): - 客戶端層:UI與后臺(tái)的業(yè)務(wù)處理完全分開,使客戶端運(yùn)行更“瘦”,更高效; - 業(yè)務(wù)邏輯層:又稱“對(duì)象有服務(wù)層”,負(fù)責(zé)處理各類邏輯對(duì)象,如線程,連接 池,具體的業(yè)務(wù)對(duì)象等; - 數(shù)據(jù)及服務(wù)層:只負(fù)責(zé)具體的數(shù)據(jù)及服務(wù)運(yùn)算; - 分布式計(jì)算能夠充分利用多個(gè)系統(tǒng)組合的計(jì)算能力,能夠解決在單機(jī)環(huán)境中無 法實(shí)現(xiàn)的計(jì)算功能;Java EE基礎(chǔ)技術(shù)標(biāo)準(zhǔn)基礎(chǔ)技術(shù)標(biāo)準(zhǔn) RMI為什么“分布式”能夠在Java平臺(tái)上得到很好
25、的實(shí)現(xiàn),最主要的3點(diǎn)如下; - 跨平臺(tái)性:Java為所有的系統(tǒng)平臺(tái)都實(shí)現(xiàn)了統(tǒng)一的基本類型; - 可序列化:Java對(duì)象支持可序列化,符合遠(yuǎn)程調(diào)用的要求; - 性能優(yōu)勢(shì):綜上2點(diǎn),使得Java的遠(yuǎn)程交互極為簡(jiǎn)單高效;所以,便產(chǎn)生了RMI(Java Remote Method Invocation),Java EE基礎(chǔ)技術(shù)標(biāo)準(zhǔn)基礎(chǔ)技術(shù)標(biāo)準(zhǔn) RMIRMI的定義: - 基于TCP/IP套接字方式的分布式調(diào)用,是Java開發(fā)分布式應(yīng)用的基礎(chǔ);其實(shí)RMI本身并沒有添加任何新的概念和技術(shù),其核心還是“接口(Interface)”,簡(jiǎn)單來說,就是把“接口”與“實(shí)現(xiàn)(對(duì)象)”從本地移到了遠(yuǎn)端的服務(wù)器上而,實(shí)現(xiàn)了
26、“接口”與“實(shí)現(xiàn)”的分布式調(diào)用;Java EE基礎(chǔ)技術(shù)標(biāo)準(zhǔn)基礎(chǔ)技術(shù)標(biāo)準(zhǔn) RMI舉個(gè)簡(jiǎn)單的例子說明: - 假設(shè),我們?cè)诜?wù)端定義了一個(gè)Interface,并且為該Interface編寫了實(shí)現(xiàn)(對(duì) 象),然后在客戶端編寫了調(diào)用該Interface的Class,這樣就構(gòu)成了一個(gè)簡(jiǎn)單的 “客戶/服務(wù)模型”,所以對(duì)于客戶端而言,重要的不是Interface的實(shí)現(xiàn),而是 Interface;Java EE基礎(chǔ)技術(shù)標(biāo)準(zhǔn)基礎(chǔ)技術(shù)標(biāo)準(zhǔn) RMI從上頁的圖中,我們可以了解到RMI的部署與運(yùn)行過程: - 首先定義RMI服務(wù)端能夠提供的服務(wù),也就是Interface; - 這些Interface需要生成調(diào)用入口,讓客戶
27、端知道有哪些服務(wù)可以調(diào)用; - 然后,在服務(wù)端編寫Interface的實(shí)現(xiàn)類; - 注意,還需要編寫RMI注冊(cè)機(jī)制,以便在RMI服務(wù)啟時(shí),能夠正確加載服務(wù); - 啟動(dòng)初始化RMI服務(wù),注冊(cè)機(jī)制會(huì)自動(dòng)加載所以接口(服務(wù)); - 最后,客戶端就可以方便的進(jìn)行服務(wù)的調(diào)用;當(dāng)然,由于是依靠網(wǎng)絡(luò)運(yùn)行,所以也需要必要的安全校驗(yàn)機(jī)制,這里就不進(jìn)行描述了,可以根據(jù)實(shí)際的運(yùn)行環(huán)境定制,比如,在客戶端/服務(wù)端交互時(shí),加入必要的身份驗(yàn)證部分,或進(jìn)行IP地址限制等;Java EE基礎(chǔ)技術(shù)標(biāo)準(zhǔn)基礎(chǔ)技術(shù)標(biāo)準(zhǔn) RMI現(xiàn)在再來了解一下RMI的開發(fā)過程: 1- 定義服務(wù)接口,擴(kuò)展java.rmi.Remote接口; publi
28、c interface RMISample extends Remote 2- 編寫接口的實(shí)現(xiàn)類,除了實(shí)現(xiàn)Interface外,必須擴(kuò)展UnicastRemoteObject, 說明該服務(wù)不可復(fù)制,并且只在服務(wù)運(yùn)行時(shí)有效; public class RMISampleImpl extends UnicastRemoteObject implements RMISample 3- 創(chuàng)建RMISampleImpl的stub,通過J2SDK的命令,rmic RMISampleImpl; stub就是剛才所提到的服務(wù)調(diào)用入口,名稱為RMISampleImpl_Stub; 在JDK1.2以前,還需要生成
29、skeleton,負(fù)責(zé)服務(wù)的定位,及參數(shù)的解析交互;Java EE基礎(chǔ)技術(shù)標(biāo)準(zhǔn)基礎(chǔ)技術(shù)標(biāo)準(zhǔn) RMI 4- 編寫RMI注冊(cè)機(jī)制,若名稱為RMISampleServ以下是在main函數(shù)中的代碼: /創(chuàng)建與安裝安全管理程序 System.setSecurityManager(new RMISecurityManager(); /實(shí)例化遠(yuǎn)程對(duì)象 RMISampleImpl o=new RMISampleImpl(); /遠(yuǎn)程對(duì)象注冊(cè)到RMI注冊(cè)表 Naming.rebind(rmi:/localhost/rmiSample,o); 5- 編寫客戶端,若名稱為RMISampleClient; RMISa
30、mple server=(RMISample)Naming.lookup(rmi:/localhost/rmiSample); server.方法(); 或者也可以直接實(shí)例化RMISampleImpl_stub進(jìn)行服務(wù)連接與調(diào)用; 6- RMI注冊(cè):rmiregistry port RMI服務(wù)啟動(dòng):java RMISampleServ RMI客戶端運(yùn)行:java RMISampleClientJava EE基礎(chǔ)技術(shù)標(biāo)準(zhǔn)基礎(chǔ)技術(shù)標(biāo)準(zhǔn) RMIRMI典型的運(yùn)行結(jié)構(gòu)圖如下:Java EE基礎(chǔ)技術(shù)標(biāo)準(zhǔn)基礎(chǔ)技術(shù)標(biāo)準(zhǔn) RMIJava EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn)EJBJTAJMSJAASWebService
31、其他技術(shù)標(biāo)準(zhǔn)其他技術(shù)標(biāo)準(zhǔn)Servlet / JSPJAFJavaMailServlet的定義: - 是部署在Java的Web服務(wù)器上的組件,整個(gè)Java服務(wù)端程序都構(gòu)建在Servlet 之上,以多線程方式提供服務(wù),具有效率高,可擴(kuò)展,可移植的特點(diǎn);JSP的定義: - Java Server Page,所有JSP頁面在執(zhí)行時(shí)都會(huì)被編譯成Servlet,由JSP頁面 生成的Serlvet叫作“JSP頁面實(shí)現(xiàn)類”,甚至可以把JSP認(rèn)為是嵌入了Java語 句的HTML頁面文件;Servlet / JSP的關(guān)系: - 在頁面展現(xiàn)上,Servlet通過輸出HTML語句來實(shí)現(xiàn)動(dòng)態(tài)頁面,如果SUN不推 出JS
32、P標(biāo)準(zhǔn),那么Java的Web頁面開發(fā)(動(dòng)態(tài)頁面的交互過程)將會(huì)十分痛苦;Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) Servlet / JSPServlet / JSP 的生命周期:Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) Servlet / JSPJSP頁面第一次運(yùn)行時(shí),可能較慢,原因就在于需要進(jìn)行裝載和編譯,以后將不不會(huì)再重新編譯,即使是應(yīng)用重啟;Servlet請(qǐng)求處理過程涉及到3個(gè)概念:HTTP請(qǐng)求對(duì)象,HTTP響應(yīng)對(duì)象,HTTP會(huì)話;關(guān)系圖如下:Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) Servlet / JSPServlet請(qǐng)求處理過程:Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) Servlet
33、 / JSP當(dāng)請(qǐng)求并發(fā)時(shí),Servlet以多線程方式提供服務(wù):JAF的定義: - JavaBEAN Activation Framework,提供了統(tǒng)一處理不同的數(shù)據(jù)格式的方法( 如,文字,圖片,聲音,視頻等等); 經(jīng)常會(huì)使用JAF的場(chǎng)景:Web應(yīng)用,JavaMail; - 數(shù)據(jù)與編碼是最普遍也是最頭痛的問題,在以上2個(gè)場(chǎng)景中,數(shù)據(jù)的自動(dòng)處理顯 得尤為重要,否則Web頁面或郵件內(nèi)容將會(huì)是亂碼;這里要引入一個(gè)概念:“自動(dòng)發(fā)現(xiàn)機(jī)制”,JAF就是基于此概念開發(fā)的;“自動(dòng)發(fā)現(xiàn)”是指:能夠動(dòng)態(tài)找到正確的組件(JavaBEAN)來處理相應(yīng)的請(qǐng)求;Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) JAFJAF“自動(dòng)發(fā)
34、現(xiàn)”機(jī)制的實(shí)現(xiàn): - JAF能夠不同數(shù)據(jù)類型,找到相應(yīng)的組件(JavaBEAN)來處理任意類型的數(shù)據(jù); - JAF中存在“注冊(cè)”機(jī)制,簡(jiǎn)單來說,就是把每一種文件類型與相應(yīng)的處理組件 進(jìn)行映射,這樣JAF就實(shí)現(xiàn)了所謂的“自動(dòng)發(fā)現(xiàn)”機(jī)制;Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) JAFJAF的組成: 1)- java.activation.DataHandler,是JAF的核心部分,共有3個(gè)構(gòu)造函數(shù): Public DataHandler(Object obj, String mimeType) Public DataHandler(DataSource ds) Public DataHandler
35、(URL u) 使用第1個(gè)構(gòu)造函數(shù)時(shí),會(huì)根據(jù)mimeType動(dòng)態(tài)發(fā)現(xiàn)相應(yīng)的數(shù)據(jù)處理組件; 使用第2,3個(gè)構(gòu)造函數(shù)時(shí),則會(huì)使用當(dāng)前的數(shù)據(jù)類型處理組件; 2)- java.activation.DataContentHandler:此接口用于實(shí)現(xiàn)數(shù)據(jù)流的處理,負(fù)責(zé) Java對(duì)象流與數(shù)據(jù)流的互轉(zhuǎn),唯一的限制是,對(duì)象類型與數(shù)據(jù)流的轉(zhuǎn)換關(guān)系 是一對(duì)一的; 3)- java.activation.DataSource:包含了數(shù)據(jù)處理的所有邏輯,與DataContentHandler 不同的是,DataSource只處理數(shù)據(jù)流(InputStream),具有很大的通用性, JAF定義了2個(gè)標(biāo)準(zhǔn)的DataSo
36、urce對(duì)象,F(xiàn)ileDataSource與URLDataSource Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) JAF在JAF的JAR包中,包含mimetype.default文件,定義了所有適用的數(shù)據(jù)類型;JAF的處理邏輯如下:Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) JAFJavaMail的定義: - 是一個(gè)電子郵件操作的標(biāo)準(zhǔn)Java API,用于建立標(biāo)準(zhǔn)的郵件客戶端,包括了各 種標(biāo)準(zhǔn)的Internet協(xié)議(如SMTP,POP,IMAP,MIME等); - 與JAF有著緊密的聯(lián)系,JavaMail運(yùn)行依賴于JAF,比如,JavaMail依賴于JAF 處理MIME編碼的附件等;JavaMail
37、包含4個(gè)主要的部分: 1)- 會(huì)話管理: java.mail.session:用于定義并建立與遠(yuǎn)程郵件服務(wù)器的郵件通訊會(huì)話; javax.mail.Authenticator:用于處理在建立Session時(shí)的相關(guān)身份驗(yàn)證;Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) JavaMail 2)- 消息管理: 郵件消息有“頭”與“內(nèi)容”2部分組成; 郵件頭中包括了MessageID,F(xiàn)rom,To,Subject等內(nèi)容; javax.mail.Message:用于封裝一條抽象郵件消息類,其中包括了一個(gè)實(shí)現(xiàn) 類MimeMessage; javax.mail.Part:是實(shí)現(xiàn)Message的元子組件,相互之間
38、可嵌套,因此最終 可以一個(gè)遞歸結(jié)構(gòu); 3)- 存儲(chǔ)與檢索,以文件夾的形式進(jìn)行郵件的存儲(chǔ)與檢查,主要的組件如下: javax.mail.Store:為文件夾形式的提供的操作方法; javax.mail.Folder:為Message的提供了管理所必須的方法,包括檢索,復(fù) 制,移動(dòng),刪除等等; Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) JavaMail 4)- 傳遞(發(fā)送): javax.mail.Transport:提供郵件發(fā)送功能;JavaMail的邏輯結(jié)構(gòu)圖:Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) JavaMailEJB(Enterprise JavaBean)是Java EE核心組件,其定義
39、如下: - 是Java服務(wù)端軟件框架規(guī)范,提供了讓客戶端使用遠(yuǎn)程分布式對(duì)象的框架,簡(jiǎn) 化了大型企業(yè)級(jí)應(yīng)用的開發(fā);EJB規(guī)范的定義: - 規(guī)定了EJB組件與EJB容器進(jìn)行交互的方式;EJB容器的定義: - 是管理EJB實(shí)例的抽象組件,遵循EJB規(guī)范來調(diào)用業(yè)務(wù)邏輯所需要的EJB實(shí)例;EJB服務(wù): - 管理EJB容器的應(yīng)用程序,并提供對(duì)其他系統(tǒng)服務(wù)的訪問,如JDBC,JNDI等,Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) EJB綜上所述,EJB并不是一個(gè)“現(xiàn)成的服務(wù)或產(chǎn)品”,而是為開發(fā)基于事務(wù)和分布式對(duì)象應(yīng)用服務(wù)而定義的技術(shù)標(biāo)準(zhǔn): - EJB實(shí)例其實(shí)就是一組分布式對(duì)象,受EJB容器管理,為遠(yuǎn)端用戶提供服
40、務(wù); - EJB標(biāo)準(zhǔn)定義了EJB實(shí)例與容器間的交互方式,定義了運(yùn)行機(jī)制,充分考慮了 EJB實(shí)例在不同容器間的可移植性; - EJB標(biāo)準(zhǔn)詳細(xì)定義了EJB容器與服務(wù)器之間的標(biāo)準(zhǔn)模型,這樣,開發(fā)人員,就可 以不用考慮實(shí)現(xiàn)框架,而可以專心于實(shí)際的業(yè)務(wù)邏輯,實(shí)現(xiàn)了系統(tǒng)的低耦合;Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) EJB先來了解一下EJB的整體結(jié)構(gòu):Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) EJB從上圖中可以看到,JavaBEAN,RMI與JNDI,在EJB中是基礎(chǔ)起到關(guān)鍵作用; - EJB被成功發(fā)布后,客戶端通過JNDI獲得對(duì)HOME接口的引用; - 然后通過HOME對(duì)象得到EJB對(duì)象; - 最后,客
41、戶端就可以通過EJB對(duì)象來調(diào)用EJB實(shí)例的業(yè)務(wù)方法;再從應(yīng)用服務(wù)器的角度來了解EJB:Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) EJB從之前的圖中明顯看到,EJB容器容器,是EJB服務(wù)的核心部分,它負(fù)責(zé)全程管理EJB實(shí)例,EJB容器的作用如下: - 持久性:決定何時(shí)加載何種類型的持久性組件,有2種類型的持久性組件,CMP (容器管理持久性組件)與BMP(組件管理持久性組件); - 生命周期管理:全程管理EJB實(shí)例的生命周期,包括EJB實(shí)例的初始化,實(shí)例池 管理,實(shí)例調(diào)用等; - 事務(wù)管理:負(fù)責(zé)管理分布式事務(wù)處理的邏輯,管理并開發(fā)人員屏蔽了復(fù)雜的底 層通訊實(shí)現(xiàn),極大簡(jiǎn)化了開發(fā)過程; - 其他:還包
42、括EJB實(shí)例的狀態(tài)管理、安全認(rèn)證管理等等;Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) EJBEJB的作用示意圖如下:Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) EJBEJB包括3種類型的Bean: - 會(huì)話Bean(Session):用于描述業(yè)務(wù)處理過程,可以作為其他Bean的客戶端 ,用來調(diào)用其他Bean; - 實(shí)體Bean(Entity):用于描述數(shù)據(jù),提供了持久數(shù)據(jù)的操作與表示,可同時(shí) 與多個(gè)客戶機(jī)進(jìn)行交互,運(yùn)行結(jié)束后,其狀態(tài)仍能保留;剛才已提到過,有2 種類型的實(shí)體Bean,CMP與BMP; - 消息驅(qū)動(dòng)Bean(Message-Driven):集成了JMS和EJB的功能,不向客戶端開 放,只
43、用于系統(tǒng)內(nèi)部的交互;Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) EJB通過一個(gè)實(shí)際的業(yè)務(wù)例子來描述3種Bean的關(guān)系,比如通過網(wǎng)上銀行查詢余額:Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) EJB會(huì)話Bean與實(shí)體Bean的區(qū)別:Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) EJB會(huì)話Bean實(shí)體Bean表示一個(gè)業(yè)務(wù)過程表示數(shù)據(jù)過程一個(gè)環(huán)境對(duì)應(yīng)一個(gè)實(shí)例多個(gè)環(huán)境中實(shí)例可以共享與環(huán)境生命周期同上與數(shù)據(jù)庫生命周期同步暫時(shí)狀態(tài),會(huì)銷毀持久性若服務(wù)器宕機(jī),會(huì)丟失若服務(wù)器宕機(jī),可快速重構(gòu)不一定是事務(wù)性的必須是事務(wù)性的會(huì)話Bean有2種管理類型: - 有狀態(tài)會(huì)話Bean:成員變量的狀態(tài)決定了Bean的狀態(tài),描述了客戶端與會(huì)
44、話 Bean的連接狀態(tài),所以會(huì)在一段時(shí)間內(nèi)保持會(huì)話,在此期間 不允許再與其他客戶端進(jìn)行會(huì)話; - 無狀態(tài)會(huì)話Bean:不為客戶端保持會(huì)話,當(dāng)客戶端調(diào)用Bean時(shí),成員變量會(huì) 記錄調(diào)用狀態(tài),但當(dāng)完成調(diào)用后,立即釋放,狀態(tài)的記錄 可以由客戶端實(shí)現(xiàn);此外,在非調(diào)用時(shí)間內(nèi),Bean可以與 任何客戶端再次建立會(huì)話;Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) EJB實(shí)體Bean也有2種類型(BMP與CMP): - 組件管理持久性(BMP),又稱自管理持久性,優(yōu)缺點(diǎn)如下: 優(yōu)點(diǎn):可完全自主研發(fā),無須應(yīng)用服務(wù)器(如WAS)支持; 缺點(diǎn):可移植性差,組件的管理完全需要自己實(shí)現(xiàn),若組件發(fā)生改變,則需 要重新部署; -
45、 容器管理持久性(CMP),優(yōu)缺點(diǎn)如下; 優(yōu)點(diǎn):管理功能由應(yīng)用服務(wù)器提供(如WAS),保證性能與安全性; 若發(fā)生變更,只需要在“部署文件”中進(jìn)行改變即可; 可移值性好; 缺點(diǎn):對(duì)應(yīng)用服務(wù)器(如WAS)過于依賴; 不易對(duì)復(fù)雜的數(shù)據(jù)邏輯進(jìn)行開發(fā),因?yàn)樾枰紤]到數(shù)據(jù)的兼容性;Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) EJB消息驅(qū)動(dòng)Bean與另2種Bean的區(qū)別在于:由于只會(huì)在系統(tǒng)內(nèi)部調(diào)用,所以就不需要接口的定義,換句話說,只需要一個(gè)Bean實(shí)例Class即可;消息驅(qū)動(dòng)Bean的特點(diǎn)在于 - 不保持任何客戶端或數(shù)據(jù)的狀態(tài); - 與JMS結(jié)合使用,對(duì)于消息的處理是異步的,提高了服務(wù)的性能;其實(shí)會(huì)話Bean
46、與實(shí)例Bean也可以通過JMS收發(fā)消息,但缺點(diǎn)在于,這2種Bean對(duì)于消息的處理是步,這很有可能給服務(wù)端帶來很大性能消耗;Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) EJB接下來從開發(fā)的角度,來了解一下如何開發(fā)一個(gè)Bean;需要知道以下3項(xiàng)內(nèi)容: - EJBHome接口:定義了創(chuàng)建與查詢EJB的方法; - EJBObject接口:定義了在Bean中實(shí)現(xiàn)業(yè)務(wù)邏輯的方法; - Bean的實(shí)現(xiàn)類:實(shí)現(xiàn)一個(gè)會(huì)話Bean或者一個(gè)實(shí)體Bean;Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) EJB 1- 首先來創(chuàng)建一個(gè)主接口,如命名為PersonalBankHome并實(shí)現(xiàn); public interface Pers
47、onalBankHome extends javax.ejb.EJBHome public Hello create() throws java.rmi.RemoteException, javax.ejb.CreateException; 2- 然后定義一個(gè)遠(yuǎn)程調(diào)用Bean接口,如命名為PersonalBankObject并實(shí)現(xiàn); public interface SearchMoneyBean extends javax.ejb.EJBObject public String getSearchMoneyBean() throws java.rmi.RemoteException; 3-
48、最后實(shí)現(xiàn)一個(gè)會(huì)話Bean或?qū)嶓wBean,如命名為SearchMoneyBean; public class SearchMoneyBean implements SessionBean public void ejbCreate() /. public void ejbRemove() /. public void ejbActivate() /. public void ejbPassivate() /. public void setSessionContext(SessionContext ctx) /. public String searchMoney() /. Java EE進(jìn)階技
49、術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) EJB在完成了主要的Bean開發(fā)后,接下來需要考慮EJB的事務(wù)處理方式;具有2種事務(wù)處理方式: - 在“部署描述”文件中聲明“已實(shí)現(xiàn)并公布的事務(wù)”,由EJB服務(wù)提供商負(fù)責(zé)提供; - 另一種為,通過JTA(Java事務(wù)API)來自行開發(fā)事務(wù)處理;EJB標(biāo)準(zhǔn)要求事務(wù)處理效果需要達(dá)到:當(dāng)所有對(duì)象的操作都執(zhí)行成功后,才能進(jìn)行提供,否則只要有一個(gè)對(duì)象操作發(fā)生異常,所有操作立即回滾;Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) EJB以上對(duì)EJB的基本結(jié)構(gòu)與概念進(jìn)行說明,關(guān)于EJB開發(fā)的詳細(xì)說明,可以參考“EJB_Training.ppt”;Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) EJBJT
50、A(Java Transaction API),Java事務(wù)API,其定義為: - 是一組事務(wù)接口定義,描述了對(duì)于不同資源(包括數(shù)據(jù)庫,EJB,服務(wù)通訊 等)的事務(wù)處理規(guī)范;需要注意的是: - JTA只提供了接口,并沒有提供實(shí)現(xiàn)類,完全需要自行實(shí)現(xiàn); - JTA可以實(shí)現(xiàn)同一事務(wù)對(duì)應(yīng)不同的資源,但是不能實(shí)際事務(wù)的嵌套;Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) JTAJTA的主要組成如下: - javax.transaction.UserTransactoin定義了事務(wù)的操作范圍,包括啟動(dòng)、提交以 及回滾; - javax.transaction.xa.XAResource是面對(duì)各類資源的事務(wù)接口,
51、JTA采用XA接口 規(guī)范作為自身的資源標(biāo)準(zhǔn),所以,只要是符合XA的資源,JTA都能夠處理;那么什么是XA接口標(biāo)準(zhǔn): - X/Open DTP模型中的一個(gè)標(biāo)準(zhǔn); - 是事務(wù)監(jiān)控與數(shù)據(jù)庫之間的接口; - 在該標(biāo)準(zhǔn)中定義了事務(wù)監(jiān)控與數(shù)據(jù)庫之間的詳細(xì)方法接口;X/Open是一個(gè)推進(jìn)和制定信息技術(shù)領(lǐng)域開放標(biāo)準(zhǔn)的組織;DTP是該組織專門為事務(wù)處理技術(shù)所制定的一系統(tǒng)標(biāo)準(zhǔn)集合的名稱;Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) JTA由于JTA是遵循X/Open DTP的XA標(biāo)準(zhǔn),所以也就支持“事務(wù)的兩階段”提交功能;“事務(wù)兩階段”是事務(wù)處理的核心,什么是“事務(wù)兩階段”提交功能,簡(jiǎn)單概括如下: - 應(yīng)用程序調(diào)用事務(wù)
52、的提交方法; - 這時(shí)事務(wù)管理器通知所有相關(guān)資源,準(zhǔn)備進(jìn)行事務(wù)的提交(第1階段開始); - 所有資源響應(yīng)事務(wù)管理器的命令,回復(fù)準(zhǔn)備的結(jié)果; - 事務(wù)管理器收所有資源的準(zhǔn)備結(jié)果,只要有一個(gè)資源回答失敗,則立即停止; - 第2階段開始,事務(wù)管理器命令所有資源進(jìn)行事務(wù)處理,只要有一個(gè)資源的事 務(wù)處理失敗,則通知所有事務(wù)都進(jìn)行回滾; - 如果所有資源的事務(wù)都提交成功,則事務(wù)管理器會(huì)確認(rèn)結(jié)果,作最后提交;需要注意的是,如果在WAS中配置數(shù)據(jù)庫訪問時(shí),若需要“兩階段”功能,則必須要使用實(shí)現(xiàn)了JTA的數(shù)據(jù)庫事務(wù)驅(qū)動(dòng);Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) JTA必須使用JTA的場(chǎng)景: - 只要是事務(wù)中調(diào)用了
53、多個(gè)數(shù)據(jù)庫連接,就需要JTA,這些連接可以是訪問相同 或不同的數(shù)據(jù)庫服務(wù)器;比如,以EJB舉例: - “會(huì)話Bean1”準(zhǔn)備調(diào)用同一事務(wù)內(nèi)的“實(shí)例Bean1”與“實(shí)例Bean2”,3者部署在同 一個(gè)服務(wù)器上,若2個(gè)實(shí)例Bean使用了不同的數(shù)據(jù)庫連接,不管是否是訪問同 一個(gè)數(shù)據(jù)庫,2個(gè)實(shí)例Bean訪問的數(shù)據(jù)源都必須使用JTA,否則可能帶數(shù)據(jù)安 全性與完整性的隱患; - 若3個(gè)Bean部署在不同的服務(wù)器上,則情況同上;Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) JTAJMS(Java Message Service)的定義: - 提供了一系統(tǒng)創(chuàng)建、發(fā)送、接收、和讀取企業(yè)消息的通用方法; - JMS中的
54、消息通訊都是異步方式的; - JMS可以處理由其他類型客戶端所發(fā)消息;具體JMS應(yīng)用的組成: - 客戶端:用來處理消息的應(yīng)用,分為JMS客戶與非JSM客戶端,區(qū)別在于實(shí)現(xiàn)的 技術(shù)有所不同; - 消息(Message):在不同應(yīng)用或組件中進(jìn)行異常通訊的請(qǐng)求、事件或報(bào)告; - JMS Provider:實(shí)現(xiàn)了JMS標(biāo)準(zhǔn)的應(yīng)用服務(wù); - 被管理對(duì)象:事先配置的JMS對(duì)象,由管理員為使用JMS的客戶端所創(chuàng)建;Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) JMSMessage是JMS的核心組成部分,它的模型如下: - 消息頭:包括了客戶端信息,以及用來消息路由所必須的信息(包括 JMSDestination、
55、JMSDeliveryMode、JMSMessageID.等); - 消息屬性:包括3部分 - 應(yīng)用自定義的屬性; - JMS標(biāo)準(zhǔn)所規(guī)定必須帶的屬性; - Provider(JMS應(yīng)用)的屬性,同樣是由JMS標(biāo)準(zhǔn)所規(guī)定; - 消息體:JMS已定義了5種格式的消息體,足夠滿足開發(fā)的需求,包括 - StreamMessage:流消息,只以被順序的讀取與填充; - MapMessage:映射類消息,包含了Key與Value對(duì)應(yīng); - TextMessage:類型為String的消息,使用最為廣泛; - ObjectMessage:是可序列化的Java對(duì)象,包括java.util.Collectoin
56、類型; - BytesMessage:是一個(gè)不間斷的字段流消息,使用也較為廣泛;Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) JMS開發(fā)典型JMS消息客戶端的步驟: - 通過JNDI定位一個(gè)ConnectionFactory對(duì)象; - 使用JNDI查詢一個(gè)或多個(gè)Destination(目標(biāo))對(duì)象; - 使用ConnectionFactory創(chuàng)建一個(gè)JMS連接; - 然后初始化一個(gè)或多個(gè)JMS的Session; - 利用Sessoin與Destination創(chuàng)建MessageProducers(消息生產(chǎn)者對(duì)象),與 MessageConsumers(消息接收者)對(duì)象; - 通過Connection進(jìn)行
57、消息傳送(通過MessageProducers與 MessageConsumers);常見的JMS服務(wù)應(yīng)用包括:IBM MQ、SUN MQ等等;Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) JMSJMS的多線程討論: - JMS毫無疑問肯定是要求支持并發(fā)的,所以針地每一個(gè)JMS對(duì)象都需要進(jìn)行并發(fā) 處理,以下是相關(guān)對(duì)象對(duì)于并發(fā)的支持情況:Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) JMSJMS對(duì)象是否支持并發(fā)Destination是ConnectionFactory是Connection是Session否MessageProducers否MessageConsumers否JMS對(duì)象的邏輯結(jié)構(gòu)圖如下:Jav
58、a EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) JMSJMS的消息傳遞方式有2種: - PTP:點(diǎn)對(duì)點(diǎn)方式,以隊(duì)列的方式進(jìn)行消息的處理; - Pub/Sub:發(fā)布/訂閱方式,包含了“消息調(diào)適器(Topic)”,通過這個(gè)調(diào)用器來 處理消息; - 2種方式也可以同時(shí)存在一個(gè)應(yīng)用中;Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) JMSJAAS定義: - Java Authentication Authorization Service,Java驗(yàn)證授權(quán)API; - 是JCE安全框架的補(bǔ)充標(biāo)準(zhǔn),通過驗(yàn)證代碼運(yùn)行者的身份及其權(quán)限來保護(hù)應(yīng)用 系統(tǒng)免受攻擊; - JAAS采用PlugIn方式運(yùn)行,支持可插拔方式,只要對(duì)JAAS
59、配置就可以實(shí)現(xiàn)JAAS 的部署與卸載; - JAAS提供一組身份驗(yàn)證,以及權(quán)限校驗(yàn)的接口;Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) JAASJAAS的結(jié)構(gòu)特點(diǎn): - JAAS在應(yīng)用和底層的驗(yàn)證授權(quán)機(jī)制之間加入了一個(gè)抽象層,該抽象層相對(duì)獨(dú) 立,并且與平臺(tái)特性無關(guān); - 與Java Security API類似,JAAS也是通過一個(gè)可擴(kuò)展的框架,SPI來保證程序的 獨(dú)立運(yùn)行機(jī)制; - SPI(服務(wù)提供者接口)中包括2個(gè)核心部件: LoginContext:負(fù)責(zé)與應(yīng)用程序的代碼進(jìn)行連接; LoginModules:是一組動(dòng)態(tài)配置驗(yàn)證模塊,包括了一系列驗(yàn)證機(jī)制;Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) J
60、AAS - JAAS的結(jié)構(gòu)邏輯如下;Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) JAAS - 剛才提到,JAAS的運(yùn)行方式是PlugIn方式,所在所有的LoginModules都可以進(jìn) 行“熱插拔”; - LoginModules之間存在層級(jí)關(guān)系,相互之間按照順序運(yùn)行,只要有一個(gè)模塊是 校驗(yàn)失敗的,那整個(gè)LoginModule將會(huì)返回失??; - JAAS本身也帶事務(wù)行為,其實(shí)現(xiàn)機(jī)制也類似于剛才所提到的“兩步提交”; Java EE進(jìn)階技術(shù)標(biāo)準(zhǔn)進(jìn)階技術(shù)標(biāo)準(zhǔn) JAASJAAS的核心部件: - LoginModule :確認(rèn)用戶的合法性(使用CallbackHandler或者其他類方法), 并分配訪問權(quán)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 金融服務(wù)合同執(zhí)行
- 城市排水泵站建設(shè)拖拉管施工合同
- 城市供電聯(lián)合施工合同
- 2025《家電采購合同》知識(shí)點(diǎn)
- 油氣管道鉆孔服務(wù)合同
- 商場(chǎng)促銷活動(dòng)臨時(shí)工聘用合同
- 印刷行業(yè)應(yīng)收款項(xiàng)管理
- 咨詢顧問解除聘用合同匯報(bào)
- 轉(zhuǎn)口貿(mào)易合同中知識(shí)產(chǎn)權(quán)保護(hù)
- 電信基站屋頂防水工程協(xié)議
- (人教PEP2024版)英語一年級(jí)上冊(cè)Unit 1 教學(xué)課件(新教材)
- 全國(guó)職業(yè)院校技能大賽高職組(市政管線(道)數(shù)字化施工賽項(xiàng))考試題庫(含答案)
- 2024胃腸間質(zhì)瘤(GIST)診療指南更新解讀 2
- 小學(xué)數(shù)學(xué)二年級(jí)100以內(nèi)連加連減口算題
- 建設(shè)單位如何做好項(xiàng)目管理
- 三年級(jí)上遞等式計(jì)算400題
- 一次性餐具配送投標(biāo)方案
- 2024年原發(fā)性肝癌中醫(yī)診療指南
- 2024醫(yī)療建筑韌性設(shè)計(jì)導(dǎo)則
- 軍隊(duì)文職半年述職報(bào)告
- 鑄牢中華民族共同體意識(shí)-考試復(fù)習(xí)題庫(含答案)
評(píng)論
0/150
提交評(píng)論