`
catchid2003
  • 浏览: 18950 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

OSGI入门:Bundle 版的HelloWorld

    博客分类:
  • OSGI
阅读更多

        在接下来的两个星期里,EclipseZone将为员工举行一系列OSGi短期培训。经过这样,他们将顺利的掌握OSGi的编程艺术。他们将在每一期课程中了解到一些新的知识,并且通过10分钟的学习,将知识运用在工作中。同样,我们也将展示开发OSGi是多么的容易。为此,我们将不使用Eclipse进行开发,我们只用文本编辑器和基本的命令行来开发。现在,欢迎走入“Getting Started with OSGi”系列。

 

       实际上,第一堂课可能要比后面的课多花点时间,因为我们需要搭建基本的工作环境。在开始之前,我们需要将OSGi框架运行起来。目前有三个开源的框架可以让我们选择:Apache Felix,Knopflerfish,和Equinox。无乱选择什么框架,对我们将要写的代码没有影响,只不过运行过程中的提示可能有所不同。既然这里是EclipseZone,那我们选择Equinox——Eclipse自己建立的OSGi框架。你可以在你的Eclipse安装根目录中,找到plugins文件夹,然后将其中的org.eclipse.osgi_…….jar(省略号表示它的版本号,Eclipse版本不一样,版本号也不一样。如果你实在找不到,可以从http://download.eclipse.org/eclipse/equinox/ 中下载equinox并从中找到这个jar包 )拷贝到一个空的文件夹中(最好是C盘的根目录下的空文件夹中,这样不会由于其他因素造成不必要的困惑)。为了更加方便的进行学习,我们将这个org.eclipse.osgi_…….jar改名为equinox.jar。然后在我们的开发环境下打开命令行并且输入以下命令(先用cd命令将工作目录切换到该文件夹下):

Cmd代码 复制代码
  1. java -jar equinox.jar -console   
java -jar equinox.jar -console 

 

       然后,在命令行控制台中便会出现“osgi> ”。恭喜你,你已经成功的启动了OSGi!

 

        “osgi> ”为我们提供了一个进入命令以便我们对equinox框架进行控制。如果你喜欢,可以输入“help”来查看命令列表,并且尝试一下这些命令。现在,我们试一下“ss”。这个是常用的命令,它是“short status”的简写。它会列出所有已经安装好的bundle以及这些bundle的状态。(bundle是OSGi中的模式,如果你是一名Eclipse开发者,那么你可能以插件来称呼它们。实际上,bundle和插件是相同的东西。)当我们输入“ss”之后,Equinox将会在命令行中打印出一下的内容:

 

Cmd代码 复制代码
  1. Framework is launched.   
  2.   
  3. id            State                  Bundle   
  4. 0             ACTIVE               system.bundle_3.2.1.R32x_v20060919  
Framework is launched.

id            State                  Bundle
0             ACTIVE               system.bundle_3.2.1.R32x_v20060919

 

        这是告诉我们已经有一个bundle被安装并且并执行了。它是一个系统的bundle,并在OSGi运行的过程中,将永远存在,它代表了框架本身。现在,我们将写一个自己的bundle。在刚才存放equinox.jar 的文件夹中,新建一个文件,并且取名HelloActivator.java,并将一下代码粘贴过去。

Java代码 复制代码
  1. import org.osgi.framework.*;   
  2.   
  3. public class HelloActivator implements BundleActivator {   
  4.     public void start(BundleContext context) {   
  5.         System.out.println("Hello EclipseZone Readers!");   
  6.     }   
  7.   
  8.     public void stop(BundleContext context) {   
  9.         System.out.println("Goodbye EclipseZone Readers!");   
  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的文件(注意:后缀名为.MF),然后输入以下内容,并且确定在文件结尾留一个空行,否则的话,jar命令将会截断此文件,造成错误。

Helloworld.mf代码 复制代码
  1. Manifest-Version: 1.0  
  2. Bundle-ManifestVersion: 2  
  3. Bundle-Name: HelloWorld Plug-in   
  4. Bundle-SymbolicName: Login_ConfigFileLoginBundle   
  5. Bundle-Version: 1.0.0  
  6. Bundle-Activator: HelloActivator   
  7. Import-Package: org.osgi.framework;version="1.3.0"  
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: HelloWorld Plug-in
Bundle-SymbolicName: Login_ConfigFileLoginBundle
Bundle-Version: 1.0.0
Bundle-Activator: HelloActivator
Import-Package: org.osgi.framework;version="1.3.0"

 

      然后我们新打开一个命令行窗口(待会再返回刚才的命令行窗口进行OSGi操作)用以下的命令来打一下包(先将工作目录切换到该文件夹下),

Java代码 复制代码
  1. > javac -classpath equinox.jar HelloActivator.java   
  2. > jar -cfm HelloWorld.jar HelloWorld.mf HelloActivator.class    
> javac -classpath equinox.jar HelloActivator.java
> jar -cfm HelloWorld.jar HelloWorld.mf HelloActivator.class  

 

       打完包后,返回到刚才的OSGi命令行控制台,输入“install file:HelloWorld.jar”。控制台里将会打印出“Bundle id is 1”。然后输入“ss” 你将会看到以下的内容:

Cmd代码 复制代码
  1. Framework is launched.   
  2. id          State                Bundle   
  3. 0           ACTIVE             system.bundle_3.2.1.R32x_v20060919   
  4. 1           INSTALLED       HelloWorld_1.0.0  
Framework is launched.
id          State                Bundle
0           ACTIVE             system.bundle_3.2.1.R32x_v20060919
1           INSTALLED       HelloWorld_1.0.0

 

      我们的HelloWorld Bundle已经安装上去了。但是它还没有被运行。我们将在以后会思考这个状态是什么意思,但是现在我们需要通过“start 1”来运行这个Bundle。这个“1”是每个Bundle的ID编号,就是上面第一列的内容。当你看到了“Hello EclipseZone Readers! ”的信息后,输入“stop 1”,你又会看到“Goodbye EclipseZone Reader!”,重复这个操作,直到你厌倦。不要忘记了偶尔通过“ss”命令查看每一个Bundle的状态(State)有没有发生变化。

 

       这里面发生了什么?我们的类实现了BundleActivator接口,允许框架通知我们重要的Bundle的生命活动。当我们启动Bundle的时候,框架执行“start”这个方法;当我们停止Bundle的时候,框架执行“stop”这个方法。只是因为在manifest文件中,也就是我们刚才的“HelloWorld.MF”文件中有这样一句话“Bundle-Activator: HelloActivator”,他告诉了框架哪一个Bundle类被激活。正常情况下我们会给出规范的名称,但是我们很懒惰所以我们使用默认的软件包。

 

       到这里我们就此结束第一次课。下节课见!

 

 

分享到:
评论

相关推荐

    osgi helloworld

    "osgi helloworld"是一个入门级的示例,旨在帮助初学者理解OSGi的基本概念和工作原理。这个实例包括了两个部分:`server`和`client`,它们都是OSGi的bundle。 首先,我们来看`server` bundle。这个bundle通常扮演...

    OSGi开发环境建立和Hello World

    文章《OSGi开发环境建立和Hello World》详细介绍了如何搭建OSGi开发环境,并通过Hello World程序的开发实践来巩固前面入门篇的内容。 首先,需要了解Equinox是OSGi核心标准的一个完整实现,并且添加了一些额外的...

    OSGi HelloWorld实例

    "OSGi HelloWorld实例"是一个典型的入门教程,旨在帮助初学者理解如何在OSGi环境中创建和运行一个简单的程序。 首先,我们需要了解OSGi的基本概念: 1. **模块(Bundle)**:在OSGi中,模块是软件的基本单元,它们...

    osgi-bundle-hello-world:使用Maven的演示OSGI捆绑包

    2. `src/main/java`: 存放Java源代码的目录,可能有HelloWorld相关的类。 3. `src/main/resources`: 可能包含资源配置文件或其他非Java资源。 4. `src/main/osgi`: 如果有的话,可能是OSGi特定的配置文件,如...

    IntelliJ IDEA OSGI helloworld

    **IntelliJ IDEA OSGI HelloWorld程序详解** OSGi(Open Service Gateway Initiative)是一个Java模块化系统和标准,它允许开发人员将应用程序分解为独立的模块,这些模块可以在运行时动态地安装、卸载和升级,而不...

    Spring OSGI 快速入门中文教程

    - **样例项目**:"samples"文件夹可能包含各种示例项目,如HelloWorld服务和消费者。 - **构建与运行**:使用Maven或Gradle构建Bundle,然后在OSGi运行时环境中启动。 通过阅读《Spring OSGi 入门.pdf》和实践...

    OSGi -- Helloworld 学习记录一

    在"OSGi -- Helloworld 学习记录一"这篇博文中,作者很可能是分享了他/她初次接触并实践OSGi时的经验,通过创建一个简单的HelloWorld示例来介绍这个技术的基础概念。 首先,我们需要理解OSGi的核心特性:模块化。在...

    osgi入门与实践

    #### OSGi 版 HelloWorld 示例 通过一个简单的 HelloWorld 示例,可以深入了解 OSGi 的基本运行机制。这个示例通常涉及以下步骤: 1. **创建 Bundle 项目**:使用 Eclipse 创建一个新的 OSGi Bundle 项目。 2. *...

    基于EQUINOX的 OSGI BUNDLE 运行例子

    - `HELLOWORLD.MF`是Manifest文件,它包含了关于Bundle的重要元数据,如Bundle的名称、版本、依赖和其他配置信息。 - `步骤.txt`可能是运行示例的详细步骤指南,指导用户如何配置和启动OSGi环境以及部署和运行Bundle...

    GSGI+Eclipse LUNA 配置+HelloWorld例子+Bundle依赖

    在本文中,我们将深入探讨如何使用Eclipse Luna版本配置OSGi环境,并通过一个HelloWorld示例来理解OSGi模块化系统的基本概念。首先,我们从标题和描述中了解到,这是一篇关于使用Eclipse Luna进行OSGi插件开发的教程...

    基于Eclipse的Equinox框架开发OSGi Bundle应用

    **示例应用**:压缩包中的"osgi_example"可能包含了一个简单的OSGi Bundle示例,例如,创建一个HelloWorld服务,其他Bundle可以注册和使用这个服务。 总结来说,基于Eclipse的Equinox框架开发OSGi Bundle应用,可以...

    OSGi in Practice 完整版

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

    osgi-in-action-20090225

    "osgi-in-action"目录下的源码包含了书中各个章节的示例,如简单的Hello World Bundle,服务注册与查找,以及更复杂的系统集成案例。通过阅读和运行这些代码,你可以了解OSGi在实际开发中的运用。 7. OSGi在企业级...

    ‪第一个OSGi框架工程

    ### OSGi框架详解与首个HelloWorld项目实践 #### OSGi框架概述 OSGi(Open Service Gateway Initiative),作为一个强大的Java动态模块化平台,它的设计理念是实现真正意义上的模块化及动态化设计。这一理念体现在...

    Getting Started with OSGi_ Part2

    同时,这也表明了OSGi框架中bundle的持久性——即使重启了Equinox(一种OSGi框架的实现),之前安装的“HelloWorld”bundle仍然存在。 本教程的第二部分主要围绕以下知识点展开: 1. `BundleContext`的作用和重要...

    基于Equinox开发OSGi应用(一)

    创建一个HelloWorld bundle,我们需要编写一个主类,如`HelloWorld.java`,并在MANIFEST.MF中指定类路径和导出的包。例如,如果我们的主类在`com.example.helloworld`包下,MANIFEST.MF应包含以下内容: ``` ...

    osgi-basic-helloworld

    "osgi-basic-helloworld"是一个入门级别的OSGi项目,用于展示如何在Eclipse Mars集成开发环境中创建和运行一个简单的OSGi捆绑包。 首先,我们需要理解OSGi的核心概念: 1. **捆绑(Bundle)**:OSGi中的核心单元是...

    Equinox开发OSGi应用程序

    在弹出的窗口中输入项目名称为`osgi.test.helloworld`。 2. **配置项目设置**:在接下来的向导界面中,保持默认的项目路径不变。在目标平台的选择上,由于我们的目标是创建一个通用的OSGi bundle,因此选择`equinox...

Global site tag (gtag.js) - Google Analytics