1、OSGi 的体系架构是基于插件式的软件结构,包括一个 OSGi 框架和一系列插件,在 OSGi中,插件称为 Bundle,其中,OSGi 框架规范是 OSGi 规范的核心部分,它提供了一个通用的、安全可管理的 Java 框架,通过这个框架,可以支持 Bundle 服务应用的部署和扩展。Bundle 之间可以通过 Import Package 和 Require-Bundle 来共享 Java 类,在 OSGi 服务平台中,用户通过开发 Bundle 来提供需要的功能,这些 Bundle 可以动态加载和卸载,或者根据需要远程下载和升级。OSGi 体系结构图如图 1 所示:

图示1 OSGi 体系结构

其中:

Execution Environment:

Bundle 应用所倚赖运行的 Java 执行环境,如 J2SE-1.4、CDC-1.0 等都是可用的执行环境。

Modules:

模块层定义了 Bundle 应用的加载策略。OSGi 框架是一个健壮并且严格定义的类加载模型。在大多数 Java 应用中,通常只有一个单独的 ClassPath,它包含了所有的 Java 类文件和资源文件,OSGi基于Java技术,对于每个实现了 BundleActivator 接口的 Bundle 应用,为它生成一个单独的 ClassLoader,使得 Bundle 应用的组织更加模块化。

Life Cycle:

生命周期层可以动态地对 Bundle 进行安装、启动、停止、升级和卸载等操作。该层基于模块层,提供了一组 API 来控制 Bundle 应用的运行时操作。

Service Registry 和 Services:

OSGi 服务层定义了一个集成在生命周期层中的动态协作模型,是一个发布、动态寻找、绑定的服务模型。一个服务通常是一个 Java 对象实现了特定的服务接口,并且通过服务注册,被绑定到 OSGi 的运行环境中。Bundle 应用可以注册发布服务,动态绑定服务,并且在服务注册状态改变时,可以接受到事件消息等。

Security:

OSGi 的安全管理是基于 Java2 安全体系的,贯穿在 OSGi 平台的所有层中,它能够对部署在 OSGi 运行环境中的 Bundle 应用进行详细的管理控制。

在一个动态扩展的 OSGi 环境中,OSGi 框架管理 Bundle 的安装和更新,同时也管理 Bundle 和服务之间的依赖关系。一个 Bundle 可能处于以下六个状态,如图 2 所示:

图示 2 Bundle 状态图

INSTALLED:安装完成,本地资源成功加载。

RESOLVED:依赖关系满足,这个状态意味该Bundle要么已经准备好运行,要么是被停止了。

STARTING:Bundle正在被启动,BundleActivator的start()方法已经被调用但是还没有返回。

STOPPING:Bundle正在被停止,BundleActivator的stop()方法已经被调用但是还没有返回。

ACTIVE:Bundle 被成功启动并且在运行。

UNINSTALLED:bundle被卸载并且无法进入其他状态。

Bundle接口定义了getState()方法来返回Bundle的状态。

凡是有该标志的文章,都是该blog博主Caoer(草儿)原创,凡是索引、收藏

、转载请注明来处和原文作者。非常感谢。

java里Bundle是什么_OSGi 体系结构及Bundle简介相关推荐

  1. 在java中写出html代码,在java里写html代码

    在java里写html代码 [2021-02-09 07:31:38]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace("/ ...

  2. JAVA深度剖析之JVM的体系结构

    JAVA深度剖析之JVM的体系结构 JAVA深度剖析之JVM的体系结构: JVM的生命周期 JVM实例的诞生:当启动一个Java程序时,一个JVM实例就产生了,任何一个拥有publicstaticvo ...

  3. Java 里的 for (;;) 与 while (true),哪个更快?

    点击关注公众号,Java干货及时送达 在JDK8u的jdk项目下做个很粗略的搜索: mymbp:/Users/me/workspace/jdk8u/jdk/src $ egrep -nr " ...

  4. 快手二面:Java 里的 for (;;) 与 while (true),哪个更快?

    转自:知乎 www.zhihu.com/question/52311366/answer/1300903 在 JDK8u 的 jdk 项目下做个很粗略的搜索: mymbp:/Users/me/work ...

  5. JAVA里面的int类型 和Integer类型,有什么不一样

    JAVA里面的int类型 和Integer类型,有什么不一样 原创 2013年09月04日 23:15:11 标签: java / 2120 编辑 删除 JAVA里面的int类型 和Integer类型 ...

  6. 【转】Java里如何实现线程间通信

    正常情况下,每个子线程完成各自的任务就可以结束了.不过有的时候,我们希望多个线程协同工作来完成某个任务,这时就涉及到了线程间通信了. 本文涉及到的知识点:thread.join(), object.w ...

  7. 原型模式(ProtoType) - Java里的对象复制

    一, 引用的复制和对象复制. 在编程中, 我们有时会用两个引用指向同一个对象. 例如: ArrayList a = new ArrayLIst(); ArrayList b = a; 看起来好像有a, ...

  8. Java里的数组介绍

    注意, 本文讲的是数组(Array),  非数组型线性表容器(ArrayList). 一. C语言的静态数组和动态数组. 稍微接触过c的程序猿都应该知道, c语言里的数组分为静态数组和动态数组. 1. ...

  9. Java 里的泛型简介.

    我们在JDK中有时回见到1个类or接口后面跟这1个尖括号. 例如: java.util.HashMap<K,V> 我们一开始大概知道K,V 大概就是Key和Value的意思, 键值对嘛, ...

最新文章

  1. Linux tail 命令详解
  2. python 2021/12/31
  3. go语言基础到提高(12)-函数类型与函数变量
  4. Find The Bone
  5. A Common Framework for Interactive Texture Transfer(CVPR 2018)学习笔记
  6. jQuery Ajax – Servlets集成:构建完整的应用程序
  7. 【华为云技术分享】前端工程师必备:从浏览器的渲染到性能优化
  8. Win测试——使用Spy++获取窗口标题
  9. mysql sql优化与调优机制详解_MySQL性能调优——锁定机制与锁优化分析详解
  10. python ssd目标检测_基于自注意力的SSD图像目标检测算法
  11. 云服务器搭建京东签到,在路由器上实现jd京东每日自动签到、自动领京豆,并将签到结果推送至微信...
  12. 黑苹果 Catalina 15 声卡定制
  13. windows 7 安装 sam-ba at91 usb to serial converter 驱动不成功的解决
  14. aic准则python_Python数据科学:线性回归
  15. OutMan——Objective-C内存管理
  16. BD新标签页-最值得安装的浏览器插件
  17. 在word中插入代码行号
  18. mysql中复制表结构的方法(亲测通过)
  19. 埃森哲杯上海大学春季赛暨金马五校赛题解汇总
  20. 深度学习笔记(六):过拟合是什么意思

热门文章

  1. SaaSBase:最受欢迎的跨境电商软件有哪些(中篇)
  2. 以Python+Bottle框架作为jQuery.Uploadify控件的后端 | apt-blog.net 无证程序员的PT桑apt-blog.net 无证程序员的PT桑...
  3. 【IT名人堂】何云飞:阿里云数据库的架构演进之路
  4. 快鲸智慧社区系统的应用场景有哪些
  5. Reinforcement Learning强化学习 (第二版)
  6. 【计算机毕业设计】jsp+java ssm社会保险养老系统
  7. DataGridView 选中行
  8. 【3D捏脸功能实现】
  9. matlab 高斯展宽,高斯函数半高宽
  10. [转自百度尘土飞扬博客]windows server 2003常用命令