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
+关注
关注
2文章
1556浏览量
63333 -
编程
+关注
关注
88文章
3674浏览量
94711 -
REST
+关注
关注
0文章
33浏览量
9565
发布评论请先 登录
华为游戏服务示例代码教程案例
如何从零开始学OpenDaylight

OpenDaylight中的OSGi

OpenDaylight中的DataStore是什么

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


硬件原理图学习笔记
这一个星期认真学习了硬件原理图的知识,做了一些笔记,方便以后查找。硬件原理图分为三类1.管脚类(gpio)和门电路类输入输出引脚,上拉电阻,三极管与门,或门,非门上拉电阻:正向标志作用,给悬空的引脚一个确定的状态三极管:反向三极管(gpio输出高电平,NP两端导通,被控制端导通,电压为0)->NPN正向三极管(gpio输出低电平,PN两端导通,被控制端导通,

TurMass™ vs LoRa:无线通讯模块的革命性突破
TurMass™凭借其高传输速率、强大并发能力、双向传输、超强抗干扰能力、超远传输距离、全国产技术、灵活组网方案以及便捷开发等八大优势,在无线通讯领域展现出强大的竞争力。

RZT2H CR52双核BOOT流程和例程代码分析
RZT2H是多核处理器,启动时,需要一个“主核”先启动,然后主核根据规则,加载和启动其他内核。本文以T2H内部的CR52双核为例,说明T2H多核启动流程。

干簧继电器在RF信号衰减中的应用与优势
在电子测试领域,RF(射频)评估是不可或缺的一部分。无论是研发阶段的性能测试,还是生产环节的质量检测,RF测试设备都扮演着关键角色。然而,要实现精准的RF评估,测试设备需要一种特殊的电路——衰减电路。这些电路的作用是调整RF信号的强度,以便测试设备能够准确地评估RF组件和RF电路的各个方面。衰减器的挑战衰减器的核心功能是校准RF信号的强度。为了实现这一点,衰

ElfBoard嵌入式教育科普|ADC接口全面解析
当代信息技术体系中,嵌入式系统接口作为数据交互的核心基础设施,构成了设备互联的神经中枢。基于标准化通信协议与接口规范的技术架构,实现了异构设备间的高效数据交换与智能化协同作业。本文选取模数转换接口ADC作为技术解析切入点,通过系统阐释其工作机理、性能特征及重要参数,为嵌入式学习者爱好者构建全维度接口技术认知框架。

深入理解C语言:C语言循环控制
在C语言编程中,循环结构是至关重要的,它可以让程序重复执行特定的代码块,从而提高编程效率。然而,为了避免程序进入无限循环,C语言提供了多种循环控制语句,如break、continue和goto,用于改变程序的执行流程,使代码更加灵活和可控。本文将详细介绍这些语句的作用及其应用场景,并通过示例代码进行说明。Part.1break语句C语言中break语句有两种

第 21 届(顺德)家电电源与智能控制技术研讨会圆满落幕--其利天下斩获颇丰
2025年4月25日,其利天下应大比特之邀出席第21届(顺德)家电电源与智能控制技术研讨会,已圆满落幕。一、演讲回顾我司研发总监冯建武先生在研讨会上发表了主题为《重新定义风扇驱动:一套算法兼容百种电机的有效磁链观测器方案》的演讲,介绍了我司研发自适应技术算法(简称),该方案搭载有效磁链观测器,适配百种电机类型,结合FOC算法可实现免调参稳定启动、低速静音控制

来自资深工程师对ELF 2开发板的产品测评
来自资深工程师对ELF 2开发板的使用测评

飞凌嵌入式2025嵌入式及边缘AI技术论坛圆满结束
飞凌嵌入式「2025嵌入式及边缘AI技术论坛」在深圳深铁皇冠假日酒店盛大举行,此次活动邀请到了200余位嵌入式技术领域的技术专家、企业代表和工程师用户,共享嵌入式及边缘AI技术的盛宴!

常用运放电路总结记录
一、电压跟随器电压跟随器,电路图如下:电路分析:(本文所有的运放电路分析,V+表示运放同向输入端的电压,V-表示反向输入端的电压。)1.1电压跟随器反馈电阻需不需要?在上面的电压跟随器示例中,我画上了一个反馈电阻R99,大家在学习的运放的时候,可能很多地方也会提一下这个反馈电阻,很多地方会说可加可不加,效果一样。电阻需不需要加:但是本文这里个人建议使用电压跟

运放-运算放大器经典应用电路大全-应用电路大全-20种经典电路
20种运放典型电路总结,电路图+公式1、运放的符号表示2、集成运算放大器的技术指标(1)开环差模电压放大倍数(开环增益)大Ao(Ad)=Vo/(V±V-)=107-1012倍;(2)共模抑制比高KCMRR=100db以上;(3)输入电阻大ri>1MW,有的可达100MW以上;(4)输出电阻小ro=几W-几十W3、集成运放分析方法(V+=V-虚短,ib-=ib

RDK X3新玩法:超沉浸下棋机器人开发日记
一、项目介绍产品中文名:超沉浸式智能移动下棋机器人产品英文名:Hackathon-TTT产品概念:本项目研发的下棋机器人,是一款能自主移动、具备语音交互并能和玩家在真实的棋盘上进行“人机博弈”的移动下棋平台,能够带给对弈者如同真人对弈的完美沉浸式体验——棋开得胜团队。该智能下棋机器人具备3个显著优点:真实棋盘棋子对弈:通过使用真实棋子、棋盘和机械臂,给对弈者

芯对话 | 微处理器监控电路革新:CBM70X系列 重构系统可靠性
总述在工业自动化、消费电子、汽车电子等领域,微处理器作为系统核心,其稳定运行依赖可靠的电源监控。据统计,65%的系统故障源于电源异常——工业控制设备因电压波动导致的停机频率每月平均达3.2次,便携式设备因电池管理不当造成的续航缩水普遍超过25%,汽车电子ECU因电源扰动引发的误判率在复杂工况下高达18%。传统监控方案的三大核心痛点极端电压适应性不足:当电压低

喜讯!米尔电子与安路科技达成IDH生态战略合作,共筑FPGA创新生态
以芯为基,智创未来。近日,领先的嵌入式模组厂商-米尔电子正式与国产FPGA企业安路科技达成IDH生态战略合作。双方将围绕安路科技飞龙SALDRAGON系列高性能FPSoC,联合开发核心板、开发板及行业解决方案,助力开发者开发成功,加速工业控制、边缘智能、汽车电子等领域的创新应用落地。米尔电子&安路科技IDH生态合作证书硬核技术+生态协同安路科技作为

FOC控制算法详解
一、基本概念:FOC(field-orientedcontrol)为磁场导向控制,又称为矢量控制(vectorcontrol),是一种利用变频器(VFD)控制三相电机的技术,利用调整变频器的输出频率、输出电压的大小及角度,来控制电机的输出。由于处理时会将三相输出电流及电压以矢量来表示,因此称为矢量控制。二、控制原理:FOC控制的其实是电机的电磁场方向。转子的
评论