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

对OSGi中组件调用的一点点理解

    博客分类:
  • OSGi
阅读更多

       在上一篇博客中,我实践了在OSGi中对组件的简单调用,于是开始对我之前的一个小工程进行基于OSGi的“模块+组件“化重构。不出所料地碰到了问题,实践出真知,解决问题是加深理解的最好方法。

       直接重现问题吧:我构造了一个模块:“services”,专门用于暴露提供服务的接口的;第二个模块:“IO”,包含一些组件,实现了”services“模块里的某些接口;第三个模块:“http”,同样包含了一些组件,并实现了“services”模块里另外一些接口,其中组件A在实现服务的同时,调用了模块“IO”中组件B提供的一个服务。当我构造好这三个模块,启动OSGi框架,输入services命令,发现所有实现的服务发布成功。但是问题来了,信息显示组件B提供的服务没有被任何模块调用!这不可能啊,按理我的“http”模块调用了啊。

       于是开始调试。

         我把模块“IO”移走,在组件A的组件配置文件里reference标签的 cardinality属性改为“1..n”,也就是至少要有一个提供了指定服务的组件在正常工作该组件才能工作,启动OSGi框架,查看发布的服务,组件A提供的服务没有被发布,看来原本组件A是找到了组件B的,而且也是依赖正常的,那为什么显示组件B没有被调用呢?

         把模块“IO”再弄回来,修改下组件A在绑定组件B时的代码,添加句打印语句以作测试。执行,打印语句没有执行~

       我在模块“http”中新建一个不提供服务的组件C,单独调用组件B,运行结果一切如我所愿,信息显示组件B正被组件C调用,那就再次说明组件B没有问题啊。难道OSGi中发布服务的组件不能同时使用其它组件提供的服务?显然不应该啊,多不方便啊。

          出去吃了点东西,回来突然有了个想法,再改。组件A改回原来那样,仍然发布服务的同时调用组件B的服务,但这次新建的组件C不用来调用组件B的服务了,而是调用组件A的服务。运行程序,嘿,正常了!信息提示组件A提供的服务在被C调用,组件B提供的服务在被A调用。

          原来 提供服务的 组件在服务没有被调用的时候,虽然依赖于其它组件提供的服务,但是并不是就意味着已经引用了其它组件提供的服务。只有当它被引用时,它才会引用它所依赖的服务。虽然还是有些别扭,在以后的问题中慢慢感悟吧。

2
1
分享到:
评论

