不过呢,在揭开其面纱之前熟悉它的背景技术是很有必要的。不然讨论OpenDaylight时我们就会丈二和尚——摸不着头脑。 那么OpenDaylight控制器使用了哪些核心技术?...KARAF提供了一个基础容器的功能,在OSGI“装配式技术规范”下它就像是建筑主体。...【小记】 OpenDaylight的功能组件如果在实际的应用中全部安装,那么随着功能组件的发展或个性化的开发,ODL控制器就会暴饮暴食,变得身材臃肿,步履蹒跚。...它包含项目对象模型、标准集合、项目生命周期、依赖管理系统和用来定义生命周期阶段中插件和目标的逻辑。 在OpenDaylight里,Maven扮演着构件工厂的角色。...它管理着开发项目的资源,包括墙板、楼板、阳台这些最小单位的模块构件。当项目开始建设的时候,资源的调配使用都是它说得算。
2、复用 OSGi的组件模块使得它在应用中可以非常简单的使用其他第三方组件。已经有很多的开源项目都是通过OSGi来发布他们的jar包,而且商业库也开始使用现成的包。...标准化管理API很容易在现有和未来的系统中集成OSGi技术。 5、动态更新 OSGi 组件模块是一个动态的模块,模块可以在不需要停止整个系统的情况下被安装、启动、停止、更新和卸载。...当服务被使用的时候它们才会被注册。为了允许各种懒加载的场景,以使得它们可以节省运行时的巨大成本,OSGi的规范已经被优化过很多次了。...一是OSGi API应该使用能在所有环境中都有效的类;二是如果bundle包含了在某个执行环境中无效的代码,那么这个bundle就不能在该环境中启动。在OSGi规范中,这两个问题都得到了解决。...在过去的十年中,软件由于开源项目的爆发而发生了巨大的变化。十年以前,一个应用是由许多写代码的人在一起开发的。
这两天在研究Kotlin时,看到Kotlin和和OSGi的完美融合,就有必要介绍下OSGi。...因为时至今日,OSGi已经逐渐扩展到了企业应用领域,在JAVA企业级开发中扮演越来越重要的角色。...这使得一个bundle在部署后仍然具有可扩展性,新的bundle可被安装,已存在的bundle可修改和更新,而无需重新启动系统。...Virgo 项目EclipseRT项目的一部分,是一个完全模块化的Java运行时。Virgo自身就是设计为在Equinox之上的一个OSGi bundle集合。...当你真正将OSGi应用到实际开发中时,你就能体会到这样一个仓库给我们带来了多大的方便。
受访者可以选择列表中的选项或者列出自己的,本文主要关心的是大数据工具。...最初是Facebook设计和开发的,部署在大量商用服务器上来处理大量的数据。高可用,无单点故障。 Redis-开源的(BSD)内存数据结构存储、内存库、缓存、消息代理。...EHCache-广泛使用的开源Java分布式缓存、J2ee、轻量级容器。 Hadoop-用java开发的开源分布式大数据框架,用来处理非常大规模数据,hadoop是集群化部署。...最初归属在Apache Lucene项目中。 Spark-ASF中最活跃的项目,是一个开源的集群化计算框架。 Memcached–通用分布式缓存系统。...Apache Hive-在Hadoop支持类SQL封装,将SQL语句变成mr程序来执行。 Apache Kafka–高吞吐量、分布式、消息发布-订阅系统,最早是Linkin开发的。
有许多公司(包括Eclipse IDE,它是第一个采用OSGi技术的重要项目)已经使用OSGi去创建其微内核和插件架构,以允许在运行时刻获得好的模块化和动态组装特性。...几个其他项目如Apache Directory、Geronimo、Jackrabbit、Spring以及JOnAS也都正在转向采用OSGi。...目前Felix已经实现了OSGI R4规范中的大部分内容。...点击完成,得到结果,然后到工程中已经搭建好的环境felix项目中进行刷新,可以看到多出pluglins目录 ?...环境和工程都已经完成,下面安装和卸载一下工程在felix中 启动Felix,在Console中先使用install命令安装bundle,接着使用start命令启动bundle。 ?
使用A中方法时,要先创建一个实例new A(),Java虚拟机基于类的描述信息在Java堆中创建一个A的实例。 那何时会触发类的加载呢?...话外音:总结下,对象基本上都是在jvm的堆区中创建,在创建对象之前,会触发类加载(加载、连接、初始化),当类初始化完成后,根据类信息在堆区中实例化类对象,初始化非静态变量、非静态代码以及默认构造方法,当对象使用完之后会在合适的时候被...2.模块化编程与热插拔 OSGi 旨在为实现 Java 程序的模块化编程提供基础条件,基于 OSGi 的程序很可能可以实现模块化级的热插拔功能,当程序升级更新时,可以只停用、重新安装然后启动程序的其中一部分...简单点说,OSGI 被设计专门用来开发可分解为功能模块的复杂的 Java 应用。OSGI提供以下优势: 1.可以动态地安装、卸载、启动、停止不同的应用模块,而不需要重启容器。...2.在同一时刻可以跑多个同一个应用模块的实例。 3.OSGI在SOA领域提供成熟的解决方案,包括嵌入式,移动设备和客户端应用等。 不管做什么,只要坚持下去就会不一样!
受访者可以选择列表中的选项或者列出自己的,本文主要关心的是大数据工具。...最初是Facebook设计和开发的,部署在大量商用服务器上来处理大量的数据。高可用,无单点故障。 Redis-开源的(BSD)内存数据结构存储、内存库、缓存、消息代理。...EHCache-广泛使用的开源Java分布式缓存、J2ee、轻量级容器。 Hadoop-用java开发的开源分布式大数据框架,用来处理非常大规模数据,hadoop是集群化部署。...最初归属在Apache Lucene项目中。 Spark-ASF中最活跃的项目,是一个开源的集群化计算框架。 Memcached–通用分布式缓存系统。...Titan–可扩展的图形数据库,针对集群存储和查询数千亿的图形数据做过优化。
Maven Archetype的原理与其在OpenDaylight中的应用 Archetype[1]是一个Maven项目模板的工具。它提供了一种快速生成一致的Maven项目的方法。...在作者编写本篇教程时,使用下述URI下载的Archetype源码(建议使用git clone下载该源码,方便后面使用git checkout切换源码版本)。...这些参数可以在用户利用Archetype生成自己的项目,使用mvn archetype:generate命令时被指定。...使用mvn archetype:generate命令,从本地仓库中获取安装过的Archetype的artifact,生成自己所需的子项目。以下命令运行在控制台(Terminal)。...当一个bundle包含一个或者多少Blueprint XML文件时,会被认为是Blueprint bundles。这些Blueprint XML位于OSGI-INF/blueprint/目录下。
实际上ONOS是由多个子系统组成,本文将对ONOS中几个比较有代表性的子系统进行介绍。 基础——OSGi: ONOS由多个模块组合而成,实际上ONOS是基于OSGi bundles实现的。...在ONOS中,每个子系统都有自己的源码树,ONOS吸收了Maven的分层POM组织方式,因而每个子项目拥有自己的pom.xml文件。...在Provider中还包含Provider Id,一个Provider必须和一个Id关联标识。...在ONOS的Device Subsystem中能支持多个Provider。...本地的状态分段由节点管理,在集群中以事件传播。事件被Store生成,它们通过分布式储存与集群中的所有节点共享。
当插件进入ACTIVE状态时,框架会调用start方法,当插件离开ACTIVE状态时,插件框架会调用stop方法。每一个插件都会接收到一个访问插件框架的唯一ctkPluginContext对象。...ctkPlugin对象是定义一个已安装插件的生命周期的访问点,在插件环境中安装的每个插件都必须有一个相关的ctkPlugin对象。...此外,插件必须有一个唯一的标识,在插件的生命周期中,唯一标识不能改变(即使是在插件更新时),卸载和重新安装插件必须创建一个新的唯一标识。...3.4、动态更新 OSGi组件模型是一个动态模型,插件可以在不关闭整个系统的情况下被安装、启动、停止、更新和卸载。...例如,插件可以用饿汉式启动,但是也可以被配置为仅当其它插件使用它们时才启动。服务可以被注册,但只有在使用时才创建。懒加载场景可以节省大量的运行时成本。
在今天,通常引入OSGi的主要理由 是基于OSGi架构的程序很可能(只是很可能,并不是一定会,需要考虑热插拔后的内存管理、上下文状态维护问题等复杂因素)会实现模块级的热插拔功能,当程序升级更新或调试除错时...,可以只停用、重新安装然后启用程序的其中一部分,这对大型软件、企业级程序开发来说是一个非常有诱惑力的特性,譬如Eclipse中安装、卸载、更新插件而不需要重启动,就使用到了这种特性。...加载方式从简单的树形变成平面网状 经典类加载结构 OGSI网状导入 在OSGi中,加载器之间的关系不再是双亲委派模型的树形结构,而是已经进一步发展成一种更为复杂的、运行时才能确定的网状结构。...这种网状的类加载器架构在带来更优秀的灵活性的同时,也可能会产生许多新的隐患。 类加载时可能进 行的查找规则如下:·以java.*开头的类,委派给父类加载器加载。...否则,查找是否在自己的Fragment Bundle中,如果是则委派给Fragment Bundle的类加载器加载。
当我们在实施微服务架构时,根据团队规模来划分微服务数量,如果业务规模继续发展,团队规模扩大,我们再将已有的微服务进行拆分。...这样的拆分主要是为了提升项目快速迭代的效率避免在开发的时候,不小心影响已有的成熟功能导致线上问题。...例如“服务发现”“服务路由”等其实都是ESB的功能,只是在微服务中剥离出来成了独立的基础系统。...服务隔离:当某个微服务节点故障时,最快最简单的处理方式就是直接将当前故障节点下线隔离,避免故障进行扩散。通常情况下,服务隔离分为主动隔离、被动隔离和手动隔离。...其他相关摘要 OSGi中,插件被称为Bundle。
应用程序(称为bundle)无需重新引导可以被远程安装、启动、升级和卸载(其中Java包/类的管理被详细定义)。API中还定义了运行远程下载管理政策的生命周期管理。...2003年Eclipse选择OSGi作为其插件的底层运行时架构。Equinox project对该理念进行了实验,2004年6月在Eclipse3 R3中发布。...5、开发不具备模块化的特性,一般企业中项目往往是放到一个工程中,这样造成的后果是模块化能力不强,难于维护,越大越不容易维护。...OSGI的优缺点 a) 您可以在不重启容器的情况下,动态地安装、卸载、启动和停止您的应用程序中的不同模块; b) 对于您应用程序中的某一特定模块,容器可以同时运行该模块的多个版本; c) OSGi为开发嵌入式应用...但是具体在未来的发展中是否能够成为业界的标准有待验证。
在OSGI框架中,每一个Bundle实际上都是可热插拔的,因此,对一个特定的Bundle进行修改不会影响到容器中的所有应用,运行的大部分应用还是可以照常工作。...这种可动态更改状态的特性在一些及时性很强的系统中比较重要,尤其是在Java Web项目中,无需重启应用服务器就可以做到应用的更新。...使用OSGI的缺点如下: 1、每个Bundle都由单独的类加载器加载,与一些Java EE项目中使用比较多的框架整合比较困难,如Spring MVC、Struts2等,例如笔者尝试在OSGI应用中整合...项目上开发插件功能,开发插件就像开发独立应用一样,根据网站的介绍,使用该框架可以实现如下需求: 在插件中,您可以当成一个微型的SpringBoot项目来开发,简单易用。...在插件中扩展出系统各种功能点,用于系统灵活扩展,再也不用使用分支来交付不同需求的项目了。 在插件中可以集成各种框架及其各种spring-boot-xxx-starter。
,随之而来的还有一套基于OSGi内核构建的全新部署和打包系统。...开发工具STS 如果使用普通的eclipse开发osgi,那么开发中需要做很多的配置,所以建议使用spring社区加好插件的eclipse,基于这个开发会省去很多的麻烦。...STS也就是SpringSource Tool Suite,是spring社区基于eclipse添加的插件项目,功能非常强大。...在Server视图选择 ? 选择刚配好的virgo runtime ? 完成后,在Server里可以看到 ? virgo使用 这个其实底层运行的就是tomcat或者jetty等容器。...在server中点击启动,启动virgo ? 可以看到virgo启动后就是加载各个osgi的插件 打开浏览器,输入 http://localhost:8080 得到默认的启动页面如下: ?
引言在现代软件开发中构建可扩展、可管理和可升级的应用程序是一项关键任务为了满足这一需求Java的OSGi(Open Service Gateway Initiative)框架提供了一种模块化的解决方案本文将介绍...BundleActivator接口它是一个OSGi bundle的生命周期管理接口在start方法中我们注册了GreetingService服务以便其他bundle可以使用它stop方法用于在bundle...停止时进行清理工作。...首先,我们将上述代码编译成JAR文件并将其放入Apache Felix的运行目录中然后,我们启动Apache Felix容器执行以下命令:java -jar bin/felix.jar在Apache Felix...控制台中我们可以使用以下命令来安装和启动bundle:install file:/path/to/demo.jarstart 安装和启动com.example.osgi.demo的
版本管理:每个模块可以有自己的版本号,在升级时可以精确控制模块间的依赖关系,避免版本冲突。 热部署:可以在运行时动态加载和卸载模块,无需重启应用程序。 3....在 OSGI 模块化系统中,每个模块都被称为一个 Bundle,每个 Bundle 都有自己的类加载器,用于加载和隔离模块的类和资源。...生命周期管理:每个 Bundle 都有自己的生命周期,包括安装、启动、停止和卸载等阶段。OSGI 框架提供了生命周期的管理机制,确保每个模块在各个阶段的状态转换正确无误。 4....版本管理:每个模块可以有自己的版本号,在升级时可以精确控制模块间的依赖关系,避免版本冲突。 热部署:通过动态加载和卸载模块,可以实现热部署,减少应用程序的停机时间。 6....平台兼容性:在选择和使用 OSGI 框架时,应考虑平台的兼容性和稳定性。 8.
引言 在现代软件开发中,构建可扩展、可管理和可升级的应用程序是一项关键任务。...在start方法中,我们注册了GreetingService服务,以便其他bundle可以使用它。stop方法用于在bundle停止时进行清理工作。...首先,我们将上述代码编译成JAR文件,并将其放入Apache Felix的运行目录中。...然后,我们启动Apache Felix容器,执行以下命令: java -jar bin/felix.jar 在Apache Felix控制台中,我们可以使用以下命令来安装和启动bundle: install...file:/path/to/demo.jar start 安装和启动com.example.osgi.demo的bundle后,我们将看到GreetingModule和ClientModule
尤其是当项目越来越大,用到的组件越来越多时,内耗就更加明显。 业内方案 大概研究了一下,目前对于本地依赖调解也没有什么很好的银弹。绝大多数情况下,我们都是在流程、文档上来进行把控。...在Gradle5.0中引入了"java-library"插件,试图让组件开发方在编写组件代码时,主动控制好自己的依赖是否暴露给组件接入方(这个插件在老版本中也有,不过只有在5.0版本中在真正有用)。...在jvm的classpath中要有项目所有依赖的jar包。...这就意味着,当业务项目依赖了Ark Plugin包时,我们仍然会默认传递依赖进这个项目的间接依赖。...在IDE中启动时,由于主类的静态代码块是会在容器启动之前就会加载一次的。
领取专属 10元无门槛券
手把手带您无忧上云