文档章节

[插件化开发] 1. 初识OSGI

IsaacZhang
 IsaacZhang
发布于 10/15 15:02
字数 1664
阅读 22
收藏 0

初识 OSGI

背景

当前product是以solution的方式进行售卖,但是随着公司业务规模的快速夸张,随之而来的是新客户的产品开发,老客户的产品维护,升级以及修改bug,团队的效能明显下降,为了解决此类问题,必须站在公司战略的统一高度来重构系统。

荣幸的是,本人在此时加入团队并负责系统架构的升级与重构工作。因为公司在全世界都有客户,而且客户又来自于各行各业,带来的问题就是如何抽离公共业务的同时,又能不影响客户的定制化需求开发?产品团队专注于系统的核心逻辑开发,而一些定制化需求交付给global team 去开发?

选型

技术没有银弹,目前没有完全确定要使用OSGI的方式来实现,因为本人之前使用Spring Cloud & Spring Cloud Alibaba各实现了一种demo, 当然也可以实现我们的服务化,高可用以及动态扩展。但是在解决插件定制化这块,相对来说还是不太熟悉,然后OSGI进入眼帘了。

OSGI 简介

OSGI 是 <u>O</u>pen <u>S</u>ervice <u>G</u>ateway <u>I</u>nitiative(开发服务网关协议)。

  • 指维护OSGI规范的官方联盟

    > OSGi Alliance是一个由Sun Microsystems、IBM、爱立信等于1999年3月成立的开放的标准化组织,最初名为Connected Alliance。

  • 官方联盟维护的基于JAVA语言的服务规范

    > 该规范和核心部分是一个框架,其中定义了应用程序的生命周期模式和服务注册。基于这个框架定义了大量的OSGi服务:日志、配置管理、偏好,HTTP(运行servlet)、XML分析、设备访问、软件包管理、许可管理、星级、用户管理、IO连接、连线管理、Jini和UPnP。

osgi.org 官方描述:

> The Dynamic Module System for JAVA

通俗讲:使用OSGI实现的程序(Bundle)就是一个插件,可以动态的安装,卸载,启动,停止等等而不需要启动容器。

目前使用最广的两款OSGI 框架:

  • Apache Felix

    > Apache Felix是Apache旗下的一个OSGi框架,项目本身非常成熟,已经被用到了很多其他的项目中,例如Apache Servicemix。它本身提供的服务也是最全的,几乎涵盖了全部的OSGi 4.2的标准。除此之外还提供了一些非标准的功能,例如iPOJO。框架本身非常紧凑,你只需要3个包加一个shell就可以运行了,无论是开发还是Debug都非常简便。除了Felix,还有两个项目是和OSGi相关的。一个是Apache Felix Karaf,它本身是Felix的一个子项目,但他其实是封装了Felix提供更高一层的Runtime,例如提供了JAAS。另一个是Apache Aries,目前还处于起步阶段,它作为Felix的补充,提供OSGi企业级规范,包括JPA、JDBC、JTA、JNDI等等。

  • Equinox

    > Equinox是Eclipse旗下的OSGi框架,本身也被Eclipse采用,是Eclipse注明的PDE开发环境的底层。Equinox本身也是相当的全面的框架,提供的功能不比Felix少多少。但是它功能的分类就稍显混乱,文档和Sample也组织的不是很好。事实上相当Equinox还是被当做开发Eclipse Plugin的应用较多,如果你要开发一个Web程序,你就会感到它本身的功能和文档不够全面。Equinox最大的优势在于它和Eclipse结合紧密,只要你安装了PDE,你就已经有了Equinox,可以方便的在Eclipse里设置你开发的Bundle,启动、部署等操作也异常简单,而且有专门的Debug界面,你还能要求什么呢? > > 如果你想基于Eclipse开发,Equinox无疑是好选择。但对于新手而言,有时候会搞混Eclipse Plugin与OSGi的关系。

Talk is cheap, Show me the code.

环境安装

Eclipse 版本

> 因本人好几年没使用Eclipse, 因此带上安装再熟悉一下哈。。。

选择企业版之后,下一步

点击INSTALL,等待安装完成。

创建项目
  • File => New => Project

  • 选择Plug-in Development => Plug-in Project

  • 填写项目属性(OSGI framework 选择 standard)

  • 点击Next(关注Activator,这个会处理OSGI的start() 和 stop()时调用,相当于我们的main函数)

  • 点击Next(选择Hello OSGI)

  • 点击 Finish

配置环境
  • 选择 Run => Run Configurations

  • 选择OSGI Framework,右键点击New Configration

  • 选择Bundles(因为默认创建会选择全部Target Platform,在Eclipse IDE 2019‑09版本下,直接启动会报错。所以取消所有的选项,只勾选以下就个必须的bundle就足够。)

  • 点击Validate Bundles 验证我们的配置项是否正确。

    如果显示如上消息,恭喜你,可以点击Run启动OSGI console 啦!!!

OSGI Console 启动

IDEA 版本

IDEA也带有OSGI 开发工具包,let's do it.

配置Framework

这里我选择的是Eclipse Equinox 4.13,download传送门 ,点击下载[equinox-SDK-4.13.zip],下载完成之后开始配置。

  • IDEA(version: ULTIMATE 2019.2) => File => Settings (搜索OSGI,如下图)

  • 点击 + 添加,选中上一步下载的SDK解压目录

  • 添加成功后,选择OSGI 标签,选择OSGI framework 为我们配置的Equinox.

    > import Bnd/Bndtools projects automatically 指的是将普通的jar包 打包 为OSGI 可用的jar.

创建项目
  • 点击File => New => Project, 选择Java标签下的OSGI

  • 选择Use Library,点击Create

    找到org.eclipse.osgi_3.15.0.v20190830-1434.jar,选中,效果如下,点击下一步。

  • 填写项目属性

    点击Finish。

    如上图所示,IDEA 创建的不会帮助我们生成Activator以及Manifest.mf文件。

OSGI Console 启动
  • 点击Run => Edit Configurations

  • 点击 + ,选择OSGI Bundles,添加核心bundles

  • 运行(ss 为查看OSGI运行状态命令)

Eclipse与IDEA开发OSGI,主要是manifast文件的生成过程存在比较大的差异。

至此,我们使用两种开发工具配置OSGI环境工作就已经完成了,下一节会开发一个基于实战应用的示例。


奔跑的人生 | 博客园 | segmentfault | spring4all | csdn | 掘金 | OSChina | 简书 | 头条 | 知乎 | 51CTO

© 著作权归作者所有

IsaacZhang
粉丝 1
博文 43
码字总数 52507
作品 0
东城
程序员
私信 提问
探索 Eclipse 的 OSGi 控制台

从 V3.0 开始,Eclipse 通过选择开放服务网关协议(Open Services Gateway Initiative,OSGi)来替换先前版本中不稳定的 Eclipse 插件技术,从而实现了一次巨大飞跃。这次转变对于用户来说几...

银月光海
2014/04/11
130
1
OSGI for C++ - 通往架构师之路

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011012932/article/details/79960050 课程介绍 OSGI 技术是面向 Java 的动态模型系统。Java 圈子里有非常著名...

一去丶二三里
2018/04/16
0
0
android利用apkplug框架实现主应用与插件通讯(传递任意对象)实现UI替换

时光匆匆,乍一看已半年过去了,经过这半年的埋头苦干今天终于有满血复活了。 利用apkplug框架实现动态替换宿主Activity中的UI元素,以达到不用更新应用就可以更换UI样式的目的。 先看效果图:...

梁大帅
2014/04/29
683
1
基于 OSGi 的 Swing 客户端开发实践

简介: 随着 OSGi 技术迅猛发展,插件化开发技术得到了更为广泛的关注,同时也涌现出了 Equinox、Felix 等众多基于 OSGi 规范的开源框架。但目前相关技术文章主要关注的是 OSGi 同 JavaEE 技...

IBMdW
2011/11/18
1K
4
android插件化-apkplug中OSGI服务基本原理-08

我们提供 apkplug 下OSGI使用demo 源码托管地址为 http://git.oschina.net/plug/OSGIService 一 OSGI与android Service 异同点 OSGI服务与android Service概念差不多也是Service ,Client 关系...

梁大帅
2014/05/12
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

什么样的人要学点python编程?请你对号入座

什么样的人需要学点python编程? 时代越来越不一样了,编程这种专业程序员的工作,已经开始应用于各种其他日常工作中,就以前象征着互联网的电脑,现在早已进入普通人家。 那么什么样的人需要...

这人就爱编程
29分钟前
3
0
哪吒之魔童降世的背景音乐怎么提取 视频中提取音频的方法

随着国漫的不断崛起一大批优质的动漫正向我们袭来,从大鱼海棠到大圣归来再到我们现在的哪吒让我们看到国漫质的飞跃,也让我们对国漫充满信心,前段时间哪吒之魔童降世以国产第二的票房下线到...

cenfeng123
32分钟前
3
0
springcloud 整合 springboot-admin 监控中心

Admin监控应用 Spring Boot提供的监控接口,例如:/health、/info等等,实际上除了之前提到的信息,还有其他信息业需要监控:当前处于活跃状态的会话数量、当前应用的并发数、延迟以及其他度...

java框架开发者
35分钟前
2
0
GMAT阅读提分要看课外读物,名师点评正确使用方法

阅读提分需要从积累阅读量开始,这种积累不能只靠做练习,还需要大量阅读课外读物。而最适合GRE考生的课外读物之一就是原版杂志。但看课外读物提分也要讲究方法。下面小编就为大家详解看课外...

bole6
37分钟前
1
0
第六次读Kingfisher网络图片缓存库的思考与感受(稍微有点起色)

这节我们来优化一下之前的 硬盘存储,看看kingfiisher哪里做得好,我们稍微来学习一下。 从硬盘里检索图片模仿改进: open func retrieveImageInDiskCache(forKey key: String, options:...

T型人才追梦者
37分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部