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查找使用。
分享到:
相关推荐
NULL 博文链接:https://salever.iteye.com/blog/1474694
osgi发布http服务的各种bundle,各种jar包,全全全~非常好用的技术包 包括:org.eclipse.equinox.http_1.0.0.v20060601a.jar org.eclipse.equinox.ds_1.0.0.v20060601a.jar org.eclipse.equinox.servlet.api_1.0.0...
OSGI bundle 在线用户管理 邮件发送
基于 equinox 的 OSGI 运行BUNDLE例子,已包含 ECLIPSE 下的OSGI平台包,按步骤运行即可。 当然,设置JAVA_HOME,及BIN环境变量运行JAVAC 就不用说了 ^-^
blueprint-osgi-bundle
OSGi with CAR-Bundle.ppt
osgi多个bundle之间读取同一配置文件,需要单独添加一个用来读取配置文件的bundle
java运行依赖jar包
osgi-bundle-hibernate
编译 mvn软件包将在目标中生成捆绑罐 跑步 将捆绑罐复制到OSGI容器,例如Felix或Faraf ...
osgi_bundle_ble 此代码使用tinyb获取由eddyston信标广播的数据包,获取以十六进制表示的url,并将其发布到OSGi架构中的事件admin。
DOOR_BLE_OSGI_BUNDLE TinyB和OSGI Java捆绑包
resteasy-osgi-bundle 尝试创建 RESTEasy OSGi 包。 基于此处完成的工作: : 参考: :
jmx与osgi结合的实例,将osgi的bundle注册到jmx进行管理。简单实例,可以进行扩展
No repository found containing: osgi.bundle,com.python.pydev.analysis,10.1.4.202304151203 No repository found containing: osgi.bundle,com.python.pydev.debug,10.1.4.202304151203 No repository found ...
NULL 博文链接:https://qtlkw.iteye.com/blog/2214254
基于osgi整合ssm框架开发web项目,使用ssm注解的方式开发,缺少两个jsp文件,能运行
osgi helloworld 实例,适合初学者。分为server和client两个bundle.
本文将介绍 Equinox 的 ServletBridge 项目,提供一个示例来说明如何使用 ... 前一种:和普通的 OSGI bundle 开发差不多,而后一种:Equinox 提供 servletBridge 来将 OSGI framework 和 Servelet Container 联系起来。
OSGi捆绑包状态Maven插件 总览 OSGi容器的远程捆绑软件状态检查器。 请参阅以获取完整文档。 版本控制 遵循准则。