`
switchlau
  • 浏览: 54412 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

(转) 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

分享到:
评论

相关推荐

    《深入理解OSGi:Equinox原理、应用与最佳实践》迷你书

    OSGi(Open Services Gateway initiative)是一个用于Java平台的模块化规范,它允许应用程序和服务动态地被部署、启动、停止、更新和卸载,而无需重启整个系统。OSGi特别适用于需要高度模块化和动态服务管理的应用...

    OSGi in Practice 完整版

    创建第一个OSGi bundle是一个简单的练习,旨在熟悉基本的OSGi开发流程。 **2.8 Bundle生命周期** 了解bundle的生命周期对于正确地管理bundle的状态至关重要。 **2.9 增量开发** 在OSGi环境中,增量开发意味着...

    tomcat-osgi压缩包

    在提供的压缩包文件名称“Tomcat-OSGi-QuickStart”中,"QuickStart"通常表示这是一个快速入门或示例项目,帮助用户快速理解和实践如何在Tomcat中配置和使用OSGi。这个压缩包可能包含了预配置的Tomcat服务器,示例...

    Geting started with Equinox and OSGi

    2. **创建第一个Bundle**:在OSGi中,模块被称为Bundle。本教程将指导你如何创建并运行一个Bundle。首先,在Eclipse中创建一个新的插件项目作为Bundle。选择“File” > “New” > “Project…”;在弹出的对话框中,...

    Getting Started with OSGi_ Part1

    在标题“Getting Started with OSGi Part1”中,指明了这是一个关于OSGi入门的系列文章中的第一部分。描述部分虽然为“NULL”,但可以从给定的内容中提取出文章的重点信息。标签“源码工具”可能意味着在文章的系列...

    OSGI实战

    - **简介**: 一个较新的OSGI框架,专注于提供轻量级、高性能的服务支持。 - **应用场景**: 适用于需要快速启动、低内存占用的场景。 - **5.3 Knopflerfish**: - **简介**: 一款开源的OSGI兼容的框架,以其稳定性...

    OSGi Technology 教程

    首先,"Getting Started with OSGi 1 Your First Bundle.pdf"是入门篇,讲解了如何创建你的第一个OSGi捆绑包(Bundle)。捆绑包是OSGi的基本模块单位,包含了可执行的Java代码和其他资源。开发者需要了解如何定义...

    EclipseMavenSpringDM(译文)- 中文版

    #### 第1章 介绍 本章节主要介绍了本指南的背景及目的。本指南旨在帮助开发者安装并配置开发环境以支持Spring Dynamic Modules (DM) for OSGi平台项目。通过使用现有工具如Eclipse集成开发环境、Eclipse的Equinox ...

    osgi-basic-helloworld

    OSGi(Open Services Gateway Initiative)是一种Java模块化系统,它允许开发者将应用程序分解为独立的...这对于理解更复杂的OSGi应用,如分布式系统、微服务架构或大型企业级应用的模块化设计,都是至关重要的第一步。

    konpflerfish konpflerfish tutorial

    选择 Knopflerfish 的原因是它易于安装,并且提供了强大的桌面图形用户界面,这将帮助您快速部署第一个 OSGi 组件(bundle)。 在本教程的第一部分,读者将会快速了解如何安装 Knopflerfish。接下来,您将创建并...

    RCP中文入门教程.pdf

    构建RCP应用的第一步是从创建一个Eclipse插件项目开始。在Eclipse IDE中,通过`File > New > Project > Plug-in Development > Plug-in Project`路径来启动插件工程的创建过程。在向导中,输入项目名称,如`...

    Communiqué 5.3 Developer Training Exercise Guide

    #### 二、第一天:基础环境搭建与入门实践 ##### 1. 安装与启动作者实例(Author Instance) **目标**:学习如何安装并启动一个作者实例。这是非常重要的第一步,因为接下来的培训过程中将大量使用这个实例来进行...

    Eclipse插件开发培训

    1. **插件(Plug-in)与Bundle**: 插件是Eclipse平台的核心组件,每个插件都是一个独立的功能单元,可以提供特定的服务或功能。Bundle是OSGi框架下的术语,它与Eclipse插件相等价,是可部署的代码模块,包含了运行时...

    eclipse_others

    7. `artifacts.xml`:该文件是OBR(OSGi Bundle Repository)的一部分,用于描述Eclipse中所使用的各个插件及其依赖关系,有助于管理Eclipse的插件库。 8. `readme`:通常包含的是安装指南、更新信息或版本说明等...

    Rich Client Tutorial Part 3

    2. **设置项目基本信息**:在后续页面中输入项目名(例如`org.eclipse.ui.tutorials.rcp.part3`),指示创建一个Java项目,选择Eclipse的目标版本(至少3.1),并启用创建OSGi Bundle清单文件的选项。 3. **选择...

Global site tag (gtag.js) - Google Analytics