首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用不同的Start Levels来管理OSGi包之间的依赖关系是否合理?

使用不同的Start Levels来管理OSGi包之间的依赖关系是否合理?

这是一个关于OSGi框架中的依赖关系管理的问题。OSGi是一种Java模块化框架,它允许开发者将应用程序划分为多个模块,并在运行时动态地管理这些模块之间的依赖关系。在OSGi中,每个模块都被称为一个Bundle,而Bundle之间的依赖关系是通过导入和导出的方式来定义的。

使用不同的Start Levels来管理OSGi包之间的依赖关系是合理的。Start Level是OSGi框架中的一个概念,它允许开发者控制Bundle的启动顺序。通过设置不同的Start Levels,开发者可以确保某些Bundle在其他Bundle之前启动,从而满足这些Bundle对其他Bundle的依赖关系。

例如,假设有三个Bundle:A、B和C。Bundle A依赖于Bundle B,Bundle B依赖于Bundle C。在这种情况下,开发者可以将Bundle C的Start Level设置为最低,以确保它在其他Bundle之前启动。然后,可以将Bundle B的Start Level设置为比Bundle C高一点,以确保它在Bundle C启动后启动。最后,可以将Bundle A的Start Level设置为比Bundle B高一点,以确保它在Bundle B启动后启动。

通过使用不同的Start Levels,开发者可以更好地控制Bundle之间的依赖关系,并确保应用程序在运行时能够正确地启动和运行。因此,使用不同的Start Levels来管理OSGi包之间的依赖关系是合理的。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【面试题精讲】JVM-打破双亲委派机制-OSGI模块化

模块依赖管理:每个 Bundle 可以声明自己的依赖关系,即依赖其他 Bundle 中的类或服务。...OSGI 模块化的使用注意事项 模块依赖管理:应该明确声明模块间的依赖关系,并合理安排模块的启动顺序。 版本管理:应该精确控制模块的版本号,确保版本的向后兼容性。...避免循环依赖:模块间的依赖关系应该尽量避免循环依赖,避免引入复杂性和不稳定性。 模块隔离性:每个模块应该保持独立性,避免模块之间的信息泄露和干扰。...通过使用 OSGI 模块化,开发者可以实现应用程序的动态性、灵活性和可扩展性,同时有效管理模块间的依赖关系和版本管理。...然而,使用 OSGI 模块化需要一定的学习曲线,同时也需要仔细设计和管理模块间的依赖关系。 本文由 mdnice 多平台发布

34920
  • Atlas 带你畅游动态性容器框架之旅

    ,打包时AAPT指定);另外与原有OSGI所定义的service格式不同之处是Atlas里面Bundle透出所有定义在Manifest里面的component,随着service,activity的触发执行...host和bundle的依赖关系如下图所示: host: 宿主的概念,所有的bundle可以直接调用host内的代码和资源,所以host常常集合了公共的中间件,UI资源等。...host和bundle的依赖关系如下图所示: ?...内); 业务层基本上以bundle为边界自上而下与host发生调用,同时bundle之间允许存在依赖关系;相对业务独立的bundle如果存在接口耦合建议封装成aidl service的方式保证自身封装性...; Bundle Framework 负责bundle的安装 更新 操作以及管理整个bundle的生命周期; runtime层:主要包括清单管理、版本管理、以及系统代理三大块,基于不同的触发点按需执行

    60620

    OpenDaylight开发学习十问十答

    还有就是需要了解一下OSGi规范,网上可以找到中文的规范,推荐4.0以后的版本。同时了解一下Karaf,看看OSGi规范和karaf之间的关系,这个过程可能也会花费一两个星期。...Maven能帮助我们很好的管理项目依赖,但如果在开发自己的项目时,不仔细梳理依赖关系,随意拷贝其他项目的pom文件,也可能导致相互依赖等严重问题,一定要注意。...我很想告诉大家秘诀,可惜没有,只能自己仔细分析模块间的依赖关系,Import-Package,Export-Package匹配吗?包路径冲突了吗?具体问题具体分析。...mdsal的相关接口,功能及形式与controller子项目里的几乎一致,只是包路径不同。...),指定不同的type来引用具体的服务接口实现。

    1.1K80

    模块化服务规范——OSGI

    Java提供在多个平台支持产品的可移植性。OSGi技术提供允许应用程序使用精炼、可重用和可协作的组件构建的标准化原语。这些组件能够组装进一个应用 和部署中。...您可以通过这些容器,把您的应用程序劈分为多个模块单元,这样,您就可以更容易地管 理这些模块单元之间的交叉依赖关系。 OSGi的主要职责就是为了让开发者能够建动态化、模块化的Java系统。...2、JAR文件规范粒度太粗,没有足够的约束力。运行期,如果这些第三方Jar包不存在,或者命名存在差异,或者提供了不同JAR包版本,则会出现各种不同结果。...3、由于Java EE平台规范没有针对Java package引入版本支持,这使得在同一企业应用中几乎不可能启用同一JAR包的不同版本。...但是具体在未来的发展中是否能够成为业界的标准有待验证。

    1.6K30

    CTK Plugin Framework简介

    Figure 2 插件与框架之间的关系 Plugin是基于C++/Qt的一个共享库,包含了资源文件和元数据(metadata)。...服务的注册和注销可以在任何时候进行。 服务是服务的提供者和使用者之间的一个契约,使用者一般不关心其实现的细节,只关心是否满足契约(服务应该提供什么功能、满足什么格式)。...3.5、自适应 OSGi组件模型是从头设计的,以允许组件的混合和匹配,要求必须指定组件的依赖关系,并且需要组件在其可选依赖性并不总是可用的环境中生存。...管理API提供了对插件的内部状态的访问,以及插件之间的连接方式。可以停止部分应用程序来调试某个问题,或者可以引入诊断插件。 3.7、开发简单 CTK插件相关的API非常简单,核心API不到25个类。...4、CTK事件管理机制 框架使用事件机制来通知各个插件,系统中插件的安装、卸载、解析、启动、停止等状态的切换[5]。

    3K21

    几种Java热插拔技术实现总结

    基于这个框架定义了大量的OSGi服务:日志、配置管理,HTTP服务(运行Servlet)、XML解析、设备访问、软件包管理、许可管理、用户管理、IO连接、Jini和UPnP等。...2、目前OSGI框架提供的管理端不够强大,现在的管理端中仅提供了基本的Bundle状态管理、日志查看等功能,像动态修改系统级别的配置(config.ini)、动态修改Bundle的配置(Manifest.mf...在插件中扩展出系统各种功能点,用于系统灵活扩展,再也不用使用分支来交付不同需求的项目了。 在插件中可以集成各种框架及其各种spring-boot-xxx-starter。...在插件中可以定义独立依赖包了,再也不用在主程序中定义依赖包了。 可以完美解决插件包与插件包、插件包与主程序因为同一框架的不同版本冲突问题了。各个插件可以定义同一依赖的不同版本框架。...无需重启主程序,可以自由实现插件包的动态安装部署,来动态扩展系统的功能。 插件也可以不依赖主程序独立集成微服务模块。

    2.4K10

    Java9来了,快来了解下JPMS基础吧!

    阅读“模块”相关的文章时,请注意你正在阅读的文章的作者是否来自OSGi / JBoss模块设计阵营。...(我从来没有主动使用OSGi或JBoss模块,尽管我已经使用Eclipse和其他在内部使用OSGi的工具。)...包含程序包A的模块和包含程序包B的模块存在依赖关系。...由于几乎每个框架都以这种方式使用反射,因此迁移现有代码将需要大量工作。 你的依赖是否模块化?理论上,只要你的所有依赖项也是模块,你只能将代码转换为模块。...我已经相信,在包含最高包之后,来命名你的模块,然后该模块“拥有”子包,是唯一的理想策略。 构建系统的冲突 - 谁负责? Maven pom.xml还包含有关项目的信息。是否应该扩展以允许添加模块信息?

    2.8K80

    JVM第八卷---类加载与执行子系统的案例与实战

    " 比较两个类是否相等,只有在这两个类是由同一个类加载器加载的前提下,才有意义,否则,即使这两个类来源于同一个Class文件,被同一个Java虚拟机加载,只要加载他们的类加载器不同,那这两个类就必定不相等...两个不同的应用程序可能会依赖同一个第三方类库的不同版本,不能要求一个类库在一个服务器中只能有一份。服务器应当保证两个应用程序的类库可以互相独立使用。...OSGi 的 Bundle 类加载器之间只有规则,没有固定的委派关系。...Bundle B:声明依赖了 Package A 和 Package C ,同时也依赖了 java.* 的包。 Bundle C:声明发布了 Package C,依赖了 Package A。...那么三个 Bundle 之间的关系如图所示: 类加载时可能进行的查找规则如下: 以 java.* 开头的类,委派给父类加载器加载。 否则,委派列表名单内的类,委派给父类加载器加载。

    40620

    OSGi的模块化和动态模块的好处

    已经有很多的开源项目都是通过OSGi来发布他们的jar包,而且商业库也开始使用现成的包。 3、现实情况 OSGi是一个动态框架。他可以更新正在运行的模块和服务。...4、开发简单 OSGi 技术并不是组件化的一个标准,它也指定了组件是如果安装和管理的,这个API已经被很多挺管理代理的模块所使用。...9、简单 使用OSGi是非常的简单的,它不但依赖管理、配置和动态性都非常强大,而且OSGi的代码也和传统的Java代码完全相似。...相比之下,OSGi软件包之间的预依赖可以准确的知道是哪个软件包提供的类,通过减少搜索是启动速度提高的一个重要因素。...15、非侵入 在一个OSGi的环境中,不同软件包均有自己的环境设置,不同应用实际是都可以使用虚拟机提供的所有设施,OSGi对此并无任何限制。

    1.6K10

    sofa-ark类隔离技术分析调研

    不过坏处就是缺少了灵活性,业务方无法修改组件包的任何依赖。 OSGI技术 使用OSGI技术,用felix、karaf或者Jigsaw这样的容器对jar包进行暴露和隔离。...而且对于OSGI容器自身就是一个守护进程,他的使用、管理和维护都会有额外的代价。因此一般来说我们都认为OSGI技术太"重",不适合小公司、小项目、或者是使用很多小项目组成大项目的互联网公司使用。...不过OSGI技术给我们提供了一个不错的思路,总结下来有如下几点: 对Jar包进行更高级的抽象,并支持对类和资源访问控制。 程序运行在一个容器中,由容器来启动和管理各个业务组件。...每个业务组件有一个独立的ClassLoader,因此不同业务组件之间的依赖不会互相影响。 支持组件向容器进行服务的注册,以及服务的互相调用。...不过当你引入了sofa-jarslink项目,你就真的可以像使用OSGI容器一样的利用这个端口动态管理你的Biz和Plugin了。

    1.8K31

    插件式开发架构综述

    所以用户可以通过约定消息形式以及自定义消息响应函数,实现插件间的通信。但是这样其实增强了插件之间的耦合度,不是特别推荐。笔者建议应用层插件尽量只依赖通用服务型插件及主体运行程序,业务插件保持独立。...它的核心部分是一个框架,其中定义了应用程序的生命周期模式和服务注册。OSGI框架定义了大量的OSGI通用服务:日志、配置管理,XML解析等通用服务。...4.2 OSGI整体架构 4.2.1 模块层 模块层可以理解为开发出来的各类插件,一般以bundle的形式出现。一个完整的系统功能,往往由不同的模块插件进行配合完成。...模块层中bundle的特点: bundle 以 jar 包形式存在的模块化物理单元,包含了代码,资源文件和元数据(模块描述信息)。 bundle 是开发、部署 OSGi 应用的基本单元。...需要注意的是,实际插件架构中,根据产品的不同、面向的领域不同、采用的编程语言不同,会有很多不一样的设计,需要结合具体情况进行设计。

    3.2K20

    CTK框架介绍

    插件框架的设计有很大的灵感来自OSGi并且使得应用程序由许多不同的组件组合成一个可扩展模型。...CTK插件通常值共享符号(类和函数)来支持CTK的服务模型。 Services 一个在C++中的协作模型通常会使用工厂模式。不同的工具包使用不同的模式和API来访问这样的工厂。...框架的管理通过提供简单的API来标准化,允许插件install,start,stop和update其他插件,也可以枚举插件和它们服务的用法。...Easy Deployment CTK插件框架不仅仅是一个标准的组件,也指定了组件如何被安装和管理。可以通过插件使用API来提供一个管理代理。...Adaptive 使用的OSGi组件模型被设计来自底层允许混合和匹配组件。这要求组件的依赖关系需要被指定并且它需要生活在一个环境中,他们的可选组件依赖关系并不总是可用的。

    1.2K20

    OSGi 基本原理

    OSGi联盟已经开发了例如像HTTP服务器、配置、日志、安全、用户管理、XML等很多公共功能标准组件接口。这些组件的兼容性插件实现可以从进行了不同优化和使用代价的不同计算机服务提供商得到。...Module Layer:模块层主要涉及包及共享的代码; Lifecycle Layer:生命周期层主要涉及Bundle的运行时生命周期管理; Service Layer:服务层主要涉及模块之间的交互和通信...模块层 模块层是 OSGi 框架中最基础的部分。 OSGi 的模块化,是通过为 Jar 包添加metadata 来定义哪些类该暴露,哪些类该隐藏,其控制单元叫做 Bundle(jar 包)。...但是要真正使用 Bundle,需要使用生命周期层的API,来和OSGi框架的生命周期层进行交互。 在标准的Java编程中,可以通过将jar包放到classpath中来使用它。...这个方法的返回类型是ServiceReference,它可以在bundle之间互享,因为它和使用服务的bundle的生命周期无关。

    3.3K90

    灵活的类加载器OSGI

    在OSGi 里面,Bundle之间的依赖关系从传统的上层模块依赖底层模块转变为平级模块之间的依赖,而且类库的可见性能得到非常精确的控制,一个模块里只有被Export过的Package才可能被外界访问,其他的...OSGi之所以能有上述诱人的特点,必须要归功于它灵活的类加载器架构。OSGi的Bundle类加载器 之间只有规则,没有固定的委派关系。...不涉及某个具体的Package时,各个Bundle加载器都是平级的关系,只有具体使用到某 个Package和Class的时候,才会根据Package导入导出定义来构造Bundle间的委派和依赖。...加载方式从简单的树形变成平面网状 经典类加载结构 OGSI网状导入 在OSGi中,加载器之间的关系不再是双亲委派模型的树形结构,而是已经进一步发展成一种更为复杂的、运行时才能确定的网状结构。...否则,查找当前Bundle的Classpath,使用自己的类加载器加载。 否则,查找是否在自己的Fragment Bundle中,如果是则委派给Fragment Bundle的类加载器加载。

    69030

    OSGI开发web应用

    在左侧的包浏览面板中可以看到OSGi工程的结构,“Plug-in Dependencies”下是OSGi插件运行需要的组件,src目录下是自动生成的源代码,simplewebosgi.Activator...是 Bundle生成周期管理类,可以监听组件的启动和停止动作。...与普通Java工程所不同的是向导会生成“META-INF”目录以及其下的文件 MANIFEST.MF文件,此文件会随插件的发布一起被打到jar包中,定义了Bundle的标识、版本、名称、运行环境等内容。...右边是可视化的配置管 理器,在这里可以定义插件,配置插件运行所依赖的组件及需要导入的包,运行时环境,编译构建配置等。...#start(org.osgi.framework.BundleContext * ) */ public void start(BundleContext context) throws Exception

    1.7K40

    Springboot Application 集成 OSGI 框架开发

    ClassLoader 使用的是双亲委托模型来搜索类的,每个 ClassLoader 实例都有一个父类加载器的引用(不是继承的关系,是一个包含的关系),虚拟机内置的类加载器(Bootstrap ClassLoader...通过 Fragment-Host 来指定宿主 bundle,同时也可以通过这种方式使用宿主的类加载器。 图 1.OSGI 类加载器 ?...image OSGI 框架根据 Bundle 的 MANIFEST.MF 文件中描述的数据信息进行解析处理 Bundle 间的依赖关系。...Spring boot 应用中嵌入 OSGI 开发和 Spring boot 应用如何与 OSGI 插件之间进行相互调用。...使用一个例子来对这一系列的使用做了进一步的讲解。并对它的实现方法做了进一步的探讨,这些探讨对于将 OSGI 应用嵌入到任何其他的系统中是一个启发和帮助,希望有兴趣的读者可以做进一步的了解和实现。

    1.4K20

    秒懂双亲委派机制

    该方法主要是实现从那个路径读取 ar包或者.class文件,将读取到的文件用字节数组来存储,然后可以使用父类的defineClass来转换成字节码。...但如果多个Web应用,使用了相同的依赖,比如:SpringBoot、Mybatis等。这些依赖包所涉及的文件非常多,如果全部都独立,可能会导致JVM内存不足。...也就是说,有些公共的依赖包,最好能够只加载一次。 我们还需要将Tomcat本身的类,跟Web应用的类隔离开。 这些原因导致,Tomcat没有办法使用传统的双亲委派机制加载类了。...比如不同war包应用引入了不同的Spring版本,这样能加载各自的Spring版本,相互隔离。...OSGi的Bundle类加载器之间只有规则,没有固定的委派关系。 各个Bundle加载器是平级关系。 不是双亲委派关系。

    13310
    领券