复制模式和扩展模式_扩展剂:模式还是反模式?
復(fù)制模式和擴(kuò)展模式
擴(kuò)展器模式在最近幾年變得很流行,甚至已經(jīng)在OSGi標(biāo)準(zhǔn)(例如,藍(lán)圖服務(wù)和Web應(yīng)用程序規(guī)范)中使用。 在處女座,我們從一開始就與擴(kuò)展程序一起工作,但是盡管它們具有優(yōu)勢,但它們?nèi)杂幸恍┟黠@的缺點(diǎn)。 由于OSGi聯(lián)盟正在考慮在其他規(guī)范中使用擴(kuò)展器,因此我同意記錄一些問題。第一個(gè)困難是知道擴(kuò)展器何時(shí)完成了捆綁包的處理。 例如,一旦驅(qū)動(dòng)了任何束激活器,包含藍(lán)圖XML文件的束將轉(zhuǎn)換為ACTIVE狀態(tài)。 但這還不是全部。 管理員對何時(shí)可以使用捆綁軟件感興趣,因此處女座中的管理代碼會(huì)跟蹤擴(kuò)展程序的進(jìn)度,并為代表捆綁軟件的安裝工件提供混合狀態(tài)。 安裝工件會(huì)一直處于STARTING狀態(tài),直到發(fā)布了應(yīng)用程序上下文為止,此時(shí)該應(yīng)用程序過渡到ACTIVE。 如果沒有這樣的附加基礎(chǔ)架構(gòu),管理員將無法確定由擴(kuò)展程序處理的捆綁包何時(shí)真正準(zhǔn)備就緒。
那是成功的案例,但在錯(cuò)誤案例中也有復(fù)雜之處。 第一個(gè)麻煩是,由于擴(kuò)展程序在與安裝捆綁軟件的線程不同的線程中運(yùn)行,因此,如果擴(kuò)展程序拋出異常,則不會(huì)傳播到安裝捆綁軟件的代碼。 因此,安裝程序需要以某種方式檢查錯(cuò)誤。 因此,處女座擁有檢測此類錯(cuò)誤并將其傳播回啟動(dòng)捆綁軟件部署的線程的基礎(chǔ)架構(gòu):部署操作失敗,并帶有堆棧跟蹤,指示出問題所在。
另一個(gè)錯(cuò)誤并發(fā)癥是處理擴(kuò)展器的擴(kuò)展器存在(可能不確定)延遲。 對于這種錯(cuò)誤,Virgo會(huì)跟蹤擴(kuò)展程序處理的進(jìn)度,并向事件日志發(fā)出警告(旨在引起管理員的注意),指出哪些處理過程已延遲以及在某些常見情況下(例如,當(dāng)藍(lán)圖正在等待依賴項(xiàng)時(shí)) ,是什么導(dǎo)致延遲。
擴(kuò)展程序需要能夠查看包的生命周期事件,因此對于將框架進(jìn)行分區(qū)的系統(tǒng),必須將每個(gè)擴(kuò)展程序安裝到多個(gè)分區(qū)中。 另一方面,至關(guān)重要的是防止擴(kuò)展程序的多個(gè)實(shí)例看到相同的捆綁事件,否則它們都將嘗試擴(kuò)展捆綁。
擴(kuò)展器的另一個(gè)問題是需要使它們保持運(yùn)行和健康,因?yàn)槌藬U(kuò)展器未處理的捆綁包外,幾乎沒有跡象表明擴(kuò)展器發(fā)生故障或生病。 處女座小心確保其擴(kuò)展器正確啟動(dòng),其用于檢測延遲的基礎(chǔ)設(shè)施有助于診斷擴(kuò)展器崩潰或疾病(這兩種情況都是極為罕見的情況)。
將參數(shù)傳遞給擴(kuò)展程序以影響其行為也存在一個(gè)問題。 通常,這是通過將擴(kuò)展程序配置嵌入正在處理的束中或?qū)蔚呐渲酶郊拥綌U(kuò)展程序束中來完成的。 但是,由于擴(kuò)展器不是由API驅(qū)動(dòng)的,因此無法在調(diào)用時(shí)傳遞參數(shù)的常規(guī)方法。 本質(zhì)上,擴(kuò)展器模型意味著用于部署的編程模型僅限于BundleContext.installBundle。
通過在其他基礎(chǔ)架構(gòu)上進(jìn)行大量投資,處女座設(shè)法合理地支持了Blueprint和Spring DM擴(kuò)展器。 但是對于Web應(yīng)用程序擴(kuò)展器,Virgo無法使其足夠強(qiáng)大,因此它直接從Virgo部署管道中驅(qū)動(dòng)了基礎(chǔ)Web組件,從而避免了上述問題。
我知道至少有另一個(gè)服務(wù)器運(yùn)行時(shí)項(xiàng)目在擴(kuò)展程序上遇到了類似的問題,因此處女座并不孤單。 在將安裝程序與特定于資源的處理松散耦合,擴(kuò)展程序模式的主要優(yōu)勢(但遠(yuǎn)非該模式唯一)與提供健壯的編程模型和可用的管理視圖之間進(jìn)行權(quán)衡取舍服務(wù)器運(yùn)行時(shí)-如果沒有擴(kuò)展程序,這將更加直接。
參考: 擴(kuò)展程序:模式還是反模式? 從我們的JCG合作伙伴 Glyn Normington在Mind the Gap博客中獲得。
翻譯自: https://www.javacodegeeks.com/2012/08/extenders-pattern-or-anti-pattern.html
復(fù)制模式和擴(kuò)展模式
總結(jié)
以上是生活随笔為你收集整理的复制模式和扩展模式_扩展剂:模式还是反模式?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 服务器系统linux(服务器系统 lin
- 下一篇: ANTLR和网络:一个简单的例子