`

osgi模块交互实例

    博客分类:
  • OSGI
阅读更多
osgi模块间交互有两种方式:导出包方式,与服务方式,导出包方式比较简单,因此只给出实例。
一般模块之间的交互是单向的。假设A使用B项目中的某个功能
新建插件项目B,项目B结构图:

HelloService是其他模块需要的服务的接口类
其实现类为HelloComponent
package cn.org.osgi.ppt.service;

public interface HelloService {
public void sayHello();
}

package org.osgi.ppt.service.component;

import cn.org.osgi.ppt.service.HelloService;

public class HelloComponent implements HelloService {

	@Override
	public void sayHello() {

		System.out.println("hello world!");
	}

}


package b;

import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.ppt.service.component.HelloComponent;

import cn.org.osgi.ppt.service.HelloService;

public class Activator implements BundleActivator {

	/*
	 * (non-Javadoc)
	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
	 */
	public void start(BundleContext context) throws Exception {
//		服务提供方负责,注册服务
		context.registerService(HelloService.class.getName(), new HelloComponent(), null); //注册服务
	}

	/*
	 * (non-Javadoc)
	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
	 */
	public void stop(BundleContext context) throws Exception {
	}

}



新建插件项目A,项目结构如下:


package a;

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

import cn.org.osgi.ppt.service.HelloService;

import export.Util;

public class Activator implements BundleActivator {

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext
	 * )
	 */
	public void start(BundleContext context) throws Exception {
		// 自己写的
		System.out.println("osgi bundle started");

		Util.printString(); // 使用导出包进行模块交互

		// 服务使用方,使用服务,先获取服务引用,再获取服务,使用服务方式进行模块之间的交互
		ServiceReference hs = context.getServiceReference(HelloService.class
				.getName());
		HelloService hservice = (HelloService) context.getService(hs);
		hservice.sayHello();
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
	 */
	public void stop(BundleContext context) throws Exception {
		// 自己写的
		System.out.println("osgi bundle stopped");
	}

}


以osgi框架运行模块A,结果:
osgi> osgi bundle started
in util
hello world!
  • 大小: 11.7 KB
  • 大小: 20.9 KB
分享到:
评论

相关推荐

    OSGI常用通信实例

    OSGI(Open Services Gateway Initiative)是一种开放的标准,用于创建模块化和可动态更新的应用程序和服务。在本实例中,我们看到OSGI与C++的结合,以及如何在Visual Studio 2010和Qt 5.11环境中实现插件间的通信。...

    基于Eclipse开发OSGI的简单实例

    此外,OSGi提供服务注册和查找机制,使得模块间能以松耦合的方式进行交互。 ### Eclipse与OSGi的结合 Eclipse引入了PDE(Plug-in Development Environment)工具,用于支持OSGi Bundle的开发。通过Eclipse,开发者...

    OSGI 经典实例,入门

    OSGI(Open Services Gateway Initiative)是一种开放标准的Java模块化系统,它允许开发人员将应用程序分解为可独立更新和管理的模块。这个框架的核心概念是服务,它提供了一种动态发现和绑定依赖的方式,使得软件...

    OSGI 实例eclipse插件开发

    理解每个模块的功能和它们之间的交互关系是成功开发OSGI插件的关键。同时,掌握OSGI的生命周期管理和服务发现机制,以及Spring在OSGI环境下的工作原理,对于构建灵活、可扩展的Eclipse插件至关重要。

    Java应用架构设计模块化模式与OSGi

    模块化设计的关键在于定义清晰的模块接口,限制模块之间的依赖,遵循“最小权限”原则,只允许模块之间必要的交互。 OSGi(Open Service Gateway Initiative)则是一个动态的模块化框架,它允许在运行时加载、卸载...

    OSGi实战 实例源代码

    这个“OSGi实战 实例源代码”是BlueDavy的opendoc《OSGi实战》一书中的配套实践代码,为初学者提供了深入理解OSGi机制的宝贵资源。通过这些源代码,读者可以更好地掌握OSGi的核心概念,包括服务、模块化、依赖管理和...

    jmx osgi 实例

    在IT领域,JMX(Java Management Extensions)和OSGi(Open Service Gateway Initiative)是两种重要的技术,它们分别用于管理和模块化Java应用程序。本实例将两者结合,展示了如何将OSGi的bundle注册到JMX以便进行...

    osgi实例(服务注册、引用、跟踪)

    OSGi(Open Services Gateway Initiative)是一种Java模块化系统,它允许开发者将应用程序分解为...通过深入研究这些实例,你将能够更好地掌握OSGi框架,并将其应用到实际项目中,解决复杂系统的模块化和动态管理问题。

    亲历基本OSGI实例,进入另番思维领域(转)----包括打包发布为可执行文件

    而“OsgiSrc”可能是源代码的集合,包含了OSGi组件的实现细节,读者可以深入研究每个模块的职责和它们之间的交互。 在OSGi的核心概念中,有以下几个关键知识点: 1. **模块化**:OSGi将Java应用程序分解为独立的、...

    osgi 构建模块化云应用之中文版

    OSGi的核心概念包括模块(被称为Bundle),服务(Bundle之间的交互接口)和生命周期(Bundle的安装、启动、停止、更新和卸载)。OSGi引入了依赖管理、服务生命周期管理、动态更新和版本化等特性。它允许开发者将应用...

    osgi资料打包

    OSGi(Open Services Gateway Initiative)是一种Java模块化系统和服务平台,它允许开发人员将应用程序分解为可独立更新和管理的模块。这个平台的核心是它的模块系统,也称为OSGi框架,它提供了一种动态、模块化的...

    基于Java的实例源码-OSGi 分布式通讯组件 R-OSGi.zip

    ASM库常常被用于构建框架、编译器或者工具,它可能在这里用于解析或生成OSGi模块的字节码,以便实现动态加载和服务交互。 结合以上信息,我们可以讨论以下几个知识点: 1. **OSGi框架**:OSGi提供了一种模块化的...

    osgi,林昊写的osgi实战和进阶

    OSGI(Open Services Gateway Initiative)是一种Java模块化系统,它允许开发者将应用程序分解为一系列可独立部署、更新和交互的服务。林昊所著的《OSGI实战》与《OSGI进阶》是深入理解OSGI技术的重要参考资料,适合...

    基于osgi框架实战源码

    这个购物车实例旨在帮助开发者理解OSGi的灵活性、模块化特性以及其在可扩展性方面的优势。 **OSGi基础概念** OSGi(Open Service Gateway Initiative)是一个Java平台上的模块化系统和服务平台,它的核心是动态...

    OSGI组件编程(osgi.component.programming)

    远程调用(Remoting)是OSGI服务平台的另一个重要特性,它允许组件跨越网络边界与其他OSGI实例上的组件进行通信。这增强了OSGI系统的分布式能力,使得组件可以跨越不同物理位置或系统进行协作。 为了完成OSGI组件...

    osgi 资料 总结 实践

    OSGi的核心是它的模块系统,称为"bundle",每个bundle都是一个独立的代码单元,有自己的类加载器,并且可以与其他bundle动态交互。 **1. OSGi基本概念** OSGi的核心概念包括: - **Bundle**:这是OSGi的基本模块...

    osgi的讲解与一个实例

    OSGi(Open Services Gateway Initiative)是一种Java模块化系统,它允许开发者将应用程序分解为独立的、可重用的组件,这些组件可以在运行时被动态地安装、卸载和升级,而不会影响到其他组件或系统。OSGi的核心是其...

    org.eclipse.osgi_3.7.0.v20110613及源码

    同时,OSGi提供了服务注册和发现机制,使得模块之间可以动态地互相依赖和交互。 二、org.eclipse.osgi org.eclipse.osgi是Eclipse项目中的一个核心库,它是实现OSGi规范的主要实现之一。它提供了一个运行时环境,...

    OSGi in Practice 完整版

    每个OSGi模块称为一个“bundle”,它包含一组相关的类和其他资源。 **2.2 OSGi开发工具** 为了方便开发OSGi bundle,可以使用以下工具: - **Eclipse Plugin Development Environment (PDE)**:Eclipse的插件开发...

Global site tag (gtag.js) - Google Analytics