Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

感觉JuShaTa貌似并未解决README中阐述的问题 #5

Open
jxsrlsl1234 opened this issue Jul 28, 2022 · 0 comments
Open

感觉JuShaTa貌似并未解决README中阐述的问题 #5

jxsrlsl1234 opened this issue Jul 28, 2022 · 0 comments

Comments

@jxsrlsl1234
Copy link

jxsrlsl1234 commented Jul 28, 2022

READEME中阐述了两个很主要的问题:

容器内部署多个模块时,将会带来以下问题:

  • jar包冲突:如A模块依赖于fastjson-1.1.x,B模块依赖于fastjson-1.2.x,运行时很容易会报NoSuchMethodException。
  • bean冲突:A模块和B模块都定义了xxxService,则会报bean冲突(当然可以通过设置allowBeanDefinitionOverriding属性解决,但会引来新的问题)。
    因此,容器必须解决这两个问题:
  • 解决jar包冲突,通过自定义ClassLoader来实现,不同模块使用不同的ClassLoader进行加载。
  • 解决bean冲突,使用Spring Context进行隔离,每个模块对应一个Context,Context间可以有父子依赖关系。

但实际上我看了下源码,发现“通过自定义ClassLoader来实现”只是说给每一个单体服务分配一个classloader实例,每个单体服务本身就是独立的,只不过此处是将其部署到同一个JVM当中,这并没有和上文中“NoSuchMethodException”相对应。我理解的是NoSuchMethodException问题是出现在一个单体服务执行的一个进程中,如果这个单体服务本身存在多版本不兼容问题,JuShaTa并不能解决。

另外,spring context隔离,这个也是将多个服务独立了,本身就是单独的spring context,并且没有建立父子关系。

所以我感觉这个项目更像是在一个JVM中混合动态部署不同的服务,但并没有真正的做到对单体服务的类隔离及context隔离。
不知道我这么理解对不对,希望作者有时间可以解释一下,谢谢!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant