什么是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开发思路