0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OpenDaylight的示例

汽车电子技术 来源:码农与软件时代 作者:码农与软件时代 2023-02-14 14:11 次阅读

OpenDaylight提供了一个例子:Toaster(烤面包机),借这个例子学习OpenDaylight的特性。在Toaster中,真正有关烤面包机相关的代码较少,它只是一种OpenDaylight具体思想的展示品,已有相关文章对其进行了分析。现在我们举一个永恒的示例:Hello World。

一、应用程序类型

OpenDaylight应用程序开发,分如下两种:

(1)如果提供API接口能够满足当前需求,那么只需基于REST API开发External System(外置式应用程序);

(2)如果提供的API接口不能满足当前需求,则需要进行Internal System(内置式应用程序)的开发,可以理解为插件。

二、应用程序开发流程

对于External System来说,我们在介绍基于REST API编程时再进行介绍。下面我们来看下,Internal System的开发流程如下图所示:

图片

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

Archetype是一个Maven项目模板工具包,使用Archetype来生成项目骨架,可以使得开发人员在开发新的应用程序时,使用与ODL风格一致的最佳实践方法。

(2)定义模型(model)

YANG在OpenDaylight中做为建模语言使用,MD-SAL中M即是YANG。YANG的使用已不局限于NETCONF。YANG模型定义之后,通过YANG TOOLS可以自动生成部分代码,但对于Model对应的具体实现需要添加相关业务逻辑。

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

图片

(3)代码实现

①实现Impl:添加业务逻辑(上图蓝色部分);

②配置blueprint.xml:xml文件定义和描述了不同组件的组装,它是Blueprint编程模型的关键。规范描述了组件如何获得实例,如何捆绑到一起形成一个运行模块。

(4)构建安装

执行 mvn clean install命令,可以将代码打包并安装到仓库中。

图片

(5)测试

OpenDaylight提供了API测试页面,可以在该页面直接进行API的测试,地址为:http://localhost:8181/apidoc/explorer/index.html

三、Hello示例

1.构建Hello项目

步骤1 执行构建项目命令:

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. 构建Hello项目,执行命令

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 执行命令:mvn clean install -Dmaven.test.failure.ignore=true

图片

3.代码实现

步骤1 实现Impl:

图片

步骤2 配置blueprint.xml

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

图片

注:在 Blueprint XML 中,bean 元素将定义一个 bean 管理器。用于对象构造的参数由 argument 元素指定;注入的属性则由 property 子元素指定。property 元素指定要注入的属性的名称和值。属性名与 Java 类中的 setter 方法名对应。例如,如果属性名为 foo,那么对应的 setter 方法为 setFoo(arg)。属性名和对应的 setter 方法名遵循 JavaBeans 规范中定义的属性设计模式。

步骤3 类HelloProvider中init方法中绑定HelloService和HelloWorldImpl

图片

4.构建安装、启动测试

步骤1 执行命令 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

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • API
    API
    +关注

    关注

    2

    文章

    1384

    浏览量

    61000
  • 编程
    +关注

    关注

    88

    文章

    3441

    浏览量

    92424
  • REST
    +关注

    关注

    0

    文章

    32

    浏览量

    9358
收藏 人收藏

    评论

    相关推荐

    ChipScope使用示例

    Xilinx FPGA工程例子源码:ChipScope使用示例
    发表于 06-07 14:13 7次下载

    基于Arduino无驱动板程序示例

    基于Arduino无驱动板程序示例
    发表于 12-17 21:16 2次下载

    设计示例

    六设计示例
    的头像 发表于 05-29 11:10 1030次阅读
    设计<b class='flag-5'>示例</b>

    示例SigmaStudio程序

    示例SigmaStudio程序
    发表于 03-23 18:25 15次下载
    <b class='flag-5'>示例</b>SigmaStudio程序

    华为游戏服务示例代码教程案例

    概述 游戏服务kit安卓示例代码集成了华为游戏服务的众多API,提供了示例代码程序供您参考和使用,下面是对示例代码不同包的描述。 achievement: 成就特性的示例代码。 arc
    发表于 04-11 11:09 4次下载

    如何从零开始学OpenDaylight

    OpenDaylight的逻辑架构分为应用层、控制器层和数据转发层。其中,应用层聚焦网络业务逻辑开发,负责资源编排;控制器层进行全局网络的管理;数据转发层为各种网络设备,负责数据的转发。
    的头像 发表于 02-14 14:04 1209次阅读
    如何从零开始学<b class='flag-5'>OpenDaylight</b>

    OpenDaylight的运行环境

    OpenDaylight作为一种开源的SDN控制器,使用Java语言编写,
    的头像 发表于 02-14 14:08 507次阅读
    <b class='flag-5'>OpenDaylight</b>的运行环境

    OpenDaylight中的OSGi

    从写单个类的打印Hello World小程序到OSGi模块化开发,确实存在较大的难度,本文将从模块化、OSGI模型以及OSGI在OpenDaylight中的应用等方面进行介绍。
    的头像 发表于 02-14 15:05 495次阅读
    <b class='flag-5'>OpenDaylight</b>中的OSGi

    OpenDaylight中的DataStore是什么

    SDN起源于校园网,发扬光大于数据中心,现广泛用于广域网,SDN控制器,可能管理着数十万台软交换机,下发数百万乃至上千万条路由信息。因此,作为SDN控制器的开源项目OpenDaylight,无论是业务逻辑还是数据存储,
    的头像 发表于 02-14 15:13 1006次阅读
    <b class='flag-5'>OpenDaylight</b>中的DataStore是什么

    软件示例:DA1468x 示例设置

    软件示例:DA1468x 示例设置
    发表于 03-13 20:15 0次下载
    软件<b class='flag-5'>示例</b>:DA1468x <b class='flag-5'>示例</b>设置

    教程 5:BLE 安全示例

    教程 5:BLE 安全示例
    发表于 03-15 20:34 0次下载
    教程 5:BLE 安全<b class='flag-5'>示例</b>

    如何在代码V中使用示例模型

    CODE V 示例模型可以在 SolvNetPlus 知识库中找到。每个示例模型都包含一个 PDF 文档,其中解释了您将学习的功能、描述示例模型,并提供了使用示例模型的分步说明。
    的头像 发表于 05-24 14:47 423次阅读
    如何在代码V中使用<b class='flag-5'>示例</b>模型

    软件示例:DA1468x 示例设置

    软件示例:DA1468x 示例设置
    发表于 07-05 18:59 0次下载
    软件<b class='flag-5'>示例</b>:DA1468x <b class='flag-5'>示例</b>设置

    博途PLC示例: 间接寻址的示例简析

    在以下示例中,可以使用下标访问来自不同存储区的三个变量。
    的头像 发表于 08-17 17:21 2820次阅读
    博途PLC<b class='flag-5'>示例</b>: 间接寻址的<b class='flag-5'>示例</b>简析

    自己编写函数示例代码很难吗?分享几个示例

    Q A 问: Arduino Uno的函数示例 我决定自己编写函数示例代码,因为这应该是Arduino中的基本示例。网络上确实有关于使用函数的文档,但是,如果要尝试使用代码环境,则必须得访问
    的头像 发表于 11-16 16:05 223次阅读
    自己编写函数<b class='flag-5'>示例</b>代码很难吗?分享几个<b class='flag-5'>示例</b>!