OSGI:简述对OSGI的认识_王小二(海阔天空)的博客-程序员宝宝_osgi是什么

技术标签: SDN软件定义网络  OSGI  

OSGI:简述对OSGI的认识


一、OSGI的概念

OSGI(Open Service Gateway Initiative,直译为“开放服务网关”)实际上是一个由OSGi联盟(OSGi Alliance)发起的以Java为技术平台的动态模块化规范

OSGi联盟是由Sun Microsystems、IBM、Ericsson等公司于1999年3月成立的一个世界性的开放标准化组织,最初的名称为Connected Alliance。最初的OSGi规范也只是关注于嵌入式领域,前三个版本的OSGi规范主要满足诸如机顶盒、服务网关、手机等应用环境的模块化需求。从第四个版本开始,OSGi将主要关注点转向了Java SE和EE领域,并且在这些领域中获得了很大的发展,成为Java平台事实上的模块化规范。

随着OSGi技术的不断发展,OSGi联盟的成员数量已经由最开始的几个增长到目前超过100个,很多世界著名的IT企业都加入到OSGi的阵营之中,如Adobe、IBM、Oracle、SAP、RedHat和Siemens等。它们推出的许多产品都支持OSGi技术,甚至产品本身就使用了OSGi技术构建,例如IBM的WebSphere、Lotus和JAZZ,Oracle的GlassFish和Weblogic,RedHat的JBoss,Eclipse基金会的Eclipse IDE、Equinox及之下的众多子项目,Apache基金会的Karaf、Aries、Geronimo、Felix及之下的众多子项目等。这些IT巨头的踊跃参与,也从侧面证明了OSGi技术有着非常广阔的市场前景。

今天,OSGi的已经不再是原来Open Service Gateway Initiative的字面意义能涵盖的了,OSGi联盟给出的最新OSGi定义是The Dynamic Module System for Java,即面向Java的动态模块化系统

OSGI的架构图如下:
在这里插入图片描述

二、OSGI的功能

以一个简单开的开发场景作说明:假设我们使用SSM框架来开发我们的Web项目,我们做产品设计和开发的时候都是分模块的,我们分模块的目的就是实现模块之间的“解耦”,更进一步的目的是方便对一个项目的控制和管理。我们对一个项目进行模块化分解之后,我们就可以把不同模块交给不同的开发人员来完成开发,然后项目经理把大家完成的模块集中在一起,然后拼装成一个最终的产品。一般我们开发都是这样的基本情况。

在开发过程中,模块之间还要彼此保持联系,比如A模块要从B模块拿到一些数据,而B模块可能要调用C模块中的一些方法(除了公共底层的工具类之外)。

最后,我们要把最终的项目部署到tomcat或者jBoss的服务器中。那么我们启动服务器的时候,能不能关闭项目的某个模块或功能呢?很明显是做不到的,一旦服务器启动,所有模块就要一起启动,都要占用服务器资源,所以关闭不了模块,假设能强制拿掉,就会影响其它的功能。

以上就是我们传统模块式开发的一些局限性。

软件开发一直在追求一个境界,就是模块之间的真正“解耦”、“分离”,这样我们在软件的管理和开发上面就会更加的灵活,甚至包括给客户部署项目的时候都可以做到更加的灵活可控。但是我们以前使用SSM等架构模式进行产品开发的时候我们是达不到这种要求的。

所以OSGI的技术规范应运而生。现在的OSGI技术就可以满足我们之前所说的境界:在不同的模块中做到彻底的分离,而不是逻辑意义上的分离,是物理上的分离,也就是说在运行部署之后都可以在不停止服务器的时候直接把某些模块拿下来,其他模块的功能也不受影响。

现在主流的一些应用服务器,Oracle的weblogic服务器,IBM的WebSphere,JBoss,还有Sun公司的glassfish服务器,都对OSGI提供了强大的支持,都是在OSGI的技术基础上实现的。

简单点说,OSGI被设计专门用来开发可分解为功能模块的复杂的Java应用。 OSGI提供以下优势:

  1. 可以动态地安装、卸载、启动、停止不同的应用模块,而不需要重启容器。
  2. 在同一时刻可以跑多个同一个应用模块的实例。
  3. OSGI在SOA领域提供成熟的解决方案,包括嵌入式,移动设备和富客户端应用等。

参考:

  1. https://blog.csdn.net/u013851082/article/details/70214881
  2. https://www.cnblogs.com/zhaoxinshanwei/p/8376696.html
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_29229567/article/details/88534277

智能推荐

codeup|问题 B: 特殊排序_不要秃头、的博客-程序员宝宝

题目描述输入一系列整数,将其中最大的数挑出,并将剩下的数进行排序。输入输入第一行包括1个整数N,1<=N<=1000,代表输入数据的个数。接下来的一行有N个整数。输出可能有多组测试数据,对于每组数据,第一行输出一个整数,代表N个整数中的最大值,并将此值从数组中去除,将剩下的数进行排序。第二行将排序的结果输出。样例输入 Copy55 3 2 4 1样例输出 Copy51 2 3 4提示如果数组中只有一个数,当第一行将其输出后,第二行请输出"-1"。代码#incl

CSAW 2020 Quals: 栈溢出与 ROP_江下枫的博客-程序员宝宝

题目:roppity类型:pwn、栈溢出、rop、got 覆写

canal应用一:基于mysql binlog的日志解析工具_°Fuhb的博客-程序员宝宝_binlog解析工具 阿里

文章目录前言mysql 配置canal 下载安装canal client前言canal 是阿里巴巴开发的MySQL数据实时同步工具,基于binlog增量日志解析,提供了增量数据订阅和消费功能。canal 允许将订阅到的 mysql 增量日志,同步到 mysql、kafka、elasticsearch 等等mysql 配置对于自建 MySQL , 需要先开启 Binlog 写入功能,配置 binlog-format 为 ROW 模式,my.cnf 中配置如下[mysqld]log-bin=

roscore报错: ‘ascii’ codec can’t decode byte 0xe6 in position 13: ordinal not in range(128)_万俟淋曦的博客-程序员宝宝

零、问题描述使用ROS是,执行roscore报一下错误:‘ascii’ codec can’t decode byte 0xe6 in position 13: ordinal not in range(128)The traceback for the exception was written to the log file一、解决方法ROS工作空间的目录中不予许有中文,一般国内使用...

管理File Geodatabase和Personal Geodatabase_aofang1856的博客-程序员宝宝

虽然对File Geodatabase和Personal Geodatabase的管理任务很少,但是还是有些管理任务是很重要的,“附件一”为两种数据库需要的管理工作。 Compressing与Compacting所表示的含义与操作是不同的。 对于File Geodatabase来说,Compressing与Smart Data Compression(SDC)采用相同的...

hexo搭建博客(三)_风knew的博客-程序员宝宝

title: 使用hexo搭建博客(三)date: 2020-02-03 13:40:59tags: hexo,blogcategories: 教程部署发行项目前言这篇文章是基于你已经注册了github账号和创建了对应的仓库,通过配置ssh来建立连接创建Repository创建一个Repository,名称规则为username.github.name然后编辑hexo的配置文...

随便推点

Android 返回键不退出应用,关闭应用不退出;_Choi晨的博客-程序员宝宝_安卓系统怎么不退出

@Override public void onBackPressed() {// super.onBackPressed(); Intent intent = new Intent(Intent.ACTION_MAIN); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); ...

垃圾回收GC_金正则的博客-程序员宝宝

/** * 什么是垃圾:内存中已经不再被使用的空间。 * 如何判断对象是否被GC: * 1 引用计数器值为0:不用,不能解决对象之间互相循环引用问题。 * 2 枚举根节点做可达性分析(根搜索路径):GC roots(tracing GC)根集合:一组必须活跃的引用。给定一个集合的引用作为根出发,通过引用关系遍历对象图,能被遍历到的(可达的)对象就被判定为存活,没有遍历到的判定为死亡。 * 适用于复制、标记清除、标记压缩。 * java中可作为GC Roots的对象: * ..

10. Joining Data with dplyr in R_radar_sun的博客-程序员宝宝

1. Joining Tables1.1 The inner_join verb (video)1.2 What columns would you join on?1.3 Joining parts and part categories1.4 Joining with a one-to-many relationship1.5 Joining parts and inventorie...

Tensorflow Object Detection API 从无到有_取名字難於上青天的博客-程序员宝宝

环境win10 Anaconda以python3.7创建新环境(环境名称python3.7, 以下提到的python3.7是环境名称) 安装tensorflow2.1API配置安装 protobuf1.点击protobuf-all-3.13.zip这里下载,解压后把bin下的protoc.exe放到C:Windows文件夹下,cmd验证是否可用。安装TensorFlow object detection API1.去TensorFlow github上下载整个models.

创业时代片尾曲wma格式怎么转换为mp3_Tybyqi的博客-程序员宝宝

  最近突然火了一首歌不知道大家听说过没有,这首歌叫《从无到有》,是小编非常喜欢的一位歌手演唱的,在一些音乐播放器里已经飙升到了第一位,不过呢,大家也都知道,国内现在对于版权看的越来越重了,这当然是好事,不过这也就给我们这些贫困家庭造成了一些困难,小编说这些是什么意思呢,就是这个音乐它是收费的,在某些资源网站找的格式又是不能正常播放的,面对这种问题呢,小编来给大家一款好用的视频转换器,下面小编就用...

jvm 内存溢出的多种原因及优化方法_ZhaoYingChao88的博客-程序员宝宝

让我们看一下我们日常在开发过程中接触内存溢出的异常:  Exception in thread "main" [Full GCjava.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Unknown Source) at java.util.Arrays.copyOf(Unknown

推荐文章

热门文章

相关标签