OSGi入门:你的第一个Bundle[译]
作者:coolflyr_reg 日期:2007-11-21 09:58:10
再过一到两周,EclipseZone将运行一系列OSGI的简短公告。放到一起它们将从一个平滑的道路进入掌握OSGi编程的艺术,不过每个公告只有一个新技术,并且它尽可能的通过10分钟来完成。所以,我们想要展示OSGi开发能够如何简单,因此我们将不使用Eclipse来开发——仅仅使用一个文本编辑器和基本的命令行工具来做。那么,欢迎来到“OSGi入门”系列。
事实上,第一个公告将比其他的要稍微长一点,因为我们需要设置一个非常基本的工作环境。开始之前,我们需要一个OSGi框架来运行。有三种开源实现来选择:Apache Felix,Knopflerfish和Equinox。我们将要写的代码都会统一在你选择的任意一个上都没问题,但是在启动指令上将有小小的不同。在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。现在把命令提示符带到我们的开发目录下并运行以下命令:
几秒钟,osgi>提示符将显示出来。恭喜,你正在运行OSGi!
osgi>提示符给我们访问Equinox中的命令来控制框架。如果你愿意,键入help来查看命令列表,并玩玩它们。那就完了?现在输入ss。这个是最频繁使用的命令;它代表“short status”并且它向我们展示已经安装了的Bundle列表,和它们当前的状态。(一个“Bundle”在OSGi术语中是一个模块。或者如果你是一个Eclipse开发人员,你可以认为它们像plug-ins一样;Bundles和plug-ins根本上一样的东西。)
Equinox将输出如下语句:
这告诉我们有一个Bundle被安装和激活了,并且它是系统Bundle。这是一个在OSGi中总是存在的特殊Bundle,它表示框架本身。
现在我们将要书写我们自己的Bundle。在之前的同样的目录下,建立一个名为HelloActivator.java的文件并复制如下代码到里面:
一个Bundle也需要一个manifest文件来声明各种关于Bundle的描述数据,例如它的名称,版本等等。所以创建一个名为HelloWorld.mf并复制以下文本到里面。非常肯定的是这个文件以一个空行结尾,不然的话jar命令行工具将截去这个文件。
现在打开一个新的命令提示符(因为我们想要离开OSGi的运行)并使用下列命令建立Jar文件:
回到OSGi控制台,输入install file:HelloWorld.jar。回复将是“Bundle id is 1”。再次输入ss并且你将看到如下输出:
我们的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
事实上,第一个公告将比其他的要稍微长一点,因为我们需要设置一个非常基本的工作环境。开始之前,我们需要一个OSGi框架来运行。有三种开源实现来选择:Apache Felix,Knopflerfish和Equinox。我们将要写的代码都会统一在你选择的任意一个上都没问题,但是在启动指令上将有小小的不同。在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 | Framework is launched. id State Bundle 0 ACTIVE system.bundle_3.2.1.R32x_v20060919 |
这告诉我们有一个Bundle被安装和激活了,并且它是系统Bundle。这是一个在OSGi中总是存在的特殊Bundle,它表示框架本身。
现在我们将要书写我们自己的Bundle。在之前的同样的目录下,建立一个名为HelloActivator.java的文件并复制如下代码到里面:
1 | 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 | 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 | > 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 | 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 次评分)
评论: 1 | 查看次数: 957
- 共有 1 条评论
- 共有 1 条评论
发表评论
订阅
上一篇
|

文章来自:
标签: 





上海翻译
太阳能路灯
英语培训
英语口语
藏獒
防腐管道
液压缸
油缸
移民
投资移民
加拿大移民
技术移民
移民加拿大
澳洲技术移民
德国移民
移民澳洲
澳洲移民
出国移民
移民出国
英国移民
澳大利亚移民
加拿大投资移民
加拿大技术移民
北京旅游
北京旅行社
条码机
条码打印机
条形码打印机
防腐设备
煤气发生炉
美国留学
法国留学
法国留学
北欧留学
瑞典留学
芬兰留学
澳洲留学
除湿机
抽湿机
工业除湿机
空气净化器
空气净化机
美术培训
美术高考
美术高考培训
画室
北京画室
谐波治理
无功补偿