相关推荐

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

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

    基于java的开发源码-OSGi 分布式通讯组件 R-OSGi.zip

    基于java的开发源码-OSGi 分布式通讯组件 R-OSGi.zip 基于java的开发源码-OSGi 分布式通讯组件 R-OSGi.zip 基于java的开发源码-OSGi 分布式通讯组件 R-OSGi.zip 基于java的开发源码-OSGi 分布式通讯组件 R-OSGi.zip ...

    OSGI 开发文档中文的

    OSGI(Open Services Gateway Initiative)是一种开放标准,用于创建可模块化的Java应用程序。它提供了一种灵活的框架,使得开发者可以构建、部署和管理模块化组件,这些组件被称为服务或bundle。OSGI的核心理念是将...

    基于 OSGi 的面向服务的组件编程

    基于 OSGi 的面向服务的组件编程呆呆呆呆呆呆地

    探索 OSGi 框架的组件运行机制

    探索 OSGi 框架的组件运行机制探索 OSGi 框架的组件运行机制

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

    这通常涉及到远程调用(RPC,Remote Procedure Call)机制,使得一个OSGi组件可以透明地调用另一个在网络另一端的组件。为了实现这一点,R-OSGi可能利用了如HTTP、RMI(Remote Method Invocation)或者更现代的协议...

    OSGi 分布式通讯组件 R-OSGi

    2. **代理实现**:理解代理对象如何封装网络调用,使其对用户透明。 3. **网络协议适配**:研究R-OSGi如何通过插件系统支持不同网络协议,如HTTP、TCP。 4. **安全机制**:分析R-OSGi的安全框架,了解如何实现RBAC...

    osgi学习笔记(一)

    在OSGi中,有一个关键的组件叫做框架。框架是OSGi环境的基础,它负责管理bundle的生命周期,处理bundle间的依赖关系,并确保服务的正确注册和发现。当bundle被加载时,框架会解析其MANIFEST.MF文件,从中获取bundle...

    OSGi™ Component Programming

    OSGi(Open Services Gateway Initiative)组件编程是一种在Java平台上构建模块化、可扩展且动态的应用程序的方法。OSGi服务平台提供了一个框架,用于开发能够可靠地部署、大规模分布,并适应各种设备的服务应用。该...

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

    OSGi(Open Service Gateway Initiative)是一个定义了Java应用程序如何组织和模块化以及如何动态发现、启动、停止、更新这些模块化组件的规范。Equinox是OSGi规范的一个实现,它是由Eclipse基金会开发的。本文将...

    OSGI中Hibernate扩展在felix中的应用

    OSGI(Open Services Gateway Initiative)是一种模块化系统和Java服务框架,它允许开发人员将应用程序分解为可独立更新和管理的组件。Hibernate则是一个流行的Java对象关系映射(ORM)框架,它简化了数据库操作。当...

    深入理解OSGi

    - **服务**:OSGi服务是一种动态发现和交互的方式,允许模块之间共享功能,而无需直接引用。 - **生命周期管理**:OSGi支持bundle的安装、启动、停止、更新和卸载,使开发者能动态管理应用程序组件。 - **包解析*...

    OSGI 进阶源码和中文文档

    4. **DS(Declarative Services)**:DS是OSGI中的一种服务组件模型,它允许开发者通过XML配置文件声明服务的生命周期和依赖关系,简化了服务的管理和维护。 5. **事件机制**:OSGI提供了一种事件传递机制,允许...

    OSGi.NET框架 Documentation

    本文档主要针对OSGi.NET模块化框架使用进行了描述 ...6.组件的通信支持:组件间通过面向服务的编程模型来达到组件间通信、调用的目的 7.组件的扩展支持:组件提供了扩展点及其扩展来满足某个组件的扩展性支持

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

    林昊所著的《OSGI实战》与《OSGI进阶》是深入理解OSGI技术的重要参考资料,适合对Java模块化系统感兴趣的初学者和有经验的开发者。 在《OSGI实战》中,作者林昊可能会详细讲解以下几个核心知识点: 1. **OSGI基础*...

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

    这个压缩包中的源码是关于R-OSGi(Remoting OSGi)的实现,它是一种在OSGi环境中进行分布式通信的组件。R-OSGi使得OSGi服务能够跨越网络边界,在不同的OSGi容器之间进行通信。 【描述】: "基于Java的实例开发源码-...

    基于java的OSGi 分布式通讯组件 R-OSGi.zip

    “java”标签表明这个压缩包中的内容与Java编程语言紧密相关,尤其是对于Java开发者来说,理解并掌握OSGi技术可以帮助他们更好地管理和部署复杂的Java应用。 【压缩包子文件的文件名称列表】:asm-3.0.jar、META-...

    Spring OSGI 快速入门中文教程

    OSGi(Open Service Gateway Initiative)是一种Java模块化系统,它允许开发者创建可热更新、可隔离且互相依赖管理的模块。Spring OSGi是Spring框架与OSGi服务的结合,使得在OSGi环境中使用Spring变得简单。本教程将...

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

    本资源提供了一些关于OSGi服务注册、引用、服务工厂和服务跟踪的基础实例,对于已经对OSGi有一定了解的开发者来说,这些实例将有助于深入理解其工作原理。 **服务注册** 在OSGi中,服务是组件之间通信的接口。一个...

Global site tag (gtag.js) - Google Analytics