前言:
从今天起,我开始翻译Neil Bartlett先生的《Getting Started with OSGi》。我觉得相对于《OSGi实战》与《OSGi进阶》,Neil Bartlett先生讲的更加明白易懂。因此,拿出来,给大家分享一下。本人的英语能力有限,但我会尽力将作者的意思说清楚。如果哪里有翻译不好的地方,请各位指出!附件为作者的原文。
第一章:第一个Bundle
在接下来的两个星期里,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命令将工作目录切换到该文件夹下):
java -jar equinox.jar -console
然后,在命令行控制台中便会出现“osgi> ”。恭喜你,你已经成功的启动了OSGi!
“osgi> ”为我们提供了一个进入命令以便我们对equinox框架进行控制。如果你喜欢,可以输入“help”来查看命令列表,并且尝试一下这些命令。现在,我们试一下“ss”。这个是常用的命令,它是“short status”的简写。它会列出所有已经安装好的bundle以及这些bundle的状态。(bundle是OSGi中的模式,如果你是一名Eclipse开发者,那么你可能以插件来称呼它们。实际上,bundle和插件是相同的东西。)当我们输入“ss”之后,Equinox将会在命令行中打印出一下的内容:
Framework is launched.
id State Bundle
0 ACTIVE system.bundle_3.2.1.R32x_v20060919
这是告诉我们已经有一个bundle被安装并且并执行了。它是一个系统的bundle,并在OSGi运行的过程中,将永远存在,它代表了框架本身。现在,我们将写一个自己的bundle。在刚才存放equinox.jar 的文件夹中,新建一个文件,并且取名HelloActivator.java,并将一下代码粘贴过去。
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命令将会截断此文件,造成错误。
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操作)用以下的命令来打一下包(先将工作目录切换到该文件夹下),
> javac -classpath equinox.jar HelloActivator.java
> jar -cfm HelloWorld.jar HelloWorld.mf HelloActivator.class
打完包后,返回到刚才的OSGi命令行控制台,输入“install file:HelloWorld.jar”。控制台里将会打印出“Bundle id is 1”。然后输入“ss” 你将会看到以下的内容:
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类被激活。正常情况下我们会给出规范的名称,但是我们很懒惰所以我们使用默认的软件包。
到这里我们就此结束第一次课。下节课见!
分享到:
相关推荐
1. `BundleContext`的作用和重要性:`BundleContext`为bundle提供了一种与OSGi框架进行交互的方式,它是获取其他bundle引用、服务和注册服务的入口点。它是实现OSGi应用动态性和模块化的核心概念。 2. 编程方式与...
《OSGi初识系列教程——第三部分:模块间的依赖关系》 在OSGi(Open Service Gateway Initiative)框架中,理解并管理模块间的依赖关系是至关重要的。本篇教程将深入探讨这一主题,帮助开发者们更好地掌握OSGi环境...
1. **OSGI基础**:OSGI的核心概念,如服务、模块(Bundle)、类加载器以及它们如何协同工作来构建可扩展和可维护的系统。 2. **OSGI架构**:OSGI框架的组成部分,如框架、服务注册表、生命周期管理(启动、停止、...
《深入理解OSGi:以org.eclipse.osgi_3.7.0.v20110613及其源码为例》 OSGi(Open Services Gateway Initiative)是一种Java模块化系统,它为开发人员提供了动态模块化的解决方案,使得Java应用程序能够更好地管理和...
1. **Bundle生命周期**:OSGI定义了bundle的四种状态——未安装、安装、启动和暂停。开发者可以通过API控制这些状态,以实现灵活的部署和更新。 2. **类加载器**:OSGI使用独特的类加载机制,每个bundle有自己的类...
1. **OSGi框架**:OSGi是一种服务导向的架构,它的核心功能是动态模块系统,允许在运行时安装、卸载、启动和停止模块,提供了灵活的依赖管理机制。 2. **C#版OSGi**:OSGi通常与Java关联,但这里我们讨论的是.NET...
标题中的“tomcat-osgi.rar_OsgiContentFactory_osgi_osgi tomcat 集成_osgi tom”表明这是一个关于Tomcat服务器与OSGi框架集成的资源包,其中可能包含了如何在Tomcat中使用OsgiContentFactory来管理OSGi服务的内容...
1. **OSGi基础**:介绍OSGi的核心概念,如模块系统(称为"bundle"),服务注册和发现机制,以及如何将Java应用程序划分为独立的模块。 2. **模块化开发**:讲解如何使用OSGi模块化你的代码,减少依赖冲突,提高代码...
1. OSGi框架的理解,包括其模块化概念、bundle管理和生命周期。 2. Spring DM的核心特性,如何在OSGi环境中管理Spring应用的bean和服务。 3. Java Runtime Environment在OSGi中的特殊性,如何支持每个bundle的独立...
1. OSGi简介: OSGi是一种基于Java的模块化系统,它定义了一套标准,使得Java应用程序可以被分解为独立的、可交互的模块。每个模块称为一个bundle,它们可以独立加载、更新或卸载,而不会影响其他模块。OSGi的核心...
1. **模块化系统**:OSGi的模块化系统基于Java类加载器的概念,每个bundle都是一个独立的类加载器域,有自己的类路径。这允许不同的bundle之间有明确的边界,避免了类冲突。 2. **服务注册与发现**:OSGi服务是模块...
org.eclipse.osgi_3.9.0.v20130529-1710.jar下载
首先,"Getting Started with OSGi 1 Your First Bundle.pdf"是入门篇,讲解了如何创建你的第一个OSGi捆绑包(Bundle)。捆绑包是OSGi的基本模块单位,包含了可执行的Java代码和其他资源。开发者需要了解如何定义...
解决ubuntu用软件中心安装的eclipse启动异常问题(java.lang.ClassNotFoundException: org.eclipse.core.runtime.adapt)
1. **模块化**:OSGI基于JAR文件进行模块化,每个JAR文件都可以被视为一个服务单元(Bundle),它包含了类、资源和元数据。每个服务单元都有自己的命名空间,避免了类加载器冲突问题。 2. **类加载器机制**:OSGI...
OSGi(Open Service Gateway Initiative)指OSGi Alliance组织制定的一个基于Java语言的服务(业务)规范——OSGi服务平台(Service Platform)。 它被广泛应用于嵌入式系统中,大名鼎鼎的eclipse也是基于此框架的,...
1. **模块化系统**:OSGI的核心理念是将Java应用程序划分为独立的模块,每个模块称为一个Bundle。这些模块之间通过服务接口进行通信,提高了代码的复用性和隔离性。 2. **生命周期管理**:OSGI框架提供了对Bundle的...