什么是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框架

OpenDalight架构特点 opendaylight框架大致包括_Java

  • 安全层
  • 模块层
  • 生命周期层
  • 服务层

Bundle概念
OSGi如果说是Java的模块开发体系,Bundle就是模块。
Bundle间的依赖
OSGi中每个Bundle都有自己的类加载器,支持包级别的类导入和类导出,Bundle通过配置MANIFEST.MF,可以控制从Bundle导出的包,而没有导出的包则在Bundle外部是无法访问的。这样就完成了内部包和外部包的隔离。


Karaf
一个基于OSGi的运行环境,提供了一个轻量级的OSGi容器,可以用于部署各种组件和应用程序。

OpenDalight架构特点 opendaylight框架大致包括_Java_02


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为传递性依赖。

第一直接依赖和第二直接依赖的范围决定了传递性依赖的范围。

OpenDalight架构特点 opendaylight框架大致包括_maven_03


Maven仓库

Maven通过项目定义的坐标来管理这些依赖,而这些依赖的物理文件是通过Maven的仓库来统一管理的。


约定优于配置的原则
Maven有一套默认配置,使用者除非必要,不需要去修改那些约定内容。

ODL APP开发思路

OpenDalight架构特点 opendaylight框架大致包括_生命周期_04