版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、山東大學計算機科學與技術(shù)學院基礎(chǔ)技術(shù)教學部中間件技術(shù)中間件技術(shù) Middleware Technology 山東大學計算機科學與技術(shù)學院聯(lián)系方式聯(lián)系方式鹿旭東鹿旭東 D計算機軟件工程系計算機軟件工程系山東大學計算機科學與技術(shù)學院先修課程先修課程面向?qū)ο蠹夹g(shù)面向?qū)ο蠹夹g(shù)Java語言程序設(shè)計語言程序設(shè)計軟件工程軟件工程山東大學計算機科學與技術(shù)學院內(nèi)容簡介內(nèi)容簡介 中間件已經(jīng)成為構(gòu)建網(wǎng)絡分布式異構(gòu)信息系統(tǒng)不可中間件已經(jīng)成為構(gòu)建網(wǎng)絡分布式異構(gòu)信息系統(tǒng)不可缺少的關(guān)鍵技術(shù),與操作系統(tǒng)、數(shù)據(jù)庫管理系統(tǒng)并缺少的關(guān)鍵技術(shù),與操作系統(tǒng)、數(shù)據(jù)庫管理系統(tǒng)并列為基礎(chǔ)軟件體系的三大支柱。列為基礎(chǔ)
2、軟件體系的三大支柱。本課程將闡述中間件產(chǎn)生的背景,中間件概念、定本課程將闡述中間件產(chǎn)生的背景,中間件概念、定義及發(fā)展情況,中間件的功能、作用、特點、分類、義及發(fā)展情況,中間件的功能、作用、特點、分類、優(yōu)越性、面臨的問題及發(fā)展趨勢。將以優(yōu)越性、面臨的問題及發(fā)展趨勢。將以O(shè)MGOMG組織的組織的CORBACORBA和和SunSun公司的公司的EJBEJB規(guī)范為例,闡述中間件基本框規(guī)范為例,闡述中間件基本框架、工作原理和實現(xiàn)的關(guān)鍵技術(shù)。并介紹當前技術(shù)架、工作原理和實現(xiàn)的關(guān)鍵技術(shù)。并介紹當前技術(shù)及相應框架。及相應框架。 山東大學計算機科學與技術(shù)學院計算:從集中到分布計算:從集中到分布計算模式的發(fā)展計算
3、模式的發(fā)展 集中式計算模式集中式計算模式 桌面計算模式桌面計算模式 分布式計算模式分布式計算模式山東大學計算機科學與技術(shù)學院軟件設(shè)計的基本思想(軟件設(shè)計的基本思想(1)隱式地(隱式地(implicitly)與顯式地)與顯式地(explicitly) 兩種不同的支持方式兩種不同的支持方式對面向?qū)ο笤O(shè)計的支持對異常的支持對象約束的支持底層支持來解決分布式軟件的復雜性邏輯的邏輯的(logical)與物理的與物理的(physical) 不同的抽象層次不同的抽象層次抽象定義源于對復雜控制性的不足目的是在更高層次上掌握各種機制山東大學計算機科學與技術(shù)學院軟件設(shè)計的基本思想(軟件設(shè)計的基本思想(2)面向?qū)ο?/p>
4、技術(shù)面向?qū)ο蠹夹g(shù) 本質(zhì)上是一個建模過程本質(zhì)上是一個建模過程 封裝、繼承、多態(tài)性封裝、繼承、多態(tài)性 有機融合分布式和面向?qū)ο蠹夹g(shù)有機融合分布式和面向?qū)ο蠹夹g(shù)RPC和RMICorbaEJBDCOM軟件體系結(jié)構(gòu)軟件體系結(jié)構(gòu) 從體系結(jié)構(gòu)角度探討分布式軟件系統(tǒng)的有關(guān)問題從體系結(jié)構(gòu)角度探討分布式軟件系統(tǒng)的有關(guān)問題山東大學計算機科學與技術(shù)學院分布式系統(tǒng)應用分布式系統(tǒng)應用一些典型的商務應用系統(tǒng):一些典型的商務應用系統(tǒng): 股票交易系統(tǒng)股票交易系統(tǒng) 銀行應用系統(tǒng)銀行應用系統(tǒng) 客戶電話中心系統(tǒng)客戶電話中心系統(tǒng) 采購系統(tǒng)采購系統(tǒng)這些系統(tǒng)都應是分布式系統(tǒng)這些系統(tǒng)都應是分布式系統(tǒng)山東大學計算機科學與技術(shù)學院現(xiàn)代應用系統(tǒng)的
5、基本特征現(xiàn)代應用系統(tǒng)的基本特征分布分布 任務已不只是在單機上運行,而是由網(wǎng)絡中多臺任務已不只是在單機上運行,而是由網(wǎng)絡中多臺計算機上的相關(guān)應用共同協(xié)作完成,需考慮網(wǎng)絡傳輸、數(shù)據(jù)計算機上的相關(guān)應用共同協(xié)作完成,需考慮網(wǎng)絡傳輸、數(shù)據(jù)安全、數(shù)據(jù)一致性、同步等諸多問題;安全、數(shù)據(jù)一致性、同步等諸多問題;異構(gòu)異構(gòu) 計算機硬件、操作系統(tǒng)、網(wǎng)絡協(xié)議、數(shù)據(jù)庫系統(tǒng)計算機硬件、操作系統(tǒng)、網(wǎng)絡協(xié)議、數(shù)據(jù)庫系統(tǒng)以及開發(fā)工具種類繁多,需考慮數(shù)據(jù)表示、調(diào)用接口、處理以及開發(fā)工具種類繁多,需考慮數(shù)據(jù)表示、調(diào)用接口、處理方式等諸多問題;方式等諸多問題;動態(tài)協(xié)作動態(tài)協(xié)作 參與協(xié)作的應用允許位置透明性、遷移參與協(xié)作的應用允許位置
6、透明性、遷移透明性、負載平衡性等需求。透明性、負載平衡性等需求。山東大學計算機科學與技術(shù)學院傳統(tǒng)的傳統(tǒng)的Client/Server結(jié)構(gòu)結(jié)構(gòu)數(shù)據(jù)庫ClientClientClient數(shù)據(jù)庫服務器服務器(數(shù)據(jù))層客戶層客戶向服務器請求數(shù)據(jù)庫服務山東大學計算機科學與技術(shù)學院廣義的廣義的C/S體系結(jié)構(gòu)體系結(jié)構(gòu)信息提供和請求服務信息提供和請求服務過程式程序設(shè)計中的過程調(diào)用過程式程序設(shè)計中的過程調(diào)用 接口(接口(interface、規(guī)格說明)、規(guī)格說明) 通信協(xié)議(參數(shù)傳遞風格)通信協(xié)議(參數(shù)傳遞風格)分布式程序一般是分布式程序一般是C/S結(jié)構(gòu)的,重要的是接口和通信結(jié)構(gòu)的,重要的是接口和通信協(xié)議,此外還有
7、可靠性、安全性、性能等因素協(xié)議,此外還有可靠性、安全性、性能等因素山東大學計算機科學與技術(shù)學院2層結(jié)構(gòu)的缺陷層結(jié)構(gòu)的缺陷2層結(jié)構(gòu)存在很多缺陷:層結(jié)構(gòu)存在很多缺陷: 客戶端的負擔仍比較重客戶端的負擔仍比較重仍然需要客戶端進行較復雜的數(shù)據(jù)處理 客戶端的可移植性不好客戶端的可移植性不好處理復雜必然牽涉更多的移植性問題每個客戶端上都要安裝數(shù)據(jù)庫驅(qū)動程序 系統(tǒng)的可維護性不好系統(tǒng)的可維護性不好客戶端包含過多的商業(yè)邏輯商業(yè)邏輯與人機交互界面交織在一起 數(shù)據(jù)的安全性數(shù)據(jù)的安全性需求:需要更合理的工作分配需求:需要更合理的工作分配3層或多層結(jié)構(gòu)層或多層結(jié)構(gòu)山東大學計算機科學與技術(shù)學院典型的典型的3層結(jié)構(gòu)層結(jié)構(gòu)數(shù)
8、據(jù)庫ClientClientClient數(shù)據(jù)庫服務器服務器(數(shù)據(jù))層中間層中間層服務器向數(shù)據(jù)庫服務器請求中間層應用程序中間層客戶層客戶向中間層服務器請求山東大學計算機科學與技術(shù)學院3層結(jié)構(gòu)的優(yōu)點(層結(jié)構(gòu)的優(yōu)點(1 of 2)除了更合理的分配任務外,除了更合理的分配任務外,3層結(jié)構(gòu)還具有如下優(yōu)點:層結(jié)構(gòu)還具有如下優(yōu)點: 將業(yè)務邏輯放置在中間層可以提高系統(tǒng)的性能,使中間層的業(yè)將業(yè)務邏輯放置在中間層可以提高系統(tǒng)的性能,使中間層的業(yè)務邏輯處理與數(shù)據(jù)層的業(yè)務數(shù)據(jù)緊密結(jié)合在一起,而無需考慮務邏輯處理與數(shù)據(jù)層的業(yè)務數(shù)據(jù)緊密結(jié)合在一起,而無需考慮客戶的具體位置??蛻舻木唧w位置。 添加新的中間層服務器能夠滿足新
9、增客戶機的需求,可以大大添加新的中間層服務器能夠滿足新增客戶機的需求,可以大大提高提高3層系統(tǒng)的可伸縮性。層系統(tǒng)的可伸縮性。 將業(yè)務邏輯從客戶端移到中間層,在客戶層的應用程序與數(shù)據(jù)將業(yè)務邏輯從客戶端移到中間層,在客戶層的應用程序與數(shù)據(jù)層的數(shù)據(jù)庫之間增加了一層,這樣客戶端的應用程序可以獨立層的數(shù)據(jù)庫之間增加了一層,這樣客戶端的應用程序可以獨立于數(shù)據(jù)層的數(shù)據(jù)庫。于數(shù)據(jù)層的數(shù)據(jù)庫。山東大學計算機科學與技術(shù)學院3層結(jié)構(gòu)的優(yōu)點(層結(jié)構(gòu)的優(yōu)點(2 of 2) 將業(yè)務邏輯致于中間層,從而使業(yè)務邏輯集中到一處。而在將業(yè)務邏輯致于中間層,從而使業(yè)務邏輯集中到一處。而在2層方式層方式下,業(yè)務邏輯被分散到所有的客戶
10、機上(除非使用存儲過程)。這樣下,業(yè)務邏輯被分散到所有的客戶機上(除非使用存儲過程)。這樣做是不可取的,因為業(yè)務規(guī)則是動態(tài)變化的,而對于這些業(yè)務而言,做是不可取的,因為業(yè)務規(guī)則是動態(tài)變化的,而對于這些業(yè)務而言,規(guī)范又是強制性的,所以,將業(yè)務邏輯分散到整個客戶層的客戶機上規(guī)范又是強制性的,所以,將業(yè)務邏輯分散到整個客戶層的客戶機上會使實施過程變得非常困難。會使實施過程變得非常困難。 大量的中間層中間件平臺提供豐富的系統(tǒng)級服務,使得開發(fā)人員可以大量的中間層中間件平臺提供豐富的系統(tǒng)級服務,使得開發(fā)人員可以以更少的工作量開發(fā)出更復雜、可靠、高效的軟件系統(tǒng)。以更少的工作量開發(fā)出更復雜、可靠、高效的軟件系
11、統(tǒng)。山東大學計算機科學與技術(shù)學院N層結(jié)構(gòu)層結(jié)構(gòu)在在3層結(jié)構(gòu)中,客戶層和數(shù)據(jù)層已被嚴格定義,但中層結(jié)構(gòu)中,客戶層和數(shù)據(jù)層已被嚴格定義,但中間層并未明確定義。間層并未明確定義。中間層可以包括所有與應用程序的界面和持久數(shù)據(jù)中間層可以包括所有與應用程序的界面和持久數(shù)據(jù)存儲無關(guān)的處理。假定將中間層劃分成許多服務程存儲無關(guān)的處理。假定將中間層劃分成許多服務程序是符合邏輯的,那么將每一主要服務都視為獨立序是符合邏輯的,那么將每一主要服務都視為獨立的層,則的層,則3層結(jié)構(gòu)就成為了層結(jié)構(gòu)就成為了n層結(jié)構(gòu)。層結(jié)構(gòu)。 如中間層可以分為實現(xiàn)任務分配機制和界面呈現(xiàn)的如中間層可以分為實現(xiàn)任務分配機制和界面呈現(xiàn)的Web服務
12、器服務器層和實現(xiàn)實際商業(yè)邏輯的層和實現(xiàn)實際商業(yè)邏輯的EJB層。層。山東大學計算機科學與技術(shù)學院多層結(jié)構(gòu)多層結(jié)構(gòu)數(shù) 據(jù) 庫ClientClientClient數(shù) 據(jù) 庫 服 務 器服 務 器 ( 數(shù) 據(jù) ) 層中 間 層EJB Container向 數(shù)據(jù) 庫 服 務 器 請 求Web Container中 間 層客 戶 層Web瀏 覽 器 向 WebContainer請 求EJB Container中 間 層Web Container向EJB Container請 求中 間 層山東大學計算機科學與技術(shù)學院問題問題分布異構(gòu)環(huán)境中,通常存在:分布異構(gòu)環(huán)境中,通常存在: 多種硬件系統(tǒng)平臺,多種硬件系統(tǒng)
13、平臺, 各種各樣的系統(tǒng)軟件,各種各樣的系統(tǒng)軟件, 多種風格各異的用戶界面,多種風格各異的用戶界面, 不同的網(wǎng)絡協(xié)議和網(wǎng)絡體系結(jié)構(gòu)連接。不同的網(wǎng)絡協(xié)議和網(wǎng)絡體系結(jié)構(gòu)連接。山東大學計算機科學與技術(shù)學院山東大學計算機科學與技術(shù)學院中間件的理解中間件的理解An extension of the OS which provides a transparent communication layer to the applications(操作系統(tǒng)的擴展操作系統(tǒng)的擴展-透透明的通訊明的通訊)The glue which connects objects which are distributed acro
14、ss multiple heterogeneous computer systems(膠水膠水-連接(管理)連接(管理)組件組件)位于操作系統(tǒng)和應用軟件之間的一個軟件層,向各種應用軟位于操作系統(tǒng)和應用軟件之間的一個軟件層,向各種應用軟件提供件提供服務,使不同的應用進程能在屏蔽掉平臺差異的情況,使不同的應用進程能在屏蔽掉平臺差異的情況下,通過網(wǎng)絡互通信息。下,通過網(wǎng)絡互通信息。發(fā)展:通訊發(fā)展:通訊-服務服務-領(lǐng)域解決方案領(lǐng)域解決方案山東大學計算機科學與技術(shù)學院山東大學計算機科學與技術(shù)學院定義定義中間件是介于應用系統(tǒng)和系統(tǒng)軟件之間的一類軟件中間件是介于應用系統(tǒng)和系統(tǒng)軟件之間的一類軟件 它使用系統(tǒng)軟
15、件所提供的基礎(chǔ)服務(功能),銜接網(wǎng)絡上應用它使用系統(tǒng)軟件所提供的基礎(chǔ)服務(功能),銜接網(wǎng)絡上應用系統(tǒng)的各個部分或不同的應用,能夠達到資源共享、功能共享系統(tǒng)的各個部分或不同的應用,能夠達到資源共享、功能共享的目的的目的山東大學計算機科學與技術(shù)學院中間件的特性中間件的特性易用性易用性位置透明性:應用不必知道對方網(wǎng)絡和應用的地址;不經(jīng)重位置透明性:應用不必知道對方網(wǎng)絡和應用的地址;不經(jīng)重新編譯,就可把一個應用從一臺機器上轉(zhuǎn)移到另一臺機器新編譯,就可把一個應用從一臺機器上轉(zhuǎn)移到另一臺機器消息傳輸?shù)耐暾裕合⒉粦獊G失或重復消息傳輸?shù)耐暾裕合⒉粦獊G失或重復消息格式的完整性:消息格式不應被破壞消息格式
16、的完整性:消息格式不應被破壞語言透明性:使用中間件的程序應能與另一個用不同語言編語言透明性:使用中間件的程序應能與另一個用不同語言編寫的程序通信;如果用不同語言重寫一個程序,其他程序應寫的程序通信;如果用不同語言重寫一個程序,其他程序應不受影響不受影響山東大學計算機科學與技術(shù)學院中間件分類中間件分類遠程過程中間件遠程過程中間件:Remote Procedure Call, RPC消息中間件消息中間件:Message-Oriented Middleware(MOM)面向?qū)ο笾虚g件面向?qū)ο笾虚g件:Object-Oriented Middleware事務處理中間件(事務處理中間件(TP Monito
17、r)數(shù)據(jù)庫中間件數(shù)據(jù)庫中間件 其他分類:如安全中間件、網(wǎng)絡中間件、防病毒中間件等其他分類:如安全中間件、網(wǎng)絡中間件、防病毒中間件等山東大學計算機科學與技術(shù)學院遠程過程調(diào)用中間件遠程過程調(diào)用中間件在傳統(tǒng)的編程概念中,過程是由程序員在本地編譯完成,并在傳統(tǒng)的編程概念中,過程是由程序員在本地編譯完成,并只能局限在本地運行的一段代碼,也就是說主程序和過程之只能局限在本地運行的一段代碼,也就是說主程序和過程之間的運行關(guān)系是本地調(diào)用關(guān)系。間的運行關(guān)系是本地調(diào)用關(guān)系。這種結(jié)構(gòu)在網(wǎng)絡日益發(fā)展的今天已無法適應實際需求。其調(diào)這種結(jié)構(gòu)在網(wǎng)絡日益發(fā)展的今天已無法適應實際需求。其調(diào)用模式無法充分利用網(wǎng)絡上其他主機的資源
18、(如計算資源、用模式無法充分利用網(wǎng)絡上其他主機的資源(如計算資源、存儲資源、數(shù)據(jù)資源、顯示資源等),也無法提高代碼在實存儲資源、數(shù)據(jù)資源、顯示資源等),也無法提高代碼在實體間的共享程度,使得主機資源大量浪費。體間的共享程度,使得主機資源大量浪費。本地過程調(diào)用的擴展,可透明地調(diào)用遠地提供的服務本地過程調(diào)用的擴展,可透明地調(diào)用遠地提供的服務數(shù)據(jù)表示、可靠傳遞、服務定位等數(shù)據(jù)表示、可靠傳遞、服務定位等分布式計算環(huán)境,分布式計算環(huán)境,DCEDCEMs RPCMs RPC山東大學計算機科學與技術(shù)學院消息中間件(消息中間件(1)動機:動機:RPCRPC調(diào)用的缺點調(diào)用的缺點 (1 1)客戶端與服務器端需要同
19、時在線;)客戶端與服務器端需要同時在線; (2 2)客戶端需要知道服務器端的調(diào)用接口,若調(diào)用接口發(fā)生改變,客戶端需)客戶端需要知道服務器端的調(diào)用接口,若調(diào)用接口發(fā)生改變,客戶端需要做相應變化,如通過要做相應變化,如通過ODBCODBC連接訪問數(shù)據(jù)庫,客戶端需要知道遠程數(shù)據(jù)庫的連接訪問數(shù)據(jù)庫,客戶端需要知道遠程數(shù)據(jù)庫的類型,若類型發(fā)生改變,還需要重新裝載相應的驅(qū)動程序。類型,若類型發(fā)生改變,還需要重新裝載相應的驅(qū)動程序。(3 3)操作過程中需要一直保持與服務器端的連接,直到操作結(jié)束。因而,)操作過程中需要一直保持與服務器端的連接,直到操作結(jié)束。因而, (a a)一旦連接中斷,就意味著操作失敗或數(shù)
20、據(jù)丟失;)一旦連接中斷,就意味著操作失敗或數(shù)據(jù)丟失; (b b)通常判斷連接中斷的時間較長,若信道的可靠性較差,容易造成連)通常判斷連接中斷的時間較長,若信道的可靠性較差,容易造成連接中斷,那么應用效率將嚴重低下;接中斷,那么應用效率將嚴重低下; (c c)服務器端在執(zhí)行操作的過程中,并不涉及網(wǎng)上數(shù)據(jù)傳輸,但連接的)服務器端在執(zhí)行操作的過程中,并不涉及網(wǎng)上數(shù)據(jù)傳輸,但連接的保持占用信道,容易造成網(wǎng)絡堵塞。保持占用信道,容易造成網(wǎng)絡堵塞。山東大學計算機科學與技術(shù)學院消息中間件(消息中間件(2)這個問題可用消息中間件來解決,應用間通過傳遞消息來進行協(xié)作,是一種異步這個問題可用消息中間件來解決,應用
21、間通過傳遞消息來進行協(xié)作,是一種異步通信模式通信模式主要功能是在不同的網(wǎng)絡協(xié)議、不同的操作系統(tǒng)和不同的應用程序之間提供可靠主要功能是在不同的網(wǎng)絡協(xié)議、不同的操作系統(tǒng)和不同的應用程序之間提供可靠的和可恢復的(若發(fā)生意外)消息傳送。的和可恢復的(若發(fā)生意外)消息傳送。工作原理:工作原理: 應用之間以一系列消息的方式進行通信。應用之間以一系列消息的方式進行通信。 在消息傳遞過程中,為了避免消息被丟失,消息被保存在消息隊列中。在消息傳遞過程中,為了避免消息被丟失,消息被保存在消息隊列中。 應用把消息發(fā)送到與接收者有關(guān)的隊列中。消息傳遞機制保證將消息傳送到目的地且應用把消息發(fā)送到與接收者有關(guān)的隊列中。消
22、息傳遞機制保證將消息傳送到目的地且只傳送一次。只傳送一次。 在消息傳遞過程中,應用之間不必建立聯(lián)系,發(fā)送者僅需將消息放入到與接收者有關(guān)在消息傳遞過程中,應用之間不必建立聯(lián)系,發(fā)送者僅需將消息放入到與接收者有關(guān)的隊列中,而不必關(guān)心接收者是否在線。的隊列中,而不必關(guān)心接收者是否在線。 接收者僅需從自己的隊列中提取消息即可。接收者僅需從自己的隊列中提取消息即可。IBM的的MQSeries、Microsoft的的MSMQ、東方通的、東方通的TongLink/Q、BEA的的MessageQ山東大學計算機科學與技術(shù)學院事務處理中間件事務處理中間件也稱為交易中間件也稱為交易中間件常見功能常見功能 全局事務協(xié)
23、調(diào)全局事務協(xié)調(diào) 事務的分布式兩階段提交事務的分布式兩階段提交 資源管理器支持資源管理器支持 故障恢復故障恢復 負載平衡負載平衡產(chǎn)品:產(chǎn)品:Bea的的Tuxedo等等山東大學計算機科學與技術(shù)學院數(shù)據(jù)庫中間件數(shù)據(jù)庫中間件實現(xiàn)對來自不同廠家的數(shù)據(jù)庫的訪問實現(xiàn)對來自不同廠家的數(shù)據(jù)庫的訪問屏蔽操作系統(tǒng)、網(wǎng)絡協(xié)議、數(shù)據(jù)庫平臺等的差異屏蔽操作系統(tǒng)、網(wǎng)絡協(xié)議、數(shù)據(jù)庫平臺等的差異應用最廣泛、最成熟應用最廣泛、最成熟l(1)通用網(wǎng)關(guān)接口CGI(駐留在WebServer上)l(2)專用API:DLL形式l NSAPI(Netscape)l ISAPI(Microsoft)l(3)通用數(shù)據(jù)庫接口l JDBC(SUN)
24、l ODBC(Microsoft)(4)數(shù)據(jù)庫引擎 Borland公司開發(fā),類似于ODBC,支持與數(shù)據(jù)庫的直接連接,效率較ODBC高(5)數(shù)據(jù)庫網(wǎng)關(guān) 用于分布式應用環(huán)境,無需在客戶機進行各種配置,如安裝各種ODBC驅(qū)動、設(shè)置ODBC 數(shù)據(jù)源等,使用網(wǎng)關(guān)來統(tǒng)一管理不同數(shù)據(jù)庫的訪問 相關(guān)產(chǎn)品:EDA/SQL、RDA、DRDA山東大學計算機科學與技術(shù)學院對象在分布式環(huán)境中的表現(xiàn)對象在分布式環(huán)境中的表現(xiàn)傳統(tǒng)對象的關(guān)注點:封裝和通過繼承對實現(xiàn)進行重用。傳統(tǒng)對象的關(guān)注點:封裝和通過繼承對實現(xiàn)進行重用。 封裝提供了一種將對象實現(xiàn)細節(jié)與其他對象屏蔽開的嚴格方法,可以封裝提供了一種將對象實現(xiàn)細節(jié)與其他對象屏蔽開
25、的嚴格方法,可以大大緩解在面向過程系統(tǒng)中較突出的維護問題。大大緩解在面向過程系統(tǒng)中較突出的維護問題。 繼承提供了一種重用對象實現(xiàn)的簡便方法繼承提供了一種重用對象實現(xiàn)的簡便方法分布式環(huán)境要求更好的可插入性:分布式環(huán)境要求更好的可插入性: 不太關(guān)注于直接重用代碼,而是要求能夠利用遠程所實現(xiàn)的服務。不太關(guān)注于直接重用代碼,而是要求能夠利用遠程所實現(xiàn)的服務。 要求另一層次上的封裝,只需暴露公用接口要求另一層次上的封裝,只需暴露公用接口對象對象組件組件山東大學計算機科學與技術(shù)學院組件的特性(組件的特性(1 of 2)組件是一個嚴格定義的可插入單元組件是一個嚴格定義的可插入單元 組件一般是基于對象實現(xiàn)的,
26、但也可以不作為對象實現(xiàn)。組件一般是基于對象實現(xiàn)的,但也可以不作為對象實現(xiàn)。組件將封裝運用到了極限組件將封裝運用到了極限 組件通過封裝來隱藏組件的實現(xiàn)以達到:組件通過封裝來隱藏組件的實現(xiàn)以達到:組件的實現(xiàn)語言是未知的:一個Java客戶不會感覺到所使用的組件是由C+實現(xiàn)的。組件的物理位置是未知的:一個VB客戶不會感覺到所使用的組件是運行在相同的進程內(nèi)(使用DLL),還是在同一機器的不同進程內(nèi),甚至是位于不同機器上。山東大學計算機科學與技術(shù)學院組件的特性(組件的特性(2 of 2)組件通常在容器中進行管理:組件通常在容器中進行管理: 組件遵循所處的容器的規(guī)則,并按照標準的途徑向容器發(fā)送事組件遵循所處
27、的容器的規(guī)則,并按照標準的途徑向容器發(fā)送事件。件。組件可以從容器中獲得屬性或服務:組件可以從容器中獲得屬性或服務: 例如,組件可以使用容器的背景色作為自己的背景色。例如,組件可以使用容器的背景色作為自己的背景色。組件允許對所支持的接口進行動態(tài)發(fā)現(xiàn)和調(diào)用:組件允許對所支持的接口進行動態(tài)發(fā)現(xiàn)和調(diào)用: 客戶程序可以在運行狀態(tài)下確定一個組件支持何種功能,然后客戶程序可以在運行狀態(tài)下確定一個組件支持何種功能,然后調(diào)用該功能。調(diào)用該功能。山東大學計算機科學與技術(shù)學院組件化軟件系統(tǒng)的升級方式組件化軟件系統(tǒng)的升級方式組件1組件2組件4組件3組件5組件6軟件系統(tǒng)版本1組件1組件2組件4組件3組件5組件6軟件系統(tǒng)
28、版本1接口保持不變接口保持不變山東大學計算機科學與技術(shù)學院兩點說明兩點說明組件不必是小的實體:組件不必是小的實體: 組件不一定只是小的、可視化的東西,如組件不一定只是小的、可視化的東西,如VB控件面板的控件;控件面板的控件;一個大規(guī)模的、復雜組件例子就是一個大規(guī)模的、復雜組件例子就是IE內(nèi)使用的內(nèi)使用的HTML查看器。查看器。組件及其容器不一定是可視化的:組件及其容器不一定是可視化的: 組件可能完全不可視(實際上一個分布式系統(tǒng)中的大多數(shù)組件組件可能完全不可視(實際上一個分布式系統(tǒng)中的大多數(shù)組件都是不可視的)并實現(xiàn)業(yè)務邏輯。都是不可視的)并實現(xiàn)業(yè)務邏輯。山東大學計算機科學與技術(shù)學院服務的重要性服
29、務的重要性除了通信協(xié)議外,組件還會用到一些可能很復雜,除了通信協(xié)議外,組件還會用到一些可能很復雜,但又會經(jīng)常重復使用的服務。但又會經(jīng)常重復使用的服務。 如安全性管理、事務處理等。如安全性管理、事務處理等。一個平臺或體系結(jié)構(gòu)所顯式提供的服務越多,開發(fā)一個平臺或體系結(jié)構(gòu)所顯式提供的服務越多,開發(fā)者就越容易在更短的時間內(nèi)開發(fā)出高質(zhì)量的分布式者就越容易在更短的時間內(nèi)開發(fā)出高質(zhì)量的分布式系統(tǒng)。系統(tǒng)。 有了平臺提供的服務,開發(fā)者可以將更多的精力集中于系統(tǒng)的有了平臺提供的服務,開發(fā)者可以將更多的精力集中于系統(tǒng)的商業(yè)邏輯。商業(yè)邏輯。 EJB是一個很好的例子是一個很好的例子山東大學計算機科學與技術(shù)學院常見的服務
30、常見的服務命名服務(命名服務(Naming) 在分布式系統(tǒng)中,命名服務提供了一種定位分布式對象的機制。在分布式系統(tǒng)中,命名服務提供了一種定位分布式對象的機制。監(jiān)視(監(jiān)視(Monitoring) 監(jiān)視服務不僅可以監(jiān)視系統(tǒng)的運行狀態(tài),而且當需要操作人員監(jiān)視服務不僅可以監(jiān)視系統(tǒng)的運行狀態(tài),而且當需要操作人員參與時可以發(fā)出警告信息。參與時可以發(fā)出警告信息。持久性(持久性(Persistence) 持久性服務提供一種統(tǒng)一的機制,使得分布式對象可以通過持持久性服務提供一種統(tǒng)一的機制,使得分布式對象可以通過持久的數(shù)據(jù)存儲來保存、更新和恢復他的狀態(tài)。久的數(shù)據(jù)存儲來保存、更新和恢復他的狀態(tài)。山東大學計算機科學與
31、技術(shù)學院常見的服務(常見的服務(cont.)安全性(安全性(Security) 安全性服務確保于分布式對象的通信是安全的,并確認相應的安全性服務確保于分布式對象的通信是安全的,并確認相應的用戶具有適當?shù)臋?quán)限。用戶具有適當?shù)臋?quán)限。事務(事務(Transaction) 事務服務能夠確保一個事務或者完全完成,或者完全放棄。在事務服務能夠確保一個事務或者完全完成,或者完全放棄。在企業(yè)系統(tǒng)中,事務定義了工作的原子級(企業(yè)系統(tǒng)中,事務定義了工作的原子級(atomic)單元。分布)單元。分布式事務處理就是一個跨越多臺計算機的單個工作單元。式事務處理就是一個跨越多臺計算機的單個工作單元。消息處理(消息處理(M
32、essaging) 消息處理服務提供異步編程模式。異步模式在很多應用中都需消息處理服務提供異步編程模式。異步模式在很多應用中都需要。要。山東大學計算機科學與技術(shù)學院常見的服務(常見的服務(cont.)分布式垃圾回收(分布式垃圾回收(Distributed garbage collection) 當一個程序不再使用分布式對象時,分布式垃圾回收服務會自當一個程序不再使用分布式對象時,分布式垃圾回收服務會自動釋放分布式對象所占用的存儲單元。動釋放分布式對象所占用的存儲單元。資源管理(資源管理(Resource Management) 一般來說,資源管理器按照使可伸縮性最大化的方式來管理分一般來說,資
33、源管理器按照使可伸縮性最大化的方式來管理分布式對象,即支持大量的客戶程序同分布式對象在短時間內(nèi)進布式對象,即支持大量的客戶程序同分布式對象在短時間內(nèi)進行交互的能力。行交互的能力。山東大學計算機科學與技術(shù)學院通信通信客戶程序與服務程序之間客戶程序與服務程序之間通信方式通信方式 Socket RPC RMI抽象層次更高山東大學計算機科學與技術(shù)學院SocketSocket: 面對TCP/IP協(xié)議編程,普遍采用Socket(套接字)規(guī)范,即UNIX習慣的TCP/IP基本編程方法,由一組圍繞Socket概念的函數(shù)調(diào)用支持,已經(jīng)成為TCP/IP應用的標準手段。 RPC: RPC是一種邏輯上的協(xié)議,它可以使
34、用Socket、Named和Pipe等更低級的協(xié)議完成通信任務。RPC是在socket的基礎(chǔ)上實現(xiàn)的,RPC比socket需要更多的條件假定,更多的系統(tǒng)資源。 RPC方法的基本原則是以模塊調(diào)用的簡單概念忽略通訊細節(jié),讓程序員不用關(guān)心C/S之間的通訊協(xié)議,集中精力對付實現(xiàn)過程。對于需要廣泛應用和兼容的C/S應用,由于其應用平臺的多樣性和復雜性,可能在某些環(huán)境下不能提供對RPC編程方法的支持,這時必須知道通訊包的細節(jié),用RPC獲得簡單性的前提已經(jīng)被大大削弱。 山東大學計算機科學與技術(shù)學院客戶基于服務器之間使用的大部分通訊組件都是基于客戶基于服務器之間使用的大部分通訊組件都是基于socket接口來實
35、現(xiàn)的。接口來實現(xiàn)的。 Socket是兩個程序之間進行雙向數(shù)據(jù)傳輸?shù)木W(wǎng)絡通訊端點,是兩個程序之間進行雙向數(shù)據(jù)傳輸?shù)木W(wǎng)絡通訊端點,有一個地址和一個端口號來標識。有一個地址和一個端口號來標識。 每個服務程序在提供服務時都要在一個端口進行,而想使每個服務程序在提供服務時都要在一個端口進行,而想使用該服務的客戶機也必須連接該端口。用該服務的客戶機也必須連接該端口。 因為是基于傳輸層,所以它是比較原始的通訊協(xié)議機制。因為是基于傳輸層,所以它是比較原始的通訊協(xié)議機制。 通過通過Socket的數(shù)據(jù)表現(xiàn)形式為字節(jié)流信息,因此通訊雙方的數(shù)據(jù)表現(xiàn)形式為字節(jié)流信息,因此通訊雙方要想完成某項具體的應用則必須按雙方約定的
36、方式進行數(shù)要想完成某項具體的應用則必須按雙方約定的方式進行數(shù)據(jù)的格式化和解釋據(jù)的格式化和解釋 山東大學計算機科學與技術(shù)學院山東大學計算機科學與技術(shù)學院山東大學計算機科學與技術(shù)學院import .*; import java.io.*; public class SocketCommunicationServer public static void main(String args) try boolean flag=true;/設(shè)置標志位為真 Socket client=null;/創(chuàng)建Socket client以接收來自客戶端的請求 String inputLine; /*1 首先調(diào)用Se
37、rverSocket類以某個端口號為參數(shù),創(chuàng)建一個ServerSocket對象,即是服務器端的服務程序在該指定端口監(jiān)聽的Socket。*/ServerSocket serverSocket =new ServerSocket (9000);/以端口9000創(chuàng)建一個服務器Socket System.out.println(服務器在端口9000上監(jiān)聽);/*2 服務器端程序使用ServerSocket對象的accept()方法,接收來自客戶機程序的連接請求,此時服務器端將一直保持停滯狀態(tài),直到收到客戶端發(fā)來的連接請求,此時該方法將返回一個新建的Socket類的實例,代表和客戶機建立的通訊鏈路在服務
38、程序內(nèi)的通訊端點。如果采用Java的多線程編程方法,可以實現(xiàn)并發(fā)服務器,繼續(xù)監(jiān)聽來自其他客戶的連接請求。*/while(flag) client=serverSocket.accept();山東大學計算機科學與技術(shù)學院/*3 使用新建的Socket對象創(chuàng)建輸入、輸出流對象。*/DataInputStream input=new DataInputStream(new BufferedInputStream(client.getInputStream(); PrintStream output=new PrintStream(new BufferedOutputStream(client.get
39、OutputStream(); /*4 使用流對象的方法完成和客戶端的數(shù)據(jù)傳輸,按約定協(xié)議識別并處理來自客戶端的請求數(shù)據(jù),并把處理的結(jié)果返回給客戶端。*/while ( inputLine= input.readLine()!=null) if(inputLine.equals(Stop) flag=false; break; output.println(inputLine); output.flush(); /*5 客戶端工作完畢后,則服務器端程序關(guān)閉和客戶端通訊的流和通訊的Socket。*/output.close(); input.close(); client.close(); /*
40、6 在服務器程序運行結(jié)束之間,應當關(guān)閉用來監(jiān)聽的Socket.*/serverSocket.close(); catch(IOException e) 山東大學計算機科學與技術(shù)學院import java.io.*;import .*;public class SocketCommunicationClientpublic static void main(String args)try/*1首先調(diào)用Socket類的構(gòu)造函數(shù),以服務器的指定的IP地址或指定的主機名和指定的端口號為參數(shù),創(chuàng)建一個Socket流,在創(chuàng)建Socket流的過程中包含了向服務器請求建立通訊連接的過程實現(xiàn)。*/Socket
41、clientSocket =new Socket (mice,9000);/創(chuàng)建一個流Socket并與主機mice上的端口9000相連接/*2使用Socket的方法getInputStream()和getOutputStream()來創(chuàng)建輸入/輸出流。這樣,使用Socket類后,網(wǎng)絡輸入輸出也轉(zhuǎn)化為使用流對象的過程。*/OutputStream output =clientSocket.getOutputStream();/向此Socket寫入字節(jié)的一個輸出流DataInputStream input=new DataInputStream(clientSocket.getInputStrea
42、m();int c;山東大學計算機科學與技術(shù)學院/*3使用輸入輸出流對象的相應方法讀寫字節(jié)流數(shù)據(jù),因為流連接著通訊所用的Socket,Socket又是和服務器端建立連接的一個端點,因此數(shù)據(jù)將通過連接從服務器得到或發(fā)向服務器。這時我們就可以對字節(jié)流數(shù)據(jù)按客戶端和服務器之間的協(xié)議進行處理,完成雙方的通訊任務。*/String response;while ( c= System.in.read()!=-1)/從屏幕上接受輸入的字符串,并且分解成一個個字符output.write(byte)c);if(c=n)/如果字符為回車,則輸出字符串緩沖output.flush();response=inpu
43、t.readLine();System.out.println(Communication:+response);/*待通訊任務完畢后,我們用流對象的close()方法來關(guān)閉用于網(wǎng)絡通訊的輸入輸出流,在用Socket對象的close()方法來關(guān)閉Socket。*/output.close();input.close();clientSocket.close(); catch (Exception e)System.err.println(Exception :+e);山東大學計算機科學與技術(shù)學院RMI在在java分布式對象模型中,遠程對象是指它的方法可以從另分布式對象模型中,遠程對象是指它的方
44、法可以從另外一個位于不同主機上的外一個位于不同主機上的java虛擬機來調(diào)用的對象。該對象虛擬機來調(diào)用的對象。該對象采用一個或多個遠程接口進行描述,這些接口聲明了遠程對采用一個或多個遠程接口進行描述,這些接口聲明了遠程對象的方法。象的方法。RMI(遠程方法調(diào)用遠程方法調(diào)用)就是對一個遠程對象的遠程就是對一個遠程對象的遠程接口中的方法進行調(diào)用接口中的方法進行調(diào)用RMI的目的是要使運行在不同的計算機中的對象之間的調(diào)用的目的是要使運行在不同的計算機中的對象之間的調(diào)用表現(xiàn)得象本地調(diào)用一樣表現(xiàn)得象本地調(diào)用一樣RMI應用程序包括兩個獨立程序:應用程序包括兩個獨立程序:server 和和client程序。程序
45、。山東大學計算機科學與技術(shù)學院RMI山東大學計算機科學與技術(shù)學院l 存在于客戶端存在于客戶端l 遠程對象的本地映象:調(diào)用遠程對象時,實際調(diào)用的是存根遠程對象的本地映象:調(diào)用遠程對象時,實際調(diào)用的是存根對象上的方法對象上的方法l 負責負責初始化并與遠程對象所在的遠程VM連接將參數(shù)打包,傳遞到遠程VM等待方法調(diào)用的結(jié)果解包返回值和異常將值返回給調(diào)用者存根存根(stub)山東大學計算機科學與技術(shù)學院框架框架存在于服務器存在于服務器接收客戶存根的請求接收客戶存根的請求和真正的遠程對象進行交互和真正的遠程對象進行交互傳送服務器響應到客戶傳送服務器響應到客戶負責負責 解包客戶端輸入的遠程方法的參數(shù)解包客戶
46、端輸入的遠程方法的參數(shù) 調(diào)用實際的遠程對象的方法調(diào)用實際的遠程對象的方法 將結(jié)果打包返回給調(diào)用者將結(jié)果打包返回給調(diào)用者 傳至遠程引用層傳至遠程引用層山東大學計算機科學與技術(shù)學院遠程引用層和傳輸層遠程引用層和傳輸層遠程引用層負責為獨立于遠程引用層負責為獨立于stub/skeleton的多種形式的的多種形式的遠程引用和調(diào)用協(xié)議提供支持遠程引用和調(diào)用協(xié)議提供支持傳輸層負責在不同的地址空間內(nèi)傳輸序列化的字節(jié)傳輸層負責在不同的地址空間內(nèi)傳輸序列化的字節(jié)流,使用流,使用TCP/UDP傳輸傳輸山東大學計算機科學與技術(shù)學院RMI registry簡單的命名和查找遠程對象的服務簡單的命名和查找遠程對象的服務遠程
47、對象在服務器端注冊遠程對象在服務器端注冊客戶能夠發(fā)現(xiàn)遠程對象和找到遠程對象引用客戶能夠發(fā)現(xiàn)遠程對象和找到遠程對象引用山東大學計算機科學與技術(shù)學院RMI 系統(tǒng)體系結(jié)構(gòu)系統(tǒng)體系結(jié)構(gòu)Client Virtual MachineClientServer Virtual MachineStubRemote ObjectSkeletonRegistry Virtual Machine“Fred” Server山東大學計算機科學與技術(shù)學院RMI 流程流程(1)Client Virtual MachineClientServer Virtual MachineStubRemote ObjectSkeleton
48、Registry Virtual Machine“Fred” Server121. Server Creates Remote Object2. Server Registers Remote Object山東大學計算機科學與技術(shù)學院RMI 流程流程(2)Client Virtual MachineClientServer Virtual MachineStubRemote ObjectSkeletonRegistry Virtual Machine“Fred” Server43. Client requests object from Registry4. Registry returns
49、remote reference(and stub gets created)3山東大學計算機科學與技術(shù)學院RMI 流程流程(3)Client Virtual MachineClientServer Virtual MachineStubRemote ObjectSkeletonRegistry Virtual Machine“Fred” Server65. Client invokes stub method6. Stub talks to skeleton7. Skeleton invokes remote object method57山東大學計算機科學與技術(shù)學院基于基于RMI的程序組成
50、的程序組成遠程對象接口遠程對象接口遠程對象實現(xiàn)遠程對象實現(xiàn)服務程序服務程序客戶程序客戶程序接口和類接口和類山東大學計算機科學與技術(shù)學院一個簡單的一個簡單的RMI例子例子1.遠程對象的本地接口聲明(遠程對象的本地接口聲明(RMIOperate.java) 該類僅僅是一個接口聲明,RMI客戶機可以直接使用它,RMI服務器必須通過一個遠程對象來實現(xiàn)它,并用某個專有的URL注冊它的一個實例。 遠程接口擴展 java.rmi.Remote 接口。 除了所有應用程序特定的例外之外,每個方法還必須在 throws 子句中聲明 java.rmi.RemoteException(或 RemoteExceptio
51、n 的父類)。Hello.javaimport java.rmi.*; / RMI本地接口必須從本地接口必須從Remote接口派生接口派生 public interface Hello extends Remote / 接口中的具體方法聲明,注意必須聲明拋出接口中的具體方法聲明,注意必須聲明拋出RemoteException String sayHello(String name) throws RemoteException; 山東大學計算機科學與技術(shù)學院2、遠程對象實現(xiàn)類 這個類應實現(xiàn)這個類應實現(xiàn)RMI客戶機調(diào)用的遠程服務對象的本地接口,客戶機調(diào)用的遠程服務對象的本地接口,它必須從它必須從
52、UnicastRemoteObject或或PortableRemoteObject繼承,構(gòu)繼承,構(gòu)造函數(shù)應拋出造函數(shù)應拋出RemoteException異常。異常。 HelloImpl.javaimport java.rmi.*; import javax.rmi.PortableRemoteObject; public class HelloImpl extends PortableRemoteObject implements Hello /* 構(gòu)造函數(shù)構(gòu)造函數(shù) */ public HelloImpl() throws RemoteException super(); /* 實現(xiàn)本地接口中
53、聲明的實現(xiàn)本地接口中聲明的sayHello()方法方法 */ public String sayHello(String message) throws RemoteException System.out.println(我在我在RMI的服務器端,客戶端正在調(diào)用的服務器端,客戶端正在調(diào)用sayHello方法。方法。 ); System.out.println(Hello + message); return message; 山東大學計算機科學與技術(shù)學院3.RMI服務器類該類創(chuàng)建遠程對象實現(xiàn)類該類創(chuàng)建遠程對象實現(xiàn)類HelloImpl的一個實例,然的一個實例,然后通過一個專有的后通過一個專有的
54、URL來注冊它。所謂注冊就是通來注冊它。所謂注冊就是通過過Java.rmi.Naming.bind ()方法或方法或Java.rmi.Naming.rebind()方法,將方法,將HelloImpl實例綁實例綁定到指定的定到指定的URL上。上。山東大學計算機科學與技術(shù)學院HelloServer.javaimport java.rmi.*;public class HelloServer public static void main(String args) try System.out.println(開始 RMI Server .); /* 創(chuàng)建遠程對象的實現(xiàn)實例 */ HelloImpl
55、 hImpl = new HelloImpl(); System.out.println(將實例注冊到專有的URL ); Naming.rebind(HelloService, hImpl); System.out.println(等待RMI客戶端調(diào)用.); System.out.println(); catch (Exception e) System.out.println(錯誤: + e); 山東大學計算機科學與技術(shù)學院請注意有關(guān)請注意有關(guān) rebind 方法調(diào)用的下列參數(shù):方法調(diào)用的下列參數(shù): 第一個參數(shù)是第一個參數(shù)是 URL 格式的格式的 java.lang.String,表示遠程對
56、象,表示遠程對象的位置和名字。的位置和名字。 如果如果 URL 中省略主機,則主機缺省值為當前主機,而且在中省略主機,則主機缺省值為當前主機,而且在 URL 中無中無需指定協(xié)議(例如需指定協(xié)議(例如“HelloServer”)。)。 在在 URL 中,可以選擇提供端口號:例如中,可以選擇提供端口號:例如“/myhost:1234/HelloServer”。端口缺省值為。端口缺省值為 1099。除非服務器在缺。除非服務器在缺省省 1099 端口上創(chuàng)建注冊服務程序,否則需要指定端口號。端口上創(chuàng)建注冊服務程序,否則需要指定端口號。 第二個參數(shù)為從中調(diào)用遠程方法的對象實現(xiàn)引用。第二個參數(shù)為從中調(diào)用遠程方法的對象實現(xiàn)引用。山東大學計算機科學與技術(shù)學院 RMI客戶使用客戶使用java.rmi.Naming.lookup()方法,在指定的遠程方法,在指定的遠程主機上查找主機上查找RMI服務對象,若找到就把它轉(zhuǎn)換成本地接口服務對象,若找到就把它轉(zhuǎn)換成本地接口 RMIOperate類型。它必須知道提供類型。它必須知道提供RMI服務主機的服務主機的URL,這個這個URL可以通過可以通過rmi: /host/path或或rmi:/host:port/pa
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 創(chuàng)業(yè)計劃書(合集15篇)
- 圣誕節(jié)2021慶?;顒涌偨Y(jié)
- 軍訓后感受300字(35篇)
- 無編站骨干選拔理論考試(戰(zhàn)訓業(yè)務理論)練習試題(一)
- 專題09 二次根式加減(七大類型)(題型專練)(原卷版)
- 廣東高三英語語法填空之冠詞
- 高中英語語法分類講解過去進行時
- 第4章 其他排泄物和體腔液檢查課件
- 會計數(shù)據(jù)分析 Solutions-Manual Chapter-4 EOC-SM
- 《莖越長越高》植物的生長變化莖越長越高
- 消防宣傳日火災逃生自救PPT
- 瓦斯隧道斜井隧道反坡排水方案
- YY 0612-2007一次性使用人體動脈血樣采集器(動脈血氣針)
- 員工流失率考核方案
- 國家開放大學電大《計算機應用基礎(chǔ)(本)》終結(jié)性考試試題答案(格式已排好)任務一
- GMP基礎(chǔ)知識培訓 課件
- 九年級道德與法治上冊第四單元知識點提綱
- 企業(yè)經(jīng)營決策模擬指南課件
- 智能電網(wǎng)-課件
- 新修訂的《行政處罰法》-修改的內(nèi)容完整課件
- 酒店總值班工作內(nèi)容表
評論
0/150
提交評論