在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

OpenDaylight中的OSGi

汽車電子技術 ? 來源:碼農與軟件時代 ? 作者:碼農與軟件時代 ? 2023-02-14 15:05 ? 次閱讀

從寫單個類的打印Hello World小程序到OSGi模塊化開發,確實存在較大的難度,本文將從模塊化、OSGI模型以及OSGI在OpenDaylight中的應用等方面進行介紹。

一、模塊化

我們學習Java語言時,最初寫的程序便是在控制臺打印Hello World,此時,我們寫的代碼放在一個類中;慢慢地,我們編寫的代碼需要放在幾個的類時,我們就要考慮如何設計類與類之間的關系,你需要面向對象的設計原則和模式;工作中我們要做一個小項目,就可能涉及到數百個類了,我們會根據不同的業務職責將這些類進行邏輯上的劃分,分隔不同的小模塊,每個小模塊賦予相應的職責,也就是將一個系統分解為多個較小的互相協作的單元,并設定單元之間的邊界來改善系統的維護性和封裝性。大致過程如下圖①②③所示:

圖片

至目前為止,我們所做的事情是對類進行了邏輯的包裝,而實質上并沒有對類進行物理隔離。通常情況下,軟件在初始構建時,并不是很復雜,但隨著時間的推移、業務特性的增加、不規范的代碼調用以及為趕進度而忽略架構的設計,就使得軟件變得復雜起來,甚至極難維護。如同雙11爆倉時凌亂不勘的場景:

圖片

圖片來自互聯網

那么如何降低軟件的復雜性呢?生活中的貨物運輸或許是一個很好的借鑒例子,我們將零散的貨物打包在一起,形成封閉的空間;然后,通過標準的接口裝載到集裝箱運輸船。

圖片

事實上,早在1972年國際軟件工程大師David Parnas在《On the Criteria To Be Used in Decomposing Systems into Modules》一文中就提出了模塊化編程的思想:“每項任務構成一個獨立的、特有的程序模塊。實現時,每個模塊及其輸入/輸出都有確定含義的......系統以模塊化的方式進行維護”,其實質就是軟件模塊劃分應該以基于信息隱藏為目的,以職責劃分為手段,從而封裝變化。聯想到集裝箱的例子,軟件的模塊可以類比為集裝箱,如下圖所示:

圖片

我們現在正式介紹軟件模塊,在《Java應用架構設計 模式與OSGI》一書中進行了描述:軟件模塊是可部署的、可管理的、原生可重用的、可組合的、無狀態的軟件單元,它為用戶提供了簡潔的接口。

①可部署:模塊是一個獨立的部署單元,它能夠與其他軟件模塊共處。EAR、WAR以及JAR文件。

②可管理:在運行時,模塊可以進行安裝、卸載以及更新。實體樣例:EAR、WAR以及JAR文件。

③原生可調用:模塊總是原生可調用的。也就是說,模塊暴露的操作是通過直接調用方法觸發的。

④可組合:一般指的是粗粒度的模塊是由細粒度的模塊組成的。

⑤無狀態:特定版本的模塊只會存在一個實例。

由前面的分析可知,Java模塊化支持局限于細粒度的面向對象支持,需要有更高抽象粒度的模塊。OSGi便是Java模塊化需求其中一個解決方案。

一、OSGi

  1. 什么是OSGi?

OSGi(Open Services Gateway initiative,開放服務網關協議)是由 1999 年成立的 OSGi 聯盟提出的一個開放的服務規范,最早用于嵌入式設備。在2004年,Eclipse發布于基于OSGi的運行時模型,把 Equinox 作為底層運行平臺。借助于Eclipse,OSGi在商業化軟件企業中得到廣泛的關注?,F已廣泛應用于移動設備、桌面應用以及企業應用服務器。

  1. OSGi框架

OSGi框架是應用的執行環境。OSGi框架規范定義了OSGi的行為,現已有Apache Felix、Eclipse Equinox以及Knopflerfish等多個開源實現。OSGi的分層架構如下:

圖片

模塊層定義了模塊,稱為Bundle,體現為一個JAR文件,由類文件、資源文件和MANIFEST.MF組成。和普通的jar文件唯一不同的就是MANIFEST.MF文件的內容,基本上都是標識Bundle的屬性,Import-Package聲明了請求JAR文件中的代碼所需要的外部包。其文件樣例為:

圖片

生命周期層定義了動態安裝和管理Bundle,即可以在框架中安裝和卸載bundle,而不需要重啟應用進程。

服務層定義了面向服務的應用編程模型,涉及面向服務的發布、查找和綁定交互模式:服務提供者將服務發布到服務注冊中心,然后服務請求者通過搜索服務注冊中心,查找可供使用的服務。這種機制稱為VM中的SOA。事實上,服務就是Java接口。

圖片

3.OSGi生態

圖片

4.Bundle交互

了解了OSGi基礎知識后,我們來看下Bundle交互的實現方式:

(1) Export和Import:即通過Package的Export和Import來進行。服務提供者Bundle對外Export自己的package,而服務請求者則根據業務需要Import外部的Package;

