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(Open Services Gateway Initiative)是一种开放的标准,用于创建模块化和可动态更新的应用程序和服务。在本实例中,我们看到OSGI与C++的结合,以及如何在Visual Studio 2010和Qt 5.11环境中实现插件间的通信。...
此外,OSGi提供服务注册和查找机制,使得模块间能以松耦合的方式进行交互。 ### Eclipse与OSGi的结合 Eclipse引入了PDE(Plug-in Development Environment)工具,用于支持OSGi Bundle的开发。通过Eclipse,开发者...
OSGI(Open Services Gateway Initiative)是一种开放标准的Java模块化系统,它允许开发人员将应用程序分解为可独立更新和管理的模块。这个框架的核心概念是服务,它提供了一种动态发现和绑定依赖的方式,使得软件...
理解每个模块的功能和它们之间的交互关系是成功开发OSGI插件的关键。同时,掌握OSGI的生命周期管理和服务发现机制,以及Spring在OSGI环境下的工作原理,对于构建灵活、可扩展的Eclipse插件至关重要。
模块化设计的关键在于定义清晰的模块接口,限制模块之间的依赖,遵循“最小权限”原则,只允许模块之间必要的交互。 OSGi(Open Service Gateway Initiative)则是一个动态的模块化框架,它允许在运行时加载、卸载...
这个“OSGi实战 实例源代码”是BlueDavy的opendoc《OSGi实战》一书中的配套实践代码,为初学者提供了深入理解OSGi机制的宝贵资源。通过这些源代码,读者可以更好地掌握OSGi的核心概念,包括服务、模块化、依赖管理和...
在IT领域,JMX(Java Management Extensions)和OSGi(Open Service Gateway Initiative)是两种重要的技术,它们分别用于管理和模块化Java应用程序。本实例将两者结合,展示了如何将OSGi的bundle注册到JMX以便进行...
OSGi(Open Services Gateway Initiative)是一种Java模块化系统,它允许开发者将应用程序分解为...通过深入研究这些实例,你将能够更好地掌握OSGi框架,并将其应用到实际项目中,解决复杂系统的模块化和动态管理问题。
而“OsgiSrc”可能是源代码的集合,包含了OSGi组件的实现细节,读者可以深入研究每个模块的职责和它们之间的交互。 在OSGi的核心概念中,有以下几个关键知识点: 1. **模块化**:OSGi将Java应用程序分解为独立的、...
OSGi的核心概念包括模块(被称为Bundle),服务(Bundle之间的交互接口)和生命周期(Bundle的安装、启动、停止、更新和卸载)。OSGi引入了依赖管理、服务生命周期管理、动态更新和版本化等特性。它允许开发者将应用...
OSGi(Open Services Gateway Initiative)是一种Java模块化系统和服务平台,它允许开发人员将应用程序分解为可独立更新和管理的模块。这个平台的核心是它的模块系统,也称为OSGi框架,它提供了一种动态、模块化的...
ASM库常常被用于构建框架、编译器或者工具,它可能在这里用于解析或生成OSGi模块的字节码,以便实现动态加载和服务交互。 结合以上信息,我们可以讨论以下几个知识点: 1. **OSGi框架**:OSGi提供了一种模块化的...
OSGI(Open Services Gateway Initiative)是一种Java模块化系统,它允许开发者将应用程序分解为一系列可独立部署、更新和交互的服务。林昊所著的《OSGI实战》与《OSGI进阶》是深入理解OSGI技术的重要参考资料,适合...
这个购物车实例旨在帮助开发者理解OSGi的灵活性、模块化特性以及其在可扩展性方面的优势。 **OSGi基础概念** OSGi(Open Service Gateway Initiative)是一个Java平台上的模块化系统和服务平台,它的核心是动态...
远程调用(Remoting)是OSGI服务平台的另一个重要特性,它允许组件跨越网络边界与其他OSGI实例上的组件进行通信。这增强了OSGI系统的分布式能力,使得组件可以跨越不同物理位置或系统进行协作。 为了完成OSGI组件...
OSGi的核心是它的模块系统,称为"bundle",每个bundle都是一个独立的代码单元,有自己的类加载器,并且可以与其他bundle动态交互。 **1. OSGi基本概念** OSGi的核心概念包括: - **Bundle**:这是OSGi的基本模块...
OSGi(Open Services Gateway Initiative)是一种Java模块化系统,它允许开发者将应用程序分解为独立的、可重用的组件,这些组件可以在运行时被动态地安装、卸载和升级,而不会影响到其他组件或系统。OSGi的核心是其...
同时,OSGi提供了服务注册和发现机制,使得模块之间可以动态地互相依赖和交互。 二、org.eclipse.osgi org.eclipse.osgi是Eclipse项目中的一个核心库,它是实现OSGi规范的主要实现之一。它提供了一个运行时环境,...
每个OSGi模块称为一个“bundle”,它包含一组相关的类和其他资源。 **2.2 OSGi开发工具** 为了方便开发OSGi bundle,可以使用以下工具: - **Eclipse Plugin Development Environment (PDE)**:Eclipse的插件开发...