截止目前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相关推荐

  1. 全球SDN测试认证中心发布OpenDaylight测试报告

    随着软件定义网络(Software Defined Network, SDN)商业部署速度地加快,关乎整个SDN 网络性能表现的控制平面核心组件--SDN 控制器也越来越成为网络用户关心的焦点.日前, ...

  2. SAP Netweaver 7.4 SR2 Application Java Installation

    记录一下SAP Netweaver 7.4 Support Release 2 Application Server Java的安装过程. 一.下载 写本文时,SAP Netweaver 7.4 SR ...

  3. 【译】OpenDaylight控制器:YANG Schema和Model

    1. Schema 定义 绑定无关数据模式(BI Data Schema)描述了模块提供的数据结构.过程和通知. 该Schema基于YANG,但是为更好地适应Java类系统并支持Controller用 ...

  4. OpenDayLight Helium实验三 OpenDaylight二层转发机制实验

    本文基于OpenDaylight二层转发机制实验 而成 在SDN网络中,处于末端的主机并不知道其连接的网络是SDN,某台主机要发送数据包到另一台主机,仍然需要进行IP到MAC地址的ARP解析.SDN网 ...

  5. 从零开始学OpenDaylight(碳版本)之三:Hello示例

    本文源自:https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL:Startup_Project_Archetype par ...

  6. 运维调试记录:Opendaylight铍版本开发环境搭建流程

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/zhaobryant/article/details/73609021 一.系统环境 Ubuntu 1 ...

  7. SDN控制器OpenDaylight简介—VeCloud

    2013年,Linux Foundation联合思科.Juniper和 Broadcom等多家网络设备商创立了开源项目 Open Daylight,它的发起者和赞助商多为设备厂商而非运营商等网络设备消 ...

  8. 思科谈OpenDaylight

    为什么80%的码农都做不了架构师?>>>    虽然依旧能在市场上看到思科的可扩展网络控制器(XNC),但是你可能已经注意到思科在最近的一段时间内,一直在谈论其开放SDN控制器(替代 ...

  9. Eclipse旧版本Luna SR2(版本4.4.2)下载地址

    eclipse luna SR2版本下载(4.4.2) http://www.eclipse.org/downloads/download.php?file=/technology/epp/downl ...

  10. spring-cloud Finchley.SR2版本 升级微服务到springboot 2.0

    2019独角兽企业重金招聘Python工程师标准>>> 读书笔记 spring-cloud Finchley.SR2版本 升级微服务到springboot 2.0 贴码云 https ...

最新文章

  1. Tensorflow 自动文摘: 基于Seq2Seq+Attention模型的Textsum模型
  2. mysql日志是什么格式_Mysql日志的三种格式
  3. 对抗攻击公开课第二弹来啦,真题演练 + 代码实战
  4. Django从理论到实战(part3)--创建一个Django项目
  5. 基于REACT和.NET CORE集成WINDOWS身份验证
  6. Linux中source是什么指令?
  7. 酷狗笔试题:补齐左括号(栈)
  8. C++多线程的简单例子
  9. esp8266 继电器接线图_esp8266控制继电器问题(通电瞬间继电器吸合断开一次)
  10. 有时候,一个人也挺好
  11. 学以致提高学生操作计算机能力,学用结合,学以致用
  12. 初等函数导数公式 ,积分表
  13. [转载 蓝韦巍]类似浩方、VS对战平台系统的实现
  14. c语言msgbox函数,msgbox函数的返回值类型为什么
  15. TopBase_Knowledge_Graph
  16. outlook如何撤回邮件?(中英文)
  17. Chamfer Distance--倒角距离
  18. anaconda3 复制or克隆环境
  19. 随机优化中的样本均值近似方法
  20. FFmpeg进阶:音视频滤镜概述

热门文章

  1. 09年拜年短信100
  2. 人工智能来袭,银行柜台你还去吗
  3. 数据结构3:时间复杂度计算举例
  4. mybatis 事务开启
  5. 使用matlab对sinc函数进行最小二乘拟合仿真
  6. 重学音视频?认识 MP4 视频(下)
  7. oracle 归档日期,Oracle中归档日期满报错解决方法
  8. Synchronized锁升级、降级
  9. excel两张表格数据整合
  10. 计算机办公软件的使用技巧,计算机办公软件使用技巧