(2) service:服務提供者Bundle對外提供Service,而服務請求者查找Service。而提供Service的方式又有:

①通過BundleContext(Bundle上下文)來提供和獲??;

②通過Declarative Service來實現;

③通過Blueprint來實現;

在這里,我們重點介紹第3種方式--Blueprint。Blueprint提供一個依賴注入框架來實現OSGI,并在OSGI Compendium R4.2里被OSGI組織標準化。Blueprint的強大之處在于即具有Spring強大且非侵入性的企業級編程模型又具有OSGi的動態性、模塊化的特性。

Bundle間的交互使用類似Spring Bean的方式配置定義,Blueprint的XML文件定義和描述不同Bundle的組裝。一個簡單的Blueprint示例如下:

圖片

XML文件的命名空間標識blueprint 1.0.0版本。頂級的blueprint元素標識XML文件作為一個blueprint模塊來定義;reference元素標識從OSGi服務注冊中心為組件獲得一個服務;bean元素標識與Spring Bean相同的含義。

一、OSGi在OpenDaylight中的應用

Java模塊化的局限和OSGi框架的模塊化標簽,使得Java和OSGi走在了一起,進而增加了Java模塊化開發的能力。

作為SDN控制器,OpenDaylight使用了Java語言編寫,SDN控制器本身的功能與協議繁多導致了其子項目眾多,如何更好地按需動態加載所需的項目成為技術選型的一個重要因素。而OSGi的如下特性也使得其在OpenDaylight中發揮很大的作用:

①將一個程序打包成邏輯上獨立的JAR文件,并且只部署那些某個安裝所需要的部分。

②將一個程序打包成邏輯中獨立的JAR文件,聲明哪些代碼可以被其他JAR文件訪問,并且強調可見性。

③為程序提供一個插件式的擴展機制。OSGi模塊化特別適合提供強大的擴展機制,包括支持執行時的動態性。

OpenDaylight采用了OSGi框架之后,那開發一個應用程序的流程又是怎樣的呢?下面給出一般方法:

①根據應用的業務場景設計Bundle,并設計Bundle的服務;

②使用IDE實現Bundle,配置Blueprint容器XML文件;

③打包和部署Bundle的JAR文件;

④啟動類似Karaf之類的部署環境,并根據業務需要安裝Bundle。

事實上,OpenDaylight不僅采用了OSGi框架,而且還使用了Apache Karaf這個企業級容器,下篇文章我們將探討Apache Karaf的基礎知識。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 模塊化
    +關注

    關注

    0

    文章

    334

    瀏覽量

    21449
  • 模型
    +關注

    關注

    1

    文章

    3313

    瀏覽量

    49232
  • 小程序
    +關注

    關注

    1

    文章

    239

    瀏覽量

    12266
