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

一.使用方法及示例

简介:当引入二方依赖包或三方依赖包时,可能出现外部依赖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.sofagroupId>
                <artifactId>sofa-ark-plugin-maven-pluginartifactId>
                <version>0.4.0-SNAPSHOTversion>
                <executions>
                    <execution>
                        <id>default-cliid>
                        <goals>
                            <goal>ark-plugingoal>
                        goals>

                        <configuration>
                            
                            <exported>
                                
                    

你可能感兴趣的:(java,runtime)