OSGi#1:Equinox 初探

From a code point of view, Equinox is an implementation of the OSGi core framework specification, a set of bundles that implement various optional OSGi services and other infrastructure for running OSGi-based systems.

上面是Equinox官网的描述,Equinox是一个OSGi实现,具体就不赘述了,下面来看看Equinox该怎么玩,直接上代码。

按照惯例,来个Hello World的栗子。先打出一个输出Hello World的bundle,

package me.kisimple.just4fun.osgi;

import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;

public class IBundleActivator implements BundleActivator {

    @Override
    public void start(BundleContext bundleContext) throws Exception {
        System.out.println("Hello,World.");
    }

    @Override
    public void stop(BundleContext bundleContext) throws Exception {
        System.out.println("Goodbye,World.");
    }

}

MANIFEST.MF这么写,

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: HelloWorld
Bundle-SymbolicName: me.kisimple.just4fun.osgi.HelloWorld
Bundle-Version: 1.0.0
Bundle-Activator: me.kisimple.just4fun.osgi.IBundleActivator
Bundle-Vendor: KISIMPLE
Bundle-Localization: systembundle
Import-Package: org.osgi.framework

然后打包,

> jar cvfm me.kisimple.just4fun_1.0.0.jar MANIFEST.MF me\kisimple\just4fun\osgi\IBundleActivator.class

接下来需要去官网下载Equinox的SDK,我下的是equinox-SDK-LunaSR2.zip。然后参考官网的quick start文档,我们新建一个container目录,该目录有如下文件,

E:\Projects> tree container /F
E:\PROJECTS\CONTAINER
│  org.eclipse.equinox.common_3.6.200.v20130402-1505.jar
│  org.eclipse.osgi_3.10.2.v20150203-1939.jar
│  org.eclipse.update.configurator_3.3.300.v20140518-1928.jar
│
├─configuration
│      config.ini
│
└─plugins
        me.kisimple.just4fun_1.0.0.jar
        org.apache.felix.gogo.command_0.10.0.v201209301215.jar
        org.apache.felix.gogo.runtime_0.10.0.v201209301036.jar
        org.apache.felix.gogo.shell_0.10.0.v201212101605.jar
        org.eclipse.equinox.console_1.1.0.v20140131-1639.jar

除了me.kisimple.just4fun_1.0.0.jarorg.eclipse.update.configurator_3.3.300.v20140518-1928.jar,其他jar包都是从下载下来的SDK中可以拿到的,me.kisimple.just4fun_1.0.0.jar是上面我们打的输出Hello World的bundle,而org.eclipse.update.configurator_3.3.300.v20140518-1928.jar则是从eclipse(忘记安装的是哪个版本了>_<)的安装目录下的plugins目录中获取(本身eclipse也使用了Equinox,所以也有configuration/config.ini文件和plugins目录)。

configuration/config.ini如下,

osgi.bundles=org.eclipse.equinox.common@2:start, org.eclipse.update.configurator@3:start

alright,接下来就可以启动Equinox了,

E:\Projects\container>java -jar org.eclipse.osgi_3.10.2.v20150203-1939.jar -console
osgi> _

然后就可以在命令行中启动我们的bundle了。先用ss命令看下bundle的情况,

osgi> ss
"Framework is launched."

id      State       Bundle
0       ACTIVE      org.eclipse.osgi_3.10.2.v20150203-1939
1       ACTIVE      org.eclipse.equinox.common_3.6.200.v20130402-1505
2       ACTIVE      org.eclipse.update.configurator_3.3.300.v20140518-1928
3       RESOLVED    me.kisimple.just4fun.osgi.HelloWorld_1.0.0
4       ACTIVE      org.apache.felix.gogo.command_0.10.0.v201209301215
5       ACTIVE      org.apache.felix.gogo.runtime_0.10.0.v201209301036
6       ACTIVE      org.apache.felix.gogo.shell_0.10.0.v201212101605
7       ACTIVE      org.eclipse.equinox.console_1.1.0.v20140131-1639

启动我们的bundle,

osgi> start 3
Hello,World.

这时候再用ss命令可以看到我们的bundle的状态变成了ACTIVE了,

3       ACTIVE      me.kisimple.just4fun.osgi.HelloWorld_1.0.0

停掉我们的bundle,

osgi> stop 3
Goodbye,World.

这时候bundle的状态就会又回到了RESOLVED

参考资料

时间: 2024-10-10 09:15:04

OSGi#1:Equinox 初探的相关文章

《深入理解OSGi:Equinox原理、应用与最佳实践》笔记_1_运行最简单的bundlehelloworld

<深入理解OSGi:Equinox原理.应用与最佳实践>笔记_1_运行最简单的bundlehelloworld 买了周大大的OSGI的书看 先前完全没有基础 就靠这本书看看学学 顺便记一些笔记 今天先跳到了第5章的equinox启航部分 第一个简单的helloworld就遇到了问题.... 因为eclipse版本和书中不同 用书中所说得到的全是异常.... 搜索有关资料以后可以运行正常了 以此来记录一下: 在较新版本的eclipse中 不能通过java -jar org.eclipse.osg

《深入理解OSGi:Equinox原理、应用与最佳实践》笔记_2_建立开发环境

本文对应书本5.1.3的内容 书本中通过CVS下载的源码 但是笔者实践的时候发现无法下载...地址已经失效了(也许是笔者的失误输错地址所致) 可以用git下载 地址是: http://git.eclipse.org/c/equinox 进入需要下载的组件的页面 在最下面有git clone的地址 http://git.eclipse.org/c/equinox/rt.equinox.framework.git/ 写道 Clonegit://git.eclipse.org/gitroot/equi

在OSGI容器Equinox中嵌入HttpServer

原文地址:https://liugang594.iteye.com/blog/1328050 简单介绍一下如何在一个osgi的bundle中内嵌使用http服务 一.基础 首先看看在OSGI中怎么启动内嵌的jetty容器.看下图: 其实简单的只选中"org.eclipse.osgi"和"org.eclipse.equinox.http.jetty",然后点击"Add Required Bundles"即可. 默认的Jetty监听的端口为80,可又

OSGi#3:ClassLoader中嵌入Equinox

Java语言的模块化之路似乎走得异常艰辛,但实际上技术难点看上去并不像是最大的问题,OSGi已经是业内公认的标准,正如这篇文章中作者所说的, I suspect the answer to these questions has little to do with technology, and more to do with politics. anyway,要等到Java语言级别来支持模块化,不知道要何年何月.最近做了个尝试,直接在ClassLoader中嵌入Equinox容器,这样是不是也

OSGI(面向Java的动态模型系统)

基本简介编辑 OSGI服务平台提供在多种网络设备上无需重启的动态改变构造的功能.为了最小化耦合度和促使这些耦合度可管理,OSGi技术提供一种面向服务的架构,它能使这些组件动态地发现对方.OSGi联 OSGI 盟已经开发了为例如象HTTP服务器.配置.日志.安全.用户管理.XML等很多公共功能标准组件接口.这些组件的兼容性插件实现可以从进行了不同优化和使用代价的不同计算机服务提供商得到.然而,服务接口能够基于专有权基础上开发. 因为OSGi技术为集成提供了预建立和预测试的组件子系统,所以OSGi技

OSGI简介

OSGI简介 OSGI (Open Service Gateway Initiative)联盟成立于1999 年,它是一个非盈利的国际组织,旨在建立一个开放的服务规范,为通过网络向设备提供服务建立开放的标准,是开放业务网关的发起者. OSGI联盟的初始目标是构建一个在广域网和局域网或设备上展开业务的基础平台,对OSGI 的最早设计也是针对嵌入式应用的,诸如机顶盒.服务网关.手机.汽车等都是其应用的主要环境. 由于OSGI的诸多优秀特性(可动态改变系统行为,热插拔的插件体系结构,高可复用性,高效性

OSGI介绍

OSGI介绍 OSGI简介 OSGI (Open Service Gateway Initiative)联盟成立于1999 年,它是一个非盈利的国际组织,旨在建立一个开放的服务规范,为通过网络向设备提供服务建立开放的标准,是开放业务网关的发起者. OSGI联盟的初始目标是构建一个在广域网和局域网或设备上展开业务的基础平台,对OSGI 的最早设计也是针对嵌入式应用的,诸如机顶盒.服务网关.手机.汽车等都是其应用的主要环境. 由于OSGI的诸多优秀特性(可动态改变系统行为,热插拔的插件体系结构,高可

Springboot Application 集成 OSGI 框架开发

内容来源:https://www.ibm.com/developerworks/cn/java/j-springboot-application-integrated-osgi-framework-development/index.html Springboot Application 集成 OSGI 框架开发 张 莹莹2018 年 4 月 02 日发布 WeiboGoogle+用电子邮件发送本页面 0 Java 类加载器 启动类加载器 (Bootstrap ClassLoader) 是 Ja

学习Eclipse插件开发需要循序渐进看的书籍列表?

因为工作需要,需要用Eclipse插件进行开发.而笔者在以前的工作经验中根本就没有接触过,而且这类的技术和视频资料非常少.通过摸打滚爬将近2年,终于小有成就.刚好趁着圣诞节公司放了一个礼拜的假期,和大家分享一下学习Eclipse插件开发需要循序渐进看的书籍列表,以节约大家的宝贵时间. 1.  OSGI是Eclipse插件开发的基础,因此在进行Eclipse Plugin开发的时候,一定要先了解OSGI是什么?已经OSGI bundle相关的概念,因此,一定要找一本OSGI相关的书籍来阅读. 1.