收藏 人收藏

    評論

    相關推薦

    SDK-3.7.0-7 Eclipse IDE無法啟動

    :Or.Eclipse。SWT。在Org.Eclig.OsGi.Neal.Looul.BuleleLoAD.FIDCaseCype(BuleleLoADER,Java:432)在
    發表于 12-21 15:18

    如何正確的在電腦上安裝Atollic TrueStudio軟件呢?

    !MESSAGE 操作系統信息:Windows 10、10.0、x86!ENTRY org.eclipse.osgi 4 0 2022-04-06 15:16:21.056!MESSAGE 自動激活
    發表于 12-09 08:45

    為什么無法在Windows上將STM32CubeIDE從1.6.0更新到1.6.1?

    ,operand=,action=)。未找到包含以下內容的存儲庫:osgi.bundle、com.st.stm32cube.common.mx、6.2.1.202103241236未找到包含以下內容
    發表于 12-27 08:17

    基于OSGI家庭網關的多媒體系統設計

    隨著家庭網絡技術和多媒體技術的飛速發展,如何實現數字家庭多媒體服務智能化和人性化已成為當今研究的熱點。本文介紹一種基于OSGI家庭網關和UPNP AV架構擴展的媒體共享系統
    發表于 02-26 13:48 ?18次下載

    基于OSGI的智能家庭系統設計

    為了解決普適環境下智能家庭各類設備組網困難的問題,本系統采用OSGi(Open Service Gateway Initiative)服務框架和LonWorks現場總線技術,利用低壓電力線載波手段來設計和實現智能家庭系統。
    發表于 04-28 10:36 ?35次下載
    基于<b class='flag-5'>OSGI</b>的智能家庭系統設計

    OSGi原理與最佳實踐_王昊

    本書基于作者多年使用0SGi的經驗而編寫,涵蓋了0SGi從/kfqN深入的知識體系,從OSGi的簡介開始,介紹OSGi的作用及基本概念;其后進入OSGi實戰,結合實例講解如何基于OSGi
    發表于 12-23 15:35 ?0次下載
    <b class='flag-5'>OSGi</b>原理與最佳實踐_王昊

    如何從零開始學OpenDaylight

    OpenDaylight的邏輯架構分為應用層、控制器層和數據轉發層。其中,應用層聚焦網絡業務邏輯開發,負責資源編排;控制器層進行全局網絡的管理;數據轉發層為各種網絡設備,負責數據的轉發。
    的頭像 發表于 02-14 14:04 ?2368次閱讀
    如何從零開始學<b class='flag-5'>OpenDaylight</b>

    OpenDaylight的運行環境

    OpenDaylight作為一種開源的SDN控制器,使用Java語言編寫,
    的頭像 發表于 02-14 14:08 ?913次閱讀
    <b class='flag-5'>OpenDaylight</b>的運行環境

    什么是OpenDaylight的Maven

    構建的實質是將我們編寫的Java源文件、XML配置文件、HTML頁面、CSS和JS文件等,通過某種方式組合在一起,變為可對外服務項目的過程。同時,構建過程很多都是沒有技術含量且重復的工作,手工操作很無趣且太麻煩。
    的頭像 發表于 02-14 15:02 ?1099次閱讀
    什么是<b class='flag-5'>OpenDaylight</b>的Maven

    OpenDaylight的Karaf

    Karaf是一個現代的、多種形態的(polymorphic),輕量的、強大的、經過OSGI認證的企業級容器。這里的多種形態指的是它能夠容納各種應用,諸如OSGi、Spring、war等等。單從OSGi的角度來說,Karaf是
    的頭像 發表于 02-14 15:08 ?1811次閱讀
    <b class='flag-5'>OpenDaylight</b><b class='flag-5'>中</b>的Karaf

    OpenDaylight的YANG

    YANG是和NETCONF相伴而生的,而NETCONF作為網絡管理協議,包含安全傳輸層、消息層、操作層和內容層,其中內容層沒有標準化,操作層允許自定義RPC,而這兩者的標準化建模就是由YANG來完成的。
    的頭像 發表于 02-14 15:10 ?1814次閱讀
    <b class='flag-5'>OpenDaylight</b><b class='flag-5'>中</b>的YANG

    OpenDaylight的DataStore是什么

    SDN起源于校園網,發揚光大于數據中心,現廣泛用于廣域網,SDN控制器,可能管理著數十萬臺軟交換機,下發數百萬乃至上千萬條路由信息。因此,作為SDN控制器的開源項目OpenDaylight,無論是業務邏輯還是數據存儲,
    的頭像 發表于 02-14 15:13 ?1560次閱讀
    <b class='flag-5'>OpenDaylight</b><b class='flag-5'>中</b>的DataStore是什么

    OpenDaylight的RPC &amp; Notification是什么

    我們將介紹RPC和Notification,并從進程內外的通信開始,著重介紹遠程過程調用和發布-訂閱機制,然后分析MD-SAL的通信交互過程。
    的頭像 發表于 02-14 15:15 ?1006次閱讀
    <b class='flag-5'>OpenDaylight</b><b class='flag-5'>中</b>的RPC &amp; Notification是什么

    OpenDaylight的MD-SAL是什么

    一般情況下,軟件系統的研發分為需求獲取與分析、架構設計、代碼實現、系統發布、上線等階段。其中,架構設計可以細分為架構需求、分析、設計、文檔化、評審、修改和實現等過程,我們以簡化歸一,描述為:提供UI界面和消息接口服務,UI選擇B\S架構風格,消息可以是REST、SOAP以及AMQP等類型,數據庫采用關系型數據庫
    的頭像 發表于 02-14 15:17 ?1194次閱讀
    <b class='flag-5'>OpenDaylight</b><b class='flag-5'>中</b>的MD-SAL是什么

    基于OSGI的智能家庭系統的設計與實現

    電子發燒友網站提供《基于OSGI的智能家庭系統的設計與實現.pdf》資料免費下載
    發表于 10-27 10:41 ?0次下載
    基于<b class='flag-5'>OSGI</b>的智能家庭系統的設計與實現
    主站蜘蛛池模板: 午夜色婷婷 | 久久精品国产99国产精品免费看 | 97影院午夜在线观看视频 | 三级毛片免费观看 | 91精品国产91久久久久久青草 | 午夜肉伦伦影院 | 天堂资源在线8 | 狠狠色丁香婷婷第六色孕妇 | 看毛片网 | 久久青青成人亚洲精品 | 日本三级三级三级免费看 | 男人的天堂色偷偷 | 久久婷婷成人综合色 | 天堂资源在线bt种子8 | 日日摸夜夜添免费毛片小说 | 国产午夜精品理论片免费观看 | 日韩三级观看 | 毛片特黄 | 高清一级做a爱视频免费 | 四虎免费久久影院 | 一级一级18女人毛片 | 禁h粗大太大好爽好涨受不了了 | 女人精69xxxxxx | 亚洲video| 永久免费观看午夜视频在线 | 久久久久久久久女黄 | 午夜久久久久久久 | 最近2018年中文字幕在线 | 亚洲日本一区二区三区 | 亚洲综合在线一区 | 日本三级日产三级国产三级 | 四虎影院精品在线观看 | 中国毛茸茸bbxx | 久久中出 | 久久亚洲综合中文字幕 | 国模吧一区二区三区精品视频 | 久久男人视频 | 欧美成人午夜精品免费福利 | 五月天男人的天堂 | 伊人网在线免费视频 | 日本免费不卡视频一区二区三区 |