SDN-OpenDaylight(Solium版本)应用开发入门HelloWorld_sodium版本的网页显示feature什么组件

  • Ubuntu 18.04
  • JDK1.8
  • Maven 3.6.3
  • postman

maven setting设置

cp -n ~/.m2/settings.xml{,.orig} ; wget -q -O - https://raw.githubusercontent.com/opendaylight/odlparent/master/settings.xml > ~/.m2/settings.xml

参考资料

HelloWorld官方文档

Win10版(成功)

创建项目

打开cmd,进入IDEA的工作空间目录,运行以下命令

mvn archetype:generate -DarchetypeGroupId=org.opendaylight.archetypes -DarchetypeArtifactId=opendaylight-startup-archetype -DarchetypeCatalog=remote -DarchetypeVersion=1.2.2

创建项目

填写项目信息

Define value for property 'groupId': 项目组名,小写,例如,org.opendaylight.helloworld
Define value for property 'artifactId': : 项目名,小写,例如,helloworld
Define value for property 'version':  Sodium没有让用户选择
Define value for property 'package':  包名,例如,org.opendaylight.helloworld
Define value for property 'classPrefix':  前缀,${artifactId.substring(0,1).toUpperCase()}${artifactId.substring(1)}
Define value for property 'copyright': 版权信息,Copyright (c) 2015 Yoyodyne, Inc.

耗时将近3小时…

项目创建成功

编译启动

根目录下(例如,helloworld/)运行以下命令

mvn clean install -DskipTests -Dmaven.javadoc.skip=true -Dcheckstyle.skip=true

耗时20分钟…

编译成功

修改setenv文件中的环境变量

设置JAVA_HOME

运行成功

修改yang文件

使用IDEA打开项目,打开helloworld.yang,添加代码如下

修改后的yang文件

rpc hello-world {
        input {
            leaf name {
                type string;
            }
        }
        output {
            leaf greeting {
                type string;
            }
        }
    }

编译api

编译api

耗时31秒…

编译成功

绑定MD-SAL

打开impl-blueprint.xml,添加代码如下

绑定ms-sal

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

    <argument ref="rpcRegistry" />

实现RPC

在impl文件夹下新建HelloWorldImpl.java,添加代码如下

HelloWorldImpl.java

package org.opendaylight.helloworld.impl;

import com.google.common.util.concurrent.ListenableFuture;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.helloworld.rev180517.HelloWorldInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.helloworld.rev180517.HelloWorldOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.helloworld.rev180517.HelloWorldOutputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.helloworld.rev180517.HelloworldService;
import org.opendaylight.yangtools.yang.common.RpcResult;
import org.opendaylight.yangtools.yang.common.RpcResultBuilder;


public class HelloWorldImpl implements HelloworldService {
    @Override
    public ListenableFuture<RpcResult<HelloWorldOutput>> helloWorld(HelloWorldInput input) {
        HelloWorldOutputBuilder helloBuilder = new HelloWorldOutputBuilder();
        helloBuilder.setGreeting("Hello,"+input.getName());
        return RpcResultBuilder.success(helloBuilder.build()).buildFuture();
    }
}

修改HelloworldProvide.java,添加如下代码

HelloworldProvide.java

/*
 * Copyright © 2018 Copyright (c) 2015 Yoyodyne, Inc. 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.helloworld.impl;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.helloworld.rev180517.HelloworldService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HelloworldProvider {

    private static final Logger LOG = LoggerFactory.getLogger(HelloworldProvider.class);
    private final DataBroker dataBroker;
    private final RpcProviderRegistry rpcProviderRegistry;
    private BindingAwareBroker.RpcRegistration<HelloworldService> serviceRpcRegistration;

    public HelloworldProvider(final DataBroker dataBroker, final RpcProviderRegistry rpcProviderRegistry) {
        this.dataBroker = dataBroker;
        this.rpcProviderRegistry  = rpcProviderRegistry;
    }
    /**
     * Method called when the blueprint container is created.
     */
    public void init() {
        serviceRpcRegistration = rpcProviderRegistry.addRpcImplementation(HelloworldService.class,new HelloWorldImpl());
        LOG.info("HelloworldProvider Session Initiated");
    }
    /**
     * Method called when the blueprint container is destroyed.
     */
    public void close() {
        serviceRpcRegistration.close();
        LOG.info("HelloworldProvider Closed");
    }
}

再次编译

再次进入根目录下(例如,helloworld/)编译整个项目,编译命令和之前的一样,耗时2分钟…

再次编译

结果

标题

错误及解决办法

HelloWorldImpl出错

错误

错误提示

解决办法:将Future改为ListenableFuture,修改IDEA关于OSGI的检查

setting中修改

Linux版(未得到预期结果)

先别照着做,博主还没有得到预期效果,有些错误。

创建项目

这里选择的是Sodium-SR2版本

mvn archetype:generate -DarchetypeGroupId=org.opendaylight.archetypes -DarchetypeArtifactId=opendaylight-startup-archetype \
-DarchetypeCatalog=remote -DarchetypeVersion=1.2.2

接下来你需要填写项目信息。

Define value for property 'groupId': 项目组名,小写,例如,org.opendaylight.helloworld
Define value for property 'artifactId': : 项目名,小写,例如,helloworld
Define value for property 'version':  Sodium没有让用户选择
Define value for property 'package':  包名,例如,org.opendaylight.example
Define value for property 'classPrefix':  前缀,${artifactId.substring(0,1).toUpperCase()}${artifactId.substring(1)}
Define value for property 'copyright': 版权信息,Copyright (c) 2015 Yoyodyne, Inc.

填写项目信息

构建项目成功

项目目录含义

目录

项目目录及文件含义
| 文件名 | 功能 |
| api | Yang模型目录 |
| artifacts | 项目组件坐标管理 |
| cli | 部署的配置文件 |
| features | feature(组件)的组织管理目录 |
| impl | 业务逻辑代码目录 |
| it | 集成测试目录 |
| karaf | karaf打包目录 |
| pom.xml | maven项目的基本信息描述文件 |

api目录下的.yang文件

artifacts目录下的pom.xml文件

还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!

王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。

对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!

【完整版领取方式在文末!!】

93道网络安全面试题

内容实在太多,不一一截图了

黑客学习资源推荐

最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

😝朋友们如果有需要的话,可以联系领取~

1️⃣零基础入门
① 学习路线

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

image

② 路线对应学习视频

同时每个成长路线对应的板块都有配套的视频提供:

image-20231025112050764

2️⃣视频配套工具&国内外网安书籍、文档
① 工具

② 视频

image1

③ 书籍

image2

资源较为敏感,未展示全面,需要的最下面获取

在这里插入图片描述在这里插入图片描述

② 简历模板

在这里插入图片描述

因篇幅有限,资料较为敏感仅展示部分资料,添加上方即可获取👆

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值