Java隔离容器之sofa-ark使用说明及源码解析

本文详细介绍了Java隔离容器SofaArk的使用方法和源码解析,包括解决jar包冲突问题、 ArkContainer启动流程、sofa-ark-plugin-maven-plugin插件原理,以及SofaArk如何初始化和启动。通过将冲突的jar包打包成plugin,利用独立的类加载器解决依赖冲突。
摘要由CSDN通过智能技术生成

一.使用方法及示例

简介:当引入二方依赖包或三方依赖包时,可能出现外部依赖jar包与自己的工程需要依赖的冲突,或者多个二方三方依赖包互相冲突。这时候就需要一个隔离容器对他们进行隔离,其依赖的原理就是jvm认为不同classloader加载的类即使包名类名相同,也认为他们是不同的。sofa-ark将需要隔离的jar包打成plugin,对每个plugin都用独立的classloader去加载。

(温馨提示:若对sofa-ark不太了解的,最好先去看看官方文档,简单了解下)

使用的基本步骤:

  1. 在会发生冲突的jar包的POM文件加入sofa-ark提供的maven插件,将其打成特定格式的jar包(plugin)。
  2. 在外部工程按照约定引入jar包。如果外部工程想打包成可执行的jar(fat-jar),还需要加入特定的maven插件。
  3. 直接运行。

名词解释:

  • Ark Container: Ark 容器,是组件 SOFAArk 的核心,运行 Ark 包时,Ark 容器会最先启动,负责应用运行时的管理,主要包括构建 Ark Plugin 和 Ark Biz 的类导入导出关系表、启动并初始化 Ark Plugin 和 Ark Biz、管理 Ark Plugin 服务的发布和引用等等。
  • Biz:即业务工程,该工程引用一个或多个外部jar包。
  • plugin:会发生冲突的外部依赖jar包经过提供的Maven插件打成的fat-jar包。运行时,由独立的类加载器加载,因此有隔离需求的 Jar 包建议打包成 Ark Plugin 供应用依赖。

1.0 sofa-ark原理

在sofa-ark中,使用container容器启动外部工程(Biz)和冲突jar包(plugin),sofa-ark的plugin maven插件将冲突的jar包打包成为plugin,外部工程只能引用plugin exported出来的类,并且这个类是由独立的PluginClassLoader加载的,从而解决了jar包冲突的问题。

1.1 冲突示例

1.2 安装sofa-ark

sofa-ark官网 将整个工程下载下来,在最外层pom.xml所在路径执行mvn packagemvn install 将sofa-ark依赖jar包安装到本地。

1.3 创建基础依赖Jar包(冲突的包)

自己创建myjar工程,先后正常打包两个版本安装到本地maven仓库。

如:v1版本

v2版本

1.4 创建service包(plugin)

创建如图所示两个工程:

myJarservice-v1myJarservice-v2的pom中分别引用之前写的两个基础依赖jar包。然后在MyJarService1MyJarService2中分别引用对应版本的myjar包里的方法。

如MyJarService1.java:

MyJarService2.java

注意:这里两个Service引用的是不同版本的myjar。

接下来需要对两个工程打包,和平常打包不一样的是需要加入sofa-ark-plugin的maven插件。两个工程下的pom.xml都要加入:

 <build>
        <plugins>
            <plugin>
                <groupId>com.alipay.sofa</groupId>
                <artifactId>sofa-ark-plugin-maven-plugin</artifactId>
                <version>0.4.0-SNAPSHOT</version>
                <executions>
                    <execution>
                        <id>default-cli</id>
                        <goals>
                            <goal>ark-plugin</goal>
                        </goals>

                        <configuration>
                            <!-- configure exported class -->
                            <exported>
                                <!-
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值