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

编程

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分