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查找使用。
OSGi之Bundle的更多相关文章
- [OSGI]Eclipse4.2 OSGI依赖Bundle
Eclipse 4.2 OSGI 依赖的Bundle: org.eclipse.osgiorg.apache.felix.gogo.runtimeorg.apache.felix.gogo.comma ...
- OSGI动态加载删除Service bundle
OSGi模块化框架是很早就出来的一个插件化框架,最早Eclipse用它而出名,但这些年也没有大热虽然OSGi已经发布了版本1到版本5.现在用的最多的,也是本文讲述基于的是Equinox的OSGi实现, ...
- OSGi 系列(三)之 bundle 详解
OSGi 系列(三)之 bundle 详解 1. 什么是 bundle bundle 是以 jar 包形式存在的一个模块化物理单元,里面包含了代码,资源文件和元数据(metadata),并且 jar ...
- OSGi Bundle之Hello World
开发一个简单的Hello World的OSGi Bundle(OSGi绑定包) 在OSGi中,软件是以Bundle的形式发布的.一个Bundle由Java类和其它资源构成,它可为其它的Bundle提供 ...
- OSGi 的核心配置、动态化及问题
一.OSGi的核心组件Bundle,与java中jar包的差别就是元数据配置: 常用的Bundle元数据定义: a) Bundle-Activator:定义Activator的实现全 ...
- OSGi 的由来和本质特性
OSGi 的由来 随着科技和需求的发展和变化,现在的软件变得越来越庞大.这样,随之而来的最大挑战就是软件在设计上的越来越复杂和维护上的越来越困难.为了解决这个问题,软件架构师将软件切分成比较小的并且易 ...
- OSGi 学习(二)
上一篇说了很多虚的东西,现在说点别的. OSGi系统的独立环境下的项目结构以及启动脚本. 先说项目结构,基于equinox的OSGi容器的项目结构如下所示: bin中定义启动脚本,停止脚本之类的. c ...
- 在OSGI容器Equinox中嵌入HttpServer
原文地址:https://liugang594.iteye.com/blog/1328050 简单介绍一下如何在一个osgi的bundle中内嵌使用http服务 一.基础 首先看看在OSGI中怎么启动 ...
- Springboot Application 集成 OSGI 框架开发
内容来源:https://www.ibm.com/developerworks/cn/java/j-springboot-application-integrated-osgi-framework-d ...
随机推荐
- python列表的常用操作方法
主要介绍了Python中列表(List)的详解操作方法,包含创建.访问.更新.删除.其它操作等,需要的朋友可以参考下. 1.创建列表.只要把逗号分隔的不同的数据项使用方括号括起来即可 List = [ ...
- iosiOS 地图 自定义以及添加锚点
- (void)clickLongPress:(UILongPressGestureRecognizer *)longPress { CGPoint point = [longPress locati ...
- 【IHttpHandler】ASP.NET 生命周期
对由 Microsoft® Internet 信息服务 (IIS) 处理的 Microsoft® ASP.NET 页面的每个请求都会被移交到 ASP.NET HTTP 管道.HTTP 管道由一系列托管 ...
- Android 6 Marshmallow USB调试授权
Google在Android在5.1版之后进行了重大变革,推出了Android 6 Marshmallow,我们先看看当它接上工作站时,有什么样的状况出现. 如图1所示,会弹出一个窗口,[是否允许此计 ...
- Mybatis配置
首先导入mybatis-3.2.3.jar包 还有连接数据库的驱动包 工程中必须导入的三个包(对应的包附件中可以下载): mybatis-3.2.3.jar sqljdbc.jar log ...
- Connect to a Windows PC from Ubuntu via Remote Desktop Connection
http://www.7tutorials.com/connecting-windows-remote-desktop-ubuntu A useful feature of Windows is be ...
- linux网络bond技术
http://blog.chinaunix.net/uid-20799583-id-3117665.html1.创建bond0配置文件vi /etc/sysconfig/network-scripts ...
- ASP.NET中Button控件的CommandName和CommandArgument属性用法
在Repeater中的使用: <asp:Repeater ID="rptActionList" runat="server" OnItemCommand= ...
- 一款jQuery实现重力弹动模拟效果特效,弹弹弹,弹走IE6
一款jQuery实现重力弹动模拟效果特效 鼠标经过两块黑色div中间的红色线时,下方的黑快会突然掉落, 并在掉落地上那一刻出现了弹跳的jquery特效效果,非常不错,还兼容所有的浏览器, 适用浏览器: ...
- ubuntu上搭建vsftpd且通过mysql来管理FTP账号
参考文章:http://wiki.ubuntu.org.cn/Vsftpd%E5%92%8Cmysql%E9%85%8D%E7%BD%AE 请各位先按照这篇文章一步一步操作,我这里是记录一些其间遇到的 ...