0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

OpenDaylight的示例

汽車電子技術(shù) ? 來源:碼農(nóng)與軟件時代 ? 作者:碼農(nóng)與軟件時代 ? 2023-02-14 14:11 ? 次閱讀

OpenDaylight提供了一個例子:Toaster(烤面包機),借這個例子學(xué)習(xí)OpenDaylight的特性。在Toaster中,真正有關(guān)烤面包機相關(guān)的代碼較少,它只是一種OpenDaylight具體思想的展示品,已有相關(guān)文章對其進行了分析?,F(xiàn)在我們舉一個永恒的示例:Hello World。

一、應(yīng)用程序類型

OpenDaylight應(yīng)用程序開發(fā),分如下兩種:

(1)如果提供API接口能夠滿足當(dāng)前需求,那么只需基于REST API開發(fā)External System(外置式應(yīng)用程序);

(2)如果提供的API接口不能滿足當(dāng)前需求,則需要進行Internal System(內(nèi)置式應(yīng)用程序)的開發(fā),可以理解為插件。

二、應(yīng)用程序開發(fā)流程

對于External System來說,我們在介紹基于REST API編程時再進行介紹。下面我們來看下,Internal System的開發(fā)流程如下圖所示:

圖片

(1)生成項目骨架(Archetype)

Archetype是一個Maven項目模板工具包,使用Archetype來生成項目骨架,可以使得開發(fā)人員在開發(fā)新的應(yīng)用程序時,使用與ODL風(fēng)格一致的最佳實踐方法。

(2)定義模型(model)

YANG在OpenDaylight中做為建模語言使用,MD-SAL中M即是YANG。YANG的使用已不局限于NETCONF。YANG模型定義之后,通過YANG TOOLS可以自動生成部分代碼,但對于Model對應(yīng)的具體實現(xiàn)需要添加相關(guān)業(yè)務(wù)邏輯。

執(zhí)行mvn clean install -Dmaven.test.failure.ignore=true

圖片

(3)代碼實現(xiàn)

①實現(xiàn)Impl:添加業(yè)務(wù)邏輯(上圖藍色部分);

②配置blueprint.xml:xml文件定義和描述了不同組件的組裝,它是Blueprint編程模型的關(guān)鍵。規(guī)范描述了組件如何獲得實例,如何捆綁到一起形成一個運行模塊。

(4)構(gòu)建安裝

執(zhí)行 mvn clean install命令,可以將代碼打包并安裝到倉庫中。

圖片

(5)測試

OpenDaylight提供了API測試頁面,可以在該頁面直接進行API的測試,地址為:http://localhost:8181/apidoc/explorer/index.html

三、Hello示例

1.構(gòu)建Hello項目

步驟1 執(zhí)行構(gòu)建項目命令:

mvn archetype:generate -DarchetypeGroupId=org.opendaylight.controller -DarchetypeArtifactId=opendaylight-startup-archetype -DarchetypeRepository=http://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/ -DarchetypeCatalog=http://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/archetype-catalog.xml

輸入Hello交互信息

Define value for property 'groupId': org.opendaylight.hello

Define value for property 'artifactId': hello

[INFO] Using property: version = 0.1.0-SNAPSHOT

Define value for property 'package' org.opendaylight.hello: :

Define value for property 'classPrefix' Hello: : hello

Define value for property 'copyright': No

[INFO] Using property: copyrightYear = 2017

Confirm properties configuration:

groupId: org.opendaylight.hello

artifactId: hello

version: 0.1.0-SNAPSHOT

package: org.opendaylight.hello

classPrefix: hello

copyright: No

copyrightYear: 2017

Y: : Y

安裝成功的信息提示:

[INFO] ----------------------------------------------------------------------------

[INFO] Using following parameters for creating project from Archetype: opendaylight-startup-archetype:1.3.0-Carbon

[INFO] ----------------------------------------------------------------------------

[INFO] Parameter: groupId, Value: org.opendaylight.hello

[INFO] Parameter: artifactId, Value: hello

[INFO] Parameter: version, Value: 0.1.0-SNAPSHOT

[INFO] Parameter: package, Value: org.opendaylight.hello

[INFO] Parameter: packageInPathFormat, Value: org/opendaylight/hello

[INFO] Parameter: classPrefix, Value: hello

[INFO] Parameter: package, Value: org.opendaylight.hello

[INFO] Parameter: version, Value: 0.1.0-SNAPSHOT

[INFO] Parameter: copyright, Value: No

[INFO] Parameter: groupId, Value: org.opendaylight.hello

[INFO] Parameter: artifactId, Value: hello

[INFO] Parameter: copyrightYear, Value: 2017

[WARNING] Don't override file D:\\CODE\\odlexample\\hello\\hello\\pom.xml

[INFO] Project created from Archetype in dir: D:\\CODE\\odlexample\\hello\\hello

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time: 45.526 s

步驟2. 構(gòu)建Hello項目,執(zhí)行命令

mvn clean install -Dmaven.test.failure.ignore=true

[INFO] --- maven-site-plugin:3.6:attach-descriptor (generate-site) @ hello-aggregator ---

[INFO] Attaching 'src\\site\\site.xml' site descriptor with classifier 'site'.

[INFO] ------------------------------------------------------------------------

[INFO] Reactor Summary:

[INFO]

[INFO] ODL :: org.opendaylight.hello :: hello-api ......... SUCCESS [ 19.565 s]

[INFO] ODL :: org.opendaylight.hello :: hello-impl ........ SUCCESS [ 8.826 s]

[INFO] ODL :: org.opendaylight.hello :: hello-cli ......... SUCCESS [ 8.878 s]

[INFO] ODL :: org.opendaylight.hello :: hello-features .... SUCCESS [15:41 min]

[INFO] ODL :: org.opendaylight.hello :: hello-karaf ....... SUCCESS [ 41.676 s]

[INFO] ODL :: org.opendaylight.hello :: hello-artifacts ... SUCCESS [ 1.794 s]

[INFO] ODL :: org.opendaylight.hello :: hello-it .......... SUCCESS [03:38 min]

[INFO] hello .............................................. SUCCESS [ 23.209 s]

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time: 21:07 min

生成的項目骨架為:

圖片

生成的代碼文件為:

圖片

2.定義模型

步驟1 修改 api/src/main/yang/hello.yang,增加簡單的Hello RPC信息:

圖片

步驟2 執(zhí)行命令:mvn clean install -Dmaven.test.failure.ignore=true

圖片

3.代碼實現(xiàn)

步驟1 實現(xiàn)Impl:

圖片

步驟2 配置blueprint.xml

在文件impl-blueprint.xml( src/main/resources/org/opendaylight/blueprint)注冊RPC引用,增加粗體部分信息。

圖片

注:在 Blueprint XML 中,bean 元素將定義一個 bean 管理器。用于對象構(gòu)造的參數(shù)由 argument 元素指定;注入的屬性則由 property 子元素指定。property 元素指定要注入的屬性的名稱和值。屬性名與 Java 類中的 setter 方法名對應(yīng)。例如,如果屬性名為 foo,那么對應(yīng)的 setter 方法為 setFoo(arg)。屬性名和對應(yīng)的 setter 方法名遵循 JavaBeans 規(guī)范中定義的屬性設(shè)計模式。

步驟3 類HelloProvider中init方法中綁定HelloService和HelloWorldImpl

圖片

4.構(gòu)建安裝、啟動測試

步驟1 執(zhí)行命令 mvn clean install

步驟2 啟動OpenDaylight

\\CODE\\odlexample\\hello\\hello\\karaf\\target\\assembly\\bin>karaf

Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=256M; support was removed in 8.0

Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512M; support was removed in 8.0

Apache Karaf starting up. Press Enter to open the shell now...

100% [========================================================================]

Karaf started in 29s. Bundle stats: 294 active, 294 total

步驟3 瀏覽器打開如下地址(admin\\admin):

http://localhost:8181/apidoc/explorer/index.html

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1461

    瀏覽量

    61492
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3521

    瀏覽量

    93271
  • REST
    +關(guān)注

    關(guān)注

    0

    文章

    32

    瀏覽量

    9387
收藏 人收藏

    評論

    相關(guān)推薦

    Matlab繪圖示例

    Matlab繪圖示例
    發(fā)表于 05-10 10:07 ?798次閱讀

    ChipScope使用示例

    Xilinx FPGA工程例子源碼:ChipScope使用示例
    發(fā)表于 06-07 14:13 ?7次下載

    設(shè)計示例

    六設(shè)計示例
    的頭像 發(fā)表于 05-29 11:10 ?1156次閱讀
    設(shè)計<b class='flag-5'>示例</b>

    NanDAC+mbed示例

    NanDAC+mbed示例
    發(fā)表于 03-23 09:32 ?10次下載
    NanDAC+mbed<b class='flag-5'>示例</b>

    示例SigmaStudio程序

    示例SigmaStudio程序
    發(fā)表于 03-23 18:25 ?15次下載
    <b class='flag-5'>示例</b>SigmaStudio程序

    華為游戲服務(wù)示例代碼教程案例

    概述 游戲服務(wù)kit安卓示例代碼集成了華為游戲服務(wù)的眾多API,提供了示例代碼程序供您參考和使用,下面是對示例代碼不同包的描述。 achievement: 成就特性的示例代碼。 arc
    發(fā)表于 04-11 11:09 ?4次下載

    如何從零開始學(xué)OpenDaylight

    OpenDaylight的邏輯架構(gòu)分為應(yīng)用層、控制器層和數(shù)據(jù)轉(zhuǎn)發(fā)層。其中,應(yīng)用層聚焦網(wǎng)絡(luò)業(yè)務(wù)邏輯開發(fā),負責(zé)資源編排;控制器層進行全局網(wǎng)絡(luò)的管理;數(shù)據(jù)轉(zhuǎn)發(fā)層為各種網(wǎng)絡(luò)設(shè)備,負責(zé)數(shù)據(jù)的轉(zhuǎn)發(fā)。
    的頭像 發(fā)表于 02-14 14:04 ?1829次閱讀
    如何從零開始學(xué)<b class='flag-5'>OpenDaylight</b>

    OpenDaylight的運行環(huán)境

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

    OpenDaylight中的OSGi

    從寫單個類的打印Hello World小程序到OSGi模塊化開發(fā),確實存在較大的難度,本文將從模塊化、OSGI模型以及OSGI在OpenDaylight中的應(yīng)用等方面進行介紹。
    的頭像 發(fā)表于 02-14 15:05 ?678次閱讀
    <b class='flag-5'>OpenDaylight</b>中的OSGi

    OpenDaylight中的DataStore是什么

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

    軟件示例:DA1468x 示例設(shè)置

    軟件示例:DA1468x 示例設(shè)置
    發(fā)表于 03-13 20:15 ?0次下載
    軟件<b class='flag-5'>示例</b>:DA1468x <b class='flag-5'>示例</b>設(shè)置

    教程 5:BLE 安全示例

    教程 5:BLE 安全示例
    發(fā)表于 03-15 20:34 ?0次下載
    教程 5:BLE 安全<b class='flag-5'>示例</b>

    Vivado HDL編寫示例

    Vivado 軟件提供了HDL編寫中常用的示例,旨在幫助初學(xué)者更好地理解和掌握HDL編程,這里分享一下verilog代碼示例
    的頭像 發(fā)表于 05-16 16:58 ?883次閱讀

    軟件示例:DA1468x 示例設(shè)置

    軟件示例:DA1468x 示例設(shè)置
    發(fā)表于 07-05 18:59 ?0次下載
    軟件<b class='flag-5'>示例</b>:DA1468x <b class='flag-5'>示例</b>設(shè)置

    自己編寫函數(shù)示例代碼很難嗎?分享幾個示例!

    Q A 問: Arduino Uno的函數(shù)示例 我決定自己編寫函數(shù)示例代碼,因為這應(yīng)該是Arduino中的基本示例。網(wǎng)絡(luò)上確實有關(guān)于使用函數(shù)的文檔,但是,如果要嘗試使用代碼環(huán)境,則必須得訪問
    的頭像 發(fā)表于 11-16 16:05 ?405次閱讀
    自己編寫函數(shù)<b class='flag-5'>示例</b>代碼很難嗎?分享幾個<b class='flag-5'>示例</b>!