OSGI简介—HelloWorld
本次介绍的 HelloWorld 例子程序主要的功能是在启动和停止一个 Bundle 的时候输出开始和结束信息。下面我们就来完成第一个 Bundle。
第一步,创建 Bundle 工程。
在 Eclipse 中创建一个 Plug-in 工程。
输入工程相关的信息,这里和创建普通的 Java工程唯一的不同点就是要选择 this plug-in is targeted to run with,在这里选择 an OSGi framework 的 standard 选项,也就是说建立一个标准的 OSGi Bundle 工程。
输入 Bundle 的相关元数据信息 。
Plug-inID 指的是 Bundle 的唯一标识,在实际的项目中可以采用类似 java 的包名组织策略来保证标识的唯一性;
Plug-inVersion 指的是 Bundle 的版本;
Plug-inName 指的是 Bundle 的更具有意义的名称;
Plug-inProvider 指的是 Bundle 的提供商;
ExecutionEnvironment 指的是 Bundle 运行需要的环境;
然后就是 Activator 部分了,这里填入自己的一个类名就可以了,在工程建立时 Eclipse 会自动建立这个类。
完成了 Bundle 工程的创建后,在 Package 视图中就可以看到此Bundle的结构。
第二步,完成 Activator 的代码。
打开默认的Activator.java 代码。
可以看到Activator 实现了 BundleActivator接口,然后 Activator 中有两个空的方法:start 和 stop,其中,start 方法是在 Bundle被启动的时候调用的,stop 是在 Bundle被停止的时候调用的,下面我们在这两个方法中加入代码。
HelloWorld的例子已经完成了,下面看这个例子的运行效果。
第三步,运行。
首先配置一下 HelloWorld 用的运行配置。
设置 HelloWorld 的 Auto-Start 属性为 false,并且将 Target Platform 中不需要的Bundle 去掉。
这样就完成了运行配置的设置最后点击“Run”,在 Console中出现“osgi>”提示。这表明已经成功启动了我们的第一个OSGi 应用。
在 osgi>提示符下输入 ss,然后回车,我们可以看到如下所示的显示。
可以看到,HelloWorld Bundle 已经被安装并且完成了解析,但是还没有启动。下面我们在osgi> 提示符下输入 start 15(15是bundle的编号),回车,再输入 ss。如下图所示。
我们可以看到输出了“My OSGITest Start!!”,并且通过 ss命令,看到 HelloWorld Bundle 的状态从前面的 RESOVLED 变成了 ACTIVE,说明我们的 HelloWorld Bundle 已经成功启动了。并且在Activator 的 start 方法中加入的输出信息也正确打印出来了。
接着,我们输入 stop 15,并且再用 ss 命令查看 Bundle 的状态,会得到如下图所示的反馈。
这个时候 HelloWorld Bundle 已经被停止。我们在 Activator 中加入的输出信息正确地输出在了Console,并且通过 ss 命令看到 HelloWorld Bundle 的状态从刚才的 ACTIVE 变为了 RESOLVED。
这是最简单的一个例子,主要展示了怎样创建一个bundle,并启动和停止。项目中,此bundle是依附于主项目存在的,类似于一个热插拔的插件。这个再后续介绍。
OSGI简介—HelloWorld的更多相关文章
- OSGi简介
OSGi简介 OSGi是什么 下面来看看“维基百科”给出的解释: OSGi(Open Service Gateway Initiative)有双重含义.一方面它指OSGi Alliance组织:另一方 ...
- OSGI企业应用开发(一)OSGI简介
一.OSGI简介 OSGI全称为Open Service Gateway Initiative(开放服务网关规范),有两个层面的含义,一方面它指OSGi Alliance组织:另一方面指该组织制定的一 ...
- OSGI框架—HelloWorld小实例
OSGi(Open Service Gateway Initiative)技术是Java动态化模块化系统的一系列规范.OSGi一方面指维护OSGi规范的OSGI官方联盟,另一方面指的是该组织维护的基于 ...
- osgi实战学习之路:2. maven+maven-bundle-plugin+karaf搭建osgi之HelloWorld
环境准备: jdk版本号 jdk:1.7 karaf: 版本号:apache-karaf-3.0.1 下载地址: http://pan.baidu.com/s/1qWM4Y1u http://kara ...
- OSGI简介(转)
原文地址 目前,业内关于OSGI技术的学习资源或者技术文档还是很少的.我在某宝网搜索了一下“OSGI”的书籍,结果倒是有,但是种类少的可怜,而且几乎没有人购买.因为工作的原因我需要学习OSGI,所以我 ...
- osgi实战学习之路:1. ant+bnd+felix搭建osgi之HelloWorld
开发环境分为三个部份 osgi_provider: bundle开发环境,对外提供服务 osgi_consumer: 引用其他bundle osgi_main: 执行測试 项目主要内容 : commo ...
- Spring简介+HelloWorld
IoC Container: 这是最重要的,也是最基础的, Spring的基础.它的作用是配置和Java对象的生命周期管理. DAO, ORM, AOP, WEB: 该模块可用于将工具或框架集成到了S ...
- osgi与webservice
osgi简介: http://osgia.com/ http://blog.csdn.net/xiaokui008/article/details/9662933 http://wdhdd889.it ...
- OSGI介绍
OSGI介绍 OSGI简介 OSGI (Open Service Gateway Initiative)联盟成立于1999 年,它是一个非盈利的国际组织,旨在建立一个开放的服务规范,为通过网络向设备提 ...
随机推荐
- 感谢党,软考过了。系统集成项目管理project师
人品爆发了,刚用干巴巴的日语做完2小时的设计说明,回到家一查,人品爆发了.软考竟然过了. 绝对是评卷老师给人品啊!真想请他吃顿饭. 系统集成项目管理project师 64 53 幸运飞过! 今天真是 ...
- GestureDetector-onfling不执行
今天在做计算器的时候,遇到了一个问题,就是当我使用GestureDetector的时候,onFling方法不执行,而其他的可以执行.代码如下 @Override public boolean onDo ...
- HDU 4508 湫湫系列故事——减肥记I (2013腾讯编程马拉松初赛第一场)
http://acm.hdu.edu.cn/showproblem.php?pid=4508 题目大意: 给定一些数据. 每组数据以一个整数n开始,表示每天的食物清单有n种食物. 接下来n行,每行两 ...
- 基于cropper.js的图片上传和裁剪
项目中要求图片上传并裁剪的功能,之前也有接触过很多图片裁剪插件,效果体验不是很好,今天推荐一款好用的插件-cropper,超级好用,裁剪功能丰富,满足了各种需求. 功能: 1:点击选择图片,弹出文件夹 ...
- Java基础学习总结(38)——Lombok的使用和原理
一.项目背景 在写Java程序的时候经常会遇到如下情形: 新建了一个Class类,然后在其中设置了几个字段,最后还需要花费很多时间来建立getter和setter方法 lombok项目的产生就是为 ...
- MySQL系列之七:主从复制(转)
一:实验环境 IP 操作系统 mysql版本号 master 192.168.25.11 CentOS7 5.6.35 slave 192.168.25.10 win10 5.7.18 slave版本 ...
- Android AutoWrapTextView 解决中英文排版问题
1.概述 最近项目有新需求,UED给了个卡券密码的UI样式,如图: 我一看很简单啊,一个TextView解决问题,然后做好以后在模拟器里一看..... 纳尼,这个时候才想起来,TextView 中英文 ...
- Redo 非current损坏
Redo log 文件损坏或丢失,在启动数据库时在alert日志中会有如下错误: ORA-00313: open failed for members of log group 1 of thread ...
- 微服务实战(四):服务发现的可行方案以及实践案例 - DockOne.io
原文:微服务实战(四):服务发现的可行方案以及实践案例 - DockOne.io 这是关于使用微服务架构创建应用系列的第四篇文章.第一篇介绍了微服务架构的模式,讨论了使用微服务架构的优缺点.第二和第三 ...
- [AngularJS] Interpolation fail in IE 11
When you occured this problem, check few things: For the input field, use // Use ng-attr-placeholder ...