OpenDayLight——HelloWorld

既然学习OpenDayLight编程这个鬼,就得像学语言一样来一个HelloWorld来试试水,经过几天的折腾,总算成功输出HelloWorld了,这里记录下整个过程以供后续参考。

一、实验环境描述

  本次实验是在win7 64位+8G内存环境下实现;java版本为1.8.0_131;maven版本为3.5.0;这些安装过程就不记录了!

二、构建项目

  1、执行如下命令构建项目;

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.0-Carbon

  

图 1

  2、按下回车后,一会屏幕中需要你输入一些如下信息,需要你输入的:

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

  如图2所示:

图 2

  3、输入完成后,按下回车等待片刻即可出现如下页面,则完成项目框架的生成:

图 3

  4、输入如下命令构建项目,命令第一次执行过程很长,笔者需要执行3个小时。执行成功后如图4所示

mvn clean install -DskipTests

  

图 4

三、添加HelloWorld RPC API

1、编辑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";
    }
    rpc hello-world {
        input {
            leaf name {
                type string;
            }
        }
        output {
            leaf greeting {
                type string;
            }
        }
    }
}

  增加完之后执行如下指令,生成相应的接口文件:

mvn clean install -DskipTests

  执行成功后,如图5所示:

图 5

修改如上的yang文件后,生成如下几个类

impl/src/main/java/org/opendaylight/hello/impl/helloProvider.java
impl/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml
api/target/classes/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/hello/rev150105/HelloService.java

2、绑定MD-SAL 

  在impl/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml中添加如下代码

<?xml version="1.0" encoding="UTF-8"?>
<!-- vi: set et smarttab sw=4 tabstop=4: -->
<!--
Copyright ? 2017 no 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.controller.md.sal.binding.api.DataBroker"
    odl:type="default" />

  <reference id="rpcRegistry"
             interface="org.opendaylight.controller.sal.binding.api.RpcProviderRegistry"/>

  <bean id="provider"
    class="org.opendaylight.hello.impl.helloProvider"
    init-method="init" destroy-method="close">
    <argument ref="dataBroker" />
    <argument ref="rpcRegistry" />
  </bean>

</blueprint>

  在impl/src/main/java/org/opendaylight/hello/impl/目录下新建HelloWorldImpl.java文件,代码如下,注释不可省略,否则编译报错:

/*
 * Copyright ? 2017 no 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 java.util.concurrent.Future;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.hello.rev150105.HelloService;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.hello.rev150105.HelloWorldInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.hello.rev150105.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{
    @Override
    public Future<RpcResult<HelloWorldOutput>> helloWorld(HelloWorldInput input) {
        HelloWorldOutputBuilder helloBuilder = new HelloWorldOutputBuilder();
        helloBuilder.setGreeting("Hello " + input.getName());
        return RpcResultBuilder.success(helloBuilder.build()).buildFuture();
    }
}

  在impl/src/main/java/org/opendaylight/hello/impl/目录下修改helloProvider文件,增加如下代码

/*
 * Copyright ? 2017 no 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.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RpcRegistration;
import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.hello.rev150105.HelloService;
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 final RpcProviderRegistry rpcProviderRegistry;
    private RpcRegistration<HelloService> serviceRegistration;

    public helloProvider(final DataBroker dataBroker, RpcProviderRegistry rpcProviderRegistry) {
        this.dataBroker = dataBroker;
        this.rpcProviderRegistry = rpcProviderRegistry;
    }

    /**
     * Method called when the blueprint container is created.
     */
    public void init() {
        serviceRegistration = rpcProviderRegistry.addRpcImplementation(HelloService.class, new HelloWorldImpl());
        LOG.info("helloProvider Session Initiated");
    }

    /**
     * Method called when the blueprint container is destroyed.
     */
    public void close() {
        serviceRegistration.close();
        LOG.info("helloProvider Closed");
    }
}

  

四、编译及验证

1、执行如下指令,对刚才所修改的代码进行编译

mvn clean install -DskipTests

2、编译完成后,启动OpenDayLight,如图6所示:

F:\OpenDayLight\hello\karaf\target\assembly\bin>karaf

  

图 6

3、在浏览器中输入如下地址(账号密码:admin\admin)

http://localhost:8181/apidoc/explorer/index.html

  显示如图7所示,找到新增的hello

图 7

4、双击hello栏,如图8显示

图 8

5、在Value中输入如下的值后,点击Try it out,返回如图9结果,即验证HelloWorld成功。

{"hello:input": { "name":"hello"}}

  

图 9

原文地址:https://www.cnblogs.com/grglym/p/8569585.html

时间: 2024-11-13 06:55:58

OpenDayLight——HelloWorld的相关文章

OpenDayLight(硼Boron版本)实战开发入门

   OpenDayLight(硼Boron版本)实战开发入门 OpenDayLight[1](简写为ODL)的硼Boron(0.5.0)版本于2016-09-16这几天刚刚发布.作为一款开源SDN网络控制器,依托于强大的社区支持以及丰富的功能特性,ODL成为了目前主流的SDN网络控制器开发平台.不仅为开发者提供了大量的网络管理功能,而且藉由AD-SAL(API驱动的服务层)和MD-SAL(模型驱动的服务层),给独立的网络应用提供了完善的二次开发接口.由于OpenDaylight架构的复杂性

Java小白入门学习笔记demo1输出helloworld

public class Hello{//公共   类     类名  public static void main(String[] args){ //     公共   静态  无返回值 主方法(字符串[] 参数)   System.out.println("helloworld"); //   系统.输出.打印换行(输出内容); // 输出语句,首字母必须大写,println为输出内容后自动换行,print输出内容不换行 }}

SpringBoot学习helloworld

这几天开始学习springBoot记录一下(Hello World) pom.xml 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.o

Egret 学习之 从HelloWorld项目开始 (二)

1,创建新项目HelloWorld ,可以在界面上点击文件->新建,也可以在命令行使用create: 2,src 目录,存放我们的代码.我们编写的代码都放在src目录下面. bin-debug 目录,项目编译和运行的debug目录,一般我们不要修改该目录下的内容. libs 目录,这里面存放我们的库文件,包括 Egret 核心库和其他扩展库.当然以后添加了第三方库的话也会放在这里. resource 目录,这里放置我们的资源文件,这里面有一个default.res.json 配置文件,用来配置资

HelloWorld 模块

helloworld.c 代码 1 #include <linux/init.h> 2 #include <linux/module.h> 3 4 MODULE_LICENSE("Dual BSD/GPL"); 5 6 static int hello_init(void) 7 { 8 printk(KERN_ALERT "Hello world\n"); 9 return 0; 10 } 11 12 static void hello_ex

struts2-(2)HelloWorld

1.环境配置 1).进入http://struts.apache.org/download.cgi#struts23241 下载 struts官方源码 2).解压,进入apps/struts2-blank/WEB-INF/lib/  拷贝安装包 3).加入struts.xml配置文件 4).找到配置文件关联文档,(为了让strtus.xml里面有提示) Window-->Prefrence-->XML-->XMLCatalog-->add Location-->struts-

第一个React程序HelloWorld

一.程序步骤 1.用React.createClass生成组件 2.调用React.render把组件渲染到页面中,dom的操作由react自动完成 二.代码 <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> &l

jquerymobile的helloworld

现在项目需要用jquerymobile做手机版,开发过程中都是边用边学,下班没什么事,就系统学习一下jquerymobile,顺便把学习过程记录一下. 编写jquerymobile代码时,需要先在官网上下载jquerymobile的整个压缩包,其中对于开发有作用的只有三个文件,其中分别是:jquery.min.js.jquery.mobile-1.4.5.min.css.jquery.mobile-1.4.5.min.js.helloworld的具体源码如下: <!DOCTYPE html>

Grails 基础环境搭建及HelloWorld

Grails 基础环境搭建及HelloWorld Grails的介绍: Grails 为您提供 Rails 风格的开发体验,同时以可靠的 Java 技术作为坚强后盾. 但是 Grails 不仅仅是 Rails 通往 Java 平台的简单入口.Grails 吸取了 Rails 的经验,并将它们与现代 Java 开发的意识相结合. 可以认为 Grails 是受 Rails 启发,而不是由 Rails 转化而来. Groovy 的威力 就像 Rails 与 Ruby 编程语言联系非常紧密一样,Grai