`
salever
  • 浏览: 254610 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

浅析OSGI的bundle依赖

    博客分类:
  • OSGI
阅读更多

 

Bundle是OSGI中的基础元件,不同的bundle之间可以相互依赖、引用,这样许多bundle才会共同协作,实现一些比较复杂的功能。Bundle的依赖一直是一个比较棘手的问题,包括Lazy start等,下面我们具体Bundle依赖到底是怎么一回事。

测试场景:Eclipse 3.6, Equinox 

先看看基础的依赖问题

 

具体见 http://www.salever.cn/?p=1165

 

 

分享到:
评论
9 楼 salever 2016-07-01  
mwdnjupt 写道
http://www.xeclipse.com/?p=1165 这个链接现在为啥打不开了?



www.xeclipse.com的域名忘了续费了。。。被别人抢了,换了  www.salever.cn了
8 楼 mwdnjupt 2016-05-22  
http://www.xeclipse.com/?p=1165 这个链接现在为啥打不开了?
7 楼 Tom.X 2016-03-21  
插件化、模块化应遵循高内聚、低耦合的原则,尽量不要在各bundle之间进行依赖,应该从架构中避免这个原则,开源OSGi开发平台JXADF,在这方面就做得相当优秀,可以参考:http://osgia.com
6 楼 winse 2012-04-07  
5 楼 salever 2012-04-07  
winse 写道
salever 写道
winse 写道

当A,B插件都存在a.b.DemoTest的类,都导出了a.b包,在C插件中引入A,B插件,到底是用那个插件的a.b.DemoTest呢?

测试通过,我的判断正确,按照
Require-Bundle: org.salever.osgi.depends.sdk2;bundle-version="1.0.0",
org.salever.osgi.depends.sdk1;bundle-version="1.0.0"
的顺序来决定用哪一个哦 这样其实很容易出现运行时的错误哦


应该是加载的顺序吧?至于你在eclipse依赖里面的顺序只是一个参考?


好像就是依赖的顺序
4 楼 winse 2012-04-06  
salever 写道
winse 写道

当A,B插件都存在a.b.DemoTest的类,都导出了a.b包,在C插件中引入A,B插件,到底是用那个插件的a.b.DemoTest呢?

测试通过,我的判断正确,按照
Require-Bundle: org.salever.osgi.depends.sdk2;bundle-version="1.0.0",
org.salever.osgi.depends.sdk1;bundle-version="1.0.0"
的顺序来决定用哪一个哦 这样其实很容易出现运行时的错误哦


应该是加载的顺序吧?至于你在eclipse依赖里面的顺序只是一个参考?
3 楼 salever 2012-04-06  
winse 写道

当A,B插件都存在a.b.DemoTest的类,都导出了a.b包,在C插件中引入A,B插件,到底是用那个插件的a.b.DemoTest呢?

测试通过,我的判断正确,按照
Require-Bundle: org.salever.osgi.depends.sdk2;bundle-version="1.0.0",
org.salever.osgi.depends.sdk1;bundle-version="1.0.0"
的顺序来决定用哪一个哦 这样其实很容易出现运行时的错误哦
2 楼 salever 2012-04-06  
winse 写道

当A,B插件都存在a.b.DemoTest的类,都导出了a.b包,在C插件中引入A,B插件,到底是用那个插件的a.b.DemoTest呢?

这个嘛 很容易测试的,先预测一下是根据依赖中的顺序来的。因为这个一般是class loader的顺序吧?
1 楼 winse 2012-04-05  

当A,B插件都存在a.b.DemoTest的类,都导出了a.b包,在C插件中引入A,B插件,到底是用那个插件的a.b.DemoTest呢?

相关推荐

    OSGI bundle

    这通常涉及到设置IDEA的项目结构、添加Felix框架的依赖、配置运行配置等操作,使得开发者可以在IDEA中调试和测试OSGI bundle。 **总结** OSGI bundle提供了一种模块化的软件开发方式,使得Java应用程序可以按需...

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

    在Java世界中,OSGi(Open Services Gateway Initiative)是一种模块化系统,它允许开发者创建可独立更新和依赖管理的模块,即Bundle。Eclipse的Equinox是实现OSGi规范的一个流行实现。这篇博文将深入探讨如何使用...

    基于EQUINOX的 OSGI BUNDLE 运行例子

    - `HELLOWORLD.MF`是Manifest文件,它包含了关于Bundle的重要元数据,如Bundle的名称、版本、依赖和其他配置信息。 - `步骤.txt`可能是运行示例的详细步骤指南,指导用户如何配置和启动OSGi环境以及部署和运行Bundle...

    OSGI bundle change listener

    2. **依赖管理**:当一个bundle依赖于其他bundle提供的服务时,监听相关bundle的状态变化,可以在适当的时机获取或释放服务。 3. **自动配置**:根据bundle的状态,系统可以自动配置和重新配置自身,例如添加新的...

    tomcat嵌入OSGI容器

    5. **服务生命周期管理**:Tomcat中的Servlet和Filter等Web组件可以通过OSGI服务来声明其依赖,这样在启动时,OSGI容器会自动管理它们的生命周期。 6. **性能和稳定性**:尽管OSGI提供了许多优势,但其动态性也可能...

    OSGI应用中整合Spring、Mybatis、Spring MVC案例

    Mybatis的配置文件可以放在OSGI的bundle中,通过OSGI服务注册Mybatis的SqlSessionFactory,然后在其他bundle中通过服务查找来使用。 Spring MVC是Spring框架的一部分,用于构建Web应用程序。在OSGI环境中集成Spring...

    OSGi with CAR-Bundle

    3. **Bundle作为组件**:每个Bundle可以被视为独立的组件,它们之间通过OSGi服务注册表进行交互,实现动态的依赖管理和服务发现。 4. **使用脚本管理组件**:引入脚本语言,如JavaScript或Groovy,可以更灵活地管理...

    Jar转换为Bundle工具

    导出的包将被其他bundle使用,而导入的包表示当前bundle依赖于哪些其他bundle。 2. **版本控制**:明确每个导出包的版本号,以确保兼容性和隔离性。 3. **类加载机制**:理解OSGI的类加载机制,如何处理类的加载冲突...

    osgi helloworld

    这里涉及到了OSGi的依赖注入,使得bundle间的依赖关系变得灵活且易于管理。此外,`client` bundle还可能需要监听服务的变化,以便在服务生命周期中的任何更改(如服务添加、修改或移除)时做出相应的响应。 在OSGi...

    osgi发布http服务的各种bundle,各种jar包,全全全~

    osgi发布http服务的各种bundle,各种jar包,全全全~非常好用的技术包 包括:org.eclipse.equinox.http_1.0.0.v20060601a.jar org.eclipse.equinox.ds_1.0.0.v20060601a.jar org.eclipse.equinox.servlet.api_1.0.0...

    spring-osgi.jar及其依赖包

    4. **自动依赖管理**:Spring OSGi可以自动管理bundle之间的依赖关系,通过声明式服务(Declarative Services, DS)来声明服务和依赖,降低配置复杂性。 5. **集成其他Spring特性**:Spring OSGi支持Spring的AOP、...

    OSGi与Web容器的整合

    目标平台是开发和运行OSGi应用的基础,需要包含必要的OSGi框架(如Equinox)、Gemini Blueprint和Gemini Web的库,以及可能需要的其他依赖,如Spring框架。 **2.5 创建Web项目** 创建WAB项目包括: 1. 在Eclipse中...

    blueprint-osgi-bundle:OSGi 示例

    **标题解析:** "blueprint-osgi-bundle:OSGi 示例" 指的是一个基于OSGi(Open Service Gateway Initiative)框架的示例项目,它使用了Blueprint服务容器来管理服务组件。Blueprint是Apache Felix项目中的一个子项目...

    GSGI+Eclipse LUNA 配置+HelloWorld例子+Bundle依赖

    在下一章节中,我们将讨论如何处理不同OSGi Bundle之间的依赖关系,以及如何基于接口实现服务的消费。这通常涉及到服务的查找、引用和服务监听等机制,使得各个模块可以动态地发现和使用其他模块提供的服务。 总结...

    Equinox OSGi 开发

    这使得OSGi成为处理现代软件工程中常见挑战的理想选择,如软件的动态更新、模块间的依赖管理、服务发现与绑定等。 接下来,我们将详细探讨基于Equinox平台的OSGi Bundle开发的关键概念和步骤。 ### Equinox作为...

    OSGI.rar_OSGI eclipse_eclipse osgi_java OSGI_osgi

    5. **部署与管理**:如何在运行时动态安装、更新和卸载OSGI Bundle,以及如何处理依赖关系。 6. **服务导向**:OSGI服务的概念,如何注册和查找服务,以及如何实现服务间的通信。 7. **配置管理**:OSGI中的配置...

    基于osgi整合ssm框架注解开发

    OSGi的核心是其模块系统,也称为捆绑(bundle)。每个捆绑都是一个独立的、可热插拔的代码单元,有自己的类加载器。通过OSGi,开发者可以独立地更新、启动或停止这些捆绑,而不影响其他部分的应用程序。OSGi还提供...

    osgi开发jar包

    例如,Export-Package字段定义了bundle对外提供的服务,Import-Package字段则指定了bundle依赖的其他包。理解并正确配置MANIFEST.MF对于构建可工作的OSGi bundle至关重要。 3. **模块化编程**:在OSGi中,每个...

    基于Eclipse开发OSGI的简单实例

    1. **创建OSGi Bundle**:创建一个标准的OSGi Bundle项目,包含`MANIFEST.MF`文件,用于声明Bundle的信息和依赖。 2. **编写代码**:实现服务接口并在Bundle激活时注册服务。使用`BundleContext`的`registerService`...

Global site tag (gtag.js) - Google Analytics