免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
ChrisRc

OSGi是什么,OSGi是一種服務(wù)運(yùn)行平臺(tái)。通過(guò)實(shí)現(xiàn)能夠提供服務(wù)的符合OSGi規(guī)范的組件,用戶可以將其組件發(fā)布到OSGi運(yùn)行平臺(tái),供用戶和其他組件使用。OSGi組件提供的服務(wù)具有兩個(gè)層面的含義:系統(tǒng)層面,即一個(gè)組件為其他組件提供服務(wù),這些服務(wù)體現(xiàn)為Java接口的實(shí)現(xiàn);業(yè)務(wù)層面,即一個(gè)組件為外部系統(tǒng)或用戶提供某種業(yè)務(wù)服務(wù)實(shí)現(xiàn)。


OSGi提供的功能

OSGi能夠提供什么功能呢?我們將OSGi運(yùn)行平臺(tái)與常用的Web應(yīng)用服務(wù)服務(wù)器做一個(gè)比較,來(lái)看OSGi提供的功能。首先,以tomcat為例,在tomcat容器中可以運(yùn)行多個(gè)Web應(yīng)用,假設(shè)存在兩個(gè)Web應(yīng)用AWeb應(yīng)用B,一般說(shuō)來(lái),Web應(yīng)用AB具有各自的運(yùn)行空間,兩者之間不存在任何關(guān)聯(lián),AB具有自己獨(dú)立的生命周期,如部署、啟動(dòng)、停止和卸載等。

那么,是如何做到這一點(diǎn)的呢?很明顯,這是通過(guò)JVM的類(lèi)加載機(jī)制決定的。當(dāng)tomcat運(yùn)行并啟動(dòng)Web應(yīng)用AB時(shí),tomcatWeb應(yīng)用AB各自構(gòu)建了一個(gè)類(lèi)空間,也可以看作是一個(gè)類(lèi)域(Class Domain),Web應(yīng)用A的類(lèi)域包括JRE中的類(lèi),tomcat啟動(dòng)類(lèi)路徑上的類(lèi)和Web應(yīng)用AWEB-INF目錄下classes目錄下的類(lèi)和lib中的jar包;同樣,Web應(yīng)用B也有自己獨(dú)立的類(lèi)域,其范圍除了JRE中的類(lèi),tomcat啟動(dòng)類(lèi)路徑上的類(lèi)之外就是自己內(nèi)部WEB-INF目錄下classes目錄下的類(lèi)和lib中的jar包?,F(xiàn)在提出一個(gè)問(wèn)題,如果Web應(yīng)用A需要使用Web應(yīng)用B提供的Java類(lèi),怎么辦?實(shí)現(xiàn)方式有多種,一種是將B提供的類(lèi)打包,放置到應(yīng)用AWEB-INF/classesWEB-INF/lib中;也可以將B提供的類(lèi)放置到tomcat的類(lèi)路徑上,甚至是JRE的擴(kuò)展目錄下,但這樣做在實(shí)際使用中或多或少存在一些問(wèn)題。能不能在運(yùn)行時(shí)Web應(yīng)用A可以直接使用Web應(yīng)用B提供的類(lèi)呢?在運(yùn)行時(shí)Web應(yīng)用B能不能提供一個(gè)接口的實(shí)現(xiàn),即類(lèi)實(shí)例,由Web應(yīng)用A使用呢?能不能提供一個(gè)應(yīng)用C為應(yīng)用A和應(yīng)用B提供服務(wù)呢?顯然,這些對(duì)于Web容器是不行的。

帶著上述問(wèn)題我們回到OSGi運(yùn)行平臺(tái)??梢詫?/span>OSGi看作是Web容器的泛化,是更高級(jí)別的抽象。運(yùn)行在OSGi環(huán)境中的類(lèi)似于Web容器中的Web應(yīng)用的組件即Bundle,不再僅僅局限于一個(gè)業(yè)務(wù)應(yīng)用的概念,它的粒度更加精細(xì),即可以看作是一個(gè)Jar包,為其他Bundle提供幫助類(lèi);也可以是一個(gè)HTTP服務(wù)組件,為其他Bundle提供http服務(wù);還可以是一個(gè)Web容器,為其他Bundle提供Web應(yīng)用服務(wù)。

那么,能不能解決上述提到的問(wèn)題呢?我們假設(shè)在OSGi運(yùn)行平臺(tái)中包含了3個(gè)BundleA、BC。對(duì)于問(wèn)題一:Bundle A需要使用Bundle B中的某些實(shí)現(xiàn)類(lèi),如何實(shí)現(xiàn)?可以將Bundle B中的這些類(lèi)通過(guò)Bundle B的元數(shù)據(jù)描述信息公開(kāi)(Export)出去,使得這些類(lèi)對(duì)OSGi平臺(tái)中的所有Bundle可見(jiàn),這些類(lèi)資源仍然位于Bundle B中。Bundle A在其元數(shù)據(jù)描述信息中將Bundle B公開(kāi)的類(lèi)引入(Import)進(jìn)來(lái)。在運(yùn)行時(shí),Bundle A就可以使用Bundle B提供的這些類(lèi),而不是需要將這些類(lèi)拷貝到Bundle A中或其他位置。對(duì)于問(wèn)題二:Bundle A可不可以直接使用Bundle B在運(yùn)行時(shí)構(gòu)建了類(lèi)實(shí)例?Bundle B在運(yùn)行時(shí)可以將Bundle A需要的類(lèi)實(shí)例注冊(cè)到OSGi運(yùn)行平臺(tái)的服務(wù)注冊(cè)表中,類(lèi)實(shí)例實(shí)現(xiàn)的接口可以通過(guò)上述問(wèn)題一的方式使得Bundle A可見(jiàn),那么,在運(yùn)行時(shí),Bundle A就可以通過(guò)該接口到OSGi平臺(tái)服務(wù)注冊(cè)表中查找Bundle B中提供的接口實(shí)現(xiàn)類(lèi)實(shí)例,并調(diào)用該接口上的方法?,F(xiàn)在來(lái)看問(wèn)題三:Bundle C能不能為Bundle ABundle B共享呢?可以將上述問(wèn)題二的解決方案中的Bundle B提供的接口定義提取到Bundle C中,并在Bundle C的元數(shù)據(jù)中公開(kāi),通過(guò)在Bundle ABundle B中同時(shí)引入Bundle C中發(fā)布的接口,Bundle B提供該接口的實(shí)現(xiàn),Bundle A使用該接口實(shí)現(xiàn)提供的功能。這一切看上去是不是解決的非常完美呢?!

OSGi的實(shí)現(xiàn)機(jī)制

OSGi是如何實(shí)現(xiàn)的呢?從本質(zhì)上說(shuō),OSGi是充分使用了Java的類(lèi)加載機(jī)制,對(duì)模塊和應(yīng)用進(jìn)行了更加精細(xì)粒度的控制,然后在類(lèi)域上建立一系列松耦合應(yīng)用。OSGi為每一個(gè)Bundle組件定義了一些元數(shù)據(jù)信息,通過(guò)這些元數(shù)據(jù),OSGi在運(yùn)行時(shí)為每一個(gè)Bundle構(gòu)建了一個(gè)獨(dú)立的類(lèi)域(即類(lèi)空間),詳細(xì)描述參考OSGiBundle小節(jié)。

OSGi的組成

OSGiR4種將功能分為幾層,包括:安全層、模塊層、生命周期層、服務(wù)層和實(shí)際的服務(wù)。OSGi的核心實(shí)現(xiàn)即為OSGi框架,它本身也是一個(gè)OSGi Bundle

u OSGi的安全層(Security Layer)是一個(gè)可選的實(shí)現(xiàn),該層基于Java2 安全架構(gòu),位于OSGi服務(wù)平臺(tái)的底層對(duì)OSGi環(huán)境中應(yīng)用的部署和管理提供更好的安全控制。

u OSGi的模塊層(Module Layer)為基于Java的應(yīng)用、組件的打包,部署和校驗(yàn)提供了一個(gè)通用的標(biāo)準(zhǔn)化的解決方案。其他類(lèi)似的解決方案如JBoss、NetBeans

u 生命周期層(Life Cycle Layer)為Bundle組件的安全和生命周期操作提供了API定義,該層位于安全層和模塊層之上。

u 服務(wù)層(Service Layer)定義了一個(gè)與生命周期層緊密結(jié)合的組件動(dòng)態(tài)交互模型。OSGi中的服務(wù)是實(shí)現(xiàn)了一個(gè)或多個(gè)Java接口的Java對(duì)象,通過(guò)將這些對(duì)象依據(jù)其實(shí)現(xiàn)的接口注冊(cè)到服務(wù)注冊(cè)表中,Bundle組件可以發(fā)布自己的服務(wù),查找使用服務(wù),注冊(cè)監(jiān)聽(tīng)處理服務(wù)的狀態(tài)變更等。

u 實(shí)際的服務(wù)(Actual Services)是OSGi定義的一些標(biāo)準(zhǔn)的服務(wù)接口如日志服務(wù)(Log Service),包管理服務(wù)(Package Admin Service)、啟動(dòng)級(jí)別服務(wù)(Start Level Service)、HTTP服務(wù)(Http Service)、配置服務(wù)(Config Admin Service)、用戶管理服務(wù)(User Admin Service)等等,詳細(xì)的服務(wù)定義參考OSGi規(guī)范。

OSGiBundle

OSGi中的重要元素就是Bundle ServiceBundle提供了一種靜態(tài)資源邊界,類(lèi)似于Web容器中的Web應(yīng)用的概念。

每一個(gè)Bundle通過(guò)一個(gè)元數(shù)據(jù)文件(MANIFEST.MF)描述。OSGi框架(即SystemBundle)通過(guò)解析這個(gè)元數(shù)據(jù)文件對(duì)該Bundle進(jìn)行加載和管理。Bundle通過(guò)元數(shù)據(jù)中的"Export-Package"屬性將內(nèi)部的類(lèi)包發(fā)布給OSGi系統(tǒng)中其他Bundle使用,通過(guò)"Import-Package""Requie-Bundle"屬性引用OSGi系統(tǒng)中其他Bundle發(fā)布的類(lèi)包。

每一個(gè)Bundle有自己獨(dú)立的類(lèi)加載器(Fragment Bundle例外,其資源通過(guò)其Host Bundle加載),Bundle內(nèi)部的資源(類(lèi),文件等)通過(guò)該類(lèi)加載器查找和加載。Bundle的類(lèi)加載器能夠控制的類(lèi)加載邊界包括:?jiǎn)?dòng)類(lèi)路徑上的類(lèi)資源,OSGi框架即SystemBundle上的類(lèi)資源和Bundle內(nèi)部的類(lèi)資源。該類(lèi)資源邊界即形成該Bundle的類(lèi)域。

每一個(gè)BundleOSGi框架中具有自己的生命周期,其生命周期內(nèi)的狀態(tài)包括:INSTALLED、RESOLVEDSTARTING、ACTIVE、STOPPINGUNINSTALLED。

INSTALLED狀態(tài)是Bundle的初始狀態(tài),當(dāng)該Bundle部署到OSGi系統(tǒng)的Bundle Repository中時(shí),Bundle的狀態(tài)標(biāo)記為INSTALLED

Bundle內(nèi)部的資源在加載之前,首先由OSGi框架對(duì)其進(jìn)行解析(Resolve),解析的過(guò)程就是分析Bundle的元數(shù)據(jù)的過(guò)程,詳細(xì)過(guò)程參考OSGi規(guī)范。解析后的Bundle進(jìn)入RESOLVED狀態(tài),解析失敗時(shí),仍然處于INSTALLED狀態(tài)。

Bundle內(nèi)的資源被其它Bundle使用時(shí),該Bundle被啟動(dòng),也可以通過(guò)設(shè)定讓OSGi框架在加載該Bundle時(shí)直接啟動(dòng)。

Bundle內(nèi)的資源通過(guò)BundleContext與其他Bundle進(jìn)行交互。元數(shù)據(jù)中的"Bundle-Activator"屬性指定了實(shí)現(xiàn)BundleActivator接口的實(shí)現(xiàn)類(lèi),Bundle通過(guò)該類(lèi)得到BundleContext,通過(guò)BundleContext可以查找其他的Bundle,查找注冊(cè)在OSGi中的服務(wù)(Service)與OSGi環(huán)境進(jìn)行交互等等。Bundle可以在其提供的BundleActivator實(shí)現(xiàn)類(lèi)中進(jìn)行初始化的工作,也可以注冊(cè)服務(wù)到OSGi的服務(wù)注冊(cè)表中,供其他Bundle查找使用。

開(kāi)源的OSGi實(shí)現(xiàn)

Knopflerfish

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
tomcat與OSGI:類(lèi)加載器
OSGi框架之Eclipse Equinox
用NetBean6開(kāi)發(fā)OSGi應(yīng)用
擴(kuò)展Tomcat支持OSGi應(yīng)用服務(wù)(3)
Tomcat 架構(gòu)原理解析到架構(gòu)設(shè)計(jì)借鑒
敏捷與結(jié)構(gòu)性模塊化(三)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服