0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OpenDaylight中的OSGi

汽车电子威廉希尔官方网站 来源:码农与软件时代 作者:码农与软件时代 2023-02-14 15:05 次阅读

从写单个类的打印Hello World小程序到OSGi模块化开发,确实存在较大的难度,本文将从模块化、OSGI模型以及OSGI在OpenDaylight中的应用等方面进行介绍。

一、模块化

我们学习Java语言时,最初写的程序便是在控制台打印Hello World,此时,我们写的代码放在一个类中;慢慢地,我们编写的代码需要放在几个的类时,我们就要考虑如何设计类与类之间的关系,你需要面向对象的设计原则和模式;工作中我们要做一个小项目,就可能涉及到数百个类了,我们会根据不同的业务职责将这些类进行逻辑上的划分,分隔不同的小模块,每个小模块赋予相应的职责,也就是将一个系统分解为多个较小的互相协作的单元,并设定单元之间的边界来改善系统的维护性和封装性。大致过程如下图①②③所示:

图片

至目前为止,我们所做的事情是对类进行了逻辑的包装,而实质上并没有对类进行物理隔离。通常情况下,软件在初始构建时,并不是很复杂,但随着时间的推移、业务特性的增加、不规范的代码调用以及为赶进度而忽略架构的设计,就使得软件变得复杂起来,甚至极难维护。如同双11爆仓时凌乱不勘的场景:

图片

图片来自互联网

那么如何降低软件的复杂性呢?生活中的货物运输或许是一个很好的借鉴例子,我们将零散的货物打包在一起,形成封闭的空间;然后,通过标准的接口装载到集装箱运输船。

图片

事实上,早在1972年国际软件工程大师David Parnas在《On the Criteria To Be Used in Decomposing Systems into Modules》一文中就提出了模块化编程的思想:“每项任务构成一个独立的、特有的程序模块。实现时,每个模块及其输入/输出都有确定含义的......系统以模块化的方式进行维护”,其实质就是软件模块划分应该以基于信息隐藏为目的,以职责划分为手段,从而封装变化。联想到集装箱的例子,软件的模块可以类比为集装箱,如下图所示:

图片

我们现在正式介绍软件模块,在《Java应用架构设计 模式与OSGI》一书中进行了描述:软件模块是可部署的、可管理的、原生可重用的、可组合的、无状态的软件单元,它为用户提供了简洁的接口。

①可部署:模块是一个独立的部署单元,它能够与其他软件模块共处。EAR、WAR以及JAR文件。

②可管理:在运行时,模块可以进行安装、卸载以及更新。实体样例:EAR、WAR以及JAR文件。

③原生可调用:模块总是原生可调用的。也就是说,模块暴露的操作是通过直接调用方法触发的。

④可组合:一般指的是粗粒度的模块是由细粒度的模块组成的。

⑤无状态:特定版本的模块只会存在一个实例。

由前面的分析可知,Java模块化支持局限于细粒度的面向对象支持,需要有更高抽象粒度的模块。OSGi便是Java模块化需求其中一个解决方案。

一、OSGi

  1. 什么是OSGi?

OSGi(Open Services Gateway initiative,开放服务网关协议)是由 1999 年成立的 OSGi 联盟提出的一个开放的服务规范,最早用于嵌入式设备。在2004年,Eclipse发布于基于OSGi的运行时模型,把 Equinox 作为底层运行平台。借助于Eclipse,OSGi在商业化软件企业中得到广泛的关注。现已广泛应用于移动设备、桌面应用以及企业应用服务器。

  1. OSGi框架

OSGi框架是应用的执行环境。OSGi框架规范定义了OSGi的行为,现已有Apache Felix、Eclipse Equinox以及Knopflerfish等多个开源实现。OSGi的分层架构如下:

图片

模块层定义了模块,称为Bundle,体现为一个JAR文件,由类文件、资源文件和MANIFEST.MF组成。和普通的jar文件唯一不同的就是MANIFEST.MF文件的内容,基本上都是标识Bundle的属性,Import-Package声明了请求JAR文件中的代码所需要的外部包。其文件样例为:

图片

生命周期层定义了动态安装和管理Bundle,即可以在框架中安装和卸载bundle,而不需要重启应用进程。

服务层定义了面向服务的应用编程模型,涉及面向服务的发布、查找和绑定交互模式:服务提供者将服务发布到服务注册中心,然后服务请求者通过搜索服务注册中心,查找可供使用的服务。这种机制称为VM中的SOA。事实上,服务就是Java接口。

图片

3.OSGi生态

图片

4.Bundle交互

了解了OSGi基础知识后,我们来看下Bundle交互的实现方式:

(1) Export和Import:即通过Package的Export和Import来进行。服务提供者Bundle对外Export自己的package,而服务请求者则根据业务需要Import外部的Package;

(2) service:服务提供者Bundle对外提供Service,而服务请求者查找Service。而提供Service的方式又有:

①通过BundleContext(Bundle上下文)来提供和获取;

②通过Declarative Service来实现;

③通过Blueprint来实现;

在这里,我们重点介绍第3种方式--Blueprint。Blueprint提供一个依赖注入框架来实现OSGI,并在OSGI Compendium R4.2里被OSGI组织标准化。Blueprint的强大之处在于即具有Spring强大且非侵入性的企业级编程模型又具有OSGi的动态性、模块化的特性。

Bundle间的交互使用类似Spring Bean的方式配置定义,Blueprint的XML文件定义和描述不同Bundle的组装。一个简单的Blueprint示例如下:

图片

XML文件的命名空间标识blueprint 1.0.0版本。顶级的blueprint元素标识XML文件作为一个blueprint模块来定义;reference元素标识从OSGi服务注册中心为组件获得一个服务;bean元素标识与Spring Bean相同的含义。

一、OSGi在OpenDaylight中的应用

Java模块化的局限和OSGi框架的模块化标签,使得Java和OSGi走在了一起,进而增加了Java模块化开发的能力。

作为SDN控制器,OpenDaylight使用了Java语言编写,SDN控制器本身的功能与协议繁多导致了其子项目众多,如何更好地按需动态加载所需的项目成为威廉希尔官方网站 选型的一个重要因素。而OSGi的如下特性也使得其在OpenDaylight中发挥很大的作用:

①将一个程序打包成逻辑上独立的JAR文件,并且只部署那些某个安装所需要的部分。

②将一个程序打包成逻辑中独立的JAR文件,声明哪些代码可以被其他JAR文件访问,并且强调可见性。

③为程序提供一个插件式的扩展机制。OSGi模块化特别适合提供强大的扩展机制,包括支持执行时的动态性。

OpenDaylight采用了OSGi框架之后,那开发一个应用程序的流程又是怎样的呢?下面给出一般方法:

①根据应用的业务场景设计Bundle,并设计Bundle的服务;

②使用IDE实现Bundle,配置Blueprint容器XML文件;

③打包和部署Bundle的JAR文件;

④启动类似Karaf之类的部署环境,并根据业务需要安装Bundle。

事实上,OpenDaylight不仅采用了OSGi框架,而且还使用了Apache Karaf这个企业级容器,下篇文章我们将探讨Apache Karaf的基础知识。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模块化
    +关注

    关注

    0

    文章

    331

    浏览量

    21344
  • 模型
    +关注

    关注

    1

    文章

    3229

    浏览量

    48813
  • 小程序
    +关注

    关注

    1

    文章

    234

    浏览量

    12127
收藏 人收藏

    评论

    相关推荐

    SDK-3.7.0-7 Eclipse IDE无法启动

    :Or.Eclipse。SWT。在Org.Eclig.OsGi.Neal.Looul.BuleleLoAD.FIDCaseCype(BuleleLoADER,Java:432)在
    发表于 12-21 15:18

    如何正确的在电脑上安装Atollic TrueStudio软件呢?

    !MESSAGE 操作系统信息:Windows 10、10.0、x86!ENTRY org.eclipse.osgi 4 0 2022-04-06 15:16:21.056!MESSAGE 自动激活
    发表于 12-09 08:45

    为什么无法在Windows上将STM32CubeIDE从1.6.0更新到1.6.1?

    ,operand=,action=)。未找到包含以下内容的存储库:osgi.bundle、com.st.stm32cube.common.mx、6.2.1.202103241236未找到包含以下内容
    发表于 12-27 08:17

    基于OSGI家庭网关的多媒体系统设计

    随着家庭网络威廉希尔官方网站 和多媒体威廉希尔官方网站 的飞速发展,如何实现数字家庭多媒体服务智能化和人性化已成为当今研究的热点。本文介绍一种基于OSGI家庭网关和UPNP AV架构扩展的媒体共享系统
    发表于 02-26 13:48 18次下载

    基于OSGI的智能家庭系统设计

    为了解决普适环境下智能家庭各类设备组网困难的问题,本系统采用OSGi(Open Service Gateway Initiative)服务框架和LonWorks现场总线威廉希尔官方网站 ,利用低压电力线载波手段来设计和实现智能家庭系统。
    发表于 04-28 10:36 35次下载
    基于<b class='flag-5'>OSGI</b>的智能家庭系统设计

    OSGi原理与最佳实践_王昊

    本书基于作者多年使用0SGi的经验而编写,涵盖了0SGi从/kfqN深入的知识体系,从OSGi的简介开始,介绍OSGi的作用及基本概念;其后进入OSGi实战,结合实例讲解如何基于OSGi
    发表于 12-23 15:35 0次下载
    <b class='flag-5'>OSGi</b>原理与最佳实践_王昊

    如何从零开始学OpenDaylight

    OpenDaylight的逻辑架构分为应用层、控制器层和数据转发层。其中,应用层聚焦网络业务逻辑开发,负责资源编排;控制器层进行全局网络的管理;数据转发层为各种网络设备,负责数据的转发。
    的头像 发表于 02-14 14:04 2202次阅读
    如何从零开始学<b class='flag-5'>OpenDaylight</b>

    OpenDaylight的运行环境

    OpenDaylight作为一种开源的SDN控制器,使用Java语言编写,
    的头像 发表于 02-14 14:08 831次阅读
    <b class='flag-5'>OpenDaylight</b>的运行环境

    什么是OpenDaylight的Maven

    构建的实质是将我们编写的Java源文件、XML配置文件、HTML页面、CSS和JS文件等,通过某种方式组合在一起,变为可对外服务项目的过程。同时,构建过程很多都是没有威廉希尔官方网站 含量且重复的工作,手工操作很无趣且太麻烦。
    的头像 发表于 02-14 15:02 1048次阅读
    什么是<b class='flag-5'>OpenDaylight</b>的Maven

    OpenDaylight的Karaf

    Karaf是一个现代的、多种形态的(polymorphic),轻量的、强大的、经过OSGI认证的企业级容器。这里的多种形态指的是它能够容纳各种应用,诸如OSGi、Spring、war等等。单从OSGi的角度来说,Karaf是
    的头像 发表于 02-14 15:08 1721次阅读
    <b class='flag-5'>OpenDaylight</b><b class='flag-5'>中</b>的Karaf

    OpenDaylight的YANG

    YANG是和NETCONF相伴而生的,而NETCONF作为网络管理协议,包含安全传输层、消息层、操作层和内容层,其中内容层没有标准化,操作层允许自定义RPC,而这两者的标准化建模就是由YANG来完成的。
    的头像 发表于 02-14 15:10 1697次阅读
    <b class='flag-5'>OpenDaylight</b><b class='flag-5'>中</b>的YANG

    OpenDaylight的DataStore是什么

    SDN起源于校园网,发扬光大于数据中心,现广泛用于广域网,SDN控制器,可能管理着数十万台软交换机,下发数百万乃至上千万条路由信息。因此,作为SDN控制器的开源项目OpenDaylight,无论是业务逻辑还是数据存储,
    的头像 发表于 02-14 15:13 1483次阅读
    <b class='flag-5'>OpenDaylight</b><b class='flag-5'>中</b>的DataStore是什么

    OpenDaylight的RPC &amp; Notification是什么

    我们将介绍RPC和Notification,并从进程内外的通信开始,着重介绍远程过程调用和发布-订阅机制,然后分析MD-SAL的通信交互过程。
    的头像 发表于 02-14 15:15 954次阅读
    <b class='flag-5'>OpenDaylight</b><b class='flag-5'>中</b>的RPC &amp; Notification是什么

    OpenDaylight的MD-SAL是什么

    一般情况下,软件系统的研发分为需求获取与分析、架构设计、代码实现、系统发布、上线等阶段。其中,架构设计可以细分为架构需求、分析、设计、文档化、评审、修改和实现等过程,我们以简化归一,描述为:提供UI界面和消息接口服务,UI选择B\S架构风格,消息可以是REST、SOAP以及AMQP等类型,数据库采用关系型数据库
    的头像 发表于 02-14 15:17 1128次阅读
    <b class='flag-5'>OpenDaylight</b><b class='flag-5'>中</b>的MD-SAL是什么

    基于OSGI的智能家庭系统的设计与实现

    电子发烧友网站提供《基于OSGI的智能家庭系统的设计与实现.pdf》资料免费下载
    发表于 10-27 10:41 0次下载
    基于<b class='flag-5'>OSGI</b>的智能家庭系统的设计与实现