Skip to content
清英 edited this page Mar 30, 2018 · 6 revisions

JarsLink和OSGI有什么区别?

OSGI比较重,JarsLink更轻量级。OSGI的依赖关系是网状的,JarsLink是扁平化的,共用一个父类加载器。OSGI的每个模块可以申明我依赖哪些Class,输出哪些Class。JarsLink一个模块可以加载多个JAR包,OSGI的一个bundle只有一个JAR包。

JarsLink的缺点是什么?

目前还没有实现资源隔离,用在核心应用也担心互相影响,比如A模块写了死循环,影响到B模块。JarsLink可以实现了完全的类隔离,每个模块需要依赖自己的Class,这里面会有重复依赖的问题,导致JVM加载大量重复的Class。

JVM垃圾回收也是模块之间隔离的吗?

垃圾回收暂时没有隔离。

为什么比OSGI少了一个声明文件?

JarsLink的一个模块可以加载多个Jar包。JarsLink的模块不需要依赖其他模块的Class,也不需要输出Class,所以去掉对外暴露接口的声明,后续如果模块太多会考虑设计。

请问是否支持JDK1.9吗?

应该是支持的,不过我们没有测试过。

模块都在一个进程吗?会不会导致FullGC?

在同一个进程,模块能卸载干净就不会导致因模块加载增加内存导致的FullGC。

多模块相同的代码抽到二方包,是不是二方包更新,所有模块都要重新加载?

不更新的模块还是用的旧的common包。业务代码可以和common包一起打包成一个大的Jar包。

JarsLink强依赖Spring吗?

是的,用Spring做的类实例隔离。

如果多个模块有一个相同的功能使用,如何共用?

有几个方案,把这个功能抽到二方包里,两个模块都依赖这个二方包。提供一个服务给其他模块使用。

是不是每个模块一个git代码库呢?如何发布模块?

每个模块一个git代码库,需要自建模块发布系统。每个模块比较独立,都是POM依赖,然后打包成一个JAR,直接发布。

模块的拆分原则是什么?领域,功能还是代码分支。怎么解决多个开发分支同时改动一个模块而导致的冲突?

最简单的是按照团队来拆分,一个团队一个。或者按照领域来拆分,贷前,贷中,贷后等。每个模块开发的人基本上只有一二个,如果人多的话,就拆分更多的模块。

jar更新后有接口告知吗?或日志输出,如果集群使用,可能会排查更新失败的情况。

模块是用同步API加载的,加载失败会抛异常,需要自行上报给发布系统。

怎么理解Action?

模块对外暴露的接口。

该框架有BUG吗?使用中发现BUG,但是不想或者没时间查看源码,要怎么解决呢?

如果使用过程中发现了BUG可以到github上提交issue,提交时尽量详细的注明BUG描述、BUG出现场景、BUG出现时间,如果能提交一个可复现的BUG测试用例更好,我们会尽快回复你。

使用该框架时发现功能不全怎么办?

如果使用过程中感觉有某个功能很重要而当前框架中没有,那么可以也可以提交issue反馈给我们,如果确实有必要,我们会加到开发日程尽快添加该功能。

有没有交流群

建了一个钉钉群,群名:JarsLink开源框架讨论群。

http://ifeve.com/wp-content/uploads/2018/03/IMG_0244.jpg