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
全部0条评论
快来发表一下你的评论吧 !