基于OSGI开发一个简单的budnle

目的:尝试开发一个Hello World bundle ,并与KNIME的bundle实现通信,可以注册到KNIME的OSGi中。

启动Eclipse,依次点 File --> New --> Project。选择Plug-in Project–>next。如图1
在这里插入图片描述
图一

输入Project Name项目名称,比如com.howard.sample.HelloWorld,Target Platform(目标平台)里的an OSGI framework,选择standard。剩下的保持默认next。
下个对话框也默认,next。然后选择Hello OSGI Bundle作为模版。点击Finish。如图2。
在这里插入图片描述

图二
Eclipse会为你创建Hello world bundle的模版代码。主要包含两个文件:如图3
在这里插入图片描述
图3

Activator.java和MANIFEST.MF。

Activator.java的代码如下所示:

Java代码

import org.osgi.framework.BundleActivator;  
import org.osgi.framework.BundleContext;  
public class Activator implements BundleActivator {  
    public void start(BundleContext context) throws Exception {  
        System.out.println("Hello world");  
    }  
    public void stop(BundleContext context) throws Exception {  
        System.out.println("Goodbye World");  
    }  
}  

如果你的bundle在启动和关闭的时候需要被通知,你可以考虑实现BundleActivator接口。以下是定义Activator的一些注意点:

  1. 你的Activator类需要一个公有的无参数构造函数。OSGI框架会通过类反射的方式来实例化一个Activator类。
  2. 容器启动bundle过程中负责调用你的Activator类的start方法。bundle可以在此初始化资源比如说初始化数据库连接。start方法需要一个参数,BundleContext对象。这个对象允许bundles以取得OSGI容器相关信息的方式和框架交互。如果某一个bundle有异常抛出,容器将对该bundle标记为stopped并不将其纳入service列表。
  3. 容器关闭的时候会调用你的Activator类方法stop(),你可以利用这个机会做一些清理的操作。
MANIFEST.MF

这个文件是你的bundle的部署描述文件。格式和Jar里的MANIFEST.MF是一样的。包含的不少名值对,就像如下:Xml代码

Manifest-Version: 1.0  
Bundle-ManifestVersion: 2  
Bundle-Name: HelloWorld Plug-in  
Bundle-SymbolicName: com.howard.sample.HelloWorld  
Bundle-Version: 1.0.0  
Bundle-Activator: com.howard.sample.helloworld.Activator  
Bundle-Vendor: HOWARD  
Bundle-RequiredExecutionEnvironment: JavaSE-1.6  
Import-Package: org.osgi.framework;version="1.3.0" 

分别来看下:
Bundle-ManifestVersion
数值为2意味着本bundle支持OSGI规范第四版;如果是1那就是支持OSGI规范第三版。
Bundle-Name
给bundle定义一个短名,方便人员阅读
Bundle-SymbolicName
给bundle定义一个唯一的非局部名。方便分辨。
Bundle-Activator
声明在start和stop事件发生时会被通知的监听类的名字。
Import-Package
定义bundle的导入包。
Hello World bundle完成了,接下来我们运行一下。

执行bundle

点击Run --> Run Configuration
在左边的OSGI Framework选项里右键 new ,创建一个新的OSGI Run Configuration名字随便取好了,我们取个OSGi hello world。如图4
在这里插入图片描述

图4

OSGI控制台
OSGI控制台是一个OSGI容器的命令行界面。你可以利用它做些诸如启动,关闭,安装bundles,更新和删除bundles等操作。现在,点击OSGI控制台所在的位置,回车,你就会发现可以输入命令了。这时的OSGI控制台应该如下图5:
在这里插入图片描述

图5

下面列出一些常用的OSGI命令,你可以试着和OSGI容器交互。
ss 显示已安装的bundles的状态信息,信息包括bundle ID,短名,状态等等。

start 启动一个bundle
stop  关闭一个bundle
update  载入一个新的JAR文件更新一个bundle
install  安装一个新的bundle到容器中
uninstall  卸载一个已在容器中的bundle

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值