OSGi之Bundle

OSGi提出的根源是什么?在我看来就是对JVM的类加载机制进行了扩展,添加了一系列的规则,使得原有的类包(Class Package)扩展到类域(Class Domain)。然后是建立在类域上的一系列松耦合应用。

在OSGi R4中,核心部分分为了4层:安全层(Security Layer)、模块层(Module Layer)、生命周期层(Life Cycle Layer)和服务层(Service Layer)。其中模块层是整个OSGi概念的核心部分。OSGi的核心实现即为OSGi框架,它本身也是一个OSGi Bundle。

OSGi中的重要元素就是Bundle 和Service,Bundle提供了一种静态资源边界,类似于Web容器中的Web应用的概念。

每一个Bundle通过一个元数据文件(MANIFEST.MF)描述。OSGi框架(即SystemBundle)通过解析这个元数据文件对该Bundle进行加载和管理。Bundle通过元数据中的"Export-Package"属性将内部的类包发布给OSGi系统中其他Bundle使用,通过"Import-Package","Requie-Bundle"属性引用OSGi系统中其他Bundle发布的类包。

每一个Bundle有自己独立的类加载器(Fragment Bundle例外,其资源通过其Host Bundle加载),Bundle内部的资源(类,文件等)通过该类加载器查找和加载。Bundle的类加载器能够控制的类加载边界包括:启动类路径上的类资源,OSGi框架即SystemBundle上的类资源和Bundle内部的类资源。该类资源边界即形成该Bundle的类域。

每一个Bundle在OSGi框架中具有自己的生命周期,其生命周期内的状态包括:INSTALLED、RESOLVED、STARTING、ACTIVE、STOPPING和UNINSTALLED。

INSTALLED状态是Bundle的初始状态,当该Bundle部署到OSGi系统的Bundle Repository中时,Bundle的状态标记为INSTALLED。

Bundle内部的资源在加载之前,首先由OSGi框架对其进行解析(Resolve),解析的过程就是分析Bundle的元数据的过程,详细过程参考OSGi规范。解析后的Bundle进入RESOLVED状态,解析失败时,仍然处于INSTALLED状态。

Bundle内的资源被其它Bundle使用时,该Bundle被启动,也可以通过设定让OSGi框架在加载该Bundle时直接启动。

Bundle内的资源通过BundleContext与其他Bundle进行交互。元数据中的"Bundle-Activator"属性指定了实现BundleActivator接口的实现类,Bundle通过该类得到BundleContext,通过BundleContext可以查找其他的Bundle,查找注册在OSGi中的服务(Service)与OSGi环境进行交互等等。Bundle可以在其提供的BundleActivator实现类中进行初始化的工作,也可以注册服务到OSGi的服务注册表中,供其他Bundle查找使用。

告别仿真报错!手把手教你为Intel MAX10 FPGA定制IBIS模型(附Allegro Skill工具) 本文详细介绍了为Intel MAX10 FPGA定制IBIS模型的完整流程,解决信号完整性仿真中的管脚映射问题。通过Allegro Skill工具自动化处理管脚信息,优化IBIS模型关键段落,提升仿真效率和精度,适用于高速数字电路设计。 阅读详情

相关推荐

Nordic BLE芯片RF测试

BLE设备在过蓝牙BQB,FCC,ETSI等各种认证时实验室一般都需要做RF各项指标的测试。Nordic公司的SDK包中提供了两种RF测试程序,一种是DTM,另一种是Radio test。这两种都可以做RF指标测试但各自又有区别。DTM是按照蓝牙规范中Direct test mode所要求数据格式测试(数据格式定义参看:Bluetooth Core Specification v5.0->...

5637

OSGI中的bundle详解

https://www.cnblogs.com/binarylei/p/8537307.html

weixin_42410730的博客 1668

Arduino Nano + MCP3422A0 ADC 毫欧表:3档分辨率(0.1mΩ-1.3kΩ)开尔文连接实测

本文详细介绍了如何使用Arduino Nano与MCP3422A0 ADC构建高精度毫欧表,采用四线制开尔文连接和三档量程设计,实现0.1mΩ-1.3kΩ的精确测量。通过精密恒流源和18位ADC技术,结合智能量程切换和数字滤波算法,显著提升测量精度和稳定性,适用于电子维修、PCB测试等场景。

weixin_28292761的博客 323

OSGI BUNDLE

<br />开发一个简单的Hello World的OSGi Bundle(OSGi绑定包)<br />在OSGi中,软件是以Bundle的形式发布的。一个Bundle由Java类和其它资源构成,它可为其它的Bundle提供服务,也可以导入其 它Bundle中的Java包;同时,OSGi的Bundle也可以为其所在的设备提供一些功能。Eclipse为开发OSGiBundle提供了优秀的 支持,它不仅提供了向导来创建OSGi Bundle,而且还提供了内嵌的Equinox容器,您可以使用该容器执行和调试

码龙008 1113

腾讯会议视频过期了怎么办?亲测可用:用这个免费插件抢救你的会议录制与回放

本文提供了三种亲测有效的腾讯会议视频过期恢复方案,包括浏览器缓存提取、专业工具组合及预防性措施。特别推荐使用免费插件抢救过期会议录制与回放,帮助职场人解决重要视频资料丢失的难题。

weixin_33686714的博客 264

医疗AI Agent实战:从零搭建一个能看病的智能助手(附完整代码)

本文详细介绍了如何从零搭建一个医疗AI Agent智能助手,涵盖核心架构设计、症状推理引擎开发、安全与合规实现以及系统集成等关键环节。通过完整的代码示例和实战案例,帮助开发者快速构建具备医疗咨询能力的智能Agent,提升医疗服务的效率和质量。

ss78901的博客 465

在Eclipse中开发OSGi Bundle

Eclipse为开发OSGI Bundle提供了良好的支持,它不仅提供向导来创建OSGi Bundle,而且还提供了内嵌的OSGi框架实现(即Equinox容器),可以使用该容器执行和调试Bundle。从本质上说,每一个Eclipse插件都是一个OSGi Bundle,只不过这个OSGi Bundle增加了一些Eclipse专用的代码而已。下面通过具体的例子来介绍如何用Eclipse来开发OSGi...

程序员的天堂 742

【软考高项论文】论信息系统项目管理的干系人绩效域

例如,在处理与电信运营商合作铺设光纤网络的问题时,考虑到其在通信设施建设和运维方面的专业性和重要性,我们将之定位为高权力高利益的干系人,给予了高度关注和优先沟通。项目全程,我们对干系人绩效域的执行效果进行了定期检查和评估,通过定量与定性的数据收集,确认了项目在干系人管理上的成效,具体表现为:建立了稳固的工作关系网络,使干系人普遍认可项目目标;鉴于本项目牵涉到政府各级部门、企事业单位、市民团体、技术研发伙伴等多种类型的干系人,且干系人的诉求和影响力各异,因此,有序且持续的干系人参与管理显得尤为关键。

Programming Talk 1681

OSGi Bundle Convert插件原理

本文首发于Infoq中文站(4.2):http://www.infoq.com/cn/articles/osgi-bundle-convert-plugin-principle   1.引言 普通的web应用要转换为OSGi应用,经常会遇到应用中依赖的Jar是非标准的情况,这些Jar可能只遵守了部分OSGi规范,甚至Manifest信息是空的。这种情况在OSGi 应用中根本无法使

不才的专栏 5512

【乐企文件生成工程】关于乐企文件生成工程的详细介绍

发票文件生成方式有两种思路:1、根据已有的OFD模板,动态替换ofd模板内容;之后将ofd转pdf(局限:单行问题不大)详情可以在此处了解2、根据html模板动态占位:该工程就是这种方式 ,目前效果良好,可看下图。拿去即用的源码!无任何保留,当然也并不是所有票种都支持(时间有限、精力有限、已经连着转了,要冒烟了…)

九七的博客 2030

Python re库【正则表达式操作库】全面讲解及代码示例

以下是Pythonre库的全面讲解,包含主要功能、常用方法及代码示例。完整代码和注释附后。正则表达式(Regular Expression)是用于匹配、查找、替换字符串的工具,通过特定语法定义模式。?{n}[...][a-z]A|B\d[0-9]\D\s\S\w\Wre从字符串匹配模式,返回Match对象或None。在字符串中第一个匹配项,返回Match对象或None。返回所有匹配项的。返回所有匹配项的Match对象)。替换匹配项,返回新字符串。根据模式分割字符串,返回列表。通过。

记录点滴 1161

浅析OSGI的bundle依赖

From: http://www.xeclipse.com/?p=1165 Bundle是OSGI中的基础元件,不同的bundle之间可以相互依赖、引用,这样许多bundle才会共同协作,实现一些比较复杂的功能。Bundle的依赖一直是一个比较棘手的问题,包括Lazy start等,下面我们具体Bundle依赖到底是怎么一回事。 测试场景:Eclipse 3.6, Equinox

Seven's Rainbow Paradise 3268

Python爬虫实战:爬取并分析电子商务平台用户评论数据

爬虫(Web Scraping)是指通过编写程序模拟浏览器行为,从网站中提取数据的过程。爬虫技术可以自动化地抓取网站上的信息,广泛应用于数据收集、价格监控、市场研究等多个领域。情感分析(Sentiment Analysis)是一种自然语言处理技术,用于确定文本的情感倾向。对于电子商务平台的评论数据,情感分析可以帮助商家了解消费者的反馈情绪,例如产品的好评、差评或中性评价。本文详细介绍了如何使用Python爬虫技术从电子商务平台抓取并分析用户评论数据。我们展示了如何通过requestsSelenium。

2201_76125261的博客 1174

一种获取OSGi任意Bundle的ClassLoader的方法

在OSGi环境中,在Bundle内部代码中要得到自己Bundle的ClassLoader就很简单,在自己Bundle的代码中,直接写this.getClass().getClassLoader()就得到了自己Bundle的ClassLoader了。但怎么在其他Bundle或外部代码中得到任意一个Bundle的ClassLoader呢?Bundle和BundleContext都没有提供ge...

dingqiue1982的博客 318

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

OSGI bundle 生命周期

OSGI bundle共有六个生命周期: INSTALLED (安装期) RESOLVED (解析期) STARTING (启动期) ACTIVE(活跃期) STOPPING(停止期) UNINSTALLED (卸载期) 关系图: OSGI命令: 命令 用途 使用方法 ss ...

ErikChan的博客 383

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【OSGi】2. bundle与模块化

模块层是OSGi框架的最基础层次,是OSGi其他部分的基础。 1、模块 定义: 一个从逻辑上封装实现类的集合,一个基于实现类子集的可选公共API,一个对外部代码依赖关系的集合。 package是Java提供的一种内建的模块化方式,但它有一些限制:http://blog.youkuaiyun.com/vking_wang/article/details/9735395 以上讨论的都是“

Alpha's 学习笔记 9005

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

OSGI框架下,bundle的两种启动方式

什么是Bundle? 如果有人问你,什么是osgi?其最大特点是什么?你只要回到"模块化开发体系",足矣。要是你能说出来java9的模块化开发体系并与之对比,那就说明你是专业的。 既然是模块化开发体系。那么osgi中的模块就是bundle,bundle是osgi中的最基本单位。 osgi中的bundle是jar文件格式规范基础上扩展出来的,一个符合osgi规范的bundle首先必须是一个符合

huakai_sun的博客 8214

OSGi介绍及OSGi的Bundle应用

OSGi介绍及OSGi的Bundle应用(2009-07-21 11:02:10)转载标签:osgibundleplugineclipseit分类:其它...关键字: OSGi Bundle Plugin Eclipse    开放服务网关协议 (Open Services Gateway Initiative),

liaomin416100569的专栏 803

在osgi bundle中访问osgi container之外的传统服务

      osgi container是java实践中的一个框架,在这个框架中,按照osgi的规范,实现了java中module的思想,从而真正实现了java的模块化开发。       在模块的互用方面,osgi提供了两种方式:一是通过export/import包实现,二是通过在osgi bundlecontext中注册service,实现各个模块之间的交互。第二种方式符合SOA的标准,是os...

沧海一粟 187

OSGi Bundle之Hello World

开发一个简单的Hello World的OSGi Bundle(OSGi绑定包) 在OSGi中,软件是以Bundle的形式发布的。一个Bundle由Java类和其它资源构成,它可为其它的Bundle提供服务,也可以导入其它Bundle中的Java包;同时,OSGi的Bundle也可以为其所在的设备提供一些功能。Eclipse为开发OSGiBundle提供了优秀的支持,它不仅提供了向导来创...

ab316600的博客 148

OSGi起步(3):bundle之间的依赖

-----------------------原文出处:http://www.eclipsezone.com/eclipse/forums/t90544.html原作者:Neil Bartlett  ----------------------OSGi起步(3):bundle之间的依赖 在之前的教程中,我们知道bundle怎么启动和停止,以及它们如何与框架、以及相互间的生命

瓶子的窝 4184

将普通jar文件打包成osgi bundle的方法

  最近更新列表 1.IBM的aix中安装jdk(7月21更新)2.Linux(CentOS)中安装jdk (7月21更新)3.Linux(CentOS)安装weblogic (7月22更新)4.Aix系统中安装webLogic (7月22更新)5.IBM实体机aix中创建weblogic域 (7月23更新)6.linux中通过VNC创建weblogic域 (7月23更新)7.在RedHa...

zl19861225的专栏 1147

OSGi bundle activator不工作解决

问题: 在OSGi编程中,编写一个bundle,但等WEB服务器启动后,发现该activator不工作,start()方法没有执行。 import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceRegistrati

hongweigg的专栏 2904

在原osgi项目中添加新bundle

由于我的这个项目是用maven做的,

chenguibing的专栏 1775

OSGi入门必读系列《OSGi Bundle之Hello World》

(1)新建Bundle: A、在Eclipse中,点击file➡new➡Project,打开新建对话框 B、在新建项目对话框,选择plug-inProject(插件项目)并点击下一步,将看到插件项目对话框 C、在插件项目对话框中,输入以下值:Project name:com.javaworld.sample.HelloWorld      Target Platfo

Jenice的博客 916
上一篇: OSGi之Bundle
下一篇: JBI研究-OSGi迁移
chrisrc
博客等级 码龄20年 8粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值