`
javaboy2006
  • 浏览: 186274 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

    博客分类:
  • java
阅读更多
一、创建Plug-in项目:osgiexample
package osgi.example.service;

/*
 * 定义服务接口<br/>
 * 为了将服务接口和服务实现分离,方便其它Bundle引用该服务,我们通常需要将该服务接口单独放在一个包内。
 */
public interface QueryService {

	public boolean queryUserName(String userName);

}


package osgi.example.activator;

import osgi.example.service.QueryService;

/*
 * 服务接口实现
 */
public class QueryServiceImp implements QueryService {

	private String[] userNames = { "Marry", "John", "David", "Rachel", "Ross" };

	public boolean queryUserName(String userName) {
		for (String tempUserName : userNames) {
			if (tempUserName.equals(userName)) {
				return true;
			}
		}
		return false;
	}

}


package osgi.example.activator;

import java.util.Properties;

import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;

import osgi.example.service.QueryService;

/*
 * 该类用来启动和停止Bundle应用。
 */
public class Activator implements BundleActivator {

	/*
	 * 利用BundleContext注册一个查询服务,并且为该服务设置相关属性。
	 */
	public void start(BundleContext context) throws Exception {
		Properties props = new Properties();
		props.put("ClassRoom", "ClassOne");
		context.registerService(QueryService.class.getName(),
				new QueryServiceImp(), props);
	}

	public void stop(BundleContext context) throws Exception {
	}

}


MANIFEST.MF文件
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: OsgiExample Bundle
Bundle-SymbolicName: osgiexample
Bundle-Version: 1.0.0
Bundle-Activator: osgi.example.activator.Activator
Import-Package: org.osgi.framework;version="1.3.0"
Eclipse-LazyStart: true
Bundle-Localization: plugin
Export-Package: osgi.example.service



二、创建Plug-in项目:osgiexampleclient
package osgi.exampleclient.activator;

import java.io.BufferedReader;
import java.io.InputStreamReader;

import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;

import osgi.example.service.QueryService;

/*
 * 在OSGi平台上查找并引用OsgiExample Bundle应用已经注册的查询服务。
 */
public class Activator implements BundleActivator {

	public void start(BundleContext context) throws Exception {
		ServiceReference[] serviceReferences = context.getServiceReferences(
				QueryService.class.getName(), "(ClassRoom=*)");
		if (serviceReferences != null) {
			System.out.println("Enter a blank line to exit.");
			BufferedReader bufferedReader = new BufferedReader(
					new InputStreamReader(System.in));
			String userName = "";
			while (true) {
				System.out.print("Enter a Name: ");
				userName = bufferedReader.readLine();
				if (userName.length() == 0) {
					break;
				}
				QueryService queryService = (QueryService) context
						.getService(serviceReferences[0]);
				if (queryService.queryUserName(userName)) {
					System.out.println("The Name is Correct.");
				} else {
					System.out.println("The Name is Incorrect.");
				}
				context.ungetService(serviceReferences[0]);
			}
		} else {
			System.out.println("Couldn't find any query service.");
		}
	}

	public void stop(BundleContext context) throws Exception {
	}

}


MANIFEST.MF文件
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Osgiexampleclient Bundle
Bundle-SymbolicName: osgiexampleclient
Bundle-Version: 1.0.0
Bundle-Activator: osgi.exampleclient.activator.Activator
Import-Package: osgi.example.service,org.osgi.framework;version="1.3.0"
Eclipse-LazyStart: true
Bundle-Localization: plugin



三、部署并运行Bundle应用
将开发的osgiexample和osgiexampleclient两个Bundle应用导出成Jar文件并启动OSGi服务平台。

Console Output:

osgi> ss

Framework is launched.

id	State       Bundle
0	ACTIVE      org.eclipse.osgi_3.3.2.R33x_v20080105
443	ACTIVE      osgiexample_1.0.0

osgi> install file:///C:\Documents%20and%20Settings\Administrator\桌面\新建文件夹\osgiexampleclient.jar
Bundle id is 1204

osgi> ss

Framework is launched.

id	State       Bundle
0	ACTIVE      org.eclipse.osgi_3.3.2.R33x_v20080105
443	ACTIVE      osgiexample_1.0.0
1204	INSTALLED   osgiexampleclient_1.0.0

osgi> start 1204
Enter a blank line to exit.
Enter a Name: test
The Name is Incorrect.
Enter a Name: Ross
The Name is Correct.
Enter a Name: 

osgi> ss

Framework is launched.

id	State       Bundle
0	ACTIVE      org.eclipse.osgi_3.3.2.R33x_v20080105
443	ACTIVE      osgiexample_1.0.0
1204	ACTIVE      osgiexampleclient_1.0.0

osgi> stop 1204

osgi> ss

Framework is launched.

id	State       Bundle
0	ACTIVE      org.eclipse.osgi_3.3.2.R33x_v20080105
443	ACTIVE      osgiexample_1.0.0
1204	RESOLVED    osgiexampleclient_1.0.0



附:OSGi Console Command
Valid commands:
---Controlling the OSGi framework---
	launch - start the OSGi Framework
	shutdown - shutdown the OSGi Framework
	close - shutdown and exit
	exit - exit immediately (System.exit)
	init - uninstall all bundles
	setprop <key>=<value> - set the OSGi property
---Controlling Bundles---
	install - install and optionally start bundle from the given URL
	uninstall - uninstall the specified bundle(s)
	start - start the specified bundle(s)
	stop - stop the specified bundle(s)
	refresh - refresh the packages of the specified bundles
	update - update the specified bundle(s)
---Displaying Status---
	status [-s [<comma separated list of bundle states>]  [<segment of bsn>]] - display installed bundles and registered services
	ss [-s [<comma separated list of bundle states>]  [<segment of bsn>]] - display installed bundles (short status)
	services {filter} - display registered service details
	packages {<pkgname>|<id>|<location>} - display imported/exported package details
	bundles [-s [<comma separated list of bundle states>]  [<segment of bsn>]] - display details for all installed bundles
	bundle (<id>|<location>) - display details for the specified bundle(s)
	headers (<id>|<location>) - print bundle headers
	log (<id>|<location>) - display log entries
---Extras---
	exec <command> - execute a command in a separate process and wait
	fork <command> - execute a command in a separate process
	gc - perform a garbage collection
	getprop  { name } - displays the system properties with the given name, or all of them.
---Controlling Start Level---
	sl {(<id>|<location>)} - display the start level for the specified bundle, or for the framework if no bundle specified
	setfwsl <start level> - set the framework start level
	setbsl <start level> (<id>|<location>) - set the start level for the bundle(s)
	setibsl <start level> - set the initial bundle start level
---Controlling the Profiling---
	profilelog - Display & flush the profile log messages

---Eclipse Runtime commands.---
	diag - Displays unsatisfied constraints for the specified bundle(s).
---Controlling the Console---
	more - More prompt for console output


OSGi manifest.mf 文件选项:
Bundle-Activator 
该类用于启动和停止绑定包。在上面的示例插件中,指定了 org.eclipse.pde.internal.ui.PDEPlugin 类。该类扩展 org.eclipse.core.runtime.Plugin,实现了 BundleActivator 接口。
Bundle-ClassPath 
该属性指定要用于绑定包的 CLASSPATH。该属性可以包含对绑定包 jar 文件中目录或 jar 文件的引用。可以使用句点指明绑定包的根。在示例 Eclipse PDE 绑定包中,指定了绑定包 jar 文件中的 org.eclipse.pde.ui_3.1.0.jar。如果将插件的源版本导入工作区中,导入过程将更改绑定包 CLASSPATH 以显示为 Bundle-ClassPath:,这允许插件的开发版本挑选已编译的绑定包类。
Bundle-Version 
该属性指定绑定包的版本号。包导入和必需的绑定包规范可以包括绑定包版本号。
Export-Package 
该属性指定要公共暴露给其他插件的所有包。
Import-Package 
该属性指定要从必需插件中显式导入的所有包。默认情况下,必须为要启动的绑定包解析所有包。还可以将包导入指定为可选项,以支持包不存在的情况。显式导入的类在 Require-Bundle 插件中的包之前解析。
Require-Bundle 
该属性指定要在给定绑定包中导入使用的绑定包及其已导出的包。指定的绑定包在显式包导入之后解析。
分享到:
评论

相关推荐

    基于EQUINOX的 OSGI BUNDLE 运行例子

    通过这个例子,学习者可以了解OSGi Bundle的结构,如何在EQUINOX上部署和管理它们,以及如何使用Eclipse作为开发工具来创建和调试OSGi应用。这涉及到理解Bundle的生命周期、MANIFEST.MF文件的编写、Eclipse插件的...

    基于Equinox开发OSGi应用(一)

    总结来说,基于Equinox的OSGi应用开发是一种强大的模块化开发方式,它提供了高度的灵活性和可扩展性。通过学习和实践,我们可以创建更加健壮、易于维护的Java应用程序。"helloworld"项目是一个很好的起点,它能帮助...

    使用Equinox开发OSGI应用程序工程及源码

    以下是基于Eclipse 3.3的Equinox OSGi开发的主要知识点: 1. **OSGi基础知识**:理解OSGi的核心概念,包括模块(Bundle)、服务、生命周期(启动、停止、更新、卸载)以及依赖管理。每个OSGi模块(Bundle)都是一个...

    Equinox OSGi 开发

    为了进行基于Equinox的OSGi Bundle开发,首先需要确保以下软件已安装在你的机器上:Eclipse SDK 3.2(或更高版本),可以从eclipse.org下载。此外,还需要从CVS获取教程项目,具体步骤包括设置CVS Repository ...

    使用Equinox开发OSGi应用程序

    由于IBM的强力支持,Equinox不仅具有良好的文档和社区资源,也成为开发者进行OSGi应用开发的首选框架。 【OSGi应用开发】 开发OSGi应用程序通常包括以下几个步骤: 1. **环境准备**:确保拥有一个支持OSGi R4的...

    基于Eclipse开发OSGI的简单实例

    **基于Eclipse开发OSGI的简单实例** OSGi(Open Services Gateway Initiative)是一种Java模块化系统,它允许在单个JVM上动态地部署、管理、发现和使用服务。Eclipse是一个广泛使用的开源集成开发环境(IDE),它...

    Equinox开发OSGi应用程序

    为了开发基于OSGi的应用程序,需要使用实现了OSGi标准的框架。目前市场上有几种流行的OSGi框架: 1. **Equinox**:这是Eclipse项目中使用的OSGi框架,也是Eclipse强大插件体系的基础。由于得到了IBM的支持,Equinox...

    深入理解OSGi:Equinox原理、应用与最佳实践.pdf

    例如,Eclipse IDE就是基于OSGi框架构建的,它允许开发者动态地添加、卸载插件而不需要重启整个开发环境。在企业应用中,OSGi可以用来构建服务网关或者中间件,以支持微服务架构。 由于OSGi提供了一个严格的模块化...

    Equinox OSGi应用嵌入Jersey框架搭建REST服务

    Equinox OSGi是IBM公司开发的一个开源OSGi实现,它是Eclipse项目的一部分,用于创建模块化、可扩展且轻量级的应用程序。OSGi(Open Service Gateway Initiative)是一种Java平台的标准,它允许开发者将应用程序分解...

    Geting started with Equinox and OSGi

    1. **Equinox简介**:Equinox是一个高度模块化、动态的Java运行环境,基于OSGi框架规范构建。它体积小巧,性能卓越,且高度可定制。Equinox是所有Eclipse系统的基础,从嵌入式航空自助登机亭、滑雪场闸门到丰富的...

    OSGI应用程序

    总的来说,配置一个基于Eclipse Equinox OSGi的Web应用程序涉及对OSGI基本概念的理解、Eclipse Equinox的使用、Web服务的封装以及OSGI环境下的服务注册和发现。通过这种方式,你可以构建一个高度模块化、可扩展且...

    org.eclipse.equinox.http.helper Bundle

    让OSGi支持JSP和JSF时必须用到的一个Bundle,有用到的可以下载,有耐心的童鞋也可到dev.eclipse.org的CVS开发空间去找找咯。

    基于OSGi和Spring开发Web应用教程

    Spring框架则是一个流行的轻量级Java企业级应用开发框架,它提倡面向接口编程和依赖注入(DI)原则,有助于减少代码耦合度和提高组件的可测试性。Spring-DM(现在称为Spring OSGi)是Spring框架的一个扩展,旨在将...

    基于 OSGI 的 RCP 测试 1 Equinox

    "基于 OSGi 的 RCP 测试 1 Equinox" 指的是一个关于使用 OSGi(Open Services Gateway Initiative)框架构建 Rich Client Platform (RCP) 应用程序的测试项目,重点是 Equinox 实现。Equinox 是 Eclipse 基金会的一...

    深入理解OSGi:Equinox原理、应用与最佳实践源代码+equinox-SDK-3.8源代码

    OSGi(Open Services Gateway Initiative)是一种开放标准...通过这本书和源代码的学习,开发者可以深入理解OSGi和Equinox的工作原理,掌握如何构建、管理和维护基于OSGi的复杂Java应用程序,提升软件设计和开发能力。

    OSGi与Equinox 创建高度模块化的Java系统 第4章完整源码

    Equinox是IBM贡献给Eclipse基金会的一个OSGi实现,它是Eclipse IDE的基础,使得开发者可以构建、管理和运行基于OSGi的Java应用。 在"OSGi与Equinox 创建高度模块化的Java系统 第4章完整源码"中,我们可以学习到以下...

    深入理解OSGi:Equinox原理、应用与最佳实践,书本源代码

    通过学习这个主题,开发者不仅可以提升对模块化编程的理解,还能掌握一种更高效、灵活的Java应用开发方式。无论是在桌面应用、服务器端应用还是嵌入式系统中,OSGi都能带来显著的优势。因此,深入研究OSGi和Equinox...

    eclipse下构建spring与OSGI项目

    在IT行业中,Eclipse是一款广泛使用的Java开发集成环境,而Spring框架则是企业级应用开发的首选框架之一。OSGi(Open Services Gateway Initiative)则是一种模块化系统和Java应用程序执行环境,它提供了动态模块...

Global site tag (gtag.js) - Google Analytics