- 浏览: 387841 次
- 性别:
- 来自: 北京
最新评论
-
liuzhongzhou2721:
不错啊
Snmp4j编程简介之三:Snmp -
ahong520:
我在Keystore.getInstance("JK ...
java实现 SSL双向认证 -
tanghanlin:
好吧,还是支持下
Snmp4j编程简介之三:Snmp -
sjp524617477:
mark
java实现 SSL双向认证 -
dikesky:
您好,看了您的这篇文章学到很多东西。希望您提供一个QQ号(发到 ...
httpclient笔记(二)
开发一个简单的Hello World的OSGi Bundle(OSGi绑定包)
在OSGi中,软件是以Bundle的形式发布的。一个Bundle由Java类和其它资源构成,它可为其它的Bundle提供服务,也可以导入其它Bundle中的Java包;同时,OSGi的Bundle也可以为其所在的设备提供一些功能。Eclipse为开发OSGiBundle提供了优秀的支持,它不仅提供了向导来创建OSGi Bundle,而且还提供了内嵌的Equinox容器,您可以使用该容器执行和调试OSGi插件。请注意每一个Eclipse插件,从本质上说,都是一个OSGi Bundle,只是这个OSGiBundle多加了一些Eclipse专用的代码而已。下面我们来看看如何使用Eclipse开发一个简单的OSGi的HelloWorld Bundle。
3.1.新建Bundle
1) 在Eclipse中,点击“File->New->Project”菜单,您将会看到新项目创建对话框;
2) 在新项目对话框中,选择“Plug-inProject(插件项目)”并点击“Next(下一步)”按钮,您将看到插件项目对话框;
3) 在插件项目对话框中,请键入下列值:
Project Name(项目名称):com.javaworld.sample.HelloWorld
Target Platform(目标平台):an OSGiFramework->Standard (OSGi框架->标准)
4) 对其它的要求输入值采用缺省值,并点击“Next(下一步)”按钮,您将会看到插件上下文对话框;
5) 在插件上下文对话框中,请选择缺省值并点击“Next(下一步)”按钮;
6) 在模板对话框中,请选择“Hello OSGiBundle(你好,OSGi包)”模板,然后点击“Finish(完成)”按钮完成该项目。
Eclipse将花几秒钟生成HelloWorld Bundle模板代码,它将新建两个文件:Activator.java和MANIFEST.MF,下面,让我们看看这两个文件:
3.1.1. Activator.java文件
源代码清单1.Activator.java
- package com.javaworld.sample.helloworld;
- importorg.osgi.framework.BundleActivator;
- importorg.osgi.framework.BundleContext;
- publicclass Activator implements BundleActivator {
- public void start(BundleContext context)throws Exception {
- System.out.println("Helloworld");
- }
- public void stop(BundleContext context)throws Exception {
- System.out.println("GoodbyeWorld");
- }
- }
如果您想让您开发的Bundle能在其启动或关闭时通知自身,那么您应新建一个类,让它实现BundleActivator接口,同时,您还需要遵行下列规则:
这个实现了BundleActivator接口的类必须有一个public的、不带参数的构造函数,这样,OSGi框架就能调用该类的Class.newInstance()方法创建这个BundleActivator对象;
容器将调用Activator类的start()方法来启动Bundle,因此,我们可以在start()方法中执行一些资源初始化的操作,例如,我们可以在该方法中获取数据库连接,以备后用。这个start()方法的唯一参数是一个BundleObject对象,Bundles可以通过该对象和OSGi框架通讯,我们可以从该对象中获取OSGi容器相关的一些信息;如果某个Bundle抛出异常,容器将之置为“stopped(已停止)”状态,此时,这个Bundle就不能对外提供服务。
如果我们要关闭一个Bundle,容器将调用Activator类中的stop()方法。因此,我们可在stop()方法中执行一些资源清理任务,比如释放数据库连接。
一旦Activator类准备就绪,您就可以通过MANIFEST.MF文件把该包的合法名称传给容器。下面,我们就看看这个MANIFEST.MF文件。
3.1.2. MANIFEST.MF文件
该文件是Bundle的部署描述文件,其格式和正常JAR文件包中的MANIFEST.MF文件相同,因此它由一系列的属性及这些属性对应的值组成,属性名位于每一行的开头,我们可以称其为属性头。OSGi规范规定,您可以使用属性头向容器描述您的Bundle。您的HelloWorld Bundle的MANIFEST.MF文件看起来应该如清单2所示:
源代码清单2. Hello World Bundle中的MANIFEST.MF文件
- Manifest-Version:1.0
- Bundle-ManifestVersion:2
- Bundle-Name:HelloWorld Plug-in
- Bundle-SymbolicName:com.javaworld.sample.HelloWorld
- Bundle-Version:1.0.0
- Bundle-Activator:com.javaworld.sample.helloworld.Activator
- Bundle-Vendor:JAVAWORLD
- Bundle-Localization:plugin
- Import-Package:org.osgi.framework;version="1.3.0"
我们来看看这个文件中使用的属性头:
Bundle-ManifestVersion
该属性头告诉OSGi容器,本Bundle将遵循OSGi规范,数值2表示本Bundle和OSGi规范第4版本兼容;如果该属性的数值为1,那么则表示本包和OSGi版本3或更早版本兼容。
Bundle-Name
该属性头为本Bundle定义了一个简短的、可以阅读的名称;
Bundle-SymbolicName
这个属性头为本Bundle定义了一个唯一的、非本地化的名字;当您需要从别的Bundles中访问某一指定的Bundle时,您就要使用这个名字。
Bundle-Version
该属性头给出了本Bundle的版本号。
Bundle-Activator
该属性头给出了本Bundle中使用的监听器类名字,这个属性值是可选的。监听器将对Activator中的start()和stop()方法监听。在程序清单2中,该属性头的值为com.javaworld.sample.helloworld.Activator。
Bundle-Vendor
该属性头是对本Bundle发行商的表述。
Bundle-Localization
该属性头包含了本Bundle的本地化文件所在的位置,我们的HelloWorld Bundle中并没有本地化文件,但Eclipse IDE仍自动产生这个属性头
Import-Package
该属性头定义了本Bundle中引入的Java包,我将在本文后面的依赖性管理小节中详细讲解这个问题。现在,HelloWorld Bundle已经准备就绪,让我们来运行并看看它的输出结果。
3.2. 运行Bundle
我在前面提到,Eclipse IDE中有一个内嵌的EquinoxOSGi容器,您可以利用它来执行或调试OSGi Bundle。请按照下面步骤执行刚才的HelloWorld Bundle:
1 ) 单击RunàRun… 菜单(译者注,在Eclipse3.3中,请单击RunàOpen Run Diglog…菜单);
2) Eclipse会打开“Create,manage and run configuration(新建、管理和运行配置)”对话框,请双击”EquinoxOSGi Framework”按钮,Eclipse将打开运行时配置对话框;
3) 在上面的对话框中,将Name(名称)输入框的值改为HelloWorld Bundle;
4) 您会注意到在Workspace插件目录下,有一个名为com.javaworld.sample.HelloWorld的插件,请选中它;在TargetPlatform(目标平台)下,请确保org.eclipse.osgi插件被选中。您的Run(运行)对话框应该看起来如图1所示:
图1. HelloWorld Bundle的运行配置
5) 现在,请单击Run(运行)按钮,您应该看到控制台视图上打印出“HelloWorld”。其实,Eclipse是在控制台视图中打开OSGi控制台。
3.2.1. OSGi控制台
OSGi控制台是OSGi容器的命令行界面,您可以在这个控制台上启动、停止、安装、更新和删除Bundles。在EclipseIDE中,请点击该控制台视图获得焦点,然后按回车键,这时您可以看到OSGi提示符,如图2所示:(译者注,在Eclipse3.3中,如果您没有看到OSGi提示符,请在图1的运行配置中,点击Arguments标签,然后在ProgramArguments(程序参数)输入框中键入“-console”,然后再次运行该Bundle)。
图2. OSGi控制台和HelloWorldActivator.java
下面是几个经常使用的OSGi命令,您可以使用这些命令与OSGi容器进行交互。
- ss: 该命令显示所有已安装的Bundles及它们的状态,它将显示Bundle ID,Bundle的简短名称及Bundle状态;
- start< bundleid>: 该命令将启动一个Bundle;
- stop< bundleid>: 该命令将停止一个Bundle;
- update< bundleid>: 该命令使用新的JAR文件更新一个Bundle;
- install< bundleid>: 该命令将一个新的Bundle安装到OSGi容器;
- uninstall< bundleid>: 从OSGi容器中卸载一个已安装的Bundle。
请注意,这些命令是OSGi规范中规定的,因此,您可以使用它们和任何OSGi容器交互。
读到这里,希望您对OSGi Bundle的开发有了一个大致的了解。
发表评论
-
OpenNMS® 安裝指南
2011-03-10 16:20 1906THIS DOCUMENT IS FOR OpeNNMS 1. ... -
OSGI学习笔记(三)
2010-09-09 11:08 1205OSGi依赖性管理 OSGi允许您把您的应用程序分成多个模 ... -
OSGI学习笔记(一)
2010-09-09 10:43 1199OSGi是什么 OSGi亦称做Java语言的动态模块系统,它 ... -
Javarebel小试
2010-09-07 16:49 34181 Javarebel简介 JavaRebel是一个JV ... -
240多个jQuery插件下载地址
2009-08-11 17:24 12049概述 jQuery 是继 prototype 之后又一个优秀 ... -
关于SNMP的RFC文档号
2009-05-04 16:10 4635一. SMIv1Full Standards: ... -
JavaCard CPU的设计与FPGA实现
2009-05-04 14:28 22581 JavaCard简介 智能 ... -
Java Card 技术(三)
2009-05-04 14:17 2663Java Card 应用程序的元素 请记住,Java ... -
Java Card 技术(二)
2009-05-04 14:13 2763本系列文章的第 1 部分介绍了 Java Card 技术的 ... -
Extjs学习笔记(一)
2008-12-15 13:39 1634下载extj :http://extjs.com/deploy ... -
ftp4j之FTP
2008-12-01 10:11 3739The ftp4j library implements a ... -
James学习笔记
2008-11-25 15:13 3419Apache James 简称 James, 是 Java ... -
非阻塞的Socket链接(来自老紫竹)
2008-11-25 11:10 1749import java.io.IOException; ... -
java实现 SSL双向认证
2008-11-24 16:36 31290实现技术:JSSE(Java Security Socket ... -
编码传说
2008-11-21 17:38 1347很久很久以前,有一群人,他们决定用8个可以开合的晶体管来 ... -
使用Log4j进行日志操作
2008-10-16 11:36 1180使用Log4j进行日志操作1. 概述1.1. 背景在应用程序中 ... -
linux 下cpu 内存 磁盘 jvm的使用监控
2008-07-24 13:50 2985java 监控linux CPU 内存 磁盘 JVM: imp ... -
snmp4j获取数据agent实例(三)
2008-07-03 11:43 6733agent代理端例子: import java.util. ... -
snmp4j获取数据实例(二)之SnmpTrap示例
2008-07-03 10:27 6654snmp4j的jar包可以在它的官方网站http://www. ... -
snmp4j获取数据实例(一,Linux SNMP OID’s for CPU,Memory a)
2008-07-03 09:10 9107常用SNMP OID Linux SNMP OID’s f ...
相关推荐
在本篇“osgi学习笔记(二)”中,我们将深入探讨OSGi(Open Services Gateway Initiative)框架的核心概念、工作原理以及如何在实际项目中应用它。OSGi是一种Java模块化系统,它允许开发人员创建可独立更新和依赖...
OSGi(Open Services Gateway Initiative)学习笔记(一) 在IT领域,OSGi是一种模块化系统和Java服务平台,它提供了一种动态管理软件组件的能力。本文将深入探讨OSGi的基本概念、架构以及如何使用它来构建可扩展和...
OSGI(Open Services Gateway Initiative)是一种Java模块化系统,它允许开发者将应用程序分解为独立的模块,称为bundle,每个bundle包含自己的类加载器和资源。这些bundle可以通过动态安装、启动、停止、更新和卸载...
在本篇OSGi学习笔记中,我们将深入探讨OSGi(Open Service Gateway Initiative)这一模块化系统,特别是关于服务方面的知识。OSGi是一个Java平台上的动态模块化系统,它允许开发者创建可热部署、互相依赖的模块,...
OSGi(Open Service Gateway Initiative)是一个基于Java语言的服务规范,旨在提供一个开放的服务平台,它...学习OSGi原理与最佳实践,不仅可以提升个人的编程和系统设计能力,也是把握现代Java开发趋势的重要一环。
本文将深入探讨Eclipse插件开发的相关知识点,结合提供的"全书分为4篇共24章"的学习笔记和源码,帮助你更全面地理解和实践Eclipse插件开发。 第一篇:基础篇 在这一篇中,你将学习到Eclipse插件开发的基础知识,...
Eclipse插件开发学习笔记将带领我们深入了解Eclipse插件开发的方方面面。 首先,我们需要了解Eclipse插件的基础概念。在Eclipse中,插件主要由一系列的扩展点(Extension Points)组成,这些扩展点定义了插件可以...
本学习笔记将深入探讨Eclipse插件开发的相关知识,以帮助你掌握这一核心技能。 一、Eclipse插件体系结构 Eclipse基于OSGi(Open Service Gateway Initiative)框架,采用模块化设计,使得每个功能都以插件的形式...
本学习笔记涵盖从基础到进阶的Eclipse插件开发全过程,通过24个章节的源代码实例,旨在帮助开发者掌握如何创建、调试和发布Eclipse插件。 在Eclipse插件开发中,首先需要理解的是OSGi(Open Services Gateway ...
### Eclipse插件开发知识点解析 #### 一、Eclipse平台简介 **1.1 Eclipse集成开发环境(IDE)** ...通过以上内容的学习,开发者可以全面掌握Eclipse插件开发的基本原理和技术细节,为进一步深入研究打下坚实的基础。
【Eclipse插件开发学习笔记】是一本详细探讨Eclipse插件开发的教程,由张鹏等人编写。这本书深入浅出地介绍了如何利用Eclipse平台进行插件开发,旨在帮助开发者提升在Eclipse环境中定制和扩展功能的能力。通过阅读...
在这个学习笔记中,我们将深入探讨Hibernate4的二级缓存机制、访问策略以及一些主要的新特性。 **1. 二级缓存分类** Hibernate的二级缓存将不同类型的实体分开存储,这有助于优化性能和内存管理: - **单个实体**...
### Java学习笔记知识点总结 #### 一、JVM与内存管理 **1.1 JVM基本概念** - **JVM(Java Virtual Machine)**: Java虚拟机是执行Java字节码的虚拟机,它提供了运行Java程序所需的环境。 **1.2 线程** - **线程...
本篇笔记将探讨如何在OSGi环境中注册服务以及如何引用这些服务,同时会涉及到源码分析和工具的使用。 首先,OSGi服务是一个在OSGi容器中注册的可发现和可使用的对象。服务注册的过程通常包括以下步骤: 1. **实现...
标题中的“很久之前的osgi整理”表明这是一份关于OSGi技术的历史回顾或者早期学习笔记。OSGi(Open Service Gateway Initiative)是一个Java模块化系统,它允许开发人员将应用程序分解为独立的模块或服务,这些模块...
《Eclipse插件学习笔记》是一本专注于Eclipse插件开发的书籍,旨在帮助开发者深入理解和掌握Eclipse平台上的插件开发技术。Eclipse作为一款强大的开源集成开发环境(IDE),其可扩展性主要体现在丰富的插件系统上,...
这个"struts2学习笔记"涵盖了Struts2的核心概念、配置、动作、拦截器、结果类型等关键知识点,旨在帮助初学者深入理解并掌握Struts2框架。 1. **Struts2核心概念** - **Action**:是Struts2的核心,负责处理用户的...
文档中提及的修订记录揭示了该学习笔记是如何逐步完善的过程,从概念理解、环境搭建、开发测试到应用发布和项目部署,每一修订版本都对应着学习笔记内容的更新和完善。这些记录有助于跟踪学习进度和笔记内容的演变。...