OSGi 系列(二)之 Hello World

之前曾介绍过 OSGi 是什么,下面将继续上篇介绍的内容,讲述一个简单的 OSGi Bundle:Hello World 是如何开发的。

在 OSGi 中,软件是以 Bundle 的形式发布的。一个 Bundle 由 Java 类和其它资源构成,它可为其它的 Bundle 提供服务,也可以导入其它 Bundle 中的 Java 包;同时,OSGi 的 Bundle 也可以为其所在的设备提供一些功能。

1. 环境准备

<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.core</artifactId>
<version>5.0.0</version>
</dependency>

2. 新建 Bundle

  1. 新建一个 maven 工程,并编写启动这个 bundle 的启动类 HelloBundleActivator
package com.github.binarylei;

import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext; public class HelloBundleActivator implements BundleActivator {
@Override
public void start(BundleContext bundleContext) throws Exception {
System.out.println("bundle start...");
} @Override
public void stop(BundleContext bundleContext) throws Exception {
System.out.println("bundle stop...");
}
}
  1. 使用 maven-jar-plugin 插件生成 META-INF/MANIFEST.MF 文件,插件配制如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifestEntries>
<Bundle-ManifestVersion>2</Bundle-ManifestVersion>
<Bundle-SymbolicName>com.github.binarylei.demo-osgi</Bundle-SymbolicName>
<Bundle-Version>1.0.0</Bundle-Version>
<Import-Package>org.osgi.framework</Import-Package>
<Bundle-Activator>com.github.binarylei.HelloBundleActivator</Bundle-Activator>
</manifestEntries>
</archive>
</configuration>
</plugin>

生成的 META-INF/MANIFEST.MF 文件内容如下,也可以手动编写:

Manifest-Version: 1.0
Bundle-SymbolicName: com.github.binarylei.demo-osgi
Bundle-Version: 1.0.0
Archiver-Version: Plexus Archiver
Built-By: len
Bundle-Activator: com.github.binarylei.HelloBundleActivator
Bundle-ManifestVersion: 2
Import-Package: org.osgi.framework
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_91
  1. 生成 jar 包,其实 bundle 和普通的唯一的区别就是 META-INF/MANIFEST.MF 配制不同。

3. 运行 Bundle

  1. http://felix.apache.org/downloads.cgi 下载 felix-framework-5.6.10

  2. 解压后目录如下:

  • bin:felix 启动程序
  • bundle:启动程序时运行的 bundle
  • conf:配制文件
  • doc:文档
  • felix-cache:启动程序时运行生成的 bundle 缓存,删除后重启 felix 会丢失之前的运行信息
  1. felix 基本操作
# 运行 felix,进入 felix 安装目录,注意直接进入 bin 目录运行 jar 包会报错
java -jar bin/felix.jar
# 加载 bundle
install file:///C:/Users/len/Desktop/demo-osgi/target/demo-osgi-1.0-SNAPSHOT.jar
# 启动 bundle
start 8
# 停止 bundle
stop 8
# 卸裁 bundle
uninstall 8

参考:

http://developer.51cto.com/art/200909/154762.htm

OSGi 系列(二)之 Hello World的更多相关文章

  1. OSGi 系列(十二)之 Http Service

    OSGi 系列(十二)之 Http Service 1. 原始的 HttpService (1) 新建 web-osgi 工程,目录结构如下: (2) HomeServlet package com. ...

  2. OSGi 系列(十三)之 Configuration Admin Service

    OSGi 系列(十三)之 Configuration Admin Service OSGi 的 CM 就是 Configuration Admin Service,是用于管理 Bundle 属性.并在 ...

  3. 前端构建大法 Gulp 系列 (二):为什么选择gulp

    系列目录 前端构建大法 Gulp 系列 (一):为什么需要前端构建 前端构建大法 Gulp 系列 (二):为什么选择gulp 前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gul ...

  4. WPF入门教程系列二十三——DataGrid示例(三)

    DataGrid的选择模式 默认情况下,DataGrid 的选择模式为“全行选择”,并且可以同时选择多行(如下图所示),我们可以通过SelectionMode 和SelectionUnit 属性来修改 ...

  5. Web 开发人员和设计师必读文章推荐【系列二十九】

    <Web 前端开发精华文章推荐>2014年第8期(总第29期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  6. Web 前端开发人员和设计师必读文章推荐【系列二十八】

    <Web 前端开发精华文章推荐>2014年第7期(总第28期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  7. Web 开发精华文章集锦(jQuery、HTML5、CSS3)【系列二十七】

    <Web 前端开发精华文章推荐>2014年第6期(总第27期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  8. Web 前端开发人员和设计师必读精华文章【系列二十六】

    <Web 前端开发精华文章推荐>2014年第5期(总第26期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  9. Web 前端开发精华文章推荐(HTML5、CSS3、jQuery)【系列二十三】

    <Web 前端开发精华文章推荐>2014年第2期(总第23期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

随机推荐

  1. 不规则ROI的提取

    在网上看到基于opencv3.0之前的API实现不规则ROI的提取,我自己试了一下发现opencv3.0不行,第一想法是我写的有问题,最后发现是API的改版.原理很简单. 目标:提取黑线作为ROI 原 ...

  2. 关于putty连接百度云linux服务器那些事

    看有活动,30元半年的百度云服务器,就直接买了当练手的玩 买完之后,发现使用putty不能直接连接百度云的centos服务器, 用了putty和ssh都不能连接 试了好几次,都打算尝试用秘钥对的形式了 ...

  3. zabbix监控windows磁盘空间

    监控windows磁盘空间,不是百分比. 当windows系统添加相应的windows模板后,会自动生成检测系统空间的监控项,在应用集(Filessystem)里面,Free disk space o ...

  4. C# WEB.API 多图上传

    using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Ne ...

  5. 异常信息ASM ClassReader failed to parse class file的问题解决

    jdk8与spring 3不兼容问题:用jdk7.或者升级到spring4 详情:异常信息ASM ClassReader failed to parse class file的问题解决

  6. Yii常用变量

    调用YII框架中 jquery:Yii::app()->clientScript->registerCoreScript('jquery'); 调用YII框架中 jquery:Yii::a ...

  7. for 命令详解

    FOR有4个参数 /d   /l   /r   /f   他们的作用我在下面用例子解释 FOR /L %%variable IN (start,step,end) DO command [comman ...

  8. jenkins 修改工作目录

    修改Jenkins路径 Jenkins的默认安装路径是/var/lib/jenkins 现在由于这个根目录的磁盘太小,所以切换到/data 目录下. Jenkins目录.端口.工作目录等信息在/etc ...

  9. springMVC学习记录3-拦截器和文件上传

    拦截器和文件上传算是springmvc中比较高级一点的内容了吧,让我们一起看一下. 下面先说说拦截器.拦截器和过滤器有点像,都可以在请求被处理之前和请求被处理之到做一些额外的操作. 1. 实现Hand ...

  10. ArcGIS 复制要素

    DataManagementTools.General.Copy DataManagementTools.Features.CopyFeatures ConversionTools.ToGeodata ...