大家如果关注eclipse的话应该会注意到,目前eclipse的底层插件体系架构已经改成了OSGI的插件结构。OSGI就是“开放服务网关协议”,OSGI官方称是面向服务的系统架构,也可以理解为面向组件的架构,系统中每一个组件或者一个模块称之为bundle,这也是OSGI里的概念模型。更多的OSGI的介绍,大家可以Google一下或baidu一下。
本人接触OSGI时间不长,没有过多的深入,也是初涉OSGI,不过也是非常看好目前这一架构的,相信应该是后期软件开发的潮流吧。今天主要是记录下如何部署一个单独的OSGI系统,一来便于自己以后速查,二来也希望可以给初学者一个Best Practice。
我这里以eclipse3.4的plugin目录下的org.eclipse.osgi_3.4.0.v20080605-1900.jar为例,其实这个jar包就是OSGI4的完整实现,eclipse官方称为Equinox,我们将其复制并改名为equinox.jar,呵呵。或者你也可以到equinox的官方网站下载最新的jar包。随后我们在同目录下建立一个bat文件,如下:
java -jar equinox.jar -console -Declipse.ignoreApp=true -Dosgi.noShutdown=true
保存然后双击该bat文件,会出现:osgi>的提示符,这表示OSGI已经启动成功了。接着输入:
osgi>ss
会出现如下内容:
Framework is launched.
id State Bundle
0 ACTIVE org.eclipse.osgi_3.4.0.v20080605-1900
我们可以看到有一个bundle已经启动了。然后我们就可以很方便的部署和卸载(完全动态)一个个bundle了。我们随便从eclipse的plugin目录中copy一个bundle到该目录,比如org.eclipse.osgi.services_3.1.200.v20071203.jar,然后在OSGI的控制模式下输入如下命令:
osgi>install reference:file:org.eclipse.osgi.services_3.1.200.v20071203.jar
会看到系统提示如下:
Bundle id is 1
表示OSGI框架自动为该bundle分配了一个唯一的ID,然后再输入ss命令查看如下:
Framework is launched.
id State Bundle
0 ACTIVE org.eclipse.osgi_3.4.0.v20080605-1900
1 INSTALLED org.eclipse.osgi.services_3.1.200.v20071203
结果列表中的State表示bundle的状态,我们可以看到刚刚部署的services为INSTALLED,表示该bundle处于已经被安装的状态,但是还没有启动,接着我们来启动该bundle。
osgi>start 1
使用start命令来启动刚安装的bundle,其后的1参数表示该bundle的唯一ID,如果没有出现错误(因为启动bundle时OSGI框架会校验该bundle的相关信息),接着输入ss再次查看,会出现如下结果:
Framework is launched.
id State Bundle
0 ACTIVE org.eclipse.osgi_3.4.0.v20080605-1900
1 ACTIVE org.eclipse.osgi.services_3.1.200.v20071203
这样,我们的bundle就已经正式运行了。同样,我们也可以动态的停止或卸载某一个bundle,使用stop命令停止bundle,如下:
osgi>stop 1
然后再ss查看结果:
Framework is launched.
id State Bundle
0 ACTIVE org.eclipse.osgi_3.4.0.v20080605-1900
1 RESOLVED org.eclipse.osgi.services_3.1.200.v20071203
这时我们看到刚刚的bundle处于RESOLVED状态,该状态表示bundle已经处于被解析完毕状态,可以启动或已经停止了。被停止的bundle是处于非服务状态的,然后我们也可以卸载该bundle,卸载后该bundle将不能够再使用和管理了,必须重新安装。如下:
osgi>uninstall 1
然后,再ss查看如下:
Framework is launched.
id State Bundle
0 ACTIVE org.eclipse.osgi_3.4.0.v20080605-1900
发现已经没有了刚才的bundle,即完全从OSGI中被移除了,除非我们重新安装,重新安装后,其ID将会被重新分配,而不是之前的1了,比如我们再次安装。
osgi> install reference:file:org.eclipse.osgi.services_3.1.200.v20071203.jar
然后再ss查看状态如下:
Framework is launched.
id State Bundle
0 ACTIVE org.eclipse.osgi_3.4.0.v20080605-1900
2 INSTALLED org.eclipse.osgi.services_3.1.200.v20071203
可以看到其ID已经变成了2,而不是之前的1了。
这基本上就是OSGI的bundle的基本管理命令,更多的命令可以输入help来获取帮助。当然,看懂这必须得熟悉OSGI框架的基本结构和应用模式。希望以后也可以和大家一起探讨OSGI的开发和部署等各个方面:-)
分享到:
相关推荐
使用OSGi,每个服务可以单独部署和维护,这大大提高了系统的可维护性和灵活性。 三、OSGi Equinox最佳实践 在开发OSGi应用程序时,有一系列的最佳实践可以遵循: 1. 正确管理Bundle的依赖关系,避免循环依赖的...
为了在OSGI环境中运行这个应用,我们需要一个OSGI容器,如Apache Felix或Eclipse Equinox。这些容器负责加载和管理bundle,以及它们之间的依赖关系。每个技术(Spring、Mybatis、Spring MVC)都需要对应的OSGI兼容...
在《OSGI进阶.pdf》这本书中,可能涵盖了更深入的话题,比如bundle的打包和部署、服务注册与查找、bundle间通信的协议(如白板模式和Declarative Services)以及如何使用OSGi进行企业级应用开发。这本书可能会详细...
OSGi服务平台提供了一个框架,用于开发能够可靠地部署、大规模分布,并适应各种设备的服务应用。该平台强调协作性和灵活性,使得开发者能够在不中断系统运行的情况下更新和维护软件组件。 ### 1. OSGi简介 OSGi的...
文档中提到的实战部分主要基于Equinox,它是OSGI规范的一个参考实现,同时也提到了其他框架如Oscar和Knopflerfish,这些都是OSGI的不同实现方式。文档还涉及了如何在不同的应用场景下,如B/S(浏览器/服务器)、C/S...
每个bundle都是一个独立的Java模块,包含类、资源和元数据,可以单独部署、更新和卸载,而不会影响其他模块。Spring OSGi将Spring应用上下文转换为OSGi bundle,使得Spring的应用组件可以在OSGi环境中运行。 Spring...
标题中的“tomcat-osgi”指的是将开源的Java应用服务器Apache Tomcat与OSGi(Open Service Gateway Initiative)框架集成的版本。OSGi是一种模块化系统,主要用于Java应用程序,它允许开发者将应用程序分解为一系列...
2. IDE插件:Eclipse作为一款基于OSGi的IDE,其插件机制就是基于OSGi实现的,允许开发者开发和安装独立的插件,扩展IDE功能。 3. IoT和嵌入式系统:小型设备和嵌入式系统中,OSGi可以有效地管理资源,降低内存和CPU...
8. **社区与规范**:OSGi联盟制定了一系列规范,如OSGi核心框架、企业服务、远程服务等,同时拥有广泛的开源实现,如Equinox(Eclipse项目的一部分)、Felix等。 在实际应用中,OSGi常用于大型企业级应用、嵌入式...
OSGI服务平台的核心理念是通过模块化来解决软件复杂性问题,它允许开发者将应用程序分解为独立的组件,这些组件可以在运行时单独安装、更新和卸载,而不会影响到其他组件或整个系统。这一特性使得系统维护和升级变得...
- **完全模块化**:通过将系统拆分成独立的、可重用的组件(即Bundles),使得每个组件可以单独开发、测试和部署。 - **动态化管理**:Bundles可以在运行时动态安装、卸载、启动和停止,无需重启整个系统。 - **依赖...
标题中的"equinox-jetty-birt:BIRT 报表简单的运行时示例"是指一个基于Equinox OSGi容器和Jetty服务器的BIRT(Business Intelligence and Reporting Tools)报告运行时环境的简单示例。这个项目旨在展示如何在Java...
在OSGI中,棋子可以是单独的组件,通过与Chessboard服务交互来确定自己的合法性。它可能提供一个接口,用于改变其位置,并通知Chessboard进行合法性检查。 3. **View**(视图):负责显示棋盘和皇后的位置。OSGI中...
4. **模块化**:SpringDM使得开发者可以将应用程序划分为独立的模块,每个模块都可以单独部署和更新,提高了系统的可维护性和扩展性。 **压缩包子文件的文件名称列表 - OSGiRuntime** 这个文件可能是指OSGi运行时...
2. **Spring应用程序上下文**:Virgo与Spring框架深度集成,可以直接运行基于Spring的应用程序,利用Spring的依赖注入和管理能力。 3. **细粒度的部署**:每个OSGi bundle都可以视为一个独立的部署单元,可以单独...
Virgo服务器是一个高度可扩展和灵活的平台,它支持基于OSGi的应用和服务部署,提供了管理和运行现代企业级应用的能力。 在OSGi环境中,应用被分解为一系列独立的模块或服务,这些服务可以单独更新、安装和卸载,而...
模块则是一组相关的组件和服务,它们在OSGi容器内独立存在,可以单独部署和更新。 Spring DM的使用流程通常包括以下几个步骤: 1. **定义服务接口和实现**:首先,定义服务接口,然后实现这些接口以创建服务组件。 ...
标题中的“osgi netbeans-开源”指的是NetBeans IDE与OSGi(Open Service Gateway Initiative)框架的集成,这是一个开源的开发环境,专为构建模块化Java应用程序而设计。NetBeans是一个广泛使用的集成开发环境(IDE...
【标题】"test-rome-servlet-osgi"项目是一个基于Java技术栈的示例应用,主要涉及了Rome库在Servlet环境和OSGi容器中的整合与应用。该项目旨在展示如何在Web服务环境中利用Rome库处理RSS和Atom feed,同时利用OSGi...