首页
学习
活动
专区
工具
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 多平台发布

25420

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层:主要包括清单管理、版本管理、以及系统代理三大块,基于不同触发点按需执行

56020

OpenDaylight开发学习十问十答

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

99780

模块化服务规范——OSGI

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

1.5K30

CTK Plugin Framework简介

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

2.7K20

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

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

1.9K10

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

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

2.7K80

OSGi模块化和动态模块好处

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

1.5K10

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

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

38220

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

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

1.6K30

CTK框架介绍

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

1.1K20

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生命周期无关。

2.9K90

插件式开发架构综述

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

2.9K20

灵活类加载器OSGI

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

64130

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.6K40

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.3K20

秒懂双亲委派机制

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

5610
领券