OpenDaylight(ODL)学习笔记
什么是OpenDaylight?
OpenDaylight是SDN开发及运行的一个平台。
OpenDaylight架构特点
- 基于OSGi的模块化设计
- 多南向协议-OpenFlow,Netconf,OVSDB…
- 模型驱动的业务抽象层(MD-SAL)是ODL的核心
- 全分布式的消息及存储机制
OSGi及Karaf
OSGi的概念
OSGi(Open Service Gateway Initiative,直译为“开放服务网关”),是一个以Java为技术平台的动态模块化规范。OSGi中规定如何定义一个模块以及模块之间如何交互,Java模块被称为Bundle,OSGi就是为了使Bundle能更好的被复用。
基于OSGi的应用是由一个个Bundle组成的,这些Bundle通过OSGi组织在一起,形成了一个系统。
OSGi框架
- 安全层
- 模块层
- 生命周期层
- 服务层
Bundle概念
OSGi如果说是Java的模块开发体系,Bundle就是模块。
Bundle间的依赖
OSGi中每个Bundle都有自己的类加载器,支持包级别的类导入和类导出,Bundle通过配置MANIFEST.MF,可以控制从Bundle导出的包,而没有导出的包则在Bundle外部是无法访问的。这样就完成了内部包和外部包的隔离。
Karaf
一个基于OSGi的运行环境,提供了一个轻量级的OSGi容器,可以用于部署各种组件和应用程序。
Karaf容器特点之Feature
一组Bundle,其具备特定的功能,简化了Bundle的部署。
ODL开发—Maven基础
Maven是现在Java社区中最强大的项目管理和项目构建工具。
核心
- 三套生命周期
- Clean :在进行真正的构建之前进行一些清理工作。
- Default:构建的核心部分,编译,测试,打包,部署等等。
- Site:生成项目报告,站点,发布站点。
每套生命周期都有一组阶段(Phase)组成,平时在命令行输入的命令总会对应于一个特定的阶段。
mvn clean install
进行项目的构建
Maven插件
- Maven的核心仅仅定义了抽象的生命周期,具体的任务是交给插件完成的,插件以独立的构件形式存在,Maven会在需要的时候下载并使用插件。
- 对于插件本身,为了能复用代码,它往往能完成多个任务。
- Maven的生命周期与插件相互绑定,用以完成实际的构建任务。具体而言,生命周期的阶段与插件的目标相互绑定,以完成某个具体的构建任务。
依赖管理
Maven要求每一个jar包明确定义自己的坐标,Maven就是通过这些坐标来查找管理这些jar包的。
- 依赖传递性:不需要考虑你依赖的库文件所需要依赖的库文件,能够将依赖模块的依赖自动的引入。
- 依赖的版本:就近原则,最靠近项目的版本
依赖范围
maven有三套classpath(编译,运行,测试)
- compile:编译依赖范围,在三个classpath都有效
- test:测试依赖范围,在编译和运行时有效
- provided:提供的依赖范围,在编译和测试的时候有效,在运行的时候无效。
- runtime:运行时的依赖范围,仅在测试和运行时有效。
- system:系统依赖范围,与provided范围一致,但是以来是通过系统变量来指定依赖,不利于移植。
- import:导入依赖范围,对三个classpath没有实际影响。
依赖范围影响传递性依赖:
假如A依赖于B,B依赖于C,那么A对于B为第一直接依赖,B对C为第二直接依赖,A对C为传递性依赖。
第一直接依赖和第二直接依赖的范围决定了传递性依赖的范围。
Maven仓库
Maven通过项目定义的坐标来管理这些依赖,而这些依赖的物理文件是通过Maven的仓库来统一管理的。
约定优于配置的原则
Maven有一套默认配置,使用者除非必要,不需要去修改那些约定内容。
ODL APP开发思路
OpenDaylight(ODL)学习笔记相关推荐
- odl自开发插件编译集成到发行版(opendaylight学习笔记二)
上一篇:opendaylinght内核插件开发简单实现(opendaylight学习笔记一) 1.下载发行版项目源码 git clone "https://git.opendaylight. ...
- OpenDaylight中MD-SAL学习笔记
1 前言 在学习OpenDaylight的过程中,总是遇到AD-SAL( API-Driven SAL)和MD-SAL(Model-Driven SAL)等概念.在努力查找资料学习之后,有了一点学习笔 ...
- VC++深入详解学习笔记
VC++深入详解学习笔记 Lesson1: Windows程序运行原理及程序编写流程 Lesson2: 掌握C++基本语法 Lesson3: MFC框架程序剖析 Lesson4: 简单绘图 Lesso ...
- Informatica学习笔记 .
Informatica学习笔记1:UPDATE AS INSERT 问: 要求实现每天抽取数据,而且是如果有改变才抽取更新,没有就不更新, 因为源表中有最后修改时间的字段,我让它 和SESSION上次 ...
- PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call
您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...
- 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程
暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...
- 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移
暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...
- 2020年Yann Lecun深度学习笔记(下)
2020年Yann Lecun深度学习笔记(下)
- 2020年Yann Lecun深度学习笔记(上)
2020年Yann Lecun深度学习笔记(上)
- 知识图谱学习笔记(1)
知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...
最新文章
- MySQL中使用LIMIT进行分页的方法
- 资深美术分享:游戏开发如何确定画风?
- 《精通J2EE网络编程》中讲的JNDI 6.2 使用JNDI
- 判断字符串相等能否用==
- php mongo sort -1出错,mongoDB排序引起的ERROR
- 在C#中创建DataTable
- ASP、JSP、PHP 三种技术比较
- 二次规划问题转换为半正定问题(QPtoSDP)
- mybatis 多表查询-多对多
- 自动驾驶软件开发人才现状_浅析自动驾驶的重要一环:感知系统发展现状与方向...
- Essential Netty in Action 《Netty 实战(精髓)》
- 夜神模拟器的安装和使用
- gvdp哪个工厂用_和汽车主机厂打交道,你不可不知这些英文缩写!实用!大伙速览速记!...
- 只有mdf文件和ldf文件--怎么恢复数据库
- python 数值型字符串实现四舍五入 decimal_Python将科学计数法数值转换为指定精度浮点数...
- 四种物联网卡计算模式
- 【免杀前置课——Windows编程】十、进程间通信(COPY_DATA通信,邮槽通信)、实现两进程通信(附代码)
- 组合专机-某车床连接座零件的工艺规程及机床夹具设计(说明书 CAD图纸 开题报告 工序卡……)
- 让群晖“文本编辑器”支持更多文件扩展名
- setTimeout 导致的浏览器假死
热门文章
- 工具-4:图片识别和音乐在线识别
- 【Gym 100015B】Ball Painting(DP染色)
- r语言实现岭回归_R语言回归篇
- 2021 Geek re
- 【直线检测】基于LSD实现直线检测含Matlab源码
- pycharm虚拟环境 更换interpreter
- android 状态栏高度多少像素,Android之获取屏幕的尺寸像素及获取状态栏标题栏高度...
- selenium中键盘操作:Keys类
- 【去哪儿旅行】产品分析报告
- Spring Security--基于注解访问控制 @Secured@PreAuthorize