(转) OSGi入门:你的第一个Bundle[译]

http://230996.blog.chinajavaworld.com/entry/3677/0/

再过一到两周,EclipseZone将运行一系列OSGI的简短公告。放到一起它们将从一个平滑的道路进入掌握OSGi编程的艺术,不过每个公告只有一个新技术,并且它尽可能的通过10分钟来完成。所以,我们想要展示OSGi开发能够如何简单,因此我们将不使用Eclipse来开发——仅仅使用一个文本编辑器和基本的命令行工具来做。那么,欢迎来到“OSGi入门”系列。

事实上,第一个公告将比其他的要稍微长一点,因为我们需要设置一个非常基本的工作环境。开始之前,我们需要一个OSGi框架来运行。有三种开源实现来选择:Apache FelixKnopflerfishEquinox。我们将要写的代码都会统一在你选择的任意一个上都没问题,但是在启动指令上将有小小的不同。在EclipseZone中我们将使用Equinox,这个runtime是Eclipse自己创建的。你能从你已存在的Eclipse安装程序中复制一个副本:只需要找到org.eclipse.osgi_3.2.1.R32x_v20060919.jar文件,并复制它到一个空的目录(这个版本字符串可能不同,取决于你的Eclipse版本)。如果你没有一个Eclipse的版本,那么你可以进下载这个Jar文件:http://download.eclipse.org/eclipse/equinox/

要保持命令的简短,我们重命名这个Jar文件为equinox.jar。现在把命令提示符带到我们的开发目录下并运行以下命令:

1
> java -jar equinox.jar –console



几秒钟,osgi>提示符将显示出来。恭喜,你正在运行OSGi!

osgi>提示符给我们访问Equinox中的命令来控制框架。如果你愿意,键入help来查看命令列表,并玩玩它们。那就完了?现在输入ss。这个是最频繁使用的命令;它代表“short status”并且它向我们展示已经安装了的Bundle列表,和它们当前的状态。(一个“Bundle”在OSGi术语中是一个模块。或者如果你是一个Eclipse开发人员,你可以认为它们像plug-ins一样;Bundles和plug-ins根本上一样的东西。)

Equinox将输出如下语句:

1
2
3
4
Framework is launched.
 
id      State       Bundle
0       ACTIVE      system.bundle_3.2.1.R32x_v20060919



这告诉我们有一个Bundle被安装和激活了,并且它是系统Bundle。这是一个在OSGi中总是存在的特殊Bundle,它表示框架本身。

现在我们将要书写我们自己的Bundle。在之前的同样的目录下,建立一个名为HelloActivator.java的文件并复制如下代码到里面:

1
2
3
4
5
6
7
8
9
10
11
import org.osgi.framework.*;
 
public class HelloActivator implements BundleActivator {
  public void start(BundleContext context) {
    System.out.println("Hello EclipseZone Readers!");
  }
 
  public void stop(BundleContext context) {
    System.out.println("Goodbye EclipseZone Readers!");
  }
}



一个Bundle也需要一个manifest文件来声明各种关于Bundle的描述数据,例如它的名称,版本等等。所以创建一个名为HelloWorld.mf并复制以下文本到里面。非常肯定的是这个文件以一个空行结尾,不然的话jar命令行工具将截去这个文件。

1
2
3
4
5
6
7
Manifest-Version: 1.0
Bundle-Name: HelloWorld
Bundle-Activator: HelloActivator
Bundle-SymbolicName: HelloWorld
Bundle-Version: 1.0.0
Import-Package: org.osgi.framework
 



现在打开一个新的命令提示符(因为我们想要离开OSGi的运行)并使用下列命令建立Jar文件:

1
2
> javac -classpath equinox.jar HelloActivator.java
> jar -cfm HelloWorld.jar HelloWorld.mf HelloActivator.class



回到OSGi控制台,输入install file:HelloWorld.jar。回复将是“Bundle id is 1”。再次输入ss并且你将看到如下输出:

1
2
3
4
5
Framework is launched.
 
id      State       Bundle
0       ACTIVE      system.bundle_3.2.1.R32x_v20060919
1       INSTALLED   HelloWorld_1.0.0



我们的HelloWorldBundle安装上了,但是它仍然没有激活。我们将在之后的Post中学习这些状态的意思,但是现在我们只需要通过输入start 1启动这个Bundle。“1”是第一列中这个Bundle的ID。当你做完这个你将看到“Hello EclipseZone Readers!”字样的信息。重复到你无聊了为止。不要忘了偶尔输入ss来看看Bundle的状态的变化。

这里发生了什么?我们的代码实现了BundleActivator接口,允许框架重要的生命周期时间通知我们。当Bundle启动了,框架调用start方法,并当Bundle停止了,框架调用stop方法。其他的事情将是在manifest文件中的“Bundle-Activator: HelloActivator”这一行来告诉框架我们的Bundle中的哪个类是启动器。正常情况下,我们将给个完全限定的类名,但是我们懒了下使用了默认的包。

我们的第一部分结束了。下次见

参考:
原始文章http://www.eclipsezone.com/eclipse/forums/m92130843.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值