欢迎大家赞助一杯啤酒🍺 我们准备了下酒菜:Formal mathematics/Isabelle/ML, Formal verification/Coq/ACL2, C++/F#/Lisp
OSGi
您可以在Wikipedia上了解到此条目的英文信息 OSGi Thanks, Wikipedia. |
OSGi - The Dynamic Module System for Java
OSGi还是模块化领域中的一个工具,可用于模块化并在模块之间强制施加边界。随着项目规模的不断扩大,强有力的模块化系统所带来的价值已经超越了实现模块化的代价。
目录 |
简介
OSGi规范为网络服务定义了一个标准的、面向组件的计算环境。将OSGI服务平台添加到一个网络设备中,可以为其增加在网络的任何地方管理组件的生命周期的能力。软件组件可以从运行中被安装、升级或者移除而不需要中断设备的操作。软件组件可以动态的发现和使用其他库或者应用程序。通过这个平台,软件组件可以作为商品在柜台中出售以及在家里开发。OSGi联盟已经开发出很多标准组件接口,从普通的功能如:HTTP server、configuration、 logging、security、user administration、XML等等很多。一致的插件机制可以使这些组件满足不同买主的不同需求。
软件组件架构致力于一个软件开发中越来越大的问题:大量的基础配置需要开发和维护。标准化的OSGI组件架构显然可以简化这个配置过程。
目标
OSGi的用途和目标:
- 降低复杂性:OSGi 由捆绑包组成。捆绑包(Bundles) 是完全模块化的,只通过服务接口相互通信。
- 重用:由于 OSGi 捆绑包是完全模块化的,因此它们支持更好的重用。有些开源项目将它们的 Java 类打包到与 OSGi 捆绑包兼容的 JARs 中。
- 易于部署:OSGi 框架提供一个标准化的 API,以支持 OSGi 实现使用一些工具来安装、启动和停止 OSGi 捆绑包。
- 动态更新:由于 OSGi 捆绑包是模块化的且易于部署,因此无需重新启动应用程序即可进行更新。
- 版本控制:捆绑包的动态更新和沙箱化特性支持轻松部署和使用捆绑包的不同版本,而不会在 JARs 之间遇到冲突。类加载被沙箱化到每个捆绑包,因此日志记录框架这样的依赖项在捆绑包之间即使不同也不会导致问题。
新闻
自http://www.osgi.org/blog/atom.xml加载RSS失败或RSS源被墙
Maven
框架
OSGi规范的核心组件是OSGi框架。该框架为应用程序(被成为bundles)提供一个标准化的环境。这个框架被分为以下几个层次:
- L0: 执行环境
- L1: 组件模块
- L2: 组件生命周期管理
- L3: 服务注册
另外,还有一个安全机制深深的缠绕在所有的层中。
The OSGi R4 Core Framework services include the following:
- Package Admin Service Specification
- URL Handlers Service Specification
- Start Level Service Specification
- Conditional Permission Admin Specification
- Permission Admin Service Specification
Oscar Bundle Repository is an incubator and repository for OSGi bundles.
开源项目
- Spring Dynamic Modules
- Eclipse Equinox - http://www.eclipse.org/equinox/
- Apache Felix - http://incubator.apache.org/felix/
- Apache Aries
- Knopflerfish - http://www.knopflerfish.org/
- ServiceTango - http://servicetango.sourceforge.net/
- Oscar - http://oscar.objectweb.org/
应用
- IBM、BEA和JBoss应用服务器采用OSGi
- BMW汽车的应用控制系统采用OSGI作为其底层架构, 这套系统主要用来控制汽车上的音箱、灯光等等设备,总共由1000多个Bundle构成,但BMW汽车的应用控制系统启动时间却只需要3.5秒
图集
链接
一个实体要“敏捷”,它的结构就需要有高度的模块化。因此,关于敏捷的问题应该从“如何构建敏捷的业务系统?”变成“如何构建高度模块化的业务系统?”
<discussion>characters_max=300</discussion>