OpenDaylight的示例

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

插针版排针版STM32F429IGT6核心板
到达6G需要什么?为什么一定要超越5G?
如何选择合适的机器视觉检测设备厂家
中国移动宽带用户访问互联网平均速率同比上年同期提升11.9%
深度测评风光370 1.5L
OpenDaylight的示例
煤气管道腐蚀原因及解决方案
全新“视”界,all in 阿丘|VisionChina 上海站邀请函
MMKP82电容器的全称是什么?
中兴通讯发布新一代全屋光纤组网系列产品
中国电信宣布从9月1日起将在全国范围内停售达量限速版畅享套餐
《新能源汽车推广应用推荐车型目录》发布 动力电池或迎来抢装潮
虹科分享 | 数据泄露的剖析
探讨5G行业新标准 Soitec再次出席第七届SOI产业高峰论坛
拓展军用与航空领域 高性能MEMS有哪些苛刻要求?
直流伺服调速电机基本结构
用于音频功放的过温保护电路设计
英特尔正式推出第四代酷睿Haswell处理器
“福禄克早间知识讲堂”微信号上线啦
据报告,2月国内市场5G手机出货量超1500万部