社区编辑申请
注册/登录
OSGi是什么:Java语言的动态模块系统
开发 后端
本文介绍了OSGi是什么,以及OSGi容器的一些现状。OSGi亦称做Java语言的动态模块系统,它为模块化应用的开发定义了一个基础架构。

之前51CTO曾发过一篇文章叫做《OSGi为什么重要:向模块化转移的主攻手》,里面对于OSGi的优势进行了分析。不过,对于究竟什么是OSGi,很多人仍然只有一个模糊的概念。本系列(你好,OSGi)从基础开始介绍了OSGi。本部分介绍OSGi是什么,以及OSGi容器的一些现状。(注:本文英文原文于08年3月发布在JavaWorld网站)

51CTO编辑推荐:OSGi入门与实践全攻略

OSGi是什么

OSGi亦称做Java语言的动态模块系统,它为模块化应用的开发定义了一个基础架构。OSGi容器已有多家开源实现,比如Knoflerfish、Equinox和Apache的Felix。您可以通过这些容器,把您的应用程序劈分为多个模块单元,这样,您就可以更容易地管理这些模块单元之间的交叉依赖关系。

OSGi规范和Servlet规范及EJB规范类似,该规范定义了两种对象,一是容器对外提供的服务对象,另一个是容器和您的应用程序之间必须遵守的契约,其中,服务对象是容器要实现的。您如果想要在OSGi平台上进行开发,首先,您必须要使用OSGi API来创建您的应用,然后将之部署到OSGi容器中。从开发者的角度看,OSGi具有以下优点:

a) 您可以在不重启容器的情况下,动态地安装、卸载、启动和停止您的应用程序中的不同模块;

b) 对于您应用程序中的某一特定模块,容器可以同时运行该模块的多个版本;

c) OSGi为开发嵌入式应用、移动应用、富互联网应用(RIA)提供了非常优秀的基础架构

如果说您使用Servlet容器开发您的网络应用,使用EJB容器开发交易式应用,您可能会问,为什么我们还需要另外的容器呢?对这个问题的简短回答是,OSIG容器是专门为开发复杂的Java应用准备的,在这些应用的开发过程中,您非常需要将这些应用分割为一个个的模块。在本系列以后的文章中,我将针对这个问题进行展开并深入回答。

1. OSGi在企业开发中的应用

OSGi联盟(OSGiAlliance)于1999年3月开始着手制定OSGi规范,其主要目的就是要制定一套开放式标准,以便向局域网及其中的设备提供可管理的服务;其基本思路是,一旦您在网络设备(如服务器和嵌入式设备)上使用了OSGi服务平台,您就可以在网络上的任何地方管理这些设备上运行的软件组件的生命周期,可以在后台对这些组件进行安装、升级或卸载,但不需要打断该设备的正常运行。

近年来,OSGi技术在嵌入式系统及网络设备市场得到广泛应用。现在,由于Eclipse的成功,OSGi在企业开发中逐渐成为切实可行的、较有价值的一种技术。

1.1. 业界对OSGi的支持逐渐上升

2003年,Eclipse开发团队开始想办法提高Eclipse工具集的模块化,以便让它成为更加动态的富客户端平台。Eclipse团队最终选中OSGi框架作为其组件的运行时模型,2004年6月发布的Eclipse3.0就是***个基于OSGi平台的版本。现在几乎所有的企业应用服务器都支持OSGi,Spring也通过一个叫“OSGi服务平台上的Spring动态模型(亦称之为OSGiSpring)”的项目来支持OSGi。该项目提供OSGi基础架构,以便我们在Spring的企业开发中更容易使用OSGi。

2. 开放源码的OSGi容器

从企业开发者的角度看,OSGi容器的要求很低,您可以很容易地把它嵌入到企业应用中,比如我们在开发Web应用时,我们可以把这个Web应用分为多个模块,一个模块负责视图层,另一个模块负责DAO层,第三个模块负责数据访问层,如果我们使用OSGi容器来管理这些模块之间的交叉依赖,我们就可以在不用重启该Web应用的前提下,将DAO层从速度较慢的升级到速度较快的DAO。

只要您的应用和OSGi规范兼容,您的应用就应该可以运行在任何OSGi容器中,现在比较流行的开放源码的OSGi容器有以下三种:

a) Equinox容器是参照OSGi规范第4版实现的,它构成了Eclipse IDE的核心—模块化的Java运行时;它实现了OSGi规范4中规定的必须强制实现的功能,同时,它也实现了OSGi规范中大部分的可选功能;

b) Knoflerfish是OSGi规范第3版和第4版的开源实现,它实现了OSGi规范规定的必须实现的功能及部分可选功能;

c) Apache的Felix是Apache软件基金会实现的OSGi开源容器,至本文截稿时为止,该容器还没有和OSGi规范完全兼容。在本文中,我们将使用Equinox作为我们的OSGi容器。

对OSGi是什么的介绍就先到这里,下面的部分将继续介绍OSGi的基础知识。

【编辑推荐】

  1. OSGi 4.2将于8月发布 新版特性预览
  2. Spring Tool Suite开始支持OSGi
  3. 基于OSGi的动态化系统搭建
  4. 初探OSGi Web容器:控制Web程序的生命周期
  5. Equinox的OSGi实现与应用服务器
责任编辑:yangsai 来源: Carl的博客
相关推荐

2022-04-11 11:38:44

Python代码游戏

2022-04-14 10:10:59

Nginx开源Linux

2022-05-03 22:25:57

Python浏览器语言

2022-05-16 10:36:08

GitHub开源项目

2022-04-19 11:23:26

release3.1子系统鸿蒙

2022-05-07 10:09:01

开发Java日志

2022-05-10 16:04:40

编程语言PythonC语言

2022-05-16 10:49:28

网络协议数据

2022-03-11 10:53:32

UML建模语言

2022-04-01 15:18:04

HarmonyHDF 驱动鸿蒙

2022-05-17 16:56:33

开发工具前端

2022-04-30 08:43:52

Spring模块化框架

2022-05-03 23:44:21

Python动态链接库Ctypes

2022-05-20 08:17:43

Java日志

2022-04-13 08:00:00

Hilla开发Java

2022-04-15 08:00:00

FUSE开发Android

2022-05-06 16:31:27

人工智能自然语言生物特征识别

2022-03-31 07:52:01

Java多线程并发

2022-04-20 10:56:06

JavaJVM参数

2022-05-18 08:05:31

同话题下的热门内容

简单的六种防止数据重复提交的方法!用Python进行人脸识别「包括源代码」超实用!教你用 Python 获取并下载美股数据在 Go 中实现一个支持并发的 TCP 服务端Python或R:哪种编程语言更适合数据科学?用 XML 和 Java 构建树莓派打印机的用户界面C语言:如何给全局变量起一个别名?什么!Sentinel流控规则可以这样玩?

编辑推荐

使用Kotlin做开发一个月后的感想面试官问你什么是消息队列?把这篇甩给他!五大自动化测试的Python框架图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)2018年最流行的十大编程语言,其中包括你用的语言吗?
我收藏的内容
点赞
收藏

51CTO技术栈公众号