OSGi 系列(二)之 Hello World
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
- 新建一个 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...");
}
}
- 使用 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
- 生成 jar 包,其实 bundle 和普通的唯一的区别就是 META-INF/MANIFEST.MF 配制不同。
3. 运行 Bundle
到 http://felix.apache.org/downloads.cgi 下载 felix-framework-5.6.10
解压后目录如下:
- bin:felix 启动程序
- bundle:启动程序时运行的 bundle
- conf:配制文件
- doc:文档
- felix-cache:启动程序时运行生成的 bundle 缓存,删除后重启 felix 会丢失之前的运行信息
- 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的更多相关文章
- OSGi 系列(十二)之 Http Service
OSGi 系列(十二)之 Http Service 1. 原始的 HttpService (1) 新建 web-osgi 工程,目录结构如下: (2) HomeServlet package com. ...
- OSGi 系列(十三)之 Configuration Admin Service
OSGi 系列(十三)之 Configuration Admin Service OSGi 的 CM 就是 Configuration Admin Service,是用于管理 Bundle 属性.并在 ...
- 前端构建大法 Gulp 系列 (二):为什么选择gulp
系列目录 前端构建大法 Gulp 系列 (一):为什么需要前端构建 前端构建大法 Gulp 系列 (二):为什么选择gulp 前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gul ...
- WPF入门教程系列二十三——DataGrid示例(三)
DataGrid的选择模式 默认情况下,DataGrid 的选择模式为“全行选择”,并且可以同时选择多行(如下图所示),我们可以通过SelectionMode 和SelectionUnit 属性来修改 ...
- Web 开发人员和设计师必读文章推荐【系列二十九】
<Web 前端开发精华文章推荐>2014年第8期(总第29期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
- Web 前端开发人员和设计师必读文章推荐【系列二十八】
<Web 前端开发精华文章推荐>2014年第7期(总第28期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
- Web 开发精华文章集锦(jQuery、HTML5、CSS3)【系列二十七】
<Web 前端开发精华文章推荐>2014年第6期(总第27期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
- Web 前端开发人员和设计师必读精华文章【系列二十六】
<Web 前端开发精华文章推荐>2014年第5期(总第26期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
- Web 前端开发精华文章推荐(HTML5、CSS3、jQuery)【系列二十三】
<Web 前端开发精华文章推荐>2014年第2期(总第23期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
随机推荐
- java基础:关于java流与文件操作
1.描述:流是字节数据或字符数据序列.Java采用输入流对象和输出流对象来支持程序对数据的输入和输出.输入流对象提供了数据从源点流向程序的管道,程序可以从输入流对象读取数据:输出流对象提供了数据从程序 ...
- PHP把excel导入mysql数据库最常用的方法
Posted on 2011-03-25 09:16 PHP博客 阅读(1316) 评论(0) 编辑 收藏 引用 网摘 PHP把excel(xls)文件导入mysql数据库最常用的方法就是先把xls ...
- leetcode118
public class Solution { public IList<IList<int>> Generate(int numRows) { var list = new ...
- myeclipse 保存失败
Save FailedCompilation unit name must end with .java, or one of the registered Java-like extensions ...
- jdk免安装对应配置
通常我们不用配置jdk,tomcat和eclipse会选取系统的环境变量获取jdk,但有时一个系统中部署不同的项目,各版本又不一样,不能完全兼容. 因此就需要采用自己的jdk.将jdk安装后,将安装后 ...
- DrawDib 使用例子<转>
#include<vfw.h>#pragma comment(lib,"Vfw32.lib") BITMAPINFOHEADER biHeader; memset(&a ...
- vue基础——组件(组件嵌套)
介绍 vue中页面是由组件组成的,即以.vue结尾的文件. .vue文件由三部分组成,分别是template.script.style. 分别写html.js.css代码. 组件之间可以互相嵌套.所以 ...
- LVS的DR模式
DR模式: 请求由LVS接受,由真实提供服务的服务器(RealServer, RS)直接返回给用户,返回的时候不经过LVS. DR模式下需要LVS和绑定同一个VIP(RS通过将VIP绑定在loopba ...
- 由于C++类库版本不同导致的OpenCV编译链接错误
太长不看版:GCC4和GCC5使用的C++标准库下,string的名字不一样,导致链接错误. 之前在Ubuntu下使用OpenCV的时候一切正常.后来再次编译的时候,连接器提示有些库函数找不到: ma ...
- etcd ui
https://github.com/henszey/etcd-browser docker build --build-arg http_proxy=http://109.105.4.17:3128 ...