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(Open Service Gateway Initiative)是一种Java模块化系统,它定义了一种标准的方式来组织和管理Java应用程序的组件。OSGI的核心概念是bundle,它类似于Java的jar文件,但具有更强大的...
一个bundle可以处于未安装、已安装、启动、暂停、停止或卸载这六种状态之一。当bundle启动时,OSGI框架会解析其MANIFEST.MF文件中的元数据,识别出依赖的其他bundle,并确保这些依赖项已启动并可用。 在OSGI中,...
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...
标题"基于EQUINOX的OSGI BUNDLE运行例子"指的是一个实际操作示例,展示了如何在EQUINOX OSGi环境中运行OSGi Bundle。EQUINOX提供了一个完整的运行时环境,使得开发者可以方便地管理和执行这些模块化的Bundle。 描述...
【标题】基于Eclipse的Equinox框架开发OSGi Bundle应用 在Java世界中,OSGi(Open Services Gateway Initiative)是一种模块化系统,它允许开发者创建可独立更新和依赖管理的模块,即Bundle。Eclipse的Equinox是...
**标题解析:** "blueprint-osgi-bundle:OSGi 示例" 指的是一个基于OSGi(Open Service Gateway Initiative)框架的示例项目,它使用了Blueprint服务容器来管理服务组件。Blueprint是Apache Felix项目中的一个子项目...
**OSGI Bundle Change Listener** OSGi(Open Service Gateway Initiative)是一种Java模块化系统,它允许在运行时动态地发现、加载、卸载和更新服务。OSGi的核心是其框架,它管理一组称为bundle的模块。每个bundle...
3. **Bundle作为组件**:每个Bundle可以被视为独立的组件,它们之间通过OSGi服务注册表进行交互,实现动态的依赖管理和服务发现。 4. **使用脚本管理组件**:引入脚本语言,如JavaScript或Groovy,可以更灵活地管理...
3. **配置管理**:OSGI的配置管理允许动态配置Bundle,这需要在Tomcat的配置文件中进行相应的设置,以便在启动或运行时更新Bundle的配置。 4. **Web应用部署**:传统的WAR文件可以在OSGI环境中部署为Bundle。这通常...
标题中的“osgi-bundle-hello-world”是一个示例项目,展示了如何使用Maven构建一个OSGi(Open Services Gateway Initiative)捆绑包。OSGi是一种Java模块化系统,它允许开发者将应用程序分解为独立的、可重用的服务...
Mybatis的配置文件可以放在OSGI的bundle中,通过OSGI服务注册Mybatis的SqlSessionFactory,然后在其他bundle中通过服务查找来使用。 Spring MVC是Spring框架的一部分,用于构建Web应用程序。在OSGI环境中集成Spring...
osgi多个bundle之间读取同一配置文件,需要单独添加一个用来读取配置文件的bundle
标题 "osgi-bundle-hibernate" 指的是一个针对 OSGi 平台的 Hibernate 模块化打包。Hibernate 是一个流行的 Java 框架,用于对象关系映射(ORM),它允许开发者将数据库操作与 Java 对象交互,简化数据库编程。而 ...
标题中的“Jar转换为Bundle工具”指的是将传统的Java Archive (JAR) 文件转换为OSGI Bundle的过程。OSGI(Open Service Gateway Initiative)是一种模块化系统和Java服务框架,它允许在单个Java虚拟机(JVM)上运行...
在OSGi环境中,每个bundle都有自己的类加载器,这使得bundle可以加载自己特有的类库,而不会与系统中的其他bundle冲突。同时,OSGi提供了动态性,允许bundle在运行时安装、启动、更新或停止,这对于软件的维护和升级...
java运行依赖jar包
"osgi_bundle_ble" 这个标题表明我们正在讨论一个与OSGi(Open Service Gateway Initiative)框架相关的bundle,它专注于处理BLE(Bluetooth Low Energy)数据。"bundle"在OSGi环境中指的是可部署的服务单元,而"ble...
首先,我们需要在OSGi bundle中创建一个MBean,这个MBean可以暴露bundle的状态信息或者提供对bundle功能的管理接口。然后,我们需要一个MBeanServer,通常是使用OSGi框架提供的,例如Apache Felix或Equinox。接着,...
2. **打包调整**:为了适应OSGi环境,可能需要对RESTEasy的原始JAR进行调整,比如使用工具(如BND或Maven Bundle Plugin)将依赖项打包成一个或多个OBR(OSGi Bundle Repository)兼容的JAR。 3. **配置服务注册**...
每个OSGi Bundle都有一个MANIFEST.MF文件,其中定义了Bundle的基本信息,如版本、依赖和其他元数据。例如,`osgi.impl` Bundle的MANIFEST.MF可能声明了对某些库或API的依赖,并指定了Bundle的激活类。 3. **定义...