目录
1. 开发流程总述
1.1 Yang Tools
1.2 开发流程简介
2. 开发案例介绍
2.1 生成项目骨架
2.2 模块逻辑代码编写
2.3 模块功能测试
本小节默认已经搭建好开发环境,并且能够成功执行Controller源码编译,下面将用一个简单的HelloWord实例来介绍ODL应用开发过程。
在了解开发流程之前,我们首先已经认识了ODL的框架-OSGI,ODL的项目管理工具-Maven,ODL数据建模语言-YANG。除此之外,我们知道ODl是用java语言编写的,那么我们还需要了解一个重要的组件:Yang Tools。
主要功能包括将YANG模型转译为JAVA代码,将YANG模型转译为标准化节点的方式(类DOM树模型)和Java Binding方式。并提供了YANG数据模型与XML、JSON,以及Java Binding与标准节点格式间的序列化和反序列化支持。
其包括的YANG Maven Plugin所实现的Maven插件,可以在Maven构建生命周期中,基于YANG数据模型为其它组件生成Java代码(框架)。
(1)首先由YANG来定义数据模型。
(2)由Maven编译,在编译中会调用Yang Tools组件将Yang语言转换成Java的实现类和接口,生成Bundle的API部分。
(3)在上一步编译生成的接口和类中实现相应的业务逻辑。
(4)由Maven编译生成Bundle的主体部分plugin。
(5)最终将API和plugin部署到控制器中。
(1)在工作目录下由maven生成1.3.1-Carbon的项目骨架
执行以下命令:
mvn archetype:generate -DarchetypeGroupId=org.opendaylight.controller -DarchetypeArtifactId=opendaylight-startup-archetype -DarchetypeRepository=http://nexus.opendaylight.org/content/repositories/opendaylight.release -DarchetypeCatalog=remote -DarchetypeVersion=1.3.1-Carbon
(2)根据命令行提示,填写项目信息
Downloaded: https://nexus.opendaylight.org/content/repositories/public/org/opendaylight/controller/opendaylight-startup-archetype/1.3.1-Carbon/opendaylight-startup-archetype-1.3.1-Carbon.jar (28 KB at 30.6 KB/sec)
Define value for property 'groupId': com.mycompany.proj
Define value for property 'artifactId': traffic
[INFO] Using property: version = 0.1.0-SNAPSHOT
Define value for property 'package' com.mycompany.proj: :
Define value for property 'classPrefix' Traffic: :
Define value for property 'copyright': MyCompany
[INFO] Using property: copyrightYear = 2017 Confirm propertmvnies configuration:
groupId: com.mycompany.proj
artifactId: traffic
version: 0.1.0-SNAPSHOT
package: com.mycompany.proj
classPrefix: Traffic
copyright: MYCompany
copyrightYear: 2017
Y: : Y
(3)编译生成的项目
在新 生成的traffic项目目录下执行
mvn clean install -DskipTests
初次执行需要等待一段时间,执行完毕。
2.2.1 项目的目录结构介绍
• api/ yang模型文件目录
• artifacts/ 管理项目组件的坐标
• cli/ 命令行工具实现目录
• features/ feature组织
• impl/ 业务逻辑实现
• it/ 集成测试
• karaf/ 打包karaf版本
• pom.xml 根pom
2.2.2 编译生成IDEA工程
(1)在traffic目录下执行命令
mvn idea:idea
执行完成后,生成.ipr文件如图所示:
(2)使用IDEA打开traffic-aggregator.ipr文件,得到maven工程。
(3) 定义YANG模型
修改 api/src/main/yang/traffic.yang文件,添加一个rpc。修改内容如下:
rpc hello-world {
input {
leaf name {
type string;
}
}
output {
leaf greeting {
type string;
}
}
}
(4)编译生成API接口
编译YANG文件,这个过程会有Maven调用YangToller编译,最后生成Bundle的API接口。
进入api目录
cd /traffc/api
编译
mvn clean install -DskipTests
编译成功后,生成API接口。接下来就需要通过修改impl目录下的文件,来编译Bundle的主体内容,实现上面生成的接口。
编译成功提示:BUILD SUCCESS
(5)实现接口/实现业务逻辑
修改Java代码(impl/src/main/java/com/mycompany/proj/impl/TrafficProvider.java),注意红色部分。
public class TrafficProvider implements TrafficService {
...(省略内容)
public Future
> helloWorld(HelloWorldInput input) { HelloWorldOutputBuilder helloBuilder = new HelloWorldOutputBuilder();
helloBuilder.setGreeting("Hello " + input.getName());
return RpcResultBuilder.success(helloBuilder.build()).buildFuture();
}
(6)修改blueprint文件,注册生成新的Provider
文件路径:impl/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml
在文件中新加以下内容:
如图所示:
(7)修改traffic/POM.xml文件
(8)编译生成发布版本:
在/traffc 目录下执行:
mvn clean install -DskipTests
编译成功提示:
BUILD SUCCESS
(1)运行生成的traffic bundle
进入目录
cd traffic/karaf/target/assembly/bin
执行
./karaf
查看traffic是否在opendaylight中
list | grep traffic
运行成功提示以下内容:
(2)安装插件,用于浏览器登录:
feature:install odl-dlux-core
feature:install odl-mdsal-apidocs
feature:install odl-restconf-all
(3)使用谷歌浏览器登录
http://localhost:8181/index.html
密码/账户:admin admin
找到对应的traffic bundle,打开helloword rpc,在右侧界面点击FORM,输入字符串zswang,点击send。
得到返回结果:Hello zswang
如图所示:
至此,完成了第一个MD-SAL插件的开发。