opendaylight hello solium-sr2
截止目前2021年8月,opendaylight已经发布了氢hydrogen版本、硅silicon版本等10多个版本。氖neon版本之前,ODL的java版本为8系列,氖neon版本之后为java11版本。考虑到java的版权问题,考虑使用java8版本。
hello project
参考教程Developing Apps on the OpenDaylight controller
第一部分 获取项目框架
1.首先将https://github.com/opendaylight/odlparent/setting.xml文件拷贝到本地maven仓库目录下。
2.项目框架生成命令,1.1.3为neon-sr3版本(真实是1.2.2版本,solium-sr2版本(java-8))
mvn archetype:generate -DarchetypeGroupId=org.opendaylight.archetypes -DarchetypeArtifactId=opendaylight-startup-archetype -DarchetypeCatalog=remote -DarchetypeVersion=1.1.3
3.输入项目坐标属性
Define value for property 'groupId': : org.opendaylight.hello
Define value for property 'artifactId': : hello
Define value for property 'version': 1.0-SNAPSHOT: : 1.0.0-SNAPSHOT
Define value for property 'package': org.opendaylight.hello: :
Define value for property 'classPrefix':
Define value for property 'copyright': : chyi
4.编译
cd hello
mvn clean install -DskipTests -Dcheckstyle.skip
5.运行
cd karaf\target\assembly\bin
.\karaf.bat
6.使用eclipse导入hello代码(File->import->existing maven project)
添加helloworld rpc API
7.修改文件api/src/main/yang/hello.yang
代码如下:
module hello {yang-version 1;namespace "urn:opendaylight:params:xml:ns:yang:hello";prefix "hello";revision "2015-01-05" {description "Initial revision of hello model";}//add snippetrpc hello-world {input {leaf name {type string;}}output {leaf greeting {type string;}}}//add end
}
在hello/api
目录下使用命令mvn clean install -DskipTests -Dcheckstyle.skip
编译,odl会基于这个yang文件生成相应的接口函数,下面实现接口函数
8.在目录impl/src/main/java/org/opendaylight/hello/impl/
下创建文件HelloWorldImpl.java
,内容如下:
package org.opendaylight.hello.impl;import com.google.common.util.concurrent.ListenableFuture;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.hello.rev180517.HelloService;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.hello.rev180517.HelloWorldInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.hello.rev180517.HelloWorldOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.hello.rev150105.HelloWorldOutputBuilder;
import org.opendaylight.yangtools.yang.common.RpcResult;
import org.opendaylight.yangtools.yang.common.RpcResultBuilder;public class HelloWorldImpl implements HelloService {@Overridepublic ListenableFuture<RpcResult<HelloWorldOutput>> helloWorld(HelloWorldInput input) {HelloWorldOutputBuilder helloBuilder = new HelloWorldOutputBuilder();helloBuilder.setGreeting("Hello " + input.getName());return RpcResultBuilder.success(helloBuilder.build()).buildFuture();}
}
9.在目录impl/src/main/java/org/opendaylight/hello/
修改文件HelloProvider.java
内容如下:
/** Copyright © 2018 chyi and others. All rights reserved.** This program and the accompanying materials are made available under the* terms of the Eclipse Public License v1.0 which accompanies this distribution,* and is available at http://www.eclipse.org/legal/epl-v10.html*/
package org.opendaylight.hello.impl;import org.opendaylight.mdsal.binding.api.DataBroker;
import org.opendaylight.mdsal.binding.api.RpcProviderService;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.hello.rev180517.HelloService;
import org.opendaylight.yangtools.concepts.ObjectRegistration;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class HelloProvider {private static final Logger LOG = LoggerFactory.getLogger(HelloProvider.class);private final DataBroker dataBroker;private ObjectRegistration<HelloService> helloService;private RpcProviderService rpcProviderService;public HelloProvider(final DataBroker dataBroker, final RpcProviderService rpcProviderService) {this.dataBroker = dataBroker;this.rpcProviderService = rpcProviderService;}/*** Method called when the blueprint container is created.*/public void init() {LOG.info("HelloProvider Session Initiated");helloService = rpcProviderService.registerRpcImplementation(HelloService.class, new HelloWorldImpl());}/*** Method called when the blueprint container is destroyed.*/public void close() {LOG.info("HelloProvider Closed");if (helloService != null) {helloService.close();}}
}
10.在hello/impl目录下使用命令mvn clean install -DskipTests -Dcheckstyle.skip
编译impl,再在hello目录下使用同样的命令编译整个工程。
11.编译成功后,运行程序
cd hello\karaf\target\assembly\bin
.\karaf.bat
第三部分 测试与解决问题
12.使用postman(chrome浏览器)下发http://localhost:8181/restconf/operations/hello:hello-world
下发rpc请求,内容为{"input":{"name":"lalala"}}
,但是返回失败。
13.使用命令log:dispaly|grep --ignore-case hello
查询到当前运行错误Unable to find a matching constructor on class org.opendaylight.hello.impl.HelloProvider
。
通过查找到资料Opendaylight Hello World RPC throw “Unable to find a matching constructor” error以及,Missing Dependency for OpenDaylight controller app (Sodium SR1),分析得知,错误是由于没有修改blueprint.xml文件导致无法注册helloprovider新的构造函数导致的。
修改\impl\src\main\resources\OSGI-INF\blueprint.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!-- vi: set et smarttab sw=4 tabstop=4: -->
<!--
Copyright © 2018 chyi and others. All rights reserved.This program and the accompanying materials are made available under the
terms of the Eclipse Public License v1.0 which accompanies this distribution,
and is available at http://www.eclipse.org/legal/epl-v10.html
-->
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0"odl:use-default-for-reference-types="true"><reference id="dataBroker"interface="org.opendaylight.mdsal.binding.api.DataBroker"odl:type="default" /><reference id="RpcProvider"interface="org.opendaylight.mdsal.binding.api.RpcProviderService"odl:type="default" /><bean id="provider"class="org.opendaylight.hello.impl.HelloProvider"init-method="init" destroy-method="close"><argument ref="dataBroker" /><argument ref="RpcProvider" /></bean></blueprint>
这里修改了三个地方,一是dataBroker的interface,将md.sal
修改为了mdsal
;二是添加了RpcProvider
的reference;三是添加了provider的argument RpcProvider
。
14.重复步骤10-12,得到的结果如下:
opendaylight hello solium-sr2相关推荐
- 全球SDN测试认证中心发布OpenDaylight测试报告
随着软件定义网络(Software Defined Network, SDN)商业部署速度地加快,关乎整个SDN 网络性能表现的控制平面核心组件--SDN 控制器也越来越成为网络用户关心的焦点.日前, ...
- SAP Netweaver 7.4 SR2 Application Java Installation
记录一下SAP Netweaver 7.4 Support Release 2 Application Server Java的安装过程. 一.下载 写本文时,SAP Netweaver 7.4 SR ...
- 【译】OpenDaylight控制器:YANG Schema和Model
1. Schema 定义 绑定无关数据模式(BI Data Schema)描述了模块提供的数据结构.过程和通知. 该Schema基于YANG,但是为更好地适应Java类系统并支持Controller用 ...
- OpenDayLight Helium实验三 OpenDaylight二层转发机制实验
本文基于OpenDaylight二层转发机制实验 而成 在SDN网络中,处于末端的主机并不知道其连接的网络是SDN,某台主机要发送数据包到另一台主机,仍然需要进行IP到MAC地址的ARP解析.SDN网 ...
- 从零开始学OpenDaylight(碳版本)之三:Hello示例
本文源自:https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL:Startup_Project_Archetype par ...
- 运维调试记录:Opendaylight铍版本开发环境搭建流程
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/zhaobryant/article/details/73609021 一.系统环境 Ubuntu 1 ...
- SDN控制器OpenDaylight简介—VeCloud
2013年,Linux Foundation联合思科.Juniper和 Broadcom等多家网络设备商创立了开源项目 Open Daylight,它的发起者和赞助商多为设备厂商而非运营商等网络设备消 ...
- 思科谈OpenDaylight
为什么80%的码农都做不了架构师?>>> 虽然依旧能在市场上看到思科的可扩展网络控制器(XNC),但是你可能已经注意到思科在最近的一段时间内,一直在谈论其开放SDN控制器(替代 ...
- Eclipse旧版本Luna SR2(版本4.4.2)下载地址
eclipse luna SR2版本下载(4.4.2) http://www.eclipse.org/downloads/download.php?file=/technology/epp/downl ...
- spring-cloud Finchley.SR2版本 升级微服务到springboot 2.0
2019独角兽企业重金招聘Python工程师标准>>> 读书笔记 spring-cloud Finchley.SR2版本 升级微服务到springboot 2.0 贴码云 https ...
最新文章
- Tensorflow 自动文摘: 基于Seq2Seq+Attention模型的Textsum模型
- mysql日志是什么格式_Mysql日志的三种格式
- 对抗攻击公开课第二弹来啦,真题演练 + 代码实战
- Django从理论到实战(part3)--创建一个Django项目
- 基于REACT和.NET CORE集成WINDOWS身份验证
- Linux中source是什么指令?
- 酷狗笔试题:补齐左括号(栈)
- C++多线程的简单例子
- esp8266 继电器接线图_esp8266控制继电器问题(通电瞬间继电器吸合断开一次)
- 有时候,一个人也挺好
- 学以致提高学生操作计算机能力,学用结合,学以致用
- 初等函数导数公式 ,积分表
- [转载 蓝韦巍]类似浩方、VS对战平台系统的实现
- c语言msgbox函数,msgbox函数的返回值类型为什么
- TopBase_Knowledge_Graph
- outlook如何撤回邮件?(中英文)
- Chamfer Distance--倒角距离
- anaconda3 复制or克隆环境
- 随机优化中的样本均值近似方法
- FFmpeg进阶:音视频滤镜概述