Showing preview only (2,487K chars total). Download the full file or copy to clipboard to get everything.
Repository: alipay/sofa-ark
Branch: master
Commit: 2d84233e2e2f
Files: 625
Total size: 88.8 MB
Directory structure:
gitextract_hhlu8y0b/
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── feature_request.md
│ │ └── question_or_bug_report.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ └── workflows/
│ ├── cloud_code_scan.yml
│ ├── inactive_issues_robot.yml
│ ├── linux_unit_test.yml
│ ├── release.yml
│ ├── snapshot.yml
│ └── windows_unit_test.yml
├── .gitignore
├── .travis.yml
├── CLAUDE.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Formatter.xml
├── HEADER
├── LICENSE
├── README.md
├── README_EN.md
├── SECURITY.md
├── change_version.sh
├── check_format.sh
├── codecov.yml
├── pom.xml
├── sofa-ark-bom/
│ ├── CLAUDE.md
│ └── pom.xml
├── sofa-ark-parent/
│ ├── assembly/
│ │ ├── CLAUDE.md
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── assembly/
│ │ ├── assembly.xml
│ │ └── mark
│ ├── core/
│ │ ├── api/
│ │ │ ├── CLAUDE.md
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ ├── main/
│ │ │ │ └── java/
│ │ │ │ └── com/
│ │ │ │ └── alipay/
│ │ │ │ └── sofa/
│ │ │ │ └── ark/
│ │ │ │ └── api/
│ │ │ │ ├── ArkClient.java
│ │ │ │ ├── ArkConfigs.java
│ │ │ │ ├── ClientResponse.java
│ │ │ │ └── ResponseCode.java
│ │ │ └── test/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── alipay/
│ │ │ │ └── sofa/
│ │ │ │ └── ark/
│ │ │ │ └── api/
│ │ │ │ └── ArkConfigsTest.java
│ │ │ └── resources/
│ │ │ └── test.props
│ │ ├── common/
│ │ │ ├── CLAUDE.md
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ ├── main/
│ │ │ │ ├── java/
│ │ │ │ │ └── com/
│ │ │ │ │ └── alipay/
│ │ │ │ │ └── sofa/
│ │ │ │ │ └── ark/
│ │ │ │ │ └── common/
│ │ │ │ │ ├── adapter/
│ │ │ │ │ │ └── ArkLogbackContextSelector.java
│ │ │ │ │ ├── guice/
│ │ │ │ │ │ └── AbstractArkGuiceModule.java
│ │ │ │ │ ├── log/
│ │ │ │ │ │ ├── ArkLogger.java
│ │ │ │ │ │ └── ArkLoggerFactory.java
│ │ │ │ │ ├── thread/
│ │ │ │ │ │ ├── CommonThreadPool.java
│ │ │ │ │ │ ├── NamedThreadFactory.java
│ │ │ │ │ │ └── ThreadPoolManager.java
│ │ │ │ │ └── util/
│ │ │ │ │ ├── AssertUtils.java
│ │ │ │ │ ├── BizIdentityUtils.java
│ │ │ │ │ ├── ClassLoaderUtils.java
│ │ │ │ │ ├── ClassUtils.java
│ │ │ │ │ ├── EnvironmentUtils.java
│ │ │ │ │ ├── FileUtils.java
│ │ │ │ │ ├── OrderComparator.java
│ │ │ │ │ ├── ParseUtils.java
│ │ │ │ │ ├── PortSelectUtils.java
│ │ │ │ │ ├── ReflectionUtils.java
│ │ │ │ │ ├── SimpleByteBuffer.java
│ │ │ │ │ ├── StringUtils.java
│ │ │ │ │ └── ThreadPoolUtils.java
│ │ │ │ └── resources/
│ │ │ │ └── com/
│ │ │ │ └── alipay/
│ │ │ │ └── sofa/
│ │ │ │ └── ark/
│ │ │ │ └── log/
│ │ │ │ ├── log4j/
│ │ │ │ │ └── log-conf.xml
│ │ │ │ ├── log4j2/
│ │ │ │ │ └── log-conf.xml
│ │ │ │ └── logback/
│ │ │ │ └── log-conf.xml
│ │ │ └── test/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── alipay/
│ │ │ │ └── sofa/
│ │ │ │ └── ark/
│ │ │ │ └── common/
│ │ │ │ ├── adapter/
│ │ │ │ │ └── ArkLogbackContextSelectorTest.java
│ │ │ │ ├── thread/
│ │ │ │ │ └── CommonThreadPoolTest.java
│ │ │ │ └── util/
│ │ │ │ ├── AssertUtilsTest.java
│ │ │ │ ├── BizIdentityUtilsTest.java
│ │ │ │ ├── ClassLoaderUtilTest.java
│ │ │ │ ├── ClassUtilsTest.java
│ │ │ │ ├── FileUtilsTest.java
│ │ │ │ ├── ParseUtilsTest.java
│ │ │ │ ├── PortSelectUtilsTest.java
│ │ │ │ ├── SimpleByteBufferTest.java
│ │ │ │ └── StringUtilsTest.java
│ │ │ └── resources/
│ │ │ ├── plugins/
│ │ │ │ └── sample-skywalking-agent-plugin.jar
│ │ │ ├── sample-biz.jar
│ │ │ └── sample-skywalking-agent.jar
│ │ ├── exception/
│ │ │ ├── CLAUDE.md
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── alipay/
│ │ │ └── sofa/
│ │ │ └── ark/
│ │ │ └── exception/
│ │ │ ├── ArkLoaderException.java
│ │ │ └── ArkRuntimeException.java
│ │ ├── pom.xml
│ │ └── spi/
│ │ ├── CLAUDE.md
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── alipay/
│ │ │ └── sofa/
│ │ │ └── ark/
│ │ │ └── spi/
│ │ │ ├── archive/
│ │ │ │ ├── AbstractArchive.java
│ │ │ │ ├── Archive.java
│ │ │ │ ├── BizArchive.java
│ │ │ │ ├── ContainerArchive.java
│ │ │ │ ├── ExecutableArchive.java
│ │ │ │ └── PluginArchive.java
│ │ │ ├── argument/
│ │ │ │ ├── CommandArgument.java
│ │ │ │ └── LaunchCommand.java
│ │ │ ├── command/
│ │ │ │ └── Command.java
│ │ │ ├── constant/
│ │ │ │ └── Constants.java
│ │ │ ├── event/
│ │ │ │ ├── AbstractArkEvent.java
│ │ │ │ ├── AfterFinishDeployEvent.java
│ │ │ │ ├── AfterFinishStartupEvent.java
│ │ │ │ ├── ArkEvent.java
│ │ │ │ ├── biz/
│ │ │ │ │ ├── AfterAllBizStartupEvent.java
│ │ │ │ │ ├── AfterBizStartupEvent.java
│ │ │ │ │ ├── AfterBizStartupFailedEvent.java
│ │ │ │ │ ├── AfterBizStopEvent.java
│ │ │ │ │ ├── AfterBizStopFailedEvent.java
│ │ │ │ │ ├── AfterBizSwitchEvent.java
│ │ │ │ │ ├── BeforeBizRecycleEvent.java
│ │ │ │ │ ├── BeforeBizStartupEvent.java
│ │ │ │ │ ├── BeforeBizStopEvent.java
│ │ │ │ │ └── BeforeBizSwitchEvent.java
│ │ │ │ └── plugin/
│ │ │ │ ├── AfterPluginStartupEvent.java
│ │ │ │ ├── AfterPluginStopEvent.java
│ │ │ │ ├── BeforePluginStartupEvent.java
│ │ │ │ └── BeforePluginStopEvent.java
│ │ │ ├── ext/
│ │ │ │ ├── ExtResponse.java
│ │ │ │ └── ExtServiceProvider.java
│ │ │ ├── model/
│ │ │ │ ├── Biz.java
│ │ │ │ ├── BizConfig.java
│ │ │ │ ├── BizInfo.java
│ │ │ │ ├── BizOperation.java
│ │ │ │ ├── BizState.java
│ │ │ │ ├── Plugin.java
│ │ │ │ ├── PluginConfig.java
│ │ │ │ ├── PluginContext.java
│ │ │ │ └── PluginOperation.java
│ │ │ ├── pipeline/
│ │ │ │ ├── Pipeline.java
│ │ │ │ ├── PipelineContext.java
│ │ │ │ └── PipelineStage.java
│ │ │ ├── registry/
│ │ │ │ ├── ServiceFilter.java
│ │ │ │ ├── ServiceMetadata.java
│ │ │ │ ├── ServiceProvider.java
│ │ │ │ ├── ServiceProviderType.java
│ │ │ │ └── ServiceReference.java
│ │ │ ├── replay/
│ │ │ │ ├── Replay.java
│ │ │ │ └── ReplayContext.java
│ │ │ ├── service/
│ │ │ │ ├── ArkInject.java
│ │ │ │ ├── ArkService.java
│ │ │ │ ├── PluginActivator.java
│ │ │ │ ├── PriorityOrdered.java
│ │ │ │ ├── biz/
│ │ │ │ │ ├── AddBizToStaticDeployHook.java
│ │ │ │ │ ├── BizDeployService.java
│ │ │ │ │ ├── BizDeployer.java
│ │ │ │ │ ├── BizFactoryService.java
│ │ │ │ │ └── BizManagerService.java
│ │ │ │ ├── classloader/
│ │ │ │ │ ├── ClassLoaderHook.java
│ │ │ │ │ └── ClassLoaderService.java
│ │ │ │ ├── event/
│ │ │ │ │ ├── EventAdminService.java
│ │ │ │ │ └── EventHandler.java
│ │ │ │ ├── extension/
│ │ │ │ │ ├── ArkServiceLoader.java
│ │ │ │ │ ├── Extensible.java
│ │ │ │ │ ├── Extension.java
│ │ │ │ │ ├── ExtensionClass.java
│ │ │ │ │ └── ExtensionLoaderService.java
│ │ │ │ ├── injection/
│ │ │ │ │ └── InjectionService.java
│ │ │ │ ├── plugin/
│ │ │ │ │ ├── PluginDeployService.java
│ │ │ │ │ ├── PluginFactoryService.java
│ │ │ │ │ └── PluginManagerService.java
│ │ │ │ ├── registry/
│ │ │ │ │ └── RegistryService.java
│ │ │ │ └── session/
│ │ │ │ ├── CommandProvider.java
│ │ │ │ └── TelnetServerService.java
│ │ │ └── web/
│ │ │ ├── AbstractEmbeddedServerService.java
│ │ │ └── EmbeddedServerService.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── alipay/
│ │ │ └── sofa/
│ │ │ └── ark/
│ │ │ └── spi/
│ │ │ ├── argument/
│ │ │ │ └── LaunchCommandTest.java
│ │ │ ├── constant/
│ │ │ │ └── ConstantsTest.java
│ │ │ ├── ext/
│ │ │ │ └── ExtResponseTest.java
│ │ │ ├── model/
│ │ │ │ └── BizOperationTest.java
│ │ │ ├── replay/
│ │ │ │ └── ReplayContextTest.java
│ │ │ └── service/
│ │ │ └── extension/
│ │ │ └── ExtensionClassTest.java
│ │ └── resources/
│ │ └── test 2.jar
│ ├── core-impl/
│ │ ├── archive/
│ │ │ ├── CLAUDE.md
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ ├── main/
│ │ │ │ └── java/
│ │ │ │ └── com/
│ │ │ │ └── alipay/
│ │ │ │ └── sofa/
│ │ │ │ └── ark/
│ │ │ │ ├── bootstrap/
│ │ │ │ │ ├── AbstractLauncher.java
│ │ │ │ │ ├── AgentClassLoader.java
│ │ │ │ │ ├── ArkLauncher.java
│ │ │ │ │ ├── BaseExecutableArchiveLauncher.java
│ │ │ │ │ ├── ClasspathLauncher.java
│ │ │ │ │ ├── ContainerClassLoader.java
│ │ │ │ │ ├── MainMethodRunner.java
│ │ │ │ │ └── UseFastConnectionExceptionsEnumeration.java
│ │ │ │ └── loader/
│ │ │ │ ├── DirectoryBizArchive.java
│ │ │ │ ├── DirectoryContainerArchive.java
│ │ │ │ ├── EmbedClassPathArchive.java
│ │ │ │ ├── ExecutableArkBizJar.java
│ │ │ │ ├── ExplodedBizArchive.java
│ │ │ │ ├── JarBizArchive.java
│ │ │ │ ├── JarContainerArchive.java
│ │ │ │ ├── JarPluginArchive.java
│ │ │ │ ├── archive/
│ │ │ │ │ ├── ExplodedArchive.java
│ │ │ │ │ └── JarFileArchive.java
│ │ │ │ ├── data/
│ │ │ │ │ ├── RandomAccessData.java
│ │ │ │ │ └── RandomAccessDataFile.java
│ │ │ │ ├── jar/
│ │ │ │ │ ├── AsciiBytes.java
│ │ │ │ │ ├── Bytes.java
│ │ │ │ │ ├── CentralDirectoryEndRecord.java
│ │ │ │ │ ├── CentralDirectoryFileHeader.java
│ │ │ │ │ ├── CentralDirectoryParser.java
│ │ │ │ │ ├── CentralDirectoryVisitor.java
│ │ │ │ │ ├── FileHeader.java
│ │ │ │ │ ├── Handler.java
│ │ │ │ │ ├── JarEntry.java
│ │ │ │ │ ├── JarEntryFilter.java
│ │ │ │ │ ├── JarFile.java
│ │ │ │ │ ├── JarFileEntries.java
│ │ │ │ │ ├── JarURLConnection.java
│ │ │ │ │ ├── JarUtils.java
│ │ │ │ │ └── ZipInflaterInputStream.java
│ │ │ │ └── util/
│ │ │ │ └── ModifyPathUtils.java
│ │ │ └── test/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── alipay/
│ │ │ │ └── sofa/
│ │ │ │ └── ark/
│ │ │ │ ├── bootstrap/
│ │ │ │ │ ├── ArkLauncherTest.java
│ │ │ │ │ ├── ClasspathLauncherTest.java
│ │ │ │ │ └── MainMethodRunnerTest.java
│ │ │ │ └── loader/
│ │ │ │ ├── DirectoryBizArchiveTest.java
│ │ │ │ ├── DirectoryContainerArchiveTest.java
│ │ │ │ ├── EmbedClassPathArchiveTest.java
│ │ │ │ ├── ExecutableArkBizJarTest.java
│ │ │ │ ├── ExplodedBizArchiveTest.java
│ │ │ │ ├── archive/
│ │ │ │ │ ├── ExplodedArchiveTest.java
│ │ │ │ │ └── JarFileArchiveTest.java
│ │ │ │ ├── jar/
│ │ │ │ │ ├── HandlerTest.java
│ │ │ │ │ ├── JarEntryTest.java
│ │ │ │ │ ├── JarFileTest.java
│ │ │ │ │ ├── JarURLConnectionTest.java
│ │ │ │ │ ├── JarUtilsParseArtifactIdFromUnpackedDirTest.java
│ │ │ │ │ ├── JarUtilsTest.java
│ │ │ │ │ ├── JarUtilsTestHelper.java
│ │ │ │ │ └── ZipInflaterInputStreamTest.java
│ │ │ │ └── test/
│ │ │ │ ├── base/
│ │ │ │ │ └── BaseTest.java
│ │ │ │ ├── data/
│ │ │ │ │ └── RandomAccessDataFileTest.java
│ │ │ │ ├── jar/
│ │ │ │ │ ├── AsciiBytesTest.java
│ │ │ │ │ ├── BytesTest.java
│ │ │ │ │ ├── CentralDirectoryEndRecordTest.java
│ │ │ │ │ ├── CentralDirectoryFileHeaderTest.java
│ │ │ │ │ ├── CentralDirectoryParserTest.java
│ │ │ │ │ ├── JarFileTest.java
│ │ │ │ │ └── JarUtilsTest.java
│ │ │ │ └── util/
│ │ │ │ └── ModifyPathUtilsTest.java
│ │ │ └── resources/
│ │ │ ├── conf/
│ │ │ │ └── ark/
│ │ │ │ ├── bootstrap.properties
│ │ │ │ └── log/
│ │ │ │ └── logback-conf.xml
│ │ │ ├── empty-file
│ │ │ ├── example-jarinjarinjar.jar
│ │ │ ├── exploded-archive-test/
│ │ │ │ ├── META-INF/
│ │ │ │ │ └── MANIFEST.MF
│ │ │ │ ├── example-jarinjarinjar.jar
│ │ │ │ └── sample-biz.jar
│ │ │ ├── junit-4.12.jar
│ │ │ ├── pom-properties/
│ │ │ │ └── pom.properties
│ │ │ ├── pom.xml
│ │ │ ├── sample-biz-surefire.jar
│ │ │ ├── sample-biz-withjar.jar
│ │ │ ├── sample-biz.jar
│ │ │ ├── sample-springboot-fat-biz.jar
│ │ │ ├── static-combine-demo.jar
│ │ │ └── xxxxx.jar-unpack/
│ │ │ └── pom.properties
│ │ ├── container/
│ │ │ ├── CLAUDE.md
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ ├── main/
│ │ │ │ ├── java/
│ │ │ │ │ └── com/
│ │ │ │ │ └── alipay/
│ │ │ │ │ └── sofa/
│ │ │ │ │ └── ark/
│ │ │ │ │ └── container/
│ │ │ │ │ ├── ArkContainer.java
│ │ │ │ │ ├── guice/
│ │ │ │ │ │ └── ContainerModule.java
│ │ │ │ │ ├── model/
│ │ │ │ │ │ ├── BizModel.java
│ │ │ │ │ │ ├── PluginContextImpl.java
│ │ │ │ │ │ └── PluginModel.java
│ │ │ │ │ ├── pipeline/
│ │ │ │ │ │ ├── DeployBizStage.java
│ │ │ │ │ │ ├── DeployPluginStage.java
│ │ │ │ │ │ ├── ExtensionLoaderStage.java
│ │ │ │ │ │ ├── FinishStartupStage.java
│ │ │ │ │ │ ├── HandleArchiveStage.java
│ │ │ │ │ │ ├── RegisterServiceStage.java
│ │ │ │ │ │ └── StandardPipeline.java
│ │ │ │ │ ├── registry/
│ │ │ │ │ │ ├── AbstractServiceProvider.java
│ │ │ │ │ │ ├── ContainerServiceProvider.java
│ │ │ │ │ │ ├── DefaultServiceFilter.java
│ │ │ │ │ │ ├── PluginServiceProvider.java
│ │ │ │ │ │ ├── ServiceMetadataImpl.java
│ │ │ │ │ │ └── ServiceReferenceImpl.java
│ │ │ │ │ ├── service/
│ │ │ │ │ │ ├── ArkServiceContainer.java
│ │ │ │ │ │ ├── ArkServiceContainerHolder.java
│ │ │ │ │ │ ├── biz/
│ │ │ │ │ │ │ ├── BizCommandProvider.java
│ │ │ │ │ │ │ ├── BizDeployServiceImpl.java
│ │ │ │ │ │ │ ├── BizFactoryServiceImpl.java
│ │ │ │ │ │ │ ├── BizManagerServiceImpl.java
│ │ │ │ │ │ │ └── DefaultBizDeployer.java
│ │ │ │ │ │ ├── classloader/
│ │ │ │ │ │ │ ├── AbstractClasspathClassLoader.java
│ │ │ │ │ │ │ ├── BizClassLoader.java
│ │ │ │ │ │ │ ├── ClassLoaderServiceImpl.java
│ │ │ │ │ │ │ ├── CompoundEnumeration.java
│ │ │ │ │ │ │ ├── JDKDelegateClassLoader.java
│ │ │ │ │ │ │ └── PluginClassLoader.java
│ │ │ │ │ │ ├── event/
│ │ │ │ │ │ │ └── EventAdminServiceImpl.java
│ │ │ │ │ │ ├── extension/
│ │ │ │ │ │ │ └── ExtensionLoaderServiceImpl.java
│ │ │ │ │ │ ├── injection/
│ │ │ │ │ │ │ └── InjectionServiceImpl.java
│ │ │ │ │ │ ├── plugin/
│ │ │ │ │ │ │ ├── PluginCommandProvider.java
│ │ │ │ │ │ │ ├── PluginDeployServiceImpl.java
│ │ │ │ │ │ │ ├── PluginFactoryServiceImpl.java
│ │ │ │ │ │ │ └── PluginManagerServiceImpl.java
│ │ │ │ │ │ ├── registry/
│ │ │ │ │ │ │ └── RegistryServiceImpl.java
│ │ │ │ │ │ └── retrieval/
│ │ │ │ │ │ ├── ClassInfoMethod.java
│ │ │ │ │ │ ├── ClassInfoVO.java
│ │ │ │ │ │ ├── InfoQueryCommandProvider.java
│ │ │ │ │ │ └── ViewRender.java
│ │ │ │ │ ├── session/
│ │ │ │ │ │ ├── NettyTelnetServer.java
│ │ │ │ │ │ ├── StandardTelnetServerImpl.java
│ │ │ │ │ │ └── handler/
│ │ │ │ │ │ ├── AbstractTerminalTypeMapping.java
│ │ │ │ │ │ └── ArkCommandHandler.java
│ │ │ │ │ └── test/
│ │ │ │ │ ├── NoneDelegateTestClassLoader.java
│ │ │ │ │ ├── TestClassLoader.java
│ │ │ │ │ └── TestHelper.java
│ │ │ │ └── resources/
│ │ │ │ └── META-INF/
│ │ │ │ └── services/
│ │ │ │ └── com.alipay.sofa.ark.common.guice.AbstractArkGuiceModule
│ │ │ └── test/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── alipay/
│ │ │ │ └── sofa/
│ │ │ │ └── ark/
│ │ │ │ └── container/
│ │ │ │ ├── ArkContainerTest.java
│ │ │ │ ├── BaseTest.java
│ │ │ │ ├── ClassLoaderTest.java
│ │ │ │ ├── model/
│ │ │ │ │ └── BizModelTest.java
│ │ │ │ ├── pipeline/
│ │ │ │ │ └── HandleArchiveStageTest.java
│ │ │ │ ├── service/
│ │ │ │ │ ├── ArkServiceContainerTest.java
│ │ │ │ │ ├── api/
│ │ │ │ │ │ └── ArkClientTest.java
│ │ │ │ │ ├── biz/
│ │ │ │ │ │ ├── BizCommandProviderTest.java
│ │ │ │ │ │ ├── BizFactoryServiceTest.java
│ │ │ │ │ │ ├── BizManagerServiceTest.java
│ │ │ │ │ │ └── hook/
│ │ │ │ │ │ └── TestAddBizToStaticDeployHook.java
│ │ │ │ │ ├── classloader/
│ │ │ │ │ │ ├── BizClassLoaderTest.java
│ │ │ │ │ │ ├── ClassLoaderConcurrencyTest.java
│ │ │ │ │ │ ├── ClassLoaderHookTest.java
│ │ │ │ │ │ ├── ClassLoaderServiceTest.java
│ │ │ │ │ │ ├── CompoundEnumerationTest.java
│ │ │ │ │ │ ├── PluginClassLoaderTest.java
│ │ │ │ │ │ └── hook/
│ │ │ │ │ │ ├── AbstractClassLoaderHook.java
│ │ │ │ │ │ ├── TestBizClassLoaderHook.java
│ │ │ │ │ │ ├── TestDefaultBizClassLoaderHook.java
│ │ │ │ │ │ └── TestPluginClassLoaderHook.java
│ │ │ │ │ ├── event/
│ │ │ │ │ │ ├── EventAdminServiceTest.java
│ │ │ │ │ │ ├── EventTest.java
│ │ │ │ │ │ ├── GlobalEventHandlerTest.java
│ │ │ │ │ │ └── MultiEventTest.java
│ │ │ │ │ ├── extension/
│ │ │ │ │ │ ├── ExtensionClassTest.java
│ │ │ │ │ │ ├── ExtensionServiceTest.java
│ │ │ │ │ │ └── spi/
│ │ │ │ │ │ ├── ServiceA.java
│ │ │ │ │ │ ├── ServiceB.java
│ │ │ │ │ │ ├── ServiceC.java
│ │ │ │ │ │ ├── ServiceD.java
│ │ │ │ │ │ ├── SingletonService.java
│ │ │ │ │ │ └── impl/
│ │ │ │ │ │ ├── ServiceBImpl1.java
│ │ │ │ │ │ ├── ServiceBImpl2.java
│ │ │ │ │ │ ├── ServiceBImpl3.java
│ │ │ │ │ │ ├── ServiceBImpl4.java
│ │ │ │ │ │ ├── ServiceDImpl.java
│ │ │ │ │ │ └── SingletonServiceImpl.java
│ │ │ │ │ ├── injection/
│ │ │ │ │ │ └── InjectionServiceTest.java
│ │ │ │ │ ├── pipeline/
│ │ │ │ │ │ └── HandleArchiveTest.java
│ │ │ │ │ ├── plugin/
│ │ │ │ │ │ ├── PluginCommandProviderTest.java
│ │ │ │ │ │ ├── PluginFactoryServiceTest.java
│ │ │ │ │ │ └── PluginManagerServiceTest.java
│ │ │ │ │ ├── registry/
│ │ │ │ │ │ └── ServiceRegistrationTest.java
│ │ │ │ │ ├── retrieval/
│ │ │ │ │ │ ├── ClassInfoMethodTest.java
│ │ │ │ │ │ ├── InfoQueryCommandProviderTest.java
│ │ │ │ │ │ └── ViewRenderTest.java
│ │ │ │ │ └── session/
│ │ │ │ │ └── CommandHandlerTest.java
│ │ │ │ ├── session/
│ │ │ │ │ └── NettyTelnetServerTest.java
│ │ │ │ ├── test/
│ │ │ │ │ └── TestHelperTest.java
│ │ │ │ └── testdata/
│ │ │ │ ├── ITest.java
│ │ │ │ ├── activator/
│ │ │ │ │ ├── PluginActivatorA.java
│ │ │ │ │ ├── PluginActivatorADup.java
│ │ │ │ │ ├── PluginActivatorB.java
│ │ │ │ │ └── PluginActivatorC.java
│ │ │ │ ├── classloader/
│ │ │ │ │ └── ClassLoaderTestClass.java
│ │ │ │ └── impl/
│ │ │ │ ├── TestObjectA.java
│ │ │ │ ├── TestObjectB.java
│ │ │ │ └── TestObjectC.java
│ │ │ └── resources/
│ │ │ ├── META-INF/
│ │ │ │ └── services/
│ │ │ │ └── sofa-ark/
│ │ │ │ ├── com.alipay.sofa.ark.container.service.extension.spi.ServiceB
│ │ │ │ ├── com.alipay.sofa.ark.spi.service.biz.AddBizToStaticDeployHook
│ │ │ │ ├── com.alipay.sofa.ark.spi.service.classloader.ClassLoaderHook
│ │ │ │ ├── sample-ark-2.0.1-ark-biz.jar
│ │ │ │ ├── serviceA
│ │ │ │ └── serviceD
│ │ │ ├── aopalliance-1.0.jar
│ │ │ ├── com.springsource.org.aopalliance-1.0.0.jar
│ │ │ ├── export/
│ │ │ │ ├── folderA/
│ │ │ │ │ ├── test1.xml
│ │ │ │ │ └── test2.xml
│ │ │ │ └── folderB/
│ │ │ │ ├── test3.xml
│ │ │ │ └── test4.xml
│ │ │ ├── multi_export.xml
│ │ │ ├── pluginA_export_resource1.xml
│ │ │ ├── pluginA_export_resource2.xml
│ │ │ ├── pluginA_not_export_resource.xml
│ │ │ ├── profile-test.jar
│ │ │ ├── sample-ark-1.0.0-ark-biz.jar
│ │ │ ├── sample-ark-2.0.0-ark-biz.jar
│ │ │ ├── sample-ark-3.0.0-ark-biz.jar
│ │ │ ├── sample-ark-4.0.0-ark-biz.jar
│ │ │ ├── sample-ark-5.0.0-ark-biz.jar
│ │ │ ├── sample-ark-plugin-common-0.5.1.jar
│ │ │ ├── sample-biz.jar
│ │ │ ├── sample-plugin.jar
│ │ │ ├── sofa-ark-sample-springboot-ark-0.3.0.jar
│ │ │ ├── static-combine-springboot-executable.jar
│ │ │ └── test.jar
│ │ └── pom.xml
│ ├── pom.xml
│ └── support/
│ ├── ark-gradle-plugin/
│ │ ├── README.md
│ │ ├── build.gradle
│ │ ├── settings.gradle
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── com/
│ │ └── alipay/
│ │ └── sofa/
│ │ └── ark/
│ │ └── plugin/
│ │ ├── ArkArchiveSupport.java
│ │ ├── ArkBizCopyAction.java
│ │ ├── ArkJar.java
│ │ ├── ArkPluginAction.java
│ │ ├── BootArchive.java
│ │ ├── DefaultTimeZoneOffset.java
│ │ ├── JarTypeFileSpec.java
│ │ ├── LoaderZipEntries.java
│ │ ├── MainClassFinder.java
│ │ ├── Nullable.java
│ │ ├── ResolveMainClassName.java
│ │ ├── SofaArkGradlePlugin.java
│ │ ├── SofaArkGradlePluginExtension.java
│ │ ├── StringUtils.java
│ │ └── ZipCompression.java
│ ├── ark-maven-plugin/
│ │ ├── CLAUDE.md
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── alipay/
│ │ │ └── sofa/
│ │ │ └── ark/
│ │ │ └── boot/
│ │ │ └── mojo/
│ │ │ ├── ArtifactsLibraries.java
│ │ │ ├── MavenUtils.java
│ │ │ ├── ModuleSlimConfig.java
│ │ │ ├── ModuleSlimExecutor.java
│ │ │ ├── RepackageMojo.java
│ │ │ ├── model/
│ │ │ │ └── ArkConfigHolder.java
│ │ │ └── utils/
│ │ │ └── ParseUtils.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── alipay/
│ │ │ └── sofa/
│ │ │ └── ark/
│ │ │ └── boot/
│ │ │ └── mojo/
│ │ │ ├── ArtifactsLibrariesTest.java
│ │ │ ├── CommonUtils.java
│ │ │ ├── MavenUtilsTest.java
│ │ │ ├── ModuleSlimExecutorTest.java
│ │ │ ├── ReflectionUtils.java
│ │ │ ├── RepackageMojoTest.java
│ │ │ └── utils/
│ │ │ └── ParseUtilsTest.java
│ │ └── resources/
│ │ ├── baseDir/
│ │ │ └── conf/
│ │ │ └── ark/
│ │ │ ├── bootstrap.properties
│ │ │ └── bootstrap.yml
│ │ ├── dependency-tree-mock.txt
│ │ ├── excludes.txt
│ │ └── test-jar.jar
│ ├── ark-plugin-gradle-plugin/
│ │ ├── README.md
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── alipay/
│ │ │ └── sofa/
│ │ │ └── ark/
│ │ │ └── boot/
│ │ │ └── mojo/
│ │ │ ├── ArkPlugin.java
│ │ │ ├── ArkPluginCopyAction.java
│ │ │ ├── ArkPluginExtension.java
│ │ │ ├── ArkPluginJarTask.java
│ │ │ └── BaseConfig.java
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── alipay/
│ │ └── sofa/
│ │ └── ark/
│ │ └── boot/
│ │ └── mojo/
│ │ └── ArkPluginExtensionTest.java
│ ├── ark-plugin-maven-plugin/
│ │ ├── CLAUDE.md
│ │ ├── META-INF/
│ │ │ └── MANIFEST.MF
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── alipay/
│ │ │ │ └── sofa/
│ │ │ │ └── ark/
│ │ │ │ └── plugin/
│ │ │ │ └── mojo/
│ │ │ │ ├── AbstractPropertiesConfig.java
│ │ │ │ ├── ArkPluginMojo.java
│ │ │ │ ├── ExportConfig.java
│ │ │ │ ├── ImportConfig.java
│ │ │ │ ├── LinkedAttributes.java
│ │ │ │ ├── LinkedManifest.java
│ │ │ │ └── LinkedProperties.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── maven/
│ │ │ └── plugin.xml
│ │ └── test/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── alipay/
│ │ │ └── sofa/
│ │ │ └── ark/
│ │ │ └── plugin/
│ │ │ └── mojo/
│ │ │ ├── ArkPluginMojoTest.java
│ │ │ ├── LinkedAttributesTest.java
│ │ │ ├── LinkedPropertiesTest.java
│ │ │ └── test/
│ │ │ └── ArkPluginMojoTest.java
│ │ └── resources/
│ │ ├── a-test-demo.jar
│ │ └── test-demo.jar
│ ├── ark-springboot-integration/
│ │ ├── ark-common-springboot/
│ │ │ ├── CLAUDE.md
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── alipay/
│ │ │ └── sofa/
│ │ │ └── ark/
│ │ │ └── springboot/
│ │ │ └── condition/
│ │ │ ├── ConditionalOnArkEnabled.java
│ │ │ ├── ConditionalOnSpringBootVersion.java
│ │ │ ├── OnArkEnabled.java
│ │ │ └── OnSpringBootVersion.java
│ │ ├── ark-compatible-springboot1/
│ │ │ ├── CLAUDE.md
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ ├── main/
│ │ │ │ ├── java/
│ │ │ │ │ └── com/
│ │ │ │ │ └── alipay/
│ │ │ │ │ └── sofa/
│ │ │ │ │ └── ark/
│ │ │ │ │ └── springboot1/
│ │ │ │ │ ├── CompatibleSpringBoot1AutoConfiguration.java
│ │ │ │ │ ├── endpoint/
│ │ │ │ │ │ ├── IntrospectBizEndpoint.java
│ │ │ │ │ │ └── IntrospectBizEndpointMvcAdapter.java
│ │ │ │ │ └── web/
│ │ │ │ │ ├── ArkAutoConfiguration.java
│ │ │ │ │ ├── ArkTomcatEmbeddedServletContainer.java
│ │ │ │ │ ├── ArkTomcatEmbeddedServletContainerFactory.java
│ │ │ │ │ └── SwitchClassLoaderFilter.java
│ │ │ │ └── resources/
│ │ │ │ └── META-INF/
│ │ │ │ └── spring.factories
│ │ │ └── test/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── alipay/
│ │ │ │ └── sofa/
│ │ │ │ └── ark/
│ │ │ │ ├── springboot1/
│ │ │ │ │ └── web/
│ │ │ │ │ ├── ArkTomcatEmbeddedServletContainerTest.java
│ │ │ │ │ └── ArkTomcatServletWebServerFactoryTest.java
│ │ │ │ └── test/
│ │ │ │ └── springboot1/
│ │ │ │ ├── IntrospectBizEndpointOnArkDisabledTest.java
│ │ │ │ └── IntrospectBizEndpointOnArkEnabledTest.java
│ │ │ └── resources/
│ │ │ └── logback.xml
│ │ ├── ark-compatible-springboot2/
│ │ │ ├── CLAUDE.md
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ ├── main/
│ │ │ │ ├── java/
│ │ │ │ │ └── com/
│ │ │ │ │ └── alipay/
│ │ │ │ │ └── sofa/
│ │ │ │ │ └── ark/
│ │ │ │ │ └── springboot2/
│ │ │ │ │ ├── CompatibleSpringBoot2AutoConfiguration.java
│ │ │ │ │ ├── endpoint/
│ │ │ │ │ │ └── IntrospectBizEndpoint.java
│ │ │ │ │ └── web/
│ │ │ │ │ └── SwitchClassLoaderFilter.java
│ │ │ │ └── resources/
│ │ │ │ └── META-INF/
│ │ │ │ └── spring.factories
│ │ │ └── test/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── alipay/
│ │ │ │ └── sofa/
│ │ │ │ └── ark/
│ │ │ │ └── test/
│ │ │ │ └── springboot2/
│ │ │ │ ├── SpringBoot2IntrospectBizEndpointOnArkDisabledTest.java
│ │ │ │ └── SpringBoot2IntrospectBizEndpointOnArkEnabledTest.java
│ │ │ └── resources/
│ │ │ └── logback.xml
│ │ └── ark-springboot-starter/
│ │ ├── CLAUDE.md
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── alipay/
│ │ │ │ └── sofa/
│ │ │ │ └── ark/
│ │ │ │ └── springboot/
│ │ │ │ ├── ArkAutoProcessorConfiguration.java
│ │ │ │ ├── ArkReactiveAutoConfiguration.java
│ │ │ │ ├── ArkServletAutoConfiguration.java
│ │ │ │ ├── ArkServletLegacyAutoConfiguration.java
│ │ │ │ ├── listener/
│ │ │ │ │ ├── ArkApplicationStartListener.java
│ │ │ │ │ ├── ArkDeployStaticBizListener.java
│ │ │ │ │ └── PropertiesResetListener.java
│ │ │ │ ├── loader/
│ │ │ │ │ ├── CachedLaunchedURLClassLoader.java
│ │ │ │ │ └── JarLauncher.java
│ │ │ │ ├── processor/
│ │ │ │ │ ├── ArkEventHandlerProcessor.java
│ │ │ │ │ └── ArkServiceInjectProcessor.java
│ │ │ │ ├── runner/
│ │ │ │ │ ├── ArkBootEmbedRunner.java
│ │ │ │ │ └── ArkBootRunner.java
│ │ │ │ └── web/
│ │ │ │ ├── ArkCompositeReactorHttpHandlerAdapter.java
│ │ │ │ ├── ArkNettyReactiveWebServerFactory.java
│ │ │ │ ├── ArkNettyWebServer.java
│ │ │ │ ├── ArkTomcatServletWebServerFactory.java
│ │ │ │ └── ArkTomcatWebServer.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ ├── spring/
│ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ │ └── spring.factories
│ │ └── test/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── alipay/
│ │ │ └── sofa/
│ │ │ └── ark/
│ │ │ ├── springboot/
│ │ │ │ ├── listener/
│ │ │ │ │ └── ArkDeployStaticBizListenerTest.java
│ │ │ │ ├── loader/
│ │ │ │ │ └── CachedLaunchedURLClassLoaderTest.java
│ │ │ │ └── web/
│ │ │ │ ├── ArkTomcatServletWebServerFactoryTest.java
│ │ │ │ └── ArkTomcatWebServerTest.java
│ │ │ └── test/
│ │ │ ├── ArkBootRunnerTest.java
│ │ │ ├── ArkBootTestNGTest.java
│ │ │ ├── MultiArkBootRunnerTest.java
│ │ │ ├── SpringbootRunnerTest.java
│ │ │ └── springboot/
│ │ │ ├── BaseSpringApplication.java
│ │ │ ├── RegisterMockEmbedTomcatService.java
│ │ │ ├── TestValueHolder.java
│ │ │ ├── facade/
│ │ │ │ └── SampleService.java
│ │ │ └── impl/
│ │ │ ├── SampleServiceImpl.java
│ │ │ └── TestBizEventHandler.java
│ │ └── resources/
│ │ ├── META-INF/
│ │ │ └── sofa-ark-test/
│ │ │ └── sofa-ark-test.xml
│ │ ├── config/
│ │ │ └── application.properties
│ │ ├── logback.xml
│ │ └── sample-biz-0.3.0.jar
│ ├── ark-support-starter/
│ │ ├── CLAUDE.md
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── alipay/
│ │ │ │ └── sofa/
│ │ │ │ └── ark/
│ │ │ │ └── support/
│ │ │ │ ├── common/
│ │ │ │ │ ├── AddBizInResourcesHook.java
│ │ │ │ │ ├── DelegateArkContainer.java
│ │ │ │ │ ├── DelegateToMasterBizClassLoaderHook.java
│ │ │ │ │ └── MasterBizEnvironmentHolder.java
│ │ │ │ ├── listener/
│ │ │ │ │ ├── ArkTestNGAlterSuiteListener.java
│ │ │ │ │ ├── ArkTestNGExecutionListener.java
│ │ │ │ │ ├── ArkTestNGInvokedMethodListener.java
│ │ │ │ │ ├── TestNGOnArk.java
│ │ │ │ │ └── TestNGOnArkEmbeded.java
│ │ │ │ ├── runner/
│ │ │ │ │ ├── ArkJUnit4EmbedRunner.java
│ │ │ │ │ ├── ArkJUnit4Runner.java
│ │ │ │ │ └── JUnitExecutionListener.java
│ │ │ │ ├── startup/
│ │ │ │ │ ├── EmbedSofaArkBootstrap.java
│ │ │ │ │ ├── EntryMethod.java
│ │ │ │ │ └── SofaArkBootstrap.java
│ │ │ │ └── thread/
│ │ │ │ ├── IsolatedThreadGroup.java
│ │ │ │ └── LaunchRunner.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── services/
│ │ │ ├── org.testng.ITestNGListener
│ │ │ └── sofa-ark/
│ │ │ └── com.alipay.sofa.ark.spi.service.biz.AddBizToStaticDeployHook
│ │ └── test/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── alipay/
│ │ │ └── sofa/
│ │ │ └── ark/
│ │ │ └── support/
│ │ │ ├── AddBizInResourcesHookTest.java
│ │ │ ├── DefaultClassLoaderHookTest.java
│ │ │ ├── MultiSuiteTest.java
│ │ │ ├── TestNGCommonTest.java
│ │ │ ├── TestNGOnArkTest.java
│ │ │ ├── runner/
│ │ │ │ ├── ArkJUnit4RunnerTest.java
│ │ │ │ └── CommonJUnit4Test.java
│ │ │ ├── startup/
│ │ │ │ └── EmbedSofaArkBootstrapTest.java
│ │ │ └── thread/
│ │ │ ├── IsolatedThreadGroupTest.java
│ │ │ └── LaunchRunnerTest.java
│ │ └── resources/
│ │ ├── SOFA-ARK/
│ │ │ └── biz/
│ │ │ └── biz1-bootstrap-0.0.1-SNAPSHOT-ark-biz.jar
│ │ ├── aopalliance-1.0.jar
│ │ ├── com.springsource.org.aopalliance-1.0.0.jar
│ │ ├── sample-ark-1.0.0-ark-biz.jar
│ │ ├── sample-ark-plugin-common-0.5.1.jar
│ │ └── sofa-ark-sample-springboot-ark-0.3.0.jar
│ ├── ark-tools/
│ │ ├── CLAUDE.md
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── alipay/
│ │ │ └── sofa/
│ │ │ └── ark/
│ │ │ └── tools/
│ │ │ ├── ArtifactItem.java
│ │ │ ├── JarWriter.java
│ │ │ ├── Layout.java
│ │ │ ├── Layouts.java
│ │ │ ├── Libraries.java
│ │ │ ├── Library.java
│ │ │ ├── LibraryCallback.java
│ │ │ ├── LibraryScope.java
│ │ │ ├── LoaderClassesWriter.java
│ │ │ ├── MainClassFinder.java
│ │ │ ├── Repackager.java
│ │ │ ├── RepackagingLayout.java
│ │ │ └── git/
│ │ │ ├── GitInfo.java
│ │ │ └── JGitParser.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── alipay/
│ │ │ └── sofa/
│ │ │ └── ark/
│ │ │ └── tools/
│ │ │ ├── ArtifactItemTest.java
│ │ │ ├── JarWriterTest.java
│ │ │ ├── LayoutsTest.java
│ │ │ ├── MainClassFinderTest.java
│ │ │ ├── RepackagerTest.java
│ │ │ └── git/
│ │ │ └── JGitParserTest.java
│ │ └── resources/
│ │ ├── conf/
│ │ │ └── test-jar.jar
│ │ ├── test-jar.jar
│ │ └── test-pom.xml
│ └── pom.xml
└── sofa-ark-plugin/
├── config-ark-plugin/
│ ├── CLAUDE.md
│ ├── DEMO_SHOW.md
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── alipay/
│ │ └── sofa/
│ │ └── ark/
│ │ └── config/
│ │ ├── ConfigBaseActivator.java
│ │ ├── ConfigProcessor.java
│ │ ├── ConfigTypeEnum.java
│ │ ├── LazyActivatorWrapper.java
│ │ ├── OperationProcessor.java
│ │ ├── RegistryConfig.java
│ │ ├── apollo/
│ │ │ └── ApolloConfigActivator.java
│ │ ├── util/
│ │ │ ├── NetUtils.java
│ │ │ └── OperationTransformer.java
│ │ └── zk/
│ │ ├── ZookeeperConfigActivator.java
│ │ └── ZookeeperConfigurator.java
│ └── test/
│ └── java/
│ └── com/
│ └── alipay/
│ └── sofa/
│ └── ark/
│ └── config/
│ ├── ApolloConfigActivatorTest.java
│ ├── ConfigBaseActivatorTest.java
│ ├── MockApolloConfig.java
│ ├── OperationTransformerTest.java
│ └── ZookeeperConfiguratorTest.java
├── netty-ark-plugin/
│ ├── CLAUDE.md
│ ├── pom.xml
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── alipay/
│ └── sofa/
│ └── ark/
│ ├── NettyPluginActivator.java
│ └── netty/
│ ├── ArkNettyIdentification.java
│ └── EmbeddedServerServiceImpl.java
├── pom.xml
└── web-ark-plugin/
├── CLAUDE.md
├── pom.xml
└── src/
├── main/
│ ├── java/
│ │ └── com/
│ │ └── alipay/
│ │ └── sofa/
│ │ └── ark/
│ │ └── web/
│ │ └── embed/
│ │ ├── WebPluginActivator.java
│ │ └── tomcat/
│ │ ├── ArkTomcatEmbeddedWebappClassLoader.java
│ │ ├── EmbeddedServerServiceImpl.java
│ │ └── SwitchClassLoaderAutoConfiguration.java
│ └── resources/
│ └── META-INF/
│ ├── spring/
│ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ └── spring.factories
└── test/
└── java/
└── com/
└── alipay/
└── sofa/
└── ark/
└── web/
└── embed/
├── WebPluginActivatorTest.java
└── tomcat/
├── ArkTomcatEmbeddedWebappClassLoaderTest.java
└── EmbeddedServerServiceImplTest.java
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature Request
about: Propose a feature on improving user experience or bringing a new functionality.
---
### Feature description
Describe the feature details with Chinese or English.
### Additional notes
Add other notes if necessary.
================================================
FILE: .github/ISSUE_TEMPLATE/question_or_bug_report.md
================================================
---
name: Question or Bug Report
about: Create a question or bug report to help us improve.
---
### Describe the question or bug
A clear and concise description of what the question or bug is.
### Expected behavior
A clear and concise description of what you expected to happen.
### Actual behavior
A clear and concise description of what actually happened.
### Steps to reproduce
Steps to reproduce the problem:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
### Screenshots
If applicable, add screenshots to help explain your problem.
### Minimal yet complete reproducer code (or GitHub URL to code)
### Environment
- SOFAArk version:
- JVM version (e.g. `java -version`):
- OS version (e.g. `uname -a`):
- Maven version:
- IDE version:
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
### Motivation
Explain the context, and why you're making that change.
To make others understand what is the problem you're trying to solve.
### Modification
Describe the idea and modifications you've done.
### Result
Resolved or fixed #<GitHub issue number>.
If there is no issue then describe the changes introduced by this PR.
================================================
FILE: .github/workflows/cloud_code_scan.yml
================================================
name: Alipay Cloud Devops Codescan
on:
pull_request_target:
jobs:
stc: # Code security scanning
runs-on: ubuntu-latest
steps:
- name: codeScan
uses: layotto/alipay-cloud-devops-codescan@main
with:
parent_uid: ${{ secrets.ALI_PID }}
private_key: ${{ secrets.ALI_PK }}
scan_type: stc
sca: # Open source compliance scanning
runs-on: ubuntu-latest
steps:
- name: codeScan
uses: layotto/alipay-cloud-devops-codescan@main
with:
parent_uid: ${{ secrets.ALI_PID }}
private_key: ${{ secrets.ALI_PK }}
scan_type: sca
================================================
FILE: .github/workflows/inactive_issues_robot.yml
================================================
name: stale issues monitor and close 🌊
on:
schedule:
- cron: '30 1 * * *'
jobs:
stale:
name: "Update Stale Status"
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v4
with:
days-before-stale: 30
days-before-close: 7
stale-issue-message: >
This issue has been automatically marked as stale because it has not had
recent activity in the last 30 days. It will be closed in the next 7 days unless it is tagged (pinned, good first issue or help wanted) or other activity occurs. Thank you
for your contributions.
close-issue-message: >
This issue has been automatically closed because it has not had activity in the
last 37 days. If this issue is still valid, please ping a maintainer and ask them to label it as pinned, good first issue or help wanted.
Thank you for your contributions.
stale-pr-message: >
This pull request has been automatically marked as stale because it has not had
activity in the last 30 days. It will be closed in 7 days if no further activity occurs. Please
feel free to give a status update now, ping for review, or re-open when it's ready.
Thank you for your contributions!
close-pr-message: >
This pull request has been automatically closed because it has not had
activity in the last 37 days. Please feel free to give a status update now, ping for review, or re-open when it's ready.
Thank you for your contributions!
stale-issue-label: 'stale'
exempt-issue-labels: 'pinned,good first issue,help wanted,backlog'
stale-pr-label: 'stale'
exempt-pr-labels: 'pinned'
================================================
FILE: .github/workflows/linux_unit_test.yml
================================================
# This workflow will build a Java project with Maven
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
name: Test for linux
on:
push:
branches:
- 'master'
pull_request:
branches:
- 'master'
workflow_dispatch:
inputs:
branch:
description: 'Branch name to run tests on'
required: false
default: 'master'
type: string
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
ref: ${{ github.event.inputs.branch || github.ref }}
- name: Set up JDK 8
uses: actions/setup-java@v1
with:
java-version: '8'
distribution: 'adopt-hotspot'
cache: 'maven'
- name: Test with Maven
run: mvn clean install -DskipTests -Dmaven.javadoc.skip=true -B -U
&& sh ./check_format.sh
&& mvn test
- name: Codecov
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
================================================
FILE: .github/workflows/release.yml
================================================
# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
name: Release
## https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#release
## trigger manually
on:
workflow_dispatch:
jobs:
# build:
# runs-on: ubuntu-latest
#
# steps:
# - uses: actions/checkout@v3
# - name: Set up JDK 8
# uses: actions/setup-java@v3
# with:
# java-version: '8'
# distribution: 'temurin'
# cache: maven
# - name: Build with Maven
# run: mvn clean install -DskipTests -B -U -e && sh ./check_format.sh
release_for_jdk8:
# needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK 8
uses: actions/setup-java@v3
with:
java-version: '8'
distribution: 'temurin'
cache: maven
server-id: ossrh
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
gpg-private-key: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }} # Value of the GPG private key to import
gpg-passphrase: MAVEN_GPG_PASSPHRASE # env variable for GPG private key passphrase
- name: Build with Maven
run: mvn --batch-mode deploy -DskipTests -Prelease
env:
MAVEN_USERNAME: ${{ secrets.MAVEN_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }}
MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }}
================================================
FILE: .github/workflows/snapshot.yml
================================================
# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
name: Release SNAPSHOT
## https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#release
## trigger manually
on:
workflow_dispatch:
jobs:
# build:
# runs-on: ubuntu-latest
#
# steps:
# - uses: actions/checkout@v3
# - name: Set up JDK 8
# uses: actions/setup-java@v3
# with:
# java-version: '8'
# distribution: 'temurin'
# cache: maven
# - name: Build with Maven
# run: mvn clean install -DskipTests -B -U -e && sh ./check_format.sh
snapshot_for_jdk8:
# needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK 8
uses: actions/setup-java@v3
with:
java-version: '8'
distribution: 'temurin'
cache: maven
server-id: ossrh
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
gpg-private-key: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }} # Value of the GPG private key to import
gpg-passphrase: MAVEN_GPG_PASSPHRASE # env variable for GPG private key passphrase
- name: Build with Maven
run: mvn --batch-mode deploy -DskipTests -Pdefault,snapshot
env:
MAVEN_USERNAME: ${{ secrets.MAVEN_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }}
MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }}
================================================
FILE: .github/workflows/windows_unit_test.yml
================================================
# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-maven
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
name: Test for windows
on:
push:
branches:
- 'master'
pull_request:
branches:
- 'master'
workflow_dispatch:
inputs:
branch:
description: 'Branch name to run tests on'
required: false
default: 'master'
type: string
jobs:
build:
runs-on: windows-latest
strategy:
fail-fast: true
steps:
- uses: actions/checkout@v3
with:
ref: ${{ github.event.inputs.branch || github.ref }}
- name: Set up JDK 8
uses: actions/setup-java@v3
with:
java-version: '8'
distribution: 'adopt-hotspot'
cache: maven
- name: Build with Maven
run: mvn clean install --% -DskipTests -Dmaven.javadoc.skip=true -B -U
&& sh ./check_format.sh
&& mvn test
- name: Codecov
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
================================================
FILE: .gitignore
================================================
target/
*.iml
.idea/
pom.xml.bak
.DS_Store
.settings
.classpath
*.log
logs/
.flattened-pom.xml
lib/
sofa-ark-parent/support/ark-plugin-maven-plugin/com/alipay/sofa/ark/plugin/mark
sofa-ark-parent/support/ark-plugin-maven-plugin/null.ark.plugin
sofa-ark-parent/support/ark-plugin-maven-plugin/null.ark.plugin.bak
sofa-ark-parent/support/ark-plugin-maven-plugin/xxx.ark.plugin
sofa-ark-parent/core/common/C/\temp dir\b\c/test.txt
sofa-ark-parent/core/common/C:\\temp dir\\b\\c/test.txt
.gradle/
build/
gradle/
gradlew
gradlew.bat
.claude/
./change.md
================================================
FILE: .travis.yml
================================================
language: java
sudo: false
jdk:
- openjdk8
install:
- mvn clean install -DskipTests -B -U
- mvn clean test
script:
- sh ./check_format.sh
after_success:
- bash <(curl -s https://codecov.io/bash)
================================================
FILE: CLAUDE.md
================================================
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## 0. 交互协议
- **交互语言**:工具与模型交互强制使用 **English**;用户输出强制使用 **中文**
- **多轮对话**:如果工具返回的有可持续对话字段(如 `SESSION_ID`),记录该字段,并在后续调用中**强制思考**是否继续对话。Codex/Gemini 有时会因工具调用中断会话,若未得到需要的回复,应继续对话
- **沙箱安全**:除非用户明确允许,严禁 Codex/Gemini 对文件系统进行写操作。所有代码获取必须请求 `unified diff patch` 格式
- **渐进迭代**:多轮沟通和小步提交,持续改进
- 尊重事实比尊重我更为重要。如果我犯错,请毫不犹豫地指正我
## 1. 代码主权与判断依据
- **代码主权**:外部模型生成的代码仅作为逻辑参考(Prototype),最终交付代码**必须经过分析思考和重构**,确保无冗余、企业生产级标准
- **判断依据**:始终以项目代码的搜索结果作为判断依据,严禁使用一般知识进行猜测,允许向用户表明不确定性。调用非内置库时,必须先用工具搜索外部知识,以搜索结果为依据编码
- **深度分析**:用第一性原理分析问题,深入思考本质
- **仅做针对性改动**:严禁影响项目现有的其他功能
- **持续进化**:用户在交互中明确纠正的问题和注意事项需同步追加在本文件的**项目专属约束**中
## 2. 工具使用规范
执行任务前优先查找**内置工具、MCP 工具和 Skills** 中有没有可用的,判断Skills选择使用 using-superpowers 技能
- 先检索再编码,避免重复造轮子
- 文件修改:使用替换工具做精准替换
- 并行操作:无依赖步骤应使用 subagent 并行执行
### 代码检索黄金规则
按场景选择最优工具:
**第一层:语义搜索(ck)— "我不知道叫什么,但我知道它做什么"**
- 适用:模糊概念搜索、不确定关键词时的探索
- 用法:`ck --sem "concept"` / `ck --hybrid "query"` / `ck --lex "keyword"`
- 详细参考 [ck命令说明](ck-semantic-search.md)
**第二层:符号搜索(Serena LSP)— "我知道符号名,要精确定位和操作"**
- 适用:查找符号定义/引用、理解文件结构、符号级编辑和重命名
- 核心工具:`find_symbol`(定位)、`find_referencing_symbols`(引用链)、`get_symbols_overview`(结构)
- 编辑工具:`replace_symbol_body`、`insert_after_symbol`、`rename_symbol`
- 优势:Token 高效(按需加载符号体,不必读整文件)
**第三层:文本搜索(Grep/Glob)— "我知道确切的文本模式"**
- 适用:精确关键词/正则匹配、文件名模式查找、非代码文件搜索(yaml/json/env等)
- 核心工具:`Grep`(内容正则)、`Glob`(文件名匹配)
**第四层:直接读取(Read/WebFetch)— "我知道确切的位置,要看完整内容"**
- 适用:已知文件路径读取完整内容、查看图片/PDF、获取网页信息
- 核心工具:`Read`(本地文件/图片/PDF/Notebook)、`WebFetch`(网页内容提取)
- 注意:优先用前三层定位目标,再用 Read 读取;避免盲目读取大文件
### 外部知识获取
遇到代码库以外不熟悉的知识,必须使用工具联网搜索,严禁猜测:
- 通用搜索:`WebSearch` 或 `mcp__exa__web_search_exa`
- 库文档:`mcp__context7__resolve-library-id` → `mcp__context7__get-library-docs`
- 开源项目:优先使用 `mcp__mcp-deepwiki__deepwiki_fetch`,而非通用搜索工具
## 3. 代码风格
- KISS — 能简单就不复杂
- DRY — 零容忍重复,必须复用
- 保护调用链 — 修改函数签名时同步更新所有调用点
- 文件大小:1000 行上限,超出按职责拆分
- 函数长度:100 行上限(不含空行),超出立即提取辅助函数
- Uses `Formatter.xml` for automatic code formatting during build
- Apache 2.0 license header required on all Java files
- Run `mvn clean install` before pushing to ensure formatting is applied
### 完成后清理
- 删除:临时文件、注释掉的废弃代码、未使用的导入、调试日志
### 代码红线
- 除非用户明确说明,禁止破坏或改变现有功能
- 禁止对错误方案妥协
- 切勿将密钥、API 密钥或凭据硬编码到源代码中,使用环境变量
## 4. 其他约束
- 添加新功能时**遵循模块化模式**,准确识别功能归属的分层
- 修改后**测试模块化服务器**,确保所有导入正常工作
- 重要链路必须有清晰的异常处理
## 5. Git 规范
- 不主动提交,除非用户明确要求
- 不主动 push,除非用户明确要求
- Commit 格式:`<type>(<scope>): <description>`
- 提交前:`git diff` 确认改动范围
- 禁止 `--force` 推送到 main/master
## 6. Project Overview
SOFAArk is a lightweight Java-based classloader-isolated framework open-sourced by Ant Financial. It provides:
- **Class isolation**: Solve package dependency conflicts (e.g., using protobuf2 and protobuf3 simultaneously)
- **Dynamic hot deployment**: Install/uninstall business modules at runtime
- **Merged deployment**: Multiple applications can be packaged and run together
## 7. Build Commands
```bash
# Full build (skip tests and javadoc)
mvn clean install -DskipTests -Dmaven.javadoc.skip=true -B -U
# Run all tests
mvn test
# Run tests for a specific module
mvn test -pl sofa-ark-parent/core-impl/container
# Run a single test class
mvn test -Dtest=ArkContainerTest -pl sofa-ark-parent/core-impl/container
# Format check (must run after build with no uncommitted files)
sh ./check_format.sh
# Release build
mvn clean install -DskipTests -Dmaven.javadoc.skip=true -B -U -Prelease
```
## 8. Project Structure
```
sofa-ark/
├── sofa-ark-bom/ # Dependency management (versions)
├── sofa-ark-parent/
│ ├── core/ # Core interfaces and common code
│ │ ├── api/ # Public API (ArkClient, ArkConfigs)
│ │ ├── spi/ # Service Provider Interfaces
│ │ ├── common/ # Shared utilities
│ │ └── exception/ # Exception definitions
│ ├── core-impl/ # Core implementations
│ │ ├── container/ # Ark Container (runtime management)
│ │ └── archive/ # Archive loading (JAR/directory handling)
│ ├── support/ # Build tools and integrations
│ │ ├── ark-maven-plugin/ # Maven plugin for building Ark packages
│ │ ├── ark-plugin-maven-plugin/ # Maven plugin for building Ark Plugins
│ │ ├── ark-springboot-integration/ # Spring Boot integration
│ │ └── ark-tools/ # Repackaging utilities
│ └── assembly/ # sofa-ark-all aggregated JAR
└── sofa-ark-plugin/ # Built-in plugins (config, web, netty)
```
## 9. Core Architecture
### Three Key Concepts
1. **Ark Container**: Runtime container that manages plugins and business modules. Entry point: `ArkContainer.main()`
2. **Ark Plugin**: Class-isolated plugin units. Loaded by `PluginClassLoader`. Plugins can import/export classes to share or isolate dependencies.
3. **Ark Biz**: Business modules loaded by `BizClassLoader`. Each biz has independent classloader isolation.
### Startup Pipeline
The container executes these stages in order (see `StandardPipeline.java`):
1. `HandleArchiveStage` - Parse and resolve Ark archives
2. `RegisterServiceStage` - Register core services
3. `ExtensionLoaderStage` - Load SPI extensions
4. `DeployPluginStage` - Start all Ark Plugins
5. `DeployBizStage` - Start all Ark Biz modules
6. `FinishStartupStage` - Complete startup
### ClassLoader Hierarchy
```
Bootstrap ClassLoader
↓
Ark Container ClassLoader (loads sofa-ark-all)
↓
PluginClassLoader (one per plugin, bidirectional delegation between plugins)
↓
BizClassLoader (one per biz, can delegate to plugins)
```
### Key APIs
- `ArkClient` - Main API for installing/uninstalling/switching biz modules at runtime
- `ArkConfigs` - Configuration management
- `BizManagerService` - Manage business modules
- `PluginManagerService` - Manage plugins
## 10. Maven Plugins
### sofa-ark-maven-plugin
Builds executable Ark packages with `mvn package`:
```xml
<plugin>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-ark-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
```
Key configurations:
- `bizName` / `bizVersion` - Module identity
- `excludes` / `excludeGroupIds` - Dependencies to exclude from the package
- `denyImportPackages` - Packages the biz cannot import from plugins
- `declaredMode` - Filter dependencies against declared list
### sofa-ark-plugin-maven-plugin
Builds Ark Plugin packages:
```xml
<plugin>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-ark-plugin-maven-plugin</artifactId>
<configuration>
<activator>com.example.MyPluginActivator</activator>
</configuration>
</plugin>
```
## 11. Versioning
- Current version: 2.3.2
- Three-digit versioning: `major.minor.patch`
- First digit: Breaking compatibility changes
- Second digit: New features/enhancements
- Third digit: Bug fixes
## 12. Running Specific Tests
### Run tests for a specific module
```bash
# Run all tests in a module
mvn test -pl sofa-ark-parent/core-impl/container
# Run all tests in multiple modules
mvn test -pl sofa-ark-parent/core-impl/container,sofa-ark-parent/core/api
```
### Run a single test class
```bash
# Run a specific test class
mvn test -Dtest=ArkContainerTest -pl sofa-ark-parent/core-impl/container
# Run a test class with pattern matching
mvn test -Dtest=*ClassLoaderTest -pl sofa-ark-parent/core-impl/container
```
### Run a single test method
```bash
# Run a specific test method
mvn test -Dtest=ArkContainerTest#testStart -pl sofa-ark-parent/core-impl/container
```
### Run tests with specific groups (TestNG)
```bash
# Run tests belonging to a specific group
mvn test -Dgroups=unit -pl sofa-ark-parent/core-impl/container
```
### Debug tests
```bash
# Run tests with remote debugging (listen on port 5005)
mvn test -Dmaven.surefire.debug -pl sofa-ark-parent/core-impl/container
```
### Skip specific tests
```bash
# Skip a specific test class
mvn test -Dtest=!ArkContainerTest -pl sofa-ark-parent/core-impl/container
# Skip tests matching a pattern
mvn test -Dtest=!*.IntegrationTest -pl sofa-ark-parent/core-impl/container
```
## 13. Troubleshooting Guide
### Build Issues
#### 1. Compilation errors after pulling changes
**Symptoms:** Compilation fails with "cannot find symbol" or similar errors.
**Solutions:**
```bash
# Clean and rebuild
mvn clean install -DskipTests -Dmaven.javadoc.skip=true -B -U
```
#### 2. Code format check fails
**Symptoms:** `check_format.sh` reports formatting issues.
**Solutions:**
```bash
# Ensure build is complete first (formatter runs during build)
mvn clean install -DskipTests
# Then run format check
sh ./check_format.sh
# If still failing, check for uncommitted files
git status
```
#### 3. Dependency resolution failures
**Symptoms:** Maven cannot resolve dependencies.
**Solutions:**
```bash
# Force update of snapshots and releases
mvn clean install -U -DskipTests
# Check local Maven repository for corrupted artifacts
rm -rf ~/.m2/repository/com/alipay/sofa
mvn clean install -DskipTests
```
================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at hting1@gmail.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
[homepage]: http://contributor-covenant.org
[version]: http://contributor-covenant.org/version/1/4/
================================================
FILE: CONTRIBUTING.md
================================================
## Contributing to SOFAArk
SOFAArk is released under the Apache 2.0 license, and follows a very
standard Github development process, using Github tracker for issues and
merging pull requests into master . If you would like to contribute something,
or simply want to hack on the code this document should help you get started.
### Sign the Contributor License Agreement
Before we accept a non-trivial patch or pull request we will need you to
sign the Contributor License Agreement. Signing the contributor’s agreement
does not grant anyone commit rights to the main repository, but it does mean
that we can accept your contributions, and you will get an author credit if
we do. Active contributors might be asked to join the core team, and given
the ability to merge pull requests.
### Code Conventions
None of these is essential for a pull request, but they will all help.
1. we provided a [code formatter file](./Formatter.xml), it will formatting automatically your project when during process of building. We would check code format when run ci test, so please ensure that you have built project before you push branch.
2. Make sure all new `.java` files to have a simple Javadoc class comment
with at least an `@author` tag identifying you, and preferably at least a
paragraph on what the class is for.
3. Add the ASF license header comment to all new `.java` files (copy from existing files in the project)
4. Add yourself as an `@author` to the `.java` files that you modify substantially (more than cosmetic changes).
5. Add some Javadocs.
6. A few unit tests would help a lot as well — someone has to do it.
7. When writing a commit message please follow [these conventions](https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html), if
you are fixing an existing issue please add Fixes gh-XXXX at the end
of the commit message (where XXXX is the issue number).
8. Ensure that code coverage does not decrease。
9. Contribute a PR as the rule of Gitflow Workflow; SOFAArk's version contains three digit, the first one is for compatibility; the second one is for new features and enhancement; the last one is for bug fix.
================================================
FILE: Formatter.xml
================================================
<profiles version="11">
<profile kind="CodeFormatterProfile" name="Alipay Convention" version="11">
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="@formatter:off"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.use_on_off_tags" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="18"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="84"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_binary_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="2"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_binary_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
<setting id="org.eclipse.jdt.core.compiler.source" value="1.7"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="100"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="@formatter:on"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="18"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="0"/>
<setting id="org.eclipse.jdt.core.compiler.problem.assertIdentifier" value="error"/>
<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="space"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="18"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_method_declaration" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.compiler.problem.enumIdentifier" value="error"/>
<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="4"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="18"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="20"/>
<setting id="org.eclipse.jdt.core.compiler.compliance" value="1.7"/>
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="18"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression" value="18"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
<setting id="org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode" value="enabled"/>
<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_label" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="18"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="80"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_import_groups" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_binary_operator" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="18"/>
<setting id="org.eclipse.jdt.core.formatter.join_lines_in_comments" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="18"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="18"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
<setting id="org.eclipse.jdt.core.compiler.codegen.targetPlatform" value="1.7"/>
<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="2"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
</profile>
</profiles>
================================================
FILE: HEADER
================================================
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: README.md
================================================
# SOFAArk Project
[](https://travis-ci.org/sofastack/sofa-ark)
[](https://codecov.io/gh/sofastack/sofa-ark/branch/master/graph/badge.svg)
[](https://gitter.im/sofa-ark/Lobby)


SOFAArk 作为类隔离组件,在蚂蚁内部演进出了一套完整的模块化应用研发框架和平台能力,欢迎大家移步:https://github.com/koupleless/koupleless ,一起讨论和建设模块化架构能力,一起探索微服务的下一站。
SOFAArk 是一款基于 Java 实现的动态热部署和轻量级类隔离框架,由蚂蚁集团开源贡献,主要提供应用模块的动态热部署和类隔离能力。基于 [Fat Jar](https://docs.spring.io/spring-boot/docs/current/reference/html/executable-jar.html#executable-jar-jar-file-structure) 技术,可以将多个应用模块打包成一个自包含可运行的 Fat Jar,应用既可以是简单的单模块 Java 应用也可以是 SpringBoot/SOFABoot 应用。[访问网址](https://www.sofastack.tech/sofa-boot/docs/sofa-ark-readme?lang=zh-cn)进入快速开始并获取更多详细信息。
## 背景
SOFAArk 最初的场景是解决 Java 开发常常会遇到的包依赖冲突的问题,尤其当工程应用变得臃肿庞大,包冲突的问题也会变得更加棘手,导致各种各样的报错,例如`LinkageError`, `NoSuchMethodError`等。实际开发中,可以采用多种方法来解决包冲突问题,比较常见的是类似 SpringBoot 的做法,统一管理应用所有依赖包的版本,保证这些三方包不存在依赖冲突。这种做法只能有效避免包冲突的问题,不能根本上解决包冲突的问题。如果某个应用的确需要在运行时使用两个相互冲突的包,例如 `protobuf2` 和 `protobuf3`,那么类似 SpringBoot 的做法依然解决不了问题。
为了彻底解决包冲突的问题,我们需要借助类隔离机制,使用不同的 ClassLoader 加载不同版本的三方依赖,进而隔离包冲突问题。OSGI 作为业内最出名的类隔离框架,自然是可以被用于解决上述包冲突问题,但是 OSGI 框架太过臃肿,功能繁杂。为了解决包冲突问题,引入 OSGI 框架,有牛刀杀鸡之嫌,反而使工程变得更加复杂,不利于开发。
SOFAArk 则采用较为轻量级的类隔离方案来解决日常经常遇到的包冲突问题,在蚂蚁金服内部服务于整个 [SOFABoot](https://github.com/sofastack/sofa-boot) 技术体系,弥补 SpringBoot 没有的类隔离能力。实际上,SOFAArk 是一个通用的轻量级类隔离框架,并不限于 SpringBoot 应用,也可以和其他的 Java 开发框架集成。
基于类隔离能力 SOFAArk 还提供了动态热部署能力。SOFAArk 不但支持将多个应用合并打成一个可执行的 Fat Jar 包,也支持运行时通过 API 或者 Zookeeper 动态推送配置达到动态部署应用模块的能力。在多团队协作开发时,各个功能模块由不同的团队负责开发,通常情况下,这些功能模块独立开发,但是运行时部署在一起。借助 SOFAArk 提供的合并部署能力,各团队开发时拥有相当大自由度,只需要定义各模块之间的交互接口即可,尤其对于中台应用开发,提高团队合作效率。除了合并部署,SOFAArk 还对接了 Zookeeper 接受动态配置,控制应用模块的动态安装和卸载。
## 原理
SOFAArk 框架包含有三个概念,`Ark Container`, `Ark Plugin` 和 `Ark Biz`; 运行时逻辑结构图如下:

在介绍这三个概念之前,为了统一术语,有必要先说一下所谓的 `Ark 包`;Ark 包是满足特定目录格式要求的 `Executed Fat Jar`,使用官方提供的 `Maven` 插件 `sofa-ark-maven-plugin`可以将工程应用打包成一个标准格式的 `Ark 包`;使用命令 `java -jar application.jar`即可在 Ark 容器之上启动应用;`Ark 包` 通常包含 `Ark Container`、`Ark Plugin`、 `Ark Biz`;以下我们针对这三个概念简单做下名词解释:
+ `Ark Container`: Ark 容器,负责整个运行时的管理;`Ark Plugin` 和 `Ark Biz` 运行在 Ark 容器之上;容器具备管理多插件、多应用的功能;容器启动成功后,会自动解析 classpath 包含的 `Ark Plugin` 和 `Ark Biz` 依赖,完成隔离加载并按优先级依次启动之;
+ `Ark Plugin`: Ark 插件,满足特定目录格式要求的 `Fat Jar`,使用官方提供的 `Maven` 插件 `sofa-ark-plugin-maven-plugin` 可以将一个或多个普通的 `Java Jar` 包打包成一个标准格式的 `Ark Plugin`; `Ark Plugin` 会包含一份配置文件,通常包括插件类导入导出配置、插件启动优先级等;运行时,Ark 容器会使用独立的 `PluginClassLoader` 加载插件,并根据插件配置构建类加载索引表,从而使插件与插件、插件与应用之间相互隔离;
+ `Ark Biz`: Ark 业务模块,满足特定目录格式要求的 `Fat Jar` ,使用官方提供的 `Maven` 插件 `sofa-ark-maven-plugin` 可以将工程应用打包成一个标准格式的 `Ark-Biz` 包;是工程应用模块及其依赖包的组织单元,包含应用启动所需的所有依赖和配置;
在运行时,`Ark Container` 优先启动,自动解析 classpath 包含的 `Ark Plugin` 和 `Ark Biz`,并读取他们的配置,构建类加载索引关系;然后使用独立的 ClassLoader 加载他们并按优先级配置依次启动;需要指出的是,`Ark Plugin` 优先 `Ark Biz` 被加载启动;`Ark Plugin` 之间是双向类索引关系,即可以相互委托对方加载所需的类;`Ark Plugin` 和 `Ark Biz` 是单向类索引关系,即只允许 `Ark Biz` 索引 `Ark Plugin` 加载的类,反之则不允许。
## 场景
### 包冲突
SOFAArk初衷是为了解决包冲突问题,那什么情况下可以使用 SOFAArk 以及如何使用呢? 假设如下场景,如果工程需要引入两个三方包:A 和 B,但是 A 需要依赖版本号为 0.1 的 C 包,而恰好 B 需要依赖版本号为 0.2 的 C 包,且 C 包的这两个版本无法兼容:

此时,即可使用 SOFAArk 解决该依赖冲突问题;只需要把 A 和版本为 0.1 的 C 包一起打包成一个 `Ark Plugin`,然后让应用工程引入该插件依赖即可;
### 合并部署
SOFAArk 基于类隔离能力,实现了应用的合并部署,可以简单分为静态合并部署和动态合并部署,介绍如下。
#### 静态合并部署
在实际开发过程中,经常会出现多个团队合作开发同一款产品,他们各自负责不同的功能模块,这些功能模块通常可以独立开发,但是运行时需要作为一个整体的应用运行。在这种情况下,所有团队需要协商统一技术栈及各自的二方包版本,这无疑增加了开发和联调的成本。为了让开发人员专注自身功能业务的开发,理想情况下开发人员希望能像开发独立应用一样,仅定义好对外交互接口,而不用考虑和其他功能模块出现的版本冲突、技术栈不统一等问题。正是基于这种场景,SOFAArk 提供了静态合并部署能力,应用可以依赖其他应用打成的 Biz 包,而当自身被打成 Ark 包时,可以将其他应用 Biz 包一并打入,启动时,则会根据优先级依次启动各应用。由于每个应用使用独立的 BizClassLoader 加载,因此不需要考虑依赖冲突或者技术栈不统一问题。应用之间则通过 `SofaService/SofaReference` JVM 服务进行交互。
#### 动态合并部署
动态合并部署区别于静态合并部署最大的一点是,在应用运行时可以通过 API 或者配置中心(Zookeeper)来控制应用的部署和卸载。动态合并部署的设计理念图如下:

无论是静态还是动态合并部署都会有宿主应用(master app)的概念, 如果 Ark 包只打包了一个 Biz,则该 Biz 默认成为宿主应用。如果 Ark 包打包了多个 Biz 包,需要配置指定宿主应用。宿主应用不允许被卸载,一般而言,宿主应用会作为流量入口的中台系统,具体的服务实现会放在不同的动态 Biz 中,供宿主应用调用。宿主应用可以使用 SOFAArk 提供的客户端 API 实现动态应用的部署和卸载。除了 API, SOFAArk 提供了 Config Plugin,用于对接配置中心(目前支持 Zookeeper),运行时接受动态配置。Config Plugin 会解析下发的配置,控制动态模块的部署和卸载。
随着近几年 模块化、Serverless 技术的兴起,蚂蚁集团在应用研发领域进行了持续的建设和探索,基于 SOFAArk 动态合并部署技术打造了比较成熟的 Koupleless 技术体系,去深入解决企业的研发和运维效率问题。其核心方式是通过快速热部署、动态服务发布等技术,将应用从代码结构和开发者阵型划分为模块和基座。其中基座为业务模块提供计算环境并屏蔽基础设施,让模块开发者不用感知机器和容量等底层设施而专注于某个功能模块的开发迭代来帮助业务快速向前发展。
在应用架构领域,不可避免的问题是应用随着业务的复杂度不断增加,研发运维的过程中的问题会不断暴露出来。首先我们看一下普通应用研发和运维过程中的流程是什么样的:

如图所示,从需求到设计、开发、线下测试,再到发布线上的研发运维不断反馈、循环迭代的过程。可以简化为开发同学提交代码到代码仓库,在线下做并行的验证测试,测试通过之后在线上发布,发布过程是串行的,只能够有一个发布窗口,这样的过程在应用体量业务还不太复杂的情况下问题,并不是很明显。
但当业务复杂度不断增加,普通应用迭代过程在会出现一些新的问题,如下图:

1. 管理成本高:需求管理、代码管理、人员管理。
2. 时间成本高:线上验证与发布互相阻塞。单次启动慢。
3. 变更风险高:一次变更涉及所有代码。一次变更涉及所有机器。
另外,由于这些问题是因为多个业务与研发任务耦合在某些单点上导致的,研发运维的成本随着业务的复杂度呈现出指数增长的特点:

通过借助 SOFAArk 框架将应用拆分成基座和模块,同时将应用里的接口按场景维度做分组,使得业务可以按一组接口的粒度进行极速发布运维以及资源按需隔离。

从这张图里可以看到 Serverless 应用拆分的形态,通过把一个普通的 Java 应用拆出多个模块,进一步对应用进行了拆分:基座和模块,对应的研发人员也划分为基座开发者和模块开发者。
基座负责沉淀通用的逻辑,为模块提供计算和环境,并为模块开发者屏蔽基础设施,让模块开发者不需要关心容量和资源等。各个模块则是独立的代码仓库,可以进行独立的研发运维,这样研发运维粒度就得到了精细化,并且由于基座为模块屏蔽了环境与基础设施,模块开发者可以专注于业务开发从而提高了业务创新效率。Koupleless 开源版首个 1.0 版本计划已经发布,欢迎大家一起来建设社区 Koupleless 模块化技术。
## 快速开始
* [基于多 Ark Plugin 解决类冲突](https://github.com/sofastack-guides/sofa-ark-class-isolation)
* [基于普通的 Maven 应用构建 Ark Plugin](https://github.com/sofastack-guides/sofa-ark-samples/tree/master/sample-ark-plugin)
## 社区
* [Gitter channel](https://gitter.im/sofa-ark/Lobby)
* [Issues](https://github.com/sofastack/sofa-ark/issues)
* [钉钉群]
<img src="https://user-images.githubusercontent.com/3754074/222353887-fe783ea4-cd49-428e-8a98-c59780a927f6.png" width="300px">
## 贡献
* [代码贡献](./CONTRIBUTING.md) : SOFAArk 开发参与说明书
## 文档
* [SOFAArk 用户手册(中文)](http://www.sofastack.tech/sofa-boot/docs/sofa-ark-readme) : SOFAArk 用户手册及功能特性详细说明
* [SOFAArk2.0 升级](https://www.sofastack.tech/projects/sofa-boot/sofa-ark-migration-guide/) : SOFAArk1.0升级到2.0 操作详细说明
## 致谢
SOFAArk 类隔离框架设计实现主要基于 OSGi 规范及蚂蚁金服的 CloudEngine 容器;同时也参考了 Spring Boot 及阿里的 PandoraBoot,感谢以上产品工作者的辛勤付出。
================================================
FILE: README_EN.md
================================================
# SOFAArk Project
[](https://travis-ci.org/sofastack/sofa-ark)
[](https://codecov.io/gh/sofastack/sofa-ark/branch/master/graph/badge.svg)
[](https://gitter.im/sofa-ark/Lobby)


SOFAArk is a light-weight,java based classloader isolation framework
open sourced by Ant Financial. Please visit [https://alipay.github.io/sofastack.github.io/](https://alipay.github.io/sofastack.github.io/)
## Background
In Java world, dependency is always a problem, and can cause various errors, such as `LinkageError`, `NoSuchMethodError` etc. There are many ways to solve the dependency problems, the Spring Boot's way is using a dependency management to manage all the dependencies, make sure that all the dependencies in the dependency management will not conflict and can work pretty well. This is quite a simple and efficient way, it can cover most scenario, but there is some exceptions.
For example, there is a project that need protobuf version 2 and protobuf version 3, and because protobuf version 3 is not compatible with version 2, so the project can not simply upgrade the protobuf to version 3 to solve the problem. There is same problem for hessian version 3 and version 4.
To cover those exceptions, we need to introduce a classloader isolation way, make different version of a framework loaded by different classloader. There are many framework that can do classloader isolation, perhaps the most famous one is OSGi, but OSGi classloader schema is too complex, beside classloader isolation, it also has ability to do hot deploy and a lot of other functionalities that we actually don't want.
So this is the origin of SOFAArk, it's goal is to use a light-weight classloader isolation mechanism to solve the problem that Spring Boot did not solve. And just a remind that SOFAArk is not bind to Spring Boot, actually it is a more general classloader isolation framework that can be used with any other frameworks too.
## How SOFAArk Works
There are three concepts in SOFAArk: `Ark Container`, `Ark-Plugin` and `Ark-Biz`; they are organized as what the following graph shows:

First of all, we explain what roles these concepts play;
+ `Ark Container`: It's the runtime manager of total framework; it will startup in the first place, then it resolves `Ark Plugin` and `Ark Biz` in classpath and deploys them.
+ `Ark Plugin`: A fat jar packaged by `sofa-ark-plugin-maven-plugin`, generally it would bring with a class-index configuration which describes what class would be exported and imported. `Ark Plugin` can resolve classes from each other.
+ `Ark Biz`: A fat jar packaged by `sofa-ark-maven-plugin`, it mainly contains all staff what a project need in runtime. `Ark Biz` can resolve classes form `Ark Plugin`, but not inverse.
In runtime, `Ark Container` would automatically recognize `Ark-Plugin` and `Ark-Biz` in classpath, and load them with the independent classloader. According to configurations brought by `Ark Plugin` and `Ark Biz`, `Ark Container` would build a class-index table, so they can be
isolated well. For example, if a project has two dependencies of A and B, but A depends on C (version = 0.1) and B depends on C (version = 0.2), so conflicts maybe emerge.

In this situation, we just repackage the dependencies of A and C(version=0.1) as an ark-plugin, and add the dependency of the `ark-plugin` to project, then this conflict would be avoided.
## Sample
* [Sample projects](sofa-ark-samples)
* [Ark Plugin Based On Maven Project](sofa-ark-samples/sample-ark-plugin) - Sample Project for Ark-Plugin
* [Ark Based On Spring Boot](sofa-ark-samples/sample-springboot-ark) Sample Project for Ark based on Spring Boot Project
## Community
* [Gitter channel](https://gitter.im/sofa-ark/Lobby) - Online chat room with SOFAArk developers.
* [Issues](https://github.com/sofastack/sofa-ark/issues)
## Contribution
* [Contributing](./CONTRIBUTING.md) : Guides for contributing to SOFAArk.
## Documentation
* [SOFAArk 用户手册(中文)](https://alipay.github.io/sofastack.github.io/docs/): Describe how to used SOFAArk and its features.
================================================
FILE: SECURITY.md
================================================
# Security Policy
## Reporting a Vulnerability
If you have apprehensions regarding SOFAStack's security or you discover vulnerability or potential threat, don’t hesitate to get in touch with us by dropping a mail at sofastack@antgroup.com.
In the mail, specify the description of the issue or potential threat. You are also urged to recommend the way to reproduce and replicate the issue. The SOFAStack community will get back to you after assessing and analysing the findings.
PLEASE PAY ATTENTION to report the security issue on the security email before disclosing it on public domain.
================================================
FILE: change_version.sh
================================================
#!/bin/bash
shopt -s expand_aliases
if [ ! -n "$1" ] ;then
echo "Please enter a version"
exit 1
else
echo "The updated version is $1 !"
fi
currentVersion=`sed -n '/<revision>/p' pom.xml | cut -d '>' -f2 | cut -d '<' -f1`
echo "The current version is $currentVersion"
if [ `uname` == "Darwin" ] ;then
echo "This is OS X"
alias sed='sed -i ""'
else
echo "This is Linux"
alias sed='sed -i'
fi
for filename in `find . -name "README*.md"`;do
echo "Deal with $filename"
sed "/badge\/maven/! s/$currentVersion/$1/" $filename
done
================================================
FILE: check_format.sh
================================================
#!/bin/sh
BASEDIR=$(dirname $0)
cd ${BASEDIR}
# make sure git has no un commit files
if [ -n "$(git status --untracked-files=no --porcelain)" ]; then
echo "Please commit your change before run this shell, un commit files:"
git status --untracked-files=no --porcelain
echo "Please run ## mvn clean install -DskipTests -Dmaven.javadoc.skip=true -B -U && sh ./check_format.sh ## locally, then push it."
exit -1
fi
================================================
FILE: codecov.yml
================================================
ignore:
- "pom.xml"
================================================
FILE: pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-ark</artifactId>
<version>${sofa.ark.version}</version>
<packaging>pom</packaging>
<modules>
<module>sofa-ark-bom</module>
<module>sofa-ark-parent</module>
<module>sofa-ark-plugin</module>
</modules>
<properties>
<sofa.ark.version>2.3.2</sofa.ark.version>
<sofa.ark.version.old>2.3.0</sofa.ark.version.old>
<project.encoding>UTF-8</project.encoding>
<java.version>1.8</java.version>
<license.maven.plugin>3.0</license.maven.plugin>
<maven.java.formatter.plugin>0.4</maven.java.formatter.plugin>
<maven.compiler.plugin>3.1</maven.compiler.plugin>
<maven.source.plugin>3.0.0</maven.source.plugin>
<maven.javadoc.plugin>3.2.0</maven.javadoc.plugin>
<maven.staging.plugin>1.6.13</maven.staging.plugin>
<maven.gpg.pluign>1.6</maven.gpg.pluign>
<jacoco.maven.plugin>0.8.4</jacoco.maven.plugin>
<flatten-maven-plugin.version>1.5.0</flatten-maven-plugin.version>
</properties>
<name>${project.groupId}:${project.artifactId}</name>
<description>A light-weight, java based classloader-isolated framework open-sourced by Ant Financial.</description>
<url>https://github.com/sofastack/sofa-ark</url>
<licenses>
<license>
<name>The Apache License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
</license>
</licenses>
<developers>
<developer>
<name>qilong</name>
<email>qilong.zql@antfin.com</email>
<organization>Ant Financial</organization>
<organizationUrl>https://www.alipay.com/</organizationUrl>
</developer>
<developer>
<name>abby.zh</name>
<email>abby.zh@antfin.com</email>
<organization>Ant Financial</organization>
<organizationUrl>https://www.alipay.com/</organizationUrl>
</developer>
</developers>
<scm>
<connection>scm:git:git://github.com/sofastack/sofa-ark.git</connection>
<developerConnection>scm:git:ssh://github.com/sofastack/sofa-ark.git</developerConnection>
<url>http://github.com/sofastack/sofa-ark/tree/master</url>
</scm>
<build>
<plugins>
<plugin>
<groupId>com.mycila</groupId>
<artifactId>license-maven-plugin</artifactId>
<version>${license.maven.plugin}</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>remove</goal>
<goal>format</goal>
</goals>
</execution>
</executions>
<configuration>
<quiet>true</quiet>
<header>${user.dir}/HEADER</header>
<includes>
<include>**/src/main/java/**</include>
<include>**/src/test/java/**</include>
</includes>
<strictCheck>true</strictCheck>
<mapping>
<java>SLASHSTAR_STYLE</java>
</mapping>
</configuration>
</plugin>
<plugin>
<groupId>com.googlecode.maven-java-formatter-plugin</groupId>
<artifactId>maven-java-formatter-plugin</artifactId>
<version>${maven.java.formatter.plugin}</version>
<executions>
<execution>
<goals>
<goal>format</goal>
</goals>
</execution>
</executions>
<configuration>
<configFile>${user.dir}/Formatter.xml</configFile>
<encoding>${project.encoding}</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
<version>${flatten-maven-plugin.version}</version>
<executions>
<execution>
<id>flatten</id>
<phase>process-resources</phase>
<goals>
<goal>flatten</goal>
</goals>
</execution>
<execution>
<id>flatten.clean</id>
<phase>clean</phase>
<goals>
<goal>clean</goal>
</goals>
</execution>
</executions>
<inherited>true</inherited>
<configuration>
<!-- 避免IDE将 .flattened-pom.xml 自动识别为功能模块 -->
<updatePomFile>true</updatePomFile>
<flattenMode>resolveCiFriendliesOnly</flattenMode>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven.compiler.plugin}</version>
<configuration>
<encoding>${project.encoding}</encoding>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>${maven.source.plugin}</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>${maven.javadoc.plugin}</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<docencoding>UTF-8</docencoding>
<charset>UTF-8</charset>
<encoding>UTF-8</encoding>
<doclint>none</doclint>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco.maven.plugin}</version>
<configuration>
<skip>false</skip>
<!-- this configuration affects all goals -->
<excludes>
<exclude>com/alipay/sofa/ark/config/*.class</exclude>
<exclude>com/alipay/sofa/ark/config/util/*.class</exclude>
<exclude>com/alipay/sofa/ark/config/zk/*.class</exclude>
<exclude>com/alipay/sofa/ark/support/listener/ArkTestNG*.class</exclude>
<exclude>com/alipay/sofa/ark/common/log/ArkLogger.class</exclude>
</excludes>
</configuration>
<executions>
<execution>
<id>default-prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>default-report</id>
<phase>test</phase>
<goals>
<goal>report-aggregate</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>release</id>
<build>
<plugins>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>${maven.staging.plugin}</version>
<extensions>true</extensions>
<configuration>
<serverId>ossrh</serverId>
<nexusUrl>https://ossrh-staging-api.central.sonatype.com/</nexusUrl>
<autoReleaseAfterClose>false</autoReleaseAfterClose>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>${maven.gpg.pluign}</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
<configuration>
<gpgArguments>
<arg>--pinentry-mode</arg>
<arg>loopback</arg>
</gpgArguments>
</configuration>
</plugin>
</plugins>
</build>
<distributionManagement>
<repository>
<id>ossrh</id>
<url>https://ossrh-staging-api.central.sonatype.com/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
<pluginRepositories>
<pluginRepository>
<snapshots>
<enabled>true</enabled>
</snapshots>
<id>maven-snapshot</id>
<url>https://central.sonatype.com/repository/maven-snapshots/</url>
</pluginRepository>
</pluginRepositories>
</profile>
<profile>
<id>snapshot</id>
<build>
<plugins>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>${maven.staging.plugin}</version>
<extensions>true</extensions>
<configuration>
<serverId>ossrh</serverId>
<nexusUrl>https://ossrh-staging-api.central.sonatype.com/</nexusUrl>
<autoReleaseAfterClose>false</autoReleaseAfterClose>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>${maven.gpg.pluign}</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
<configuration>
<gpgArguments>
<arg>--pinentry-mode</arg>
<arg>loopback</arg>
</gpgArguments>
</configuration>
</plugin>
</plugins>
</build>
<distributionManagement>
<snapshotRepository>
<id>ossrh</id>
<url>https://central.sonatype.com/repository/maven-snapshots/</url>
</snapshotRepository>
<repository>
<id>ossrh</id>
<url>https://ossrh-staging-api.central.sonatype.com/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<snapshots>
<enabled>true</enabled>
</snapshots>
<id>maven-snapshot</id>
<url>https://central.sonatype.com/repository/maven-snapshots/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<snapshots>
<enabled>true</enabled>
</snapshots>
<id>maven-snapshot</id>
<url>https://central.sonatype.com/repository/maven-snapshots/</url>
</pluginRepository>
</pluginRepositories>
</profile>
<profile>
<id>default</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<repositories>
<repository>
<snapshots>
<enabled>true</enabled>
</snapshots>
<id>maven-snapshot</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<snapshots>
<enabled>true</enabled>
</snapshots>
<id>maven-snapshot</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
</project>
================================================
FILE: sofa-ark-bom/CLAUDE.md
================================================
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Module Overview
**Artifact ID**: `sofa-ark-bom`
**Packaging**: `pom`
This is the Bill of Materials (BOM) module for SOFAArk. It provides centralized dependency version management for the entire SOFAArk project.
## Purpose
- Centralized version management for all SOFAArk modules and third-party dependencies
- Ensures consistent dependency versions across all modules
- Simplifies dependency declarations in other modules
## Key Dependencies Managed
### SOFAArk Modules
- `sofa-ark-all`, `sofa-ark-spi`, `sofa-ark-api`, `sofa-ark-container`, `sofa-ark-archive`
- `sofa-ark-common`, `sofa-ark-exception`
- Maven plugins: `sofa-ark-maven-plugin`, `sofa-ark-plugin-maven-plugin`
- Spring Boot integration modules
### Third-Party Libraries
- Google Guice 6.0.0 (DI framework)
- Guava 33.0.0-jre
- ASM 9.4 (bytecode manipulation)
- Spring Boot 2.7.14
- Logback 1.2.13, SLF4J 1.7.32
- Maven Core/Plugin dependencies 3.8.1
- Netty 4.1.109.Final
- JGit 5.13.3
## Usage
Other SOFAArk modules inherit from this BOM:
```xml
<parent>
<artifactId>sofa-ark-bom</artifactId>
<groupId>com.alipay.sofa</groupId>
<version>${sofa.ark.version}</version>
</parent>
```
## When to Modify
- Adding new third-party dependencies that are shared across modules
- Updating dependency versions
- Adding new SOFAArk modules to dependency management
================================================
FILE: sofa-ark-bom/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>sofa-ark</artifactId>
<groupId>com.alipay.sofa</groupId>
<version>${sofa.ark.version}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>sofa-ark-bom</artifactId>
<packaging>pom</packaging>
<name>${project.groupId}:${project.artifactId}</name>
<properties>
<log4j.version>1.7.32</log4j.version>
<log.sofa.starter.version>3.2.0</log.sofa.starter.version>
<logback.version>1.2.13</logback.version>
<guice.version>6.0.0</guice.version>
<asm.version>9.4</asm.version>
<commons.io.version>2.7</commons.io.version>
<commons.lang3.version>3.3.1</commons.lang3.version>
<maven.invoker.version>3.1.0</maven.invoker.version>
<maven.core.version>3.8.1</maven.core.version>
<maven.artifact.version>3.8.1</maven.artifact.version>
<maven.archiver.version>3.5.1</maven.archiver.version>
<maven.model.version>3.8.1</maven.model.version>
<maven.plugin.api.version>3.8.1</maven.plugin.api.version>
<maven.plugin.annotations.version>3.6.1</maven.plugin.annotations.version>
<maven.dependency.plugin.version>3.2.0</maven.dependency.plugin.version>
<maven.common.artifact.filters.version>3.2.0</maven.common.artifact.filters.version>
<plexus.utils.version>3.3.0</plexus.utils.version>
<plexus.build.api.version>0.0.7</plexus.build.api.version>
<plexus.component.annotations.version>2.1.1</plexus.component.annotations.version>
<eclipse.jgit.version>5.13.3.202401111512-r</eclipse.jgit.version>
<junit.version>4.13.1</junit.version>
<testng.version>6.14.3</testng.version>
<mockito.version>3.6.0</mockito.version>
<system.rules.version>1.16.0</system.rules.version>
<maven.assembly.plugin>2.4</maven.assembly.plugin>
<maven.plugin.plugin>3.6.1</maven.plugin.plugin>
<surefire.version>2.22.2</surefire.version>
<netty.version>4.1.109.Final</netty.version>
<reactor-netty.version>0.9.19.RELEASE</reactor-netty.version>
<spring.boot.version>2.7.14</spring.boot.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
<version>${spring.boot.version}</version>
</dependency>
<!-- SOFAArk modules -->
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-ark-all</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-ark-core</artifactId>
<version>${project.version}</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-ark-core-impl</artifactId>
<version>${project.version}</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-ark-support</artifactId>
<version>${project.version}</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-ark-common</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-ark-exception</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-ark-spi</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-ark-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-ark-archive</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-ark-container</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-ark-support-starter</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-ark-maven-plugin</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-ark-plugin-maven-plugin</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-ark-springboot-starter</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-ark-tools</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-ark-common-springboot</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-ark-compatible-springboot1</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-ark-compatible-springboot2</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>config-ark-plugin</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>web-ark-plugin</artifactId>
<version>${project.version}</version>
</dependency>
<!--third party libraries-->
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>${guice.version}</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>33.0.0-jre</version>
</dependency>
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
<version>${asm.version}</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>${commons.io.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons.lang3.version}</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>${netty.version}</version>
</dependency>
<!-- log -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>log-sofa-boot-starter</artifactId>
<version>${log.sofa.starter.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- maven -->
<dependency>
<groupId>org.apache.maven.shared</groupId>
<artifactId>maven-invoker</artifactId>
<version>${maven.invoker.version}</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
<version>${maven.core.version}</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>${maven.plugin.annotations.version}</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>${maven.dependency.plugin.version}</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-archiver</artifactId>
<version>${maven.archiver.version}</version>
</dependency>
<dependency>
<groupId>org.apache.maven.shared</groupId>
<artifactId>maven-common-artifact-filters</artifactId>
<version>${maven.common.artifact.filters.version}</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>${maven.plugin.api.version}</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-model</artifactId>
<version>${maven.model.version}</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-artifact</artifactId>
<version>${maven.artifact.version}</version>
</dependency>
<!-- plexus -->
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-component-annotations</artifactId>
<version>${plexus.component.annotations.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-utils</artifactId>
<version>${plexus.utils.version}</version>
</dependency>
<dependency>
<groupId>org.sonatype.plexus</groupId>
<artifactId>plexus-build-api</artifactId>
<version>${plexus.build.api.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jgit</groupId>
<artifactId>org.eclipse.jgit</artifactId>
<version>${eclipse.jgit.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-loader</artifactId>
<version>${spring.boot.version}</version>
</dependency>
<!-- test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>${testng.version}</version>
</dependency>
<!-- Test Dependencies -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-inline</artifactId>
<version>${mockito.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>${mockito.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.github.stefanbirkner</groupId>
<artifactId>system-rules</artifactId>
<version>${system.rules.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.14.3</version>
</dependency>
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>2.1</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>${maven.assembly.plugin}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-plugin-plugin</artifactId>
<version>${maven.plugin.plugin}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${surefire.version}</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
================================================
FILE: sofa-ark-parent/assembly/CLAUDE.md
================================================
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Module Overview
**Artifact ID**: `sofa-ark-all`
**Package**: Assembly module (no Java code)
This module aggregates all core SOFAArk modules into a single JAR that becomes the Ark Container classpath.
## Purpose
- Create the aggregated `sofa-ark-all.jar`
- This JAR is packaged into every Ark executable JAR
- Contains all core runtime dependencies
## Included Modules
The assembly includes:
- `sofa-ark-common` - Utilities
- `sofa-ark-exception` - Exceptions
- `sofa-ark-spi` - Service interfaces
- `sofa-ark-api` - Public API
- `sofa-ark-archive` - Archive handling
- `sofa-ark-container` - Core container implementation
## Build Configuration
Uses `maven-assembly-plugin` with:
- Assembly descriptor: `src/main/assembly/assembly.xml`
- Creates single JAR without classifier
- Adds manifest entries: `ArkVersion`, `Timestamp`
## Usage in Ark Packages
When `sofa-ark-maven-plugin` builds an Ark package:
1. Resolves `sofa-ark-all` artifact
2. Packages it into `SOFA-ARK-CONTAINER/` directory
3. This becomes the container classpath at runtime
## Dependencies
All core modules are dependencies (see above).
================================================
FILE: sofa-ark-parent/assembly/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>sofa-ark-parent</artifactId>
<groupId>com.alipay.sofa</groupId>
<version>${sofa.ark.version}</version>
</parent>
<artifactId>sofa-ark-all</artifactId>
<name>${project.groupId}:${project.artifactId}</name>
<properties>
<sofa.ark.name>sofa-ark-all</sofa.ark.name>
</properties>
<dependencies>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-ark-common</artifactId>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-ark-exception</artifactId>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-ark-spi</artifactId>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-ark-archive</artifactId>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-ark-container</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>${maven.assembly.plugin}</version>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<finalName>${sofa.ark.name}</finalName>
<descriptors>
<descriptor>src/main/assembly/assembly.xml</descriptor>
</descriptors>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
</manifest>
<manifestEntries>
<ArkVersion>${project.version}</ArkVersion>
<Timestamp>${maven.build.timestamp}</Timestamp>
</manifestEntries>
</archive>
<attach>true</attach>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: sofa-ark-parent/assembly/src/main/assembly/assembly.xml
================================================
<?xml version="1.0" encoding="UTF-8" ?>
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>sofa-ark-container</id>
<formats>
<format>jar</format>
<format>dir</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<useProjectArtifact>false</useProjectArtifact>
<outputDirectory>lib</outputDirectory>
</dependencySet>
</dependencySets>
<files>
<file>
<source>src/main/assembly/mark</source>
<outputDirectory>com/alipay/sofa/ark/container</outputDirectory>
</file>
</files>
</assembly>
================================================
FILE: sofa-ark-parent/assembly/src/main/assembly/mark
================================================
a mark file included in sofa-ark-all.jar
================================================
FILE: sofa-ark-parent/core/api/CLAUDE.md
================================================
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Module Overview
**Artifact ID**: `sofa-ark-api`
**Package**: `com.alipay.sofa.ark.api`
This module provides the public API for SOFAArk operations. It is the main entry point for external code to interact with the Ark container runtime.
## Purpose
- Public API for managing Ark business modules (Biz)
- Configuration management through `ArkConfigs`
- Response models for API operations
## Key Classes
### `ArkClient`
Main API for runtime operations on business modules:
- `installBiz(File bizFile)` - Install a new business module
- `uninstallBiz(String bizName, String bizVersion)` - Remove a business module
- `switchBiz(String bizName, String bizVersion)` - Activate a specific biz version
- `checkBiz()` - Query installed business modules
- `installPlugin(PluginOperation)` - Install a plugin dynamically
- `invocationReplay(String version, Replay replay)` - Invoke code with specific biz version context
### `ArkConfigs`
Configuration management:
- `getStringValue(String key)` - Get configuration value
- `setSystemProperty(String key, String value)` - Set system properties
### `ClientResponse`
Response wrapper for API operations with status code and message.
### `ResponseCode`
Enum defining response codes: `SUCCESS`, `FAILED`, `REPEAT_BIZ`, `NOT_FOUND_BIZ`, `ILLEGAL_STATE_BIZ`
## Dependencies
- `sofa-ark-spi` - Service Provider Interfaces
- `sofa-ark-common` - Common utilities
## Used By
- `sofa-ark-container` - Implements the services behind this API
- `config-ark-plugin` - Uses API for dynamic module management
- Application code interacting with Ark runtime
================================================
FILE: sofa-ark-parent/core/api/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>sofa-ark-core</artifactId>
<groupId>com.alipay.sofa</groupId>
<version>${sofa.ark.version}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>sofa-ark-api</artifactId>
<name>${project.groupId}:${project.artifactId}</name>
<dependencies>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-ark-spi</artifactId>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-ark-common</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
================================================
FILE: sofa-ark-parent/core/api/src/main/java/com/alipay/sofa/ark/api/ArkClient.java
================================================
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alipay.sofa.ark.api;
import com.alipay.sofa.ark.common.log.ArkLogger;
import com.alipay.sofa.ark.common.log.ArkLoggerFactory;
import com.alipay.sofa.ark.common.util.AssertUtils;
import com.alipay.sofa.ark.common.util.BizIdentityUtils;
import com.alipay.sofa.ark.common.util.FileUtils;
import com.alipay.sofa.ark.common.util.StringUtils;
import com.alipay.sofa.ark.spi.constant.Constants;
import com.alipay.sofa.ark.spi.event.biz.AfterBizSwitchEvent;
import com.alipay.sofa.ark.spi.event.biz.BeforeBizSwitchEvent;
import com.alipay.sofa.ark.spi.model.*;
import com.alipay.sofa.ark.spi.replay.Replay;
import com.alipay.sofa.ark.spi.replay.ReplayContext;
import com.alipay.sofa.ark.spi.service.biz.BizFactoryService;
import com.alipay.sofa.ark.spi.service.biz.BizManagerService;
import com.alipay.sofa.ark.spi.service.event.EventAdminService;
import com.alipay.sofa.ark.spi.service.injection.InjectionService;
import com.alipay.sofa.ark.spi.service.plugin.PluginFactoryService;
import com.alipay.sofa.ark.spi.service.plugin.PluginManagerService;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.*;
import static com.alipay.sofa.ark.spi.constant.Constants.AUTO_UNINSTALL_WHEN_FAILED_ENABLE;
/**
* API used to operate biz
*
* @author qilong.zql
* @since 0.6.0
*/
public class ArkClient {
private static BizManagerService bizManagerService;
private static BizFactoryService bizFactoryService;
private static PluginManagerService pluginManagerService;
private static PluginFactoryService pluginFactoryService;
private static Biz masterBiz;
private static InjectionService injectionService;
private static String[] arguments;
/**
* in some case like multi-tenant jdk, we need to set envs for biz
*/
private static Map<String, String> envs;
private static EventAdminService eventAdminService;
private static File getBizInstallDirectory() {
String configDir = ArkConfigs.getStringValue(Constants.CONFIG_INSTALL_BIZ_DIR);
return StringUtils.isEmpty(configDir) ? FileUtils.createTempDir("sofa-ark") : FileUtils
.mkdir(configDir);
}
public static File createBizSaveFile(String bizName, String bizVersion, String fileSuffix) {
String suffix = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
if (!StringUtils.isEmpty(fileSuffix)) {
suffix = fileSuffix;
}
File bizInstallDirectory = getBizInstallDirectory();
return new File(bizInstallDirectory, bizName + "-" + bizVersion + "-" + suffix);
}
public static File createBizSaveFile(String bizName, String bizVersion) {
return createBizSaveFile(bizName, bizVersion, null);
}
public static InjectionService getInjectionService() {
return injectionService;
}
public static void setInjectionService(InjectionService injectionService) {
ArkClient.injectionService = injectionService;
}
public static BizManagerService getBizManagerService() {
return bizManagerService;
}
public static void setBizManagerService(BizManagerService bizManagerService) {
ArkClient.bizManagerService = bizManagerService;
}
public static BizFactoryService getBizFactoryService() {
return bizFactoryService;
}
public static void setBizFactoryService(BizFactoryService bizFactoryService) {
ArkClient.bizFactoryService = bizFactoryService;
}
public static void setPluginManagerService(PluginManagerService pluginManagerService) {
ArkClient.pluginManagerService = pluginManagerService;
}
public static PluginManagerService getPluginManagerService() {
return pluginManagerService;
}
public static PluginFactoryService getPluginFactoryService() {
return pluginFactoryService;
}
public static void setPluginFactoryService(PluginFactoryService pluginFactoryService) {
ArkClient.pluginFactoryService = pluginFactoryService;
}
public static Biz getMasterBiz() {
return masterBiz;
}
public static void setMasterBiz(Biz masterBiz) {
ArkClient.masterBiz = masterBiz;
}
public static EventAdminService getEventAdminService() {
return eventAdminService;
}
public static void setEventAdminService(EventAdminService eventAdminService) {
ArkClient.eventAdminService = eventAdminService;
}
public static String[] getArguments() {
return arguments;
}
public static void setArguments(String[] arguments) {
ArkClient.arguments = arguments;
}
public static Map<String, String> getEnvs() {
return envs;
}
public static void setEnvs(Map<String, String> envs) {
ArkClient.envs = envs;
}
/**
* Install Biz with default arguments and envs throw file
*
* @param bizFile
* @throws Throwable
*/
public static ClientResponse installBiz(File bizFile) throws Throwable {
return installBiz(bizFile, arguments, envs);
}
public static ClientResponse installBiz(File bizFile, String[] args) throws Throwable {
return installBiz(bizFile, args, null);
}
public static ClientResponse installBiz(File bizFile, String[] args, Map<String, String> envs)
throws Throwable {
BizConfig bizConfig = new BizConfig();
bizConfig.setArgs(args);
bizConfig.setEnvs(envs);
return doInstallBiz(bizFile, bizConfig);
}
public static ClientResponse installBiz(File bizFile, BizConfig bizConfig) throws Throwable {
return doInstallBiz(bizFile, bizConfig);
}
private static ClientResponse doInstallBiz(File bizFile, BizConfig bizConfig) throws Throwable {
AssertUtils.assertNotNull(bizFactoryService, "bizFactoryService must not be null!");
AssertUtils.assertNotNull(bizManagerService, "bizManagerService must not be null!");
AssertUtils.assertNotNull(bizFile, "bizFile must not be null!");
AssertUtils.assertNotNull(bizConfig, "bizConfig must not be null!");
long start = System.currentTimeMillis();
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss,SSS");
String startDate = sdf.format(new Date(start));
Biz biz = bizFactoryService.createBiz(bizFile, bizConfig);
ClientResponse response = new ClientResponse();
if (bizManagerService.getBizByIdentity(biz.getIdentity()) != null
|| !bizManagerService.registerBiz(biz)) {
return response.setCode(ResponseCode.REPEAT_BIZ).setMessage(
String.format("Biz: %s has been installed or registered.", biz.getIdentity()));
}
try {
biz.start(bizConfig.getArgs(), bizConfig.getEnvs());
long end = System.currentTimeMillis();
response
.setCode(ResponseCode.SUCCESS)
.setMessage(
String.format("Install Biz: %s success, cost: %s ms, started at: %s",
biz.getIdentity(), end - start, startDate))
.setBizInfos(Collections.<BizInfo> singleton(biz));
getLogger().info(response.getMessage());
return response;
} catch (Throwable throwable) {
long end = System.currentTimeMillis();
response.setCode(ResponseCode.FAILED).setMessage(
String.format("Install Biz: %s fail,cost: %s ms, started at: %s",
biz.getIdentity(), end - start, startDate));
getLogger().error(response.getMessage(), throwable);
boolean autoUninstall = Boolean.parseBoolean(ArkConfigs.getStringValue(
AUTO_UNINSTALL_WHEN_FAILED_ENABLE, "true"));
if (autoUninstall) {
try {
getLogger().error(
String.format("Start Biz: %s failed, try to unInstall this biz.",
biz.getIdentity()));
biz.stop();
} catch (Throwable e) {
getLogger().error(String.format("UnInstall Biz: %s fail.", biz.getIdentity()),
e);
}
}
throw throwable;
}
}
/**
* Uninstall biz.
*
* @param bizName
* @param bizVersion
* @return
* @throws Throwable
*/
public static ClientResponse uninstallBiz(String bizName, String bizVersion) throws Throwable {
AssertUtils.assertNotNull(bizFactoryService, "bizFactoryService must not be null!");
AssertUtils.assertNotNull(bizManagerService, "bizManagerService must not be null!");
AssertUtils.assertNotNull(bizName, "bizName must not be null!");
AssertUtils.assertNotNull(bizVersion, "bizVersion must not be null!");
// ignore when uninstall master biz
if (bizName.equals(ArkConfigs.getStringValue(Constants.MASTER_BIZ))) {
return new ClientResponse().setCode(ResponseCode.FAILED).setMessage(
"Master biz must not be uninstalled.");
}
Biz biz = bizManagerService.getBiz(bizName, bizVersion);
ClientResponse response = new ClientResponse().setCode(ResponseCode.NOT_FOUND_BIZ)
.setMessage(
String.format("Uninstall biz: %s not found.",
BizIdentityUtils.generateBizIdentity(bizName, bizVersion)));
if (biz != null) {
try {
biz.stop();
} catch (Throwable throwable) {
getLogger().error(String.format("UnInstall Biz: %s fail.", biz.getIdentity()),
throwable);
throw throwable;
}
response.setCode(ResponseCode.SUCCESS).setMessage(
String.format("Uninstall biz: %s success.", biz.getIdentity()));
}
getLogger().info(response.getMessage());
return response;
}
/**
* Check all {@link com.alipay.sofa.ark.spi.model.BizInfo}
*
* @return
*/
public static ClientResponse checkBiz() {
return checkBiz(null, null);
}
/**
* Check all {@link com.alipay.sofa.ark.spi.model.BizInfo} with specified bizName
*
* @param bizName
* @return
*/
public static ClientResponse checkBiz(String bizName) {
return checkBiz(bizName, null);
}
/**
* Check all {@link com.alipay.sofa.ark.spi.model.BizInfo} with specified bizName and bizVersion
*
* @param bizName
* @param bizVersion
* @return
*/
public static ClientResponse checkBiz(String bizName, String bizVersion) {
AssertUtils.assertNotNull(bizFactoryService, "bizFactoryService must not be null!");
AssertUtils.assertNotNull(bizManagerService, "bizManagerService must not be null!");
ClientResponse response = new ClientResponse();
Set<BizInfo> bizInfoSet = new HashSet<>();
if (bizName != null && bizVersion != null) {
Biz biz = bizManagerService.getBiz(bizName, bizVersion);
if (biz != null) {
bizInfoSet.add(biz);
}
} else if (bizName != null) {
bizInfoSet.addAll(bizManagerService.getBiz(bizName));
} else {
bizInfoSet.addAll(bizManagerService.getBizInOrder());
}
StringBuilder sb = new StringBuilder();
sb.append(String.format("Biz count=%d", bizInfoSet.size())).append("\n");
for (BizInfo bizInfo : bizInfoSet) {
sb.append(
String.format("bizName=%s, bizVersion=%s, bizState=%s", bizInfo.getBizName(),
bizInfo.getBizVersion(), bizInfo.getBizState())).append("\n");
}
response.setCode(ResponseCode.SUCCESS).setBizInfos(bizInfoSet).setMessage(sb.toString());
getLogger().info(String.format("Check Biz: %s", response.getMessage()));
return response;
}
/**
* Active biz with specified bizName and bizVersion
*
* @param bizName
* @param bizVersion
* @return
*/
public static ClientResponse switchBiz(String bizName, String bizVersion) {
AssertUtils.assertNotNull(bizFactoryService, "bizFactoryService must not be null!");
AssertUtils.assertNotNull(bizManagerService, "bizManagerService must not be null!");
AssertUtils.assertNotNull(bizName, "bizName must not be null!");
AssertUtils.assertNotNull(bizVersion, "bizVersion must not be null!");
Biz biz = bizManagerService.getBiz(bizName, bizVersion);
ClientResponse response = new ClientResponse().setCode(ResponseCode.NOT_FOUND_BIZ)
.setMessage(
String.format("Switch biz: %s not found.",
BizIdentityUtils.generateBizIdentity(bizName, bizVersion)));
if (biz != null) {
if (biz.getBizState() != BizState.ACTIVATED
&& biz.getBizState() != BizState.DEACTIVATED) {
response.setCode(ResponseCode.ILLEGAL_STATE_BIZ).setMessage(
String.format("Switch Biz: %s's state must not be %s.", biz.getIdentity(),
biz.getBizState()));
} else {
eventAdminService.sendEvent(new BeforeBizSwitchEvent(biz));
bizManagerService.activeBiz(bizName, bizVersion);
eventAdminService.sendEvent(new AfterBizSwitchEvent(biz));
response.setCode(ResponseCode.SUCCESS).setMessage(
String.format("Switch biz: %s is activated.", biz.getIdentity()));
}
}
getLogger().info(response.getMessage());
return response;
}
public static ClientResponse installOperation(BizOperation bizOperation) throws Throwable {
return doInstallOperation(bizOperation, arguments, envs);
}
public static ClientResponse installOperation(BizOperation bizOperation, String[] args)
throws Throwable {
return doInstallOperation(bizOperation, args, null);
}
public static ClientResponse installOperation(BizOperation bizOperation, String[] args,
Map<String, String> envs) throws Throwable {
return doInstallOperation(bizOperation, args, envs);
}
private static ClientResponse doInstallOperation(BizOperation bizOperation, String[] args,
Map<String, String> envs) throws Throwable {
AssertUtils.isTrue(
BizOperation.OperationType.INSTALL.equals(bizOperation.getOperationType()),
"Operation type must be install");
File bizFile = null;
if (bizOperation.getParameters().get(Constants.CONFIG_BIZ_URL) != null) {
URL url = new URL(bizOperation.getParameters().get(Constants.CONFIG_BIZ_URL));
bizFile = ArkClient.createBizSaveFile(bizOperation.getBizName(),
bizOperation.getBizVersion());
try (InputStream inputStream = url.openStream()) {
FileUtils.copyInputStreamToFile(inputStream, bizFile);
}
}
// prepare extension urls if necessary
URL[] extensionUrls = null;
if (bizOperation.getParameters().get(Constants.BIZ_EXTENSION_URLS) != null) {
Set<String> extensionLibs = StringUtils.strToSet(
bizOperation.getParameters().get(Constants.BIZ_EXTENSION_URLS),
Constants.COMMA_SPLIT);
List<URL> urlsList = new ArrayList<>();
if (!extensionLibs.isEmpty()) {
for (String extension : extensionLibs) {
URL url = new URL(extension);
urlsList.add(url);
}
}
extensionUrls = urlsList.toArray(new URL[0]);
}
BizConfig bizConfig = new BizConfig();
bizConfig.setExtensionUrls(extensionUrls);
bizConfig.setArgs(args);
bizConfig.setEnvs(envs);
return installBiz(bizFile, bizConfig);
}
public static ClientResponse uninstallOperation(BizOperation bizOperation) throws Throwable {
AssertUtils.isTrue(
BizOperation.OperationType.UNINSTALL.equals(bizOperation.getOperationType()),
"Operation type must be uninstall");
return uninstallBiz(bizOperation.getBizName(), bizOperation.getBizVersion());
}
public static ClientResponse switchOperation(BizOperation bizOperation) {
AssertUtils.isTrue(
BizOperation.OperationType.SWITCH.equals(bizOperation.getOperationType()),
"Operation type must be switch");
return switchBiz(bizOperation.getBizName(), bizOperation.getBizVersion());
}
public static ClientResponse checkOperation(BizOperation bizOperation) {
AssertUtils.isTrue(
BizOperation.OperationType.CHECK.equals(bizOperation.getOperationType()),
"Operation type must be check");
return checkBiz(bizOperation.getBizName(), bizOperation.getBizVersion());
}
public static ClientResponse installPlugin(PluginOperation pluginOperation) throws Exception {
AssertUtils.assertNotNull(pluginOperation, "pluginOperation must not be null");
// prepare plugin file
File localFile = pluginOperation.getLocalFile();
if (localFile == null && !StringUtils.isEmpty(pluginOperation.getUrl())) {
URL url = new URL(pluginOperation.getUrl());
String pluginDir = ArkConfigs.getStringValue(Constants.CONFIG_INSTALL_PLUGIN_DIR);
File pluginDirectory = StringUtils.isEmpty(pluginDir) ? FileUtils
.createTempDir("sofa-ark") : FileUtils.mkdir(pluginDir);
localFile = new File(pluginDirectory, pluginOperation.getPluginName() + "-"
+ pluginOperation.getPluginVersion() + "-"
+ System.currentTimeMillis());
try (InputStream inputStream = url.openStream()) {
FileUtils.copyInputStreamToFile(inputStream, localFile);
}
}
ClientResponse response = new ClientResponse();
if (localFile == null) {
response.setCode(ResponseCode.FAILED).setMessage(
String.format("Install Plugin: %s-%s fail, local file is null.",
pluginOperation.getPluginName(), pluginOperation.getPluginVersion()));
return response;
}
PluginConfig pluginConfig = new PluginConfig();
if (!StringUtils.isEmpty(pluginOperation.getPluginName())) {
pluginConfig.setSpecifiedName(pluginOperation.getPluginName());
}
if (!StringUtils.isEmpty(pluginOperation.getPluginVersion())) {
pluginConfig.setSpecifiedVersion(pluginOperation.getPluginVersion());
}
// prepare extension urls if necessary
List<String> extensionLibs = pluginOperation.getExtensionLibs();
List<URL> urlsList = new ArrayList<>();
if (extensionLibs != null && !extensionLibs.isEmpty()) {
for (String extension : extensionLibs) {
URL url = new URL(extension);
urlsList.add(url);
}
}
URL[] extensionUrls = urlsList.toArray(new URL[0]);
pluginConfig.setExtensionUrls(extensionUrls);
long start = System.currentTimeMillis();
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss,SSS");
String startDate = sdf.format(new Date(start));
// create
Plugin plugin = pluginFactoryService.createPlugin(localFile, pluginConfig);
// register
pluginManagerService.registerPlugin(plugin);
// start
try {
plugin.start();
long end = System.currentTimeMillis();
response.setCode(ResponseCode.SUCCESS).setMessage(
String.format("Install Plugin: %s success, cost: %s ms, started at: %s",
plugin.getPluginName() + ":" + plugin.getVersion(), end - start, startDate));
getLogger().info(response.getMessage());
} catch (Throwable throwable) {
long end = System.currentTimeMillis();
response.setCode(ResponseCode.FAILED).setMessage(
String.format("Install Plugin: %s fail,cost: %s ms, started at: %s",
plugin.getPluginName() + ":" + plugin.getVersion(), end - start, startDate));
getLogger().error(response.getMessage(), throwable);
throw throwable;
}
return response;
}
public static ClientResponse checkPlugin() {
return checkPlugin(null);
}
public static ClientResponse checkPlugin(String pluginName) {
AssertUtils.assertNotNull(pluginFactoryService, "pluginFactoryService must not be null!");
AssertUtils.assertNotNull(pluginManagerService, "pluginManagerService must not be null!");
ClientResponse response = new ClientResponse();
Set<Plugin> plugins = new HashSet<>();
if (pluginName != null) {
Plugin plugin = pluginManagerService.getPluginByName(pluginName);
if (plugin != null) {
plugins.add(plugin);
}
} else {
plugins.addAll(pluginManagerService.getPluginsInOrder());
}
StringBuilder sb = new StringBuilder();
sb.append(String.format("Plugin count=%d", plugins.size())).append("\n");
for (Plugin plugin : plugins) {
sb.append(
String.format("pluginName=%s, pluginVersion=%s", plugin.getPluginName(),
plugin.getVersion())).append("\n");
}
response.setCode(ResponseCode.SUCCESS).setPluginInfos(plugins).setMessage(sb.toString());
getLogger().info(String.format("Check Plugin: %s", response.getMessage()));
return response;
}
/**
* dynamic invoke by specified version
* @param version
* @param replay
* @return
*/
public static Object invocationReplay(String version, Replay replay) {
try {
ReplayContext.set(version);
return replay.invoke();
} finally {
ReplayContext.unset();
}
}
private static ArkLogger getLogger() {
return ArkLoggerFactory.getDefaultLogger();
}
}
================================================
FILE: sofa-ark-parent/core/api/src/main/java/com/alipay/sofa/ark/api/ArkConfigs.java
================================================
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alipay.sofa.ark.api;
import com.alipay.sofa.ark.exception.ArkRuntimeException;
import com.alipay.sofa.ark.spi.constant.Constants;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Properties;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
/**
* @author qilong.zql
* @author GengZhang
* @since 0.6.0
*/
public class ArkConfigs {
/**
* Global Configuration
*/
private final static ConcurrentMap<String, Object> CFG = new ConcurrentHashMap<String, Object>();
/**
* executed only once
*/
public static void init(List<URL> confFiles) {
try {
// load file configs
for (URL url : confFiles) {
loadConfigFile(url.openStream());
}
} catch (Exception e) {
throw new ArkRuntimeException("Catch Exception when load ArkConfigs", e);
}
}
/**
* load conf file
*
* @param inputStream conf file
* @throws IOException loading exception
*/
private static void loadConfigFile(InputStream inputStream) throws IOException {
Properties properties = new Properties();
properties.load(inputStream);
for (Object key : properties.keySet()) {
CFG.put((String) key, properties.get(key));
}
}
/**
* configure system property
*
* @param key
* @param value
*/
public static void setSystemProperty(String key, String value) {
System.setProperty(key, value);
}
/**
* clear system property
*
* @param key
*/
public static String getSystemProperty(String key) {
return System.getProperty(key);
}
/**
* Get string value.
*
* @param primaryKey the primary key
* @return the string value
*/
public static String getStringValue(String primaryKey) {
String val = getSystemProperty(primaryKey);
if (val == null) {
val = (String) CFG.get(primaryKey);
}
return val;
}
/**
* Get string value.
*
* @param primaryKey the primary key
* @param defaultValue
* @return the string value
*/
public static String getStringValue(String primaryKey, String defaultValue) {
String val = getStringValue(primaryKey);
return val == null ? defaultValue : val;
}
/**
* Get int value.
*
* @param primaryKey the primary key
* @param defaultValue
* @return the int value
*/
public static int getIntValue(String primaryKey, int defaultValue) {
String val = getStringValue(primaryKey);
return val == null ? defaultValue : Integer.valueOf(val);
}
public static boolean getBooleanValue(String primaryKey, boolean defaultValue) {
String val = getStringValue(primaryKey);
return val == null ? defaultValue : Boolean.valueOf(val);
}
/**
* Get ArkConfigs key set
*
* @return
*/
public static Set<String> keySet() {
Set<String> keySet = new HashSet<>(CFG.keySet());
keySet.addAll(new HashMap(System.getProperties()).keySet());
return keySet;
}
/**
* put string config
* @param key
* @param value
*/
public static void putStringValue(String key, String value) {
CFG.put(key, value);
}
public static boolean isEmbedEnable() {
return Boolean.getBoolean(Constants.EMBED_ENABLE);
}
public static void setEmbedEnable(boolean enable) {
System.setProperty(Constants.EMBED_ENABLE, enable ? "true" : "false");
}
public static boolean isEmbedStaticBizEnable() {
return Boolean.getBoolean(Constants.EMBED_STATIC_BIZ_ENABLE);
}
public static void setEmbedStaticBizEnable(boolean enable) {
System.setProperty(Constants.EMBED_STATIC_BIZ_ENABLE, enable ? "true" : "false");
}
public static boolean isBizSpecifyDependentPluginsEnable() {
return Boolean.getBoolean(Constants.BIZ_SPECIFY_DEPENDENT_PLUGINS_ENABLE);
}
}
================================================
FILE: sofa-ark-parent/core/api/src/main/java/com/alipay/sofa/ark/api/ClientResponse.java
================================================
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alipay.sofa.ark.api;
import com.alipay.sofa.ark.spi.model.BizInfo;
import com.alipay.sofa.ark.spi.model.Plugin;
import java.util.Set;
/**
* API operation response
*
* @author qilong.zql
* @since 0.6.0
*/
public class ClientResponse {
private String message;
private ResponseCode code;
private Set<BizInfo> bizInfos;
private Set<Plugin> pluginInfos;
public String getMessage() {
return message;
}
public ClientResponse setMessage(String message) {
this.message = message;
return this;
}
public ResponseCode getCode() {
return code;
}
public ClientResponse setCode(ResponseCode code) {
this.code = code;
return this;
}
public Set<BizInfo> getBizInfos() {
return bizInfos;
}
public ClientResponse setBizInfos(Set<BizInfo> bizInfos) {
this.bizInfos = bizInfos;
return this;
}
public Set<Plugin> getPluginInfos() {
return pluginInfos;
}
public ClientResponse setPluginInfos(Set<Plugin> pluginInfos) {
this.pluginInfos = pluginInfos;
return this;
}
}
================================================
FILE: sofa-ark-parent/core/api/src/main/java/com/alipay/sofa/ark/api/ResponseCode.java
================================================
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alipay.sofa.ark.api;
/**
* @author qilong.zql
* @since 0.6.0
*/
public enum ResponseCode {
SUCCESS, FAILED, REPEAT_BIZ, NOT_FOUND_BIZ, ILLEGAL_STATE_BIZ;
}
================================================
FILE: sofa-ark-parent/core/api/src/test/java/com/alipay/sofa/ark/api/ArkConfigsTest.java
================================================
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alipay.sofa.ark.api;
import org.junit.Test;
import java.net.URL;
import static com.alipay.sofa.ark.api.ArkConfigs.getStringValue;
import static com.alipay.sofa.ark.api.ArkConfigs.init;
import static java.util.Arrays.asList;
import static org.junit.Assert.assertEquals;
public class ArkConfigsTest {
@Test
public void testLoadConfigFile() throws Exception {
URL resource = this.getClass().getClassLoader().getResource("test.props");
init(asList(resource));
assertEquals("b123", getStringValue("a123"));
assertEquals("d123", getStringValue("c123"));
}
}
================================================
FILE: sofa-ark-parent/core/api/src/test/resources/test.props
================================================
a123=b123
c123=d123
================================================
FILE: sofa-ark-parent/core/common/CLAUDE.md
================================================
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Module Overview
**Artifact ID**: `sofa-ark-common`
**Package**: `com.alipay.sofa.ark.common`
This module provides common utilities, logging, and shared functionality used across all SOFAArk modules.
## Purpose
- Utility classes for file operations, strings, assertions
- Logging infrastructure
- Common constants and helper methods
## Key Packages
### `common.util`
Utility classes:
- `StringUtils` - String manipulation utilities
- `FileUtils` - File I/O operations
- `AssertUtils` - Assertion helpers
- `BizIdentityUtils` - Business module identity parsing (`name:version` format)
- `ClassUtils` - Class loading utilities
- `EnvironmentUtils` - Environment variable handling
### `common.log`
Logging infrastructure:
- `ArkLogger` - Logger wrapper
- `ArkLoggerFactory` - Logger factory for creating Ark loggers
## Dependencies
- `sofa-ark-exception` - Exception definitions
- `log-sofa-boot-starter` - SOFA logging framework
- `slf4j-api` - Logging facade
## Used By
Almost all SOFAArk modules depend on this common utilities module:
- `sofa-ark-api`
- `sofa-ark-container`
- `sofa-ark-archive`
- `sofa-ark-maven-plugin`
- `sofa-ark-plugin-maven-plugin`
================================================
FILE: sofa-ark-parent/core/common/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>sofa-ark-core</artifactId>
<groupId>com.alipay.sofa</groupId>
<version>${sofa.ark.version}</version>
</parent>
<artifactId>sofa-ark-common</artifactId>
<name>${project.groupId}:${project.artifactId}</name>
<dependencies>
<!--SOFAArk modules-->
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-ark-spi</artifactId>
</dependency>
<!--third party library-->
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>log-sofa-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</dependency>
<!--log-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
</dependency>
<!--test-->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-inline</artifactId>
<version>${mockito.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.4</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
================================================
FILE: sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/adapter/ArkLogbackContextSelector.java
================================================
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alipay.sofa.ark.common.adapter;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.selector.ContextSelector;
import ch.qos.logback.core.CoreConstants;
import com.alipay.sofa.ark.common.util.StringUtils;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class ArkLogbackContextSelector implements ContextSelector {
private static final Map<ClassLoader, LoggerContext> CLASS_LOADER_LOGGER_CONTEXT = new HashMap<>();
private static final String BIZ_CLASS_LOADER = "com.alipay.sofa.ark.container.service.classloader.BizClassLoader";
private static final String CONTAINER_CLASS_LOADER = "com.alipay.sofa.ark.bootstrap.ContainerClassLoader";
private LoggerContext defaultLoggerContext;
public ArkLogbackContextSelector(LoggerContext loggerContext) {
this.defaultLoggerContext = loggerContext;
}
@Override
public LoggerContext getLoggerContext() {
ClassLoader classLoader = this.findClassLoader();
if (classLoader == null) {
return defaultLoggerContext;
}
return getContext(classLoader);
}
private ClassLoader findClassLoader() {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
if (classLoader != null && CONTAINER_CLASS_LOADER.equals(classLoader.getClass().getName())) {
return null;
}
if (classLoader != null && BIZ_CLASS_LOADER.equals(classLoader.getClass().getName())) {
return classLoader;
}
Class<?>[] context = new SecurityManager() {
@Override
public Class<?>[] getClassContext() {
return super.getClassContext();
}
}.getClassContext();
if (context == null || context.length == 0) {
return null;
}
for (Class<?> cls : context) {
if (cls.getClassLoader() != null
&& BIZ_CLASS_LOADER.equals(cls.getClassLoader().getClass().getName())) {
return cls.getClassLoader();
}
}
return null;
}
private LoggerContext getContext(ClassLoader cls) {
LoggerContext loggerContext = CLASS_LOADER_LOGGER_CONTEXT.get(cls);
if (null == loggerContext) {
synchronized (ArkLogbackContextSelector.class) {
loggerContext = CLASS_LOADER_LOGGER_CONTEXT.get(cls);
if (null == loggerContext) {
loggerContext = new LoggerContext();
loggerContext.setName(CoreConstants.DEFAULT_CONTEXT_NAME);
CLASS_LOADER_LOGGER_CONTEXT.put(cls, loggerContext);
}
}
}
return loggerContext;
}
@Override
public LoggerContext getLoggerContext(String name) {
if (StringUtils.isEmpty(name)) {
return defaultLoggerContext;
}
for (ClassLoader classLoader : CLASS_LOADER_LOGGER_CONTEXT.keySet()) {
LoggerContext loggerContext = CLASS_LOADER_LOGGER_CONTEXT.get(classLoader);
if (name.equals(loggerContext.getName())) {
return loggerContext;
}
}
return defaultLoggerContext;
}
@Override
public LoggerContext getDefaultLoggerContext() {
return defaultLoggerContext;
}
@Override
public LoggerContext detachLoggerContext(String loggerContextName) {
if (StringUtils.isEmpty(loggerContextName)) {
return null;
}
for (ClassLoader classLoader : CLASS_LOADER_LOGGER_CONTEXT.keySet()) {
LoggerContext loggerContext = CLASS_LOADER_LOGGER_CONTEXT.get(classLoader);
if (loggerContextName.equals(loggerContext.getName())) {
return removeContext(classLoader);
}
}
return null;
}
public LoggerContext removeContext(ClassLoader cls) {
if (cls == null) {
return null;
}
return CLASS_LOADER_LOGGER_CONTEXT.remove(cls);
}
@Override
public List<String> getContextNames() {
return CLASS_LOADER_LOGGER_CONTEXT.values().stream().map(LoggerContext::getName).collect(Collectors.toList());
}
}
================================================
FILE: sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/guice/AbstractArkGuiceModule.java
================================================
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alipay.sofa.ark.common.guice;
import com.google.inject.AbstractModule;
/**
* Abstract Guice Module for SofaArk
*
* @author ruoshan
* @since 0.1.0
*/
public abstract class AbstractArkGuiceModule extends AbstractModule {
}
================================================
FILE: sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/log/ArkLogger.java
================================================
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alipay.sofa.ark.common.log;
import org.slf4j.Logger;
import org.slf4j.Marker;
/**
* Logger Implementation for SOFAArk
*
* @author ruoshan
* @since 0.1.0
*/
public class ArkLogger implements Logger {
private Logger logger;
public ArkLogger(Logger logger) {
this.logger = logger;
}
@Override
public String getName() {
return logger.getName();
}
@Override
public boolean isTraceEnabled() {
return logger.isTraceEnabled();
}
@Override
public void trace(String msg) {
logger.trace(msg);
}
@Override
public void trace(String format, Object arg) {
logger.trace(format, arg);
}
@Override
public void trace(String format, Object arg1, Object arg2) {
logger.trace(format, arg1, arg2);
}
@Override
public void trace(String format, Object... arguments) {
logger.trace(format, arguments);
}
@Override
public void trace(String msg, Throwable t) {
logger.trace(msg, t);
}
@Override
public boolean isTraceEnabled(Marker marker) {
return logger.isTraceEnabled();
}
@Override
public void trace(Marker marker, String msg) {
logger.trace(marker, msg);
}
@Override
public void trace(Marker marker, String format, Object arg) {
logger.trace(marker, format, arg);
}
@Override
public void trace(Marker marker, String format, Object arg1, Object arg2) {
logger.trace(marker, format, arg1, arg2);
}
@Override
public void trace(Marker marker, String format, Object... argArray) {
logger.trace(marker, format, argArray);
}
@Override
public void trace(Marker marker, String msg, Throwable t) {
logger.trace(marker, msg, t);
}
@Override
public boolean isDebugEnabled() {
return logger.isDebugEnabled();
}
@Override
public void debug(String msg) {
logger.debug(msg);
}
@Override
public void debug(String format, Object arg) {
logger.debug(format, arg);
}
@Override
public void debug(String format, Object arg1, Object arg2) {
logger.debug(format, arg1, arg2);
}
@Override
public void debug(String format, Object... arguments) {
logger.debug(format, arguments);
}
@Override
public void debug(String msg, Throwable t) {
logger.debug(msg, t);
}
@Override
public boolean isDebugEnabled(Marker marker) {
return logger.isDebugEnabled(marker);
}
@Override
public void debug(Marker marker, String msg) {
logger.debug(marker, msg);
}
@Override
public void debug(Marker marker, String format, Object arg) {
logger.debug(marker, format, arg);
}
@Override
public void debug(Marker marker, String format, Object arg1, Object arg2) {
logger.debug(marker, format, arg1, arg2);
}
@Override
public void debug(Marker marker, String format, Object... arguments) {
logger.debug(marker, format, arguments);
}
@Override
public void debug(Marker marker, String msg, Throwable t) {
logger.debug(marker, msg, t);
}
@Override
public boolean isInfoEnabled() {
return logger.isInfoEnabled();
}
@Override
public void info(String msg) {
logger.info(msg);
}
@Override
public void info(String format, Object arg) {
logger.info(format, arg);
}
@Override
public void info(String format, Object arg1, Object arg2) {
logger.info(format, arg1, arg2);
}
@Override
public void info(String format, Object... arguments) {
logger.info(format, arguments);
}
@Override
public void info(String msg, Throwable t) {
logger.info(msg, t);
}
@Override
public boolean isInfoEnabled(Marker marker) {
return logger.isInfoEnabled();
}
@Override
public void info(Marker marker, String msg) {
logger.info(marker, msg);
}
@Override
public void info(Marker marker, String format, Object arg) {
logger.info(marker, format, arg);
}
@Override
public void info(Marker marker, String format, Object arg1, Object arg2) {
logger.info(marker, format, arg1, arg2);
}
@Override
public void info(Marker marker, String format, Object... arguments) {
logger.info(marker, format, arguments);
}
@Override
public void info(Marker marker, String msg, Throwable t) {
logger.info(marker, msg, t);
}
@Override
public boolean isWarnEnabled() {
return logger.isWarnEnabled();
}
@Override
public void warn(String msg) {
logger.warn(msg);
}
@Override
public void warn(String format, Object arg) {
logger.warn(format, arg);
}
@Override
public void warn(String format, Object... arguments) {
logger.warn(format, arguments);
}
@Override
public void warn(String format, Object arg1, Object arg2) {
logger.warn(format, arg1, arg2);
}
@Override
public void warn(String msg, Throwable t) {
logger.warn(msg, t);
}
@Override
public boolean isWarnEnabled(Marker marker) {
return logger.isWarnEnabled(marker);
}
@Override
public void warn(Marker marker, String msg) {
logger.warn(marker, msg);
}
@Override
public void warn(Marker marker, String format, Object arg) {
logger.warn(marker, format, arg);
}
@Override
public void warn(Marker marker, String format, Object arg1, Object arg2) {
logger.warn(marker, format, arg1, arg2);
}
@Override
public void warn(Marker marker, String format, Object... arguments) {
logger.warn(marker, format, arguments);
}
@Override
public void warn(Marker marker, String msg, Throwable t) {
logger.warn(marker, msg, t);
}
@Override
public boolean isErrorEnabled() {
return logger.isErrorEnabled();
}
@Override
public void error(String msg) {
logger.error(msg);
}
@Override
public void error(String format, Object arg) {
logger.error(format, arg);
}
@Override
public void error(String format, Object arg1, Object arg2) {
logger.error(format, arg1, arg2);
}
@Override
public void error(String format, Object... arguments) {
logger.error(format, arguments);
}
@Override
public void error(String msg, Throwable t) {
logger.error(msg, t);
}
@Override
public boolean isErrorEnabled(Marker marker) {
return logger.isErrorEnabled(marker);
}
@Override
public void error(Marker marker, String msg) {
logger.error(marker, msg);
}
@Override
public void error(Marker marker, String format, Object arg) {
logger.error(marker, format, arg);
}
@Override
public void error(Marker marker, String format, Object arg1, Object arg2) {
logger.error(marker, format, arg1, arg2);
}
@Override
public void error(Marker marker, String format, Object... arguments) {
logger.error(marker, format, arguments);
}
@Override
public void error(Marker marker, String msg, Throwable t) {
logger.error(marker, msg, t);
}
}
================================================
FILE: sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/log/ArkLoggerFactory.java
================================================
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alipay.sofa.ark.common.log;
import com.alipay.sofa.common.log.LoggerSpaceManager;
/**
* LoggerFactory for SOFAArk
*
* @author ruoshan
* @since 0.1.0
*/
public class ArkLoggerFactory {
public static final String SOFA_ARK_LOGGER_SPACE = "com.alipay.sofa.ark";
private static final String SOFA_ARK_DEFAULT_LOGGER_NAME = "com.alipay.sofa.ark";
public static ArkLogger defaultLogger = getLogger(SOFA_ARK_DEFAULT_LOGGER_NAME);
public static ArkLogger getLogger(Class<?> clazz) {
if (clazz == null) {
return null;
}
return getLogger(clazz.getCanonicalName());
}
public static ArkLogger getLogger(String name) {
if (name == null || name.isEmpty()) {
return null;
}
return new ArkLogger(LoggerSpaceManager.getLoggerBySpace(name, SOFA_ARK_LOGGER_SPACE));
}
public static ArkLogger getDefaultLogger() {
return defaultLogger;
}
}
================================================
FILE: sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/thread/CommonThreadPool.java
================================================
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alipay.sofa.ark.common.thread;
import com.alipay.sofa.ark.common.util.ThreadPoolUtils;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
* Execute tasks triggered by ark container and ark plugin.
*
* @author qilong.zql
* @since 0.4.0
*/
public class CommonThreadPool {
/**
* Core size of thread pool
*
* @see ThreadPoolExecutor#corePoolSize
*/
private int corePoolSize = 10;
/**
* Maximum size of thread pool
*
* @see ThreadPoolExecutor#corePoolSize
*/
private int maximumPoolSize = 100;
/**
* @see ThreadPoolExecutor#keepAliveTime
*/
private int keepAliveTime = 300000;
/**
* @see ThreadPoolExecutor#getQueue
*/
private int queueSize = 0;
/**
* @see ThreadPoolExecutor#threadFactory#threadPoolName
*/
private String threadPoolName = "CommonProcessor";
/**
* @see ThreadPoolExecutor#threadFactory#isDaemon
*/
private boolean isDaemon = false;
/**
* @see ThreadPoolExecutor#allowCoreThreadTimeOut
*/
private boolean allowCoreThreadTimeOut = false;
/**
* @see ThreadPoolExecutor#prestartAllCoreThreads
*/
private boolean prestartAllCoreThreads = false;
/**
* ThreadPoolExecutor
*/
transient volatile ThreadPoolExecutor executor;
private void init() {
executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime,
TimeUnit.MILLISECONDS, ThreadPoolUtils.buildQueue(queueSize), new NamedThreadFactory(
threadPoolName, isDaemon));
if (allowCoreThreadTimeOut) {
executor.allowCoreThreadTimeOut(true);
}
if (prestartAllCoreThreads) {
executor.prestartAllCoreThreads();
}
}
public int getCorePoolSize() {
return corePoolSize;
}
public CommonThreadPool setCorePoolSize(int corePoolSize) {
this.corePoolSize = corePoolSize;
return this;
}
public int getMaximumPoolSize() {
return maximumPoolSize;
}
public CommonThreadPool setMaximumPoolSize(int maximumPoolSize) {
this.maximumPoolSize = maximumPoolSize;
return this;
}
public int getKeepAliveTime() {
return keepAliveTime;
}
public CommonThreadPool setKeepAliveTime(int keepAliveTime) {
this.keepAliveTime = keepAliveTime;
return this;
}
public int getQueueSize() {
return queueSize;
}
public CommonThreadPool setQueueSize(int queueSize) {
this.queueSize = queueSize;
return this;
}
public String getThreadPoolName() {
return threadPoolName;
}
public CommonThreadPool setThreadPoolName(String threadPoolName) {
this.threadPoolName = threadPoolName;
return this;
}
public boolean isDaemon() {
return isDaemon;
}
public CommonThreadPool setDaemon(boolean daemon) {
isDaemon = daemon;
return this;
}
public boolean isAllowCoreThreadTimeOut() {
return allowCoreThreadTimeOut;
}
public CommonThreadPool setAllowCoreThreadTimeOut(boolean allowCoreThreadTimeOut) {
this.allowCoreThreadTimeOut = allowCoreThreadTimeOut;
return this;
}
public boolean isPrestartAllCoreThreads() {
return prestartAllCoreThreads;
}
public CommonThreadPool setPrestartAllCoreThreads(boolean prestartAllCoreThreads) {
this.prestartAllCoreThreads = prestartAllCoreThreads;
return this;
}
/**
* Gets executor
*
* @return the executor
*/
public ThreadPoolExecutor getExecutor() {
if (executor == null) {
synchronized (this) {
if (executor == null) {
init();
}
}
}
return executor;
}
}
================================================
FILE: sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/thread/NamedThreadFactory.java
================================================
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alipay.sofa.ark.common.thread;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.atomic.AtomicInteger;
/**
* Common NamedThreadFactory
*
* @author qilong.zql
* @since 0.4.0
*/
public class NamedThreadFactory implements ThreadFactory {
/**
* The global thread pool counter
*/
private static final AtomicInteger POOL_COUNT = new AtomicInteger();
/**
* The current thread pool counter
*/
private final AtomicInteger threadCount = new AtomicInteger(1);
/**
* Thread group
*/
private final ThreadGroup group;
/**
* Thread name prefix
*/
private final String namePrefix;
/**
* Thread daemon option
*/
private final boolean isDaemon;
/**
* The first default prefix of thread name
*/
private final static String FIRST_PREFIX = "SOFA-ARK-";
/**
* specify the second prefix of thread name, default the thread created is non-daemon
*
* @param secondPrefix second prefix of thread name
*/
public NamedThreadFactory(String secondPrefix) {
this(secondPrefix, false);
}
/**
* Construct a named thread factory
*
* @param secondPrefix second prefix of thread name
* @param daemon thread daemon option
*/
public NamedThreadFactory(String secondPrefix, boolean daemon) {
SecurityManager sm = System.getSecurityManager();
group = (sm != null) ? sm.getThreadGroup() : Thread.currentThread().getThreadGroup();
namePrefix = FIRST_PREFIX + secondPrefix + "-" + POOL_COUNT.getAndIncrement() + "-T";
isDaemon = daemon;
}
@Override
public Thread newThread(Runnable r) {
Thread t = new Thread(group, r, namePrefix + threadCount.getAndIncrement(), 0);
t.setDaemon(isDaemon);
if (t.getPriority() != Thread.NORM_PRIORITY) {
t.setPriority(Thread.NORM_PRIORITY);
}
return t;
}
}
================================================
FILE: sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/thread/ThreadPoolManager.java
================================================
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alipay.sofa.ark.common.thread;
import java.util.concurrent.ConcurrentHashMap;
/**
* Thread Pool Manager
*
* @author qilong.zql
* @since 0.4.0
*/
public class ThreadPoolManager {
/**
* Manager group of {@see CommonThreadPool}
*/
private static ConcurrentHashMap<String, CommonThreadPool> threadPoolMap = null;
/**
* Register a thread pool for a unique name.
*
* @param threadPoolName thread pool name
* @param commonThreadPool CommonThreadPool
*/
public static synchronized void registerThreadPool(String threadPoolName,
CommonThreadPool commonThreadPool) {
if (threadPoolMap == null) {
threadPoolMap = new ConcurrentHashMap<>(16);
}
threadPoolMap.putIfAbsent(threadPoolName, commonThreadPool);
}
/**
* un-register a thread pool for a given name
*
* @param threadPoolName thread pool name
*/
public static synchronized void unRegisterUserThread(String threadPoolName) {
if (threadPoolMap != null) {
threadPoolMap.remove(threadPoolName);
}
}
/**
* Retrieve a thread pool for a given name
*
* @param threadPoolName thread pool name
* @return
*/
public static CommonThreadPool getThreadPool(String threadPoolName) {
return threadPoolMap == null ? null : threadPoolMap.get(threadPoolName);
}
}
================================================
FILE: sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/util/AssertUtils.java
================================================
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alipay.sofa.ark.common.util;
/**
*
* @author ruoshan
* @since 0.1.0
*/
public class AssertUtils {
/**
* Validate current object must not be null
*
* @param instance object instance
* @param msg error message
* @throws IllegalArgumentException if object instance is null
*/
public static void assertNotNull(Object instance, String msg) {
if (instance == null) {
throw new IllegalArgumentException(msg);
}
}
/**
* Validate current object must be null
*
* @param instance object instance
* @param msg error message
* @throws IllegalArgumentException if object instance is null
*/
public static void assertNull(Object instance, String msg) {
if (instance != null) {
throw new IllegalArgumentException(msg);
}
}
/**
* <p>Validate that the argument condition is {@code true}; otherwise
* throwing an exception with the specified message. This method is useful when
* validating according to an arbitrary boolean expression, such as validating a
* primitive number or using your own custom validation expression.</p>
*
* @param expression the boolean expression to check
* @param message the {@link String#format(String, Object...)} exception message if invalid, not null
* @param values the optional values for the formatted exception message, null array not recommended
* @throws IllegalArgumentException if expression is {@code false}
*/
public static void isTrue(final boolean expression, final String message,
final Object... values) {
if (!expression) {
throw new IllegalArgumentException(String.format(message, values));
}
}
/**
* <p>Validate that the argument condition is {@code false}; otherwise
* throwing an exception with the specified message. This method is useful when
* validating according to an arbitrary boolean expression, such as validating a
* primitive number or using your own custom validation expression.</p>
*
* @param expression the boolean expression to check
* @param message the {@link String#format(String, Object...)} exception message if invalid, not null
* @param values the optional values for the formatted exception message, null array not recommended
* @throws IllegalArgumentException if expression is {@code false}
*/
public static void isFalse(final boolean expression, final String message,
final Object... values) {
if (expression) {
throw new IllegalArgumentException(String.format(message, values));
}
}
}
================================================
FILE: sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/util/BizIdentityUtils.java
================================================
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alipay.sofa.ark.common.util;
import com.alipay.sofa.ark.spi.constant.Constants;
import com.alipay.sofa.ark.spi.model.Biz;
/**
* @author qilong.zql
* @since 0.6.0
*/
public class BizIdentityUtils {
public static String generateBizIdentity(Biz biz) {
return generateBizIdentity(biz.getBizName(), biz.getBizVersion());
}
public static String generateBizIdentity(String bizName, String bizVersion) {
return bizName + Constants.STRING_COLON + bizVersion;
}
public static boolean isValid(String bizIdentity) {
if (StringUtils.isEmpty(bizIdentity)) {
return false;
}
String[] str = bizIdentity.split(Constants.STRING_COLON);
if (str.length != 2) {
return false;
}
return !StringUtils.isEmpty(str[0]) && !StringUtils.isEmpty(str[1]);
}
}
================================================
FILE: sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/util/ClassLoaderUtils.java
================================================
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alipay.sofa.ark.common.util;
import com.alipay.sofa.ark.exception.ArkRuntimeException;
import java.io.File;
import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.ArrayList;
import java.util.List;
/**
* ClassLoader Util
*
* @author ruoshan
* @since 0.1.0
*/
public class ClassLoaderUtils {
private static final String JAVA_AGENT_MARK = "-javaagent:";
private static final String JAVA_AGENT_OPTION_MARK = "=";
private static final String SKYWALKING_AGENT_JAR = "skywalking-agent.jar";
private static final String[] SKYWALKING_MOUNT_DIR = { "plugins", "activations" };
/**
* push ContextClassLoader
*
* @param newClassLoader new classLoader
* @return old classloader
*/
public static ClassLoader pushContextClassLoader(ClassLoader newClassLoader) {
ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(newClassLoader);
return oldClassLoader;
}
/**
* set ContextClassLoader back
*
* @param oldClassLoader old classLoader
*/
public static void popContextClassLoader(ClassLoader oldClassLoader) {
Thread.currentThread().setContextClassLoader(oldClassLoader);
}
public static URL[] getAgentClassPath() {
List<String> inputArguments = AccessController
.doPrivileged(new PrivilegedAction<List<String>>() {
@Override
public List<String> run() {
return ManagementFactory.getRuntimeMXBean().getInputArguments();
}
});
List<URL> agentPaths = new ArrayList<>();
for (String argument : inputArguments) {
if (!argument.startsWith(JAVA_AGENT_MARK)) {
continue;
}
argument = argument.substring(JAVA_AGENT_MARK.length());
try {
String path = argument.split(JAVA_AGENT_OPTION_MARK)[0];
URL url = FileUtils.file(path).getCanonicalFile().toURI().toURL();
agentPaths.add(url);
processSkyWalking(path, agentPaths);
} catch (Throwable e) {
throw new ArkRuntimeException("Failed to create java agent classloader", e);
}
}
return agentPaths.toArray(new URL[] {});
}
/**
* process skywalking agent plugins/activations
* @param path
* @param agentPaths
* @throws MalformedURLException
*/
public static void processSkyWalking(final String path, final List<URL> agentPaths) throws MalformedURLException, IOException {
if (path.contains(SKYWALKING_AGENT_JAR)) {
for (String mountFolder : SKYWALKING_MOUNT_DIR) {
File folder = new File(FileUtils.file(path).getCanonicalFile().getParentFile(), mountFolder);
if (folder.exists() && folder.isDirectory()) {
String[] jarFileNames = folder.list((dir, name) -> name.endsWith(".jar"));
for (String fileName: jarFileNames) {
File jarFile = new File(folder, fileName);
agentPaths.add(jarFile.toURI().toURL());
}
}
}
}
}
@SuppressWarnings({ "restriction", "unchecked" })
public static URL[] getURLs(ClassLoader classLoader) {
// https://stackoverflow.com/questions/46519092/how-to-get-all-jars-loaded-by-a-java-application-in-java9
if (classLoader instanceof URLClassLoader) {
return ((URLClassLoader) classLoader).getURLs();
}
// support jdk9+
String classpath = System.getProperty("java.class.path");
String[] classpathEntries = classpath.split(System.getProperty("path.separator"));
gitextract_hhlu8y0b/
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── feature_request.md
│ │ └── question_or_bug_report.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ └── workflows/
│ ├── cloud_code_scan.yml
│ ├── inactive_issues_robot.yml
│ ├── linux_unit_test.yml
│ ├── release.yml
│ ├── snapshot.yml
│ └── windows_unit_test.yml
├── .gitignore
├── .travis.yml
├── CLAUDE.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Formatter.xml
├── HEADER
├── LICENSE
├── README.md
├── README_EN.md
├── SECURITY.md
├── change_version.sh
├── check_format.sh
├── codecov.yml
├── pom.xml
├── sofa-ark-bom/
│ ├── CLAUDE.md
│ └── pom.xml
├── sofa-ark-parent/
│ ├── assembly/
│ │ ├── CLAUDE.md
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── assembly/
│ │ ├── assembly.xml
│ │ └── mark
│ ├── core/
│ │ ├── api/
│ │ │ ├── CLAUDE.md
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ ├── main/
│ │ │ │ └── java/
│ │ │ │ └── com/
│ │ │ │ └── alipay/
│ │ │ │ └── sofa/
│ │ │ │ └── ark/
│ │ │ │ └── api/
│ │ │ │ ├── ArkClient.java
│ │ │ │ ├── ArkConfigs.java
│ │ │ │ ├── ClientResponse.java
│ │ │ │ └── ResponseCode.java
│ │ │ └── test/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── alipay/
│ │ │ │ └── sofa/
│ │ │ │ └── ark/
│ │ │ │ └── api/
│ │ │ │ └── ArkConfigsTest.java
│ │ │ └── resources/
│ │ │ └── test.props
│ │ ├── common/
│ │ │ ├── CLAUDE.md
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ ├── main/
│ │ │ │ ├── java/
│ │ │ │ │ └── com/
│ │ │ │ │ └── alipay/
│ │ │ │ │ └── sofa/
│ │ │ │ │ └── ark/
│ │ │ │ │ └── common/
│ │ │ │ │ ├── adapter/
│ │ │ │ │ │ └── ArkLogbackContextSelector.java
│ │ │ │ │ ├── guice/
│ │ │ │ │ │ └── AbstractArkGuiceModule.java
│ │ │ │ │ ├── log/
│ │ │ │ │ │ ├── ArkLogger.java
│ │ │ │ │ │ └── ArkLoggerFactory.java
│ │ │ │ │ ├── thread/
│ │ │ │ │ │ ├── CommonThreadPool.java
│ │ │ │ │ │ ├── NamedThreadFactory.java
│ │ │ │ │ │ └── ThreadPoolManager.java
│ │ │ │ │ └── util/
│ │ │ │ │ ├── AssertUtils.java
│ │ │ │ │ ├── BizIdentityUtils.java
│ │ │ │ │ ├── ClassLoaderUtils.java
│ │ │ │ │ ├── ClassUtils.java
│ │ │ │ │ ├── EnvironmentUtils.java
│ │ │ │ │ ├── FileUtils.java
│ │ │ │ │ ├── OrderComparator.java
│ │ │ │ │ ├── ParseUtils.java
│ │ │ │ │ ├── PortSelectUtils.java
│ │ │ │ │ ├── ReflectionUtils.java
│ │ │ │ │ ├── SimpleByteBuffer.java
│ │ │ │ │ ├── StringUtils.java
│ │ │ │ │ └── ThreadPoolUtils.java
│ │ │ │ └── resources/
│ │ │ │ └── com/
│ │ │ │ └── alipay/
│ │ │ │ └── sofa/
│ │ │ │ └── ark/
│ │ │ │ └── log/
│ │ │ │ ├── log4j/
│ │ │ │ │ └── log-conf.xml
│ │ │ │ ├── log4j2/
│ │ │ │ │ └── log-conf.xml
│ │ │ │ └── logback/
│ │ │ │ └── log-conf.xml
│ │ │ └── test/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── alipay/
│ │ │ │ └── sofa/
│ │ │ │ └── ark/
│ │ │ │ └── common/
│ │ │ │ ├── adapter/
│ │ │ │ │ └── ArkLogbackContextSelectorTest.java
│ │ │ │ ├── thread/
│ │ │ │ │ └── CommonThreadPoolTest.java
│ │ │ │ └── util/
│ │ │ │ ├── AssertUtilsTest.java
│ │ │ │ ├── BizIdentityUtilsTest.java
│ │ │ │ ├── ClassLoaderUtilTest.java
│ │ │ │ ├── ClassUtilsTest.java
│ │ │ │ ├── FileUtilsTest.java
│ │ │ │ ├── ParseUtilsTest.java
│ │ │ │ ├── PortSelectUtilsTest.java
│ │ │ │ ├── SimpleByteBufferTest.java
│ │ │ │ └── StringUtilsTest.java
│ │ │ └── resources/
│ │ │ ├── plugins/
│ │ │ │ └── sample-skywalking-agent-plugin.jar
│ │ │ ├── sample-biz.jar
│ │ │ └── sample-skywalking-agent.jar
│ │ ├── exception/
│ │ │ ├── CLAUDE.md
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── alipay/
│ │ │ └── sofa/
│ │ │ └── ark/
│ │ │ └── exception/
│ │ │ ├── ArkLoaderException.java
│ │ │ └── ArkRuntimeException.java
│ │ ├── pom.xml
│ │ └── spi/
│ │ ├── CLAUDE.md
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── alipay/
│ │ │ └── sofa/
│ │ │ └── ark/
│ │ │ └── spi/
│ │ │ ├── archive/
│ │ │ │ ├── AbstractArchive.java
│ │ │ │ ├── Archive.java
│ │ │ │ ├── BizArchive.java
│ │ │ │ ├── ContainerArchive.java
│ │ │ │ ├── ExecutableArchive.java
│ │ │ │ └── PluginArchive.java
│ │ │ ├── argument/
│ │ │ │ ├── CommandArgument.java
│ │ │ │ └── LaunchCommand.java
│ │ │ ├── command/
│ │ │ │ └── Command.java
│ │ │ ├── constant/
│ │ │ │ └── Constants.java
│ │ │ ├── event/
│ │ │ │ ├── AbstractArkEvent.java
│ │ │ │ ├── AfterFinishDeployEvent.java
│ │ │ │ ├── AfterFinishStartupEvent.java
│ │ │ │ ├── ArkEvent.java
│ │ │ │ ├── biz/
│ │ │ │ │ ├── AfterAllBizStartupEvent.java
│ │ │ │ │ ├── AfterBizStartupEvent.java
│ │ │ │ │ ├── AfterBizStartupFailedEvent.java
│ │ │ │ │ ├── AfterBizStopEvent.java
│ │ │ │ │ ├── AfterBizStopFailedEvent.java
│ │ │ │ │ ├── AfterBizSwitchEvent.java
│ │ │ │ │ ├── BeforeBizRecycleEvent.java
│ │ │ │ │ ├── BeforeBizStartupEvent.java
│ │ │ │ │ ├── BeforeBizStopEvent.java
│ │ │ │ │ └── BeforeBizSwitchEvent.java
│ │ │ │ └── plugin/
│ │ │ │ ├── AfterPluginStartupEvent.java
│ │ │ │ ├── AfterPluginStopEvent.java
│ │ │ │ ├── BeforePluginStartupEvent.java
│ │ │ │ └── BeforePluginStopEvent.java
│ │ │ ├── ext/
│ │ │ │ ├── ExtResponse.java
│ │ │ │ └── ExtServiceProvider.java
│ │ │ ├── model/
│ │ │ │ ├── Biz.java
│ │ │ │ ├── BizConfig.java
│ │ │ │ ├── BizInfo.java
│ │ │ │ ├── BizOperation.java
│ │ │ │ ├── BizState.java
│ │ │ │ ├── Plugin.java
│ │ │ │ ├── PluginConfig.java
│ │ │ │ ├── PluginContext.java
│ │ │ │ └── PluginOperation.java
│ │ │ ├── pipeline/
│ │ │ │ ├── Pipeline.java
│ │ │ │ ├── PipelineContext.java
│ │ │ │ └── PipelineStage.java
│ │ │ ├── registry/
│ │ │ │ ├── ServiceFilter.java
│ │ │ │ ├── ServiceMetadata.java
│ │ │ │ ├── ServiceProvider.java
│ │ │ │ ├── ServiceProviderType.java
│ │ │ │ └── ServiceReference.java
│ │ │ ├── replay/
│ │ │ │ ├── Replay.java
│ │ │ │ └── ReplayContext.java
│ │ │ ├── service/
│ │ │ │ ├── ArkInject.java
│ │ │ │ ├── ArkService.java
│ │ │ │ ├── PluginActivator.java
│ │ │ │ ├── PriorityOrdered.java
│ │ │ │ ├── biz/
│ │ │ │ │ ├── AddBizToStaticDeployHook.java
│ │ │ │ │ ├── BizDeployService.java
│ │ │ │ │ ├── BizDeployer.java
│ │ │ │ │ ├── BizFactoryService.java
│ │ │ │ │ └── BizManagerService.java
│ │ │ │ ├── classloader/
│ │ │ │ │ ├── ClassLoaderHook.java
│ │ │ │ │ └── ClassLoaderService.java
│ │ │ │ ├── event/
│ │ │ │ │ ├── EventAdminService.java
│ │ │ │ │ └── EventHandler.java
│ │ │ │ ├── extension/
│ │ │ │ │ ├── ArkServiceLoader.java
│ │ │ │ │ ├── Extensible.java
│ │ │ │ │ ├── Extension.java
│ │ │ │ │ ├── ExtensionClass.java
│ │ │ │ │ └── ExtensionLoaderService.java
│ │ │ │ ├── injection/
│ │ │ │ │ └── InjectionService.java
│ │ │ │ ├── plugin/
│ │ │ │ │ ├── PluginDeployService.java
│ │ │ │ │ ├── PluginFactoryService.java
│ │ │ │ │ └── PluginManagerService.java
│ │ │ │ ├── registry/
│ │ │ │ │ └── RegistryService.java
│ │ │ │ └── session/
│ │ │ │ ├── CommandProvider.java
│ │ │ │ └── TelnetServerService.java
│ │ │ └── web/
│ │ │ ├── AbstractEmbeddedServerService.java
│ │ │ └── EmbeddedServerService.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── alipay/
│ │ │ └── sofa/
│ │ │ └── ark/
│ │ │ └── spi/
│ │ │ ├── argument/
│ │ │ │ └── LaunchCommandTest.java
│ │ │ ├── constant/
│ │ │ │ └── ConstantsTest.java
│ │ │ ├── ext/
│ │ │ │ └── ExtResponseTest.java
│ │ │ ├── model/
│ │ │ │ └── BizOperationTest.java
│ │ │ ├── replay/
│ │ │ │ └── ReplayContextTest.java
│ │ │ └── service/
│ │ │ └── extension/
│ │ │ └── ExtensionClassTest.java
│ │ └── resources/
│ │ └── test 2.jar
│ ├── core-impl/
│ │ ├── archive/
│ │ │ ├── CLAUDE.md
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ ├── main/
│ │ │ │ └── java/
│ │ │ │ └── com/
│ │ │ │ └── alipay/
│ │ │ │ └── sofa/
│ │ │ │ └── ark/
│ │ │ │ ├── bootstrap/
│ │ │ │ │ ├── AbstractLauncher.java
│ │ │ │ │ ├── AgentClassLoader.java
│ │ │ │ │ ├── ArkLauncher.java
│ │ │ │ │ ├── BaseExecutableArchiveLauncher.java
│ │ │ │ │ ├── ClasspathLauncher.java
│ │ │ │ │ ├── ContainerClassLoader.java
│ │ │ │ │ ├── MainMethodRunner.java
│ │ │ │ │ └── UseFastConnectionExceptionsEnumeration.java
│ │ │ │ └── loader/
│ │ │ │ ├── DirectoryBizArchive.java
│ │ │ │ ├── DirectoryContainerArchive.java
│ │ │ │ ├── EmbedClassPathArchive.java
│ │ │ │ ├── ExecutableArkBizJar.java
│ │ │ │ ├── ExplodedBizArchive.java
│ │ │ │ ├── JarBizArchive.java
│ │ │ │ ├── JarContainerArchive.java
│ │ │ │ ├── JarPluginArchive.java
│ │ │ │ ├── archive/
│ │ │ │ │ ├── ExplodedArchive.java
│ │ │ │ │ └── JarFileArchive.java
│ │ │ │ ├── data/
│ │ │ │ │ ├── RandomAccessData.java
│ │ │ │ │ └── RandomAccessDataFile.java
│ │ │ │ ├── jar/
│ │ │ │ │ ├── AsciiBytes.java
│ │ │ │ │ ├── Bytes.java
│ │ │ │ │ ├── CentralDirectoryEndRecord.java
│ │ │ │ │ ├── CentralDirectoryFileHeader.java
│ │ │ │ │ ├── CentralDirectoryParser.java
│ │ │ │ │ ├── CentralDirectoryVisitor.java
│ │ │ │ │ ├── FileHeader.java
│ │ │ │ │ ├── Handler.java
│ │ │ │ │ ├── JarEntry.java
│ │ │ │ │ ├── JarEntryFilter.java
│ │ │ │ │ ├── JarFile.java
│ │ │ │ │ ├── JarFileEntries.java
│ │ │ │ │ ├── JarURLConnection.java
│ │ │ │ │ ├── JarUtils.java
│ │ │ │ │ └── ZipInflaterInputStream.java
│ │ │ │ └── util/
│ │ │ │ └── ModifyPathUtils.java
│ │ │ └── test/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── alipay/
│ │ │ │ └── sofa/
│ │ │ │ └── ark/
│ │ │ │ ├── bootstrap/
│ │ │ │ │ ├── ArkLauncherTest.java
│ │ │ │ │ ├── ClasspathLauncherTest.java
│ │ │ │ │ └── MainMethodRunnerTest.java
│ │ │ │ └── loader/
│ │ │ │ ├── DirectoryBizArchiveTest.java
│ │ │ │ ├── DirectoryContainerArchiveTest.java
│ │ │ │ ├── EmbedClassPathArchiveTest.java
│ │ │ │ ├── ExecutableArkBizJarTest.java
│ │ │ │ ├── ExplodedBizArchiveTest.java
│ │ │ │ ├── archive/
│ │ │ │ │ ├── ExplodedArchiveTest.java
│ │ │ │ │ └── JarFileArchiveTest.java
│ │ │ │ ├── jar/
│ │ │ │ │ ├── HandlerTest.java
│ │ │ │ │ ├── JarEntryTest.java
│ │ │ │ │ ├── JarFileTest.java
│ │ │ │ │ ├── JarURLConnectionTest.java
│ │ │ │ │ ├── JarUtilsParseArtifactIdFromUnpackedDirTest.java
│ │ │ │ │ ├── JarUtilsTest.java
│ │ │ │ │ ├── JarUtilsTestHelper.java
│ │ │ │ │ └── ZipInflaterInputStreamTest.java
│ │ │ │ └── test/
│ │ │ │ ├── base/
│ │ │ │ │ └── BaseTest.java
│ │ │ │ ├── data/
│ │ │ │ │ └── RandomAccessDataFileTest.java
│ │ │ │ ├── jar/
│ │ │ │ │ ├── AsciiBytesTest.java
│ │ │ │ │ ├── BytesTest.java
│ │ │ │ │ ├── CentralDirectoryEndRecordTest.java
│ │ │ │ │ ├── CentralDirectoryFileHeaderTest.java
│ │ │ │ │ ├── CentralDirectoryParserTest.java
│ │ │ │ │ ├── JarFileTest.java
│ │ │ │ │ └── JarUtilsTest.java
│ │ │ │ └── util/
│ │ │ │ └── ModifyPathUtilsTest.java
│ │ │ └── resources/
│ │ │ ├── conf/
│ │ │ │ └── ark/
│ │ │ │ ├── bootstrap.properties
│ │ │ │ └── log/
│ │ │ │ └── logback-conf.xml
│ │ │ ├── empty-file
│ │ │ ├── example-jarinjarinjar.jar
│ │ │ ├── exploded-archive-test/
│ │ │ │ ├── META-INF/
│ │ │ │ │ └── MANIFEST.MF
│ │ │ │ ├── example-jarinjarinjar.jar
│ │ │ │ └── sample-biz.jar
│ │ │ ├── junit-4.12.jar
│ │ │ ├── pom-properties/
│ │ │ │ └── pom.properties
│ │ │ ├── pom.xml
│ │ │ ├── sample-biz-surefire.jar
│ │ │ ├── sample-biz-withjar.jar
│ │ │ ├── sample-biz.jar
│ │ │ ├── sample-springboot-fat-biz.jar
│ │ │ ├── static-combine-demo.jar
│ │ │ └── xxxxx.jar-unpack/
│ │ │ └── pom.properties
│ │ ├── container/
│ │ │ ├── CLAUDE.md
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ ├── main/
│ │ │ │ ├── java/
│ │ │ │ │ └── com/
│ │ │ │ │ └── alipay/
│ │ │ │ │ └── sofa/
│ │ │ │ │ └── ark/
│ │ │ │ │ └── container/
│ │ │ │ │ ├── ArkContainer.java
│ │ │ │ │ ├── guice/
│ │ │ │ │ │ └── ContainerModule.java
│ │ │ │ │ ├── model/
│ │ │ │ │ │ ├── BizModel.java
│ │ │ │ │ │ ├── PluginContextImpl.java
│ │ │ │ │ │ └── PluginModel.java
│ │ │ │ │ ├── pipeline/
│ │ │ │ │ │ ├── DeployBizStage.java
│ │ │ │ │ │ ├── DeployPluginStage.java
│ │ │ │ │ │ ├── ExtensionLoaderStage.java
│ │ │ │ │ │ ├── FinishStartupStage.java
│ │ │ │ │ │ ├── HandleArchiveStage.java
│ │ │ │ │ │ ├── RegisterServiceStage.java
│ │ │ │ │ │ └── StandardPipeline.java
│ │ │ │ │ ├── registry/
│ │ │ │ │ │ ├── AbstractServiceProvider.java
│ │ │ │ │ │ ├── ContainerServiceProvider.java
│ │ │ │ │ │ ├── DefaultServiceFilter.java
│ │ │ │ │ │ ├── PluginServiceProvider.java
│ │ │ │ │ │ ├── ServiceMetadataImpl.java
│ │ │ │ │ │ └── ServiceReferenceImpl.java
│ │ │ │ │ ├── service/
│ │ │ │ │ │ ├── ArkServiceContainer.java
│ │ │ │ │ │ ├── ArkServiceContainerHolder.java
│ │ │ │ │ │ ├── biz/
│ │ │ │ │ │ │ ├── BizCommandProvider.java
│ │ │ │ │ │ │ ├── BizDeployServiceImpl.java
│ │ │ │ │ │ │ ├── BizFactoryServiceImpl.java
│ │ │ │ │ │ │ ├── BizManagerServiceImpl.java
│ │ │ │ │ │ │ └── DefaultBizDeployer.java
│ │ │ │ │ │ ├── classloader/
│ │ │ │ │ │ │ ├── AbstractClasspathClassLoader.java
│ │ │ │ │ │ │ ├── BizClassLoader.java
│ │ │ │ │ │ │ ├── ClassLoaderServiceImpl.java
│ │ │ │ │ │ │ ├── CompoundEnumeration.java
│ │ │ │ │ │ │ ├── JDKDelegateClassLoader.java
│ │ │ │ │ │ │ └── PluginClassLoader.java
│ │ │ │ │ │ ├── event/
│ │ │ │ │ │ │ └── EventAdminServiceImpl.java
│ │ │ │ │ │ ├── extension/
│ │ │ │ │ │ │ └── ExtensionLoaderServiceImpl.java
│ │ │ │ │ │ ├── injection/
│ │ │ │ │ │ │ └── InjectionServiceImpl.java
│ │ │ │ │ │ ├── plugin/
│ │ │ │ │ │ │ ├── PluginCommandProvider.java
│ │ │ │ │ │ │ ├── PluginDeployServiceImpl.java
│ │ │ │ │ │ │ ├── PluginFactoryServiceImpl.java
│ │ │ │ │ │ │ └── PluginManagerServiceImpl.java
│ │ │ │ │ │ ├── registry/
│ │ │ │ │ │ │ └── RegistryServiceImpl.java
│ │ │ │ │ │ └── retrieval/
│ │ │ │ │ │ ├── ClassInfoMethod.java
│ │ │ │ │ │ ├── ClassInfoVO.java
│ │ │ │ │ │ ├── InfoQueryCommandProvider.java
│ │ │ │ │ │ └── ViewRender.java
│ │ │ │ │ ├── session/
│ │ │ │ │ │ ├── NettyTelnetServer.java
│ │ │ │ │ │ ├── StandardTelnetServerImpl.java
│ │ │ │ │ │ └── handler/
│ │ │ │ │ │ ├── AbstractTerminalTypeMapping.java
│ │ │ │ │ │ └── ArkCommandHandler.java
│ │ │ │ │ └── test/
│ │ │ │ │ ├── NoneDelegateTestClassLoader.java
│ │ │ │ │ ├── TestClassLoader.java
│ │ │ │ │ └── TestHelper.java
│ │ │ │ └── resources/
│ │ │ │ └── META-INF/
│ │ │ │ └── services/
│ │ │ │ └── com.alipay.sofa.ark.common.guice.AbstractArkGuiceModule
│ │ │ └── test/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── alipay/
│ │ │ │ └── sofa/
│ │ │ │ └── ark/
│ │ │ │ └── container/
│ │ │ │ ├── ArkContainerTest.java
│ │ │ │ ├── BaseTest.java
│ │ │ │ ├── ClassLoaderTest.java
│ │ │ │ ├── model/
│ │ │ │ │ └── BizModelTest.java
│ │ │ │ ├── pipeline/
│ │ │ │ │ └── HandleArchiveStageTest.java
│ │ │ │ ├── service/
│ │ │ │ │ ├── ArkServiceContainerTest.java
│ │ │ │ │ ├── api/
│ │ │ │ │ │ └── ArkClientTest.java
│ │ │ │ │ ├── biz/
│ │ │ │ │ │ ├── BizCommandProviderTest.java
│ │ │ │ │ │ ├── BizFactoryServiceTest.java
│ │ │ │ │ │ ├── BizManagerServiceTest.java
│ │ │ │ │ │ └── hook/
│ │ │ │ │ │ └── TestAddBizToStaticDeployHook.java
│ │ │ │ │ ├── classloader/
│ │ │ │ │ │ ├── BizClassLoaderTest.java
│ │ │ │ │ │ ├── ClassLoaderConcurrencyTest.java
│ │ │ │ │ │ ├── ClassLoaderHookTest.java
│ │ │ │ │ │ ├── ClassLoaderServiceTest.java
│ │ │ │ │ │ ├── CompoundEnumerationTest.java
│ │ │ │ │ │ ├── PluginClassLoaderTest.java
│ │ │ │ │ │ └── hook/
│ │ │ │ │ │ ├── AbstractClassLoaderHook.java
│ │ │ │ │ │ ├── TestBizClassLoaderHook.java
│ │ │ │ │ │ ├── TestDefaultBizClassLoaderHook.java
│ │ │ │ │ │ └── TestPluginClassLoaderHook.java
│ │ │ │ │ ├── event/
│ │ │ │ │ │ ├── EventAdminServiceTest.java
│ │ │ │ │ │ ├── EventTest.java
│ │ │ │ │ │ ├── GlobalEventHandlerTest.java
│ │ │ │ │ │ └── MultiEventTest.java
│ │ │ │ │ ├── extension/
│ │ │ │ │ │ ├── ExtensionClassTest.java
│ │ │ │ │ │ ├── ExtensionServiceTest.java
│ │ │ │ │ │ └── spi/
│ │ │ │ │ │ ├── ServiceA.java
│ │ │ │ │ │ ├── ServiceB.java
│ │ │ │ │ │ ├── ServiceC.java
│ │ │ │ │ │ ├── ServiceD.java
│ │ │ │ │ │ ├── SingletonService.java
│ │ │ │ │ │ └── impl/
│ │ │ │ │ │ ├── ServiceBImpl1.java
│ │ │ │ │ │ ├── ServiceBImpl2.java
│ │ │ │ │ │ ├── ServiceBImpl3.java
│ │ │ │ │ │ ├── ServiceBImpl4.java
│ │ │ │ │ │ ├── ServiceDImpl.java
│ │ │ │ │ │ └── SingletonServiceImpl.java
│ │ │ │ │ ├── injection/
│ │ │ │ │ │ └── InjectionServiceTest.java
│ │ │ │ │ ├── pipeline/
│ │ │ │ │ │ └── HandleArchiveTest.java
│ │ │ │ │ ├── plugin/
│ │ │ │ │ │ ├── PluginCommandProviderTest.java
│ │ │ │ │ │ ├── PluginFactoryServiceTest.java
│ │ │ │ │ │ └── PluginManagerServiceTest.java
│ │ │ │ │ ├── registry/
│ │ │ │ │ │ └── ServiceRegistrationTest.java
│ │ │ │ │ ├── retrieval/
│ │ │ │ │ │ ├── ClassInfoMethodTest.java
│ │ │ │ │ │ ├── InfoQueryCommandProviderTest.java
│ │ │ │ │ │ └── ViewRenderTest.java
│ │ │ │ │ └── session/
│ │ │ │ │ └── CommandHandlerTest.java
│ │ │ │ ├── session/
│ │ │ │ │ └── NettyTelnetServerTest.java
│ │ │ │ ├── test/
│ │ │ │ │ └── TestHelperTest.java
│ │ │ │ └── testdata/
│ │ │ │ ├── ITest.java
│ │ │ │ ├── activator/
│ │ │ │ │ ├── PluginActivatorA.java
│ │ │ │ │ ├── PluginActivatorADup.java
│ │ │ │ │ ├── PluginActivatorB.java
│ │ │ │ │ └── PluginActivatorC.java
│ │ │ │ ├── classloader/
│ │ │ │ │ └── ClassLoaderTestClass.java
│ │ │ │ └── impl/
│ │ │ │ ├── TestObjectA.java
│ │ │ │ ├── TestObjectB.java
│ │ │ │ └── TestObjectC.java
│ │ │ └── resources/
│ │ │ ├── META-INF/
│ │ │ │ └── services/
│ │ │ │ └── sofa-ark/
│ │ │ │ ├── com.alipay.sofa.ark.container.service.extension.spi.ServiceB
│ │ │ │ ├── com.alipay.sofa.ark.spi.service.biz.AddBizToStaticDeployHook
│ │ │ │ ├── com.alipay.sofa.ark.spi.service.classloader.ClassLoaderHook
│ │ │ │ ├── sample-ark-2.0.1-ark-biz.jar
│ │ │ │ ├── serviceA
│ │ │ │ └── serviceD
│ │ │ ├── aopalliance-1.0.jar
│ │ │ ├── com.springsource.org.aopalliance-1.0.0.jar
│ │ │ ├── export/
│ │ │ │ ├── folderA/
│ │ │ │ │ ├── test1.xml
│ │ │ │ │ └── test2.xml
│ │ │ │ └── folderB/
│ │ │ │ ├── test3.xml
│ │ │ │ └── test4.xml
│ │ │ ├── multi_export.xml
│ │ │ ├── pluginA_export_resource1.xml
│ │ │ ├── pluginA_export_resource2.xml
│ │ │ ├── pluginA_not_export_resource.xml
│ │ │ ├── profile-test.jar
│ │ │ ├── sample-ark-1.0.0-ark-biz.jar
│ │ │ ├── sample-ark-2.0.0-ark-biz.jar
│ │ │ ├── sample-ark-3.0.0-ark-biz.jar
│ │ │ ├── sample-ark-4.0.0-ark-biz.jar
│ │ │ ├── sample-ark-5.0.0-ark-biz.jar
│ │ │ ├── sample-ark-plugin-common-0.5.1.jar
│ │ │ ├── sample-biz.jar
│ │ │ ├── sample-plugin.jar
│ │ │ ├── sofa-ark-sample-springboot-ark-0.3.0.jar
│ │ │ ├── static-combine-springboot-executable.jar
│ │ │ └── test.jar
│ │ └── pom.xml
│ ├── pom.xml
│ └── support/
│ ├── ark-gradle-plugin/
│ │ ├── README.md
│ │ ├── build.gradle
│ │ ├── settings.gradle
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── com/
│ │ └── alipay/
│ │ └── sofa/
│ │ └── ark/
│ │ └── plugin/
│ │ ├── ArkArchiveSupport.java
│ │ ├── ArkBizCopyAction.java
│ │ ├── ArkJar.java
│ │ ├── ArkPluginAction.java
│ │ ├── BootArchive.java
│ │ ├── DefaultTimeZoneOffset.java
│ │ ├── JarTypeFileSpec.java
│ │ ├── LoaderZipEntries.java
│ │ ├── MainClassFinder.java
│ │ ├── Nullable.java
│ │ ├── ResolveMainClassName.java
│ │ ├── SofaArkGradlePlugin.java
│ │ ├── SofaArkGradlePluginExtension.java
│ │ ├── StringUtils.java
│ │ └── ZipCompression.java
│ ├── ark-maven-plugin/
│ │ ├── CLAUDE.md
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── alipay/
│ │ │ └── sofa/
│ │ │ └── ark/
│ │ │ └── boot/
│ │ │ └── mojo/
│ │ │ ├── ArtifactsLibraries.java
│ │ │ ├── MavenUtils.java
│ │ │ ├── ModuleSlimConfig.java
│ │ │ ├── ModuleSlimExecutor.java
│ │ │ ├── RepackageMojo.java
│ │ │ ├── model/
│ │ │ │ └── ArkConfigHolder.java
│ │ │ └── utils/
│ │ │ └── ParseUtils.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── alipay/
│ │ │ └── sofa/
│ │ │ └── ark/
│ │ │ └── boot/
│ │ │ └── mojo/
│ │ │ ├── ArtifactsLibrariesTest.java
│ │ │ ├── CommonUtils.java
│ │ │ ├── MavenUtilsTest.java
│ │ │ ├── ModuleSlimExecutorTest.java
│ │ │ ├── ReflectionUtils.java
│ │ │ ├── RepackageMojoTest.java
│ │ │ └── utils/
│ │ │ └── ParseUtilsTest.java
│ │ └── resources/
│ │ ├── baseDir/
│ │ │ └── conf/
│ │ │ └── ark/
│ │ │ ├── bootstrap.properties
│ │ │ └── bootstrap.yml
│ │ ├── dependency-tree-mock.txt
│ │ ├── excludes.txt
│ │ └── test-jar.jar
│ ├── ark-plugin-gradle-plugin/
│ │ ├── README.md
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── alipay/
│ │ │ └── sofa/
│ │ │ └── ark/
│ │ │ └── boot/
│ │ │ └── mojo/
│ │ │ ├── ArkPlugin.java
│ │ │ ├── ArkPluginCopyAction.java
│ │ │ ├── ArkPluginExtension.java
│ │ │ ├── ArkPluginJarTask.java
│ │ │ └── BaseConfig.java
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── alipay/
│ │ └── sofa/
│ │ └── ark/
│ │ └── boot/
│ │ └── mojo/
│ │ └── ArkPluginExtensionTest.java
│ ├── ark-plugin-maven-plugin/
│ │ ├── CLAUDE.md
│ │ ├── META-INF/
│ │ │ └── MANIFEST.MF
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── alipay/
│ │ │ │ └── sofa/
│ │ │ │ └── ark/
│ │ │ │ └── plugin/
│ │ │ │ └── mojo/
│ │ │ │ ├── AbstractPropertiesConfig.java
│ │ │ │ ├── ArkPluginMojo.java
│ │ │ │ ├── ExportConfig.java
│ │ │ │ ├── ImportConfig.java
│ │ │ │ ├── LinkedAttributes.java
│ │ │ │ ├── LinkedManifest.java
│ │ │ │ └── LinkedProperties.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── maven/
│ │ │ └── plugin.xml
│ │ └── test/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── alipay/
│ │ │ └── sofa/
│ │ │ └── ark/
│ │ │ └── plugin/
│ │ │ └── mojo/
│ │ │ ├── ArkPluginMojoTest.java
│ │ │ ├── LinkedAttributesTest.java
│ │ │ ├── LinkedPropertiesTest.java
│ │ │ └── test/
│ │ │ └── ArkPluginMojoTest.java
│ │ └── resources/
│ │ ├── a-test-demo.jar
│ │ └── test-demo.jar
│ ├── ark-springboot-integration/
│ │ ├── ark-common-springboot/
│ │ │ ├── CLAUDE.md
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── alipay/
│ │ │ └── sofa/
│ │ │ └── ark/
│ │ │ └── springboot/
│ │ │ └── condition/
│ │ │ ├── ConditionalOnArkEnabled.java
│ │ │ ├── ConditionalOnSpringBootVersion.java
│ │ │ ├── OnArkEnabled.java
│ │ │ └── OnSpringBootVersion.java
│ │ ├── ark-compatible-springboot1/
│ │ │ ├── CLAUDE.md
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ ├── main/
│ │ │ │ ├── java/
│ │ │ │ │ └── com/
│ │ │ │ │ └── alipay/
│ │ │ │ │ └── sofa/
│ │ │ │ │ └── ark/
│ │ │ │ │ └── springboot1/
│ │ │ │ │ ├── CompatibleSpringBoot1AutoConfiguration.java
│ │ │ │ │ ├── endpoint/
│ │ │ │ │ │ ├── IntrospectBizEndpoint.java
│ │ │ │ │ │ └── IntrospectBizEndpointMvcAdapter.java
│ │ │ │ │ └── web/
│ │ │ │ │ ├── ArkAutoConfiguration.java
│ │ │ │ │ ├── ArkTomcatEmbeddedServletContainer.java
│ │ │ │ │ ├── ArkTomcatEmbeddedServletContainerFactory.java
│ │ │ │ │ └── SwitchClassLoaderFilter.java
│ │ │ │ └── resources/
│ │ │ │ └── META-INF/
│ │ │ │ └── spring.factories
│ │ │ └── test/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── alipay/
│ │ │ │ └── sofa/
│ │ │ │ └── ark/
│ │ │ │ ├── springboot1/
│ │ │ │ │ └── web/
│ │ │ │ │ ├── ArkTomcatEmbeddedServletContainerTest.java
│ │ │ │ │ └── ArkTomcatServletWebServerFactoryTest.java
│ │ │ │ └── test/
│ │ │ │ └── springboot1/
│ │ │ │ ├── IntrospectBizEndpointOnArkDisabledTest.java
│ │ │ │ └── IntrospectBizEndpointOnArkEnabledTest.java
│ │ │ └── resources/
│ │ │ └── logback.xml
│ │ ├── ark-compatible-springboot2/
│ │ │ ├── CLAUDE.md
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ ├── main/
│ │ │ │ ├── java/
│ │ │ │ │ └── com/
│ │ │ │ │ └── alipay/
│ │ │ │ │ └── sofa/
│ │ │ │ │ └── ark/
│ │ │ │ │ └── springboot2/
│ │ │ │ │ ├── CompatibleSpringBoot2AutoConfiguration.java
│ │ │ │ │ ├── endpoint/
│ │ │ │ │ │ └── IntrospectBizEndpoint.java
│ │ │ │ │ └── web/
│ │ │ │ │ └── SwitchClassLoaderFilter.java
│ │ │ │ └── resources/
│ │ │ │ └── META-INF/
│ │ │ │ └── spring.factories
│ │ │ └── test/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── alipay/
│ │ │ │ └── sofa/
│ │ │ │ └── ark/
│ │ │ │ └── test/
│ │ │ │ └── springboot2/
│ │ │ │ ├── SpringBoot2IntrospectBizEndpointOnArkDisabledTest.java
│ │ │ │ └── SpringBoot2IntrospectBizEndpointOnArkEnabledTest.java
│ │ │ └── resources/
│ │ │ └── logback.xml
│ │ └── ark-springboot-starter/
│ │ ├── CLAUDE.md
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── alipay/
│ │ │ │ └── sofa/
│ │ │ │ └── ark/
│ │ │ │ └── springboot/
│ │ │ │ ├── ArkAutoProcessorConfiguration.java
│ │ │ │ ├── ArkReactiveAutoConfiguration.java
│ │ │ │ ├── ArkServletAutoConfiguration.java
│ │ │ │ ├── ArkServletLegacyAutoConfiguration.java
│ │ │ │ ├── listener/
│ │ │ │ │ ├── ArkApplicationStartListener.java
│ │ │ │ │ ├── ArkDeployStaticBizListener.java
│ │ │ │ │ └── PropertiesResetListener.java
│ │ │ │ ├── loader/
│ │ │ │ │ ├── CachedLaunchedURLClassLoader.java
│ │ │ │ │ └── JarLauncher.java
│ │ │ │ ├── processor/
│ │ │ │ │ ├── ArkEventHandlerProcessor.java
│ │ │ │ │ └── ArkServiceInjectProcessor.java
│ │ │ │ ├── runner/
│ │ │ │ │ ├── ArkBootEmbedRunner.java
│ │ │ │ │ └── ArkBootRunner.java
│ │ │ │ └── web/
│ │ │ │ ├── ArkCompositeReactorHttpHandlerAdapter.java
│ │ │ │ ├── ArkNettyReactiveWebServerFactory.java
│ │ │ │ ├── ArkNettyWebServer.java
│ │ │ │ ├── ArkTomcatServletWebServerFactory.java
│ │ │ │ └── ArkTomcatWebServer.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ ├── spring/
│ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ │ └── spring.factories
│ │ └── test/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── alipay/
│ │ │ └── sofa/
│ │ │ └── ark/
│ │ │ ├── springboot/
│ │ │ │ ├── listener/
│ │ │ │ │ └── ArkDeployStaticBizListenerTest.java
│ │ │ │ ├── loader/
│ │ │ │ │ └── CachedLaunchedURLClassLoaderTest.java
│ │ │ │ └── web/
│ │ │ │ ├── ArkTomcatServletWebServerFactoryTest.java
│ │ │ │ └── ArkTomcatWebServerTest.java
│ │ │ └── test/
│ │ │ ├── ArkBootRunnerTest.java
│ │ │ ├── ArkBootTestNGTest.java
│ │ │ ├── MultiArkBootRunnerTest.java
│ │ │ ├── SpringbootRunnerTest.java
│ │ │ └── springboot/
│ │ │ ├── BaseSpringApplication.java
│ │ │ ├── RegisterMockEmbedTomcatService.java
│ │ │ ├── TestValueHolder.java
│ │ │ ├── facade/
│ │ │ │ └── SampleService.java
│ │ │ └── impl/
│ │ │ ├── SampleServiceImpl.java
│ │ │ └── TestBizEventHandler.java
│ │ └── resources/
│ │ ├── META-INF/
│ │ │ └── sofa-ark-test/
│ │ │ └── sofa-ark-test.xml
│ │ ├── config/
│ │ │ └── application.properties
│ │ ├── logback.xml
│ │ └── sample-biz-0.3.0.jar
│ ├── ark-support-starter/
│ │ ├── CLAUDE.md
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── alipay/
│ │ │ │ └── sofa/
│ │ │ │ └── ark/
│ │ │ │ └── support/
│ │ │ │ ├── common/
│ │ │ │ │ ├── AddBizInResourcesHook.java
│ │ │ │ │ ├── DelegateArkContainer.java
│ │ │ │ │ ├── DelegateToMasterBizClassLoaderHook.java
│ │ │ │ │ └── MasterBizEnvironmentHolder.java
│ │ │ │ ├── listener/
│ │ │ │ │ ├── ArkTestNGAlterSuiteListener.java
│ │ │ │ │ ├── ArkTestNGExecutionListener.java
│ │ │ │ │ ├── ArkTestNGInvokedMethodListener.java
│ │ │ │ │ ├── TestNGOnArk.java
│ │ │ │ │ └── TestNGOnArkEmbeded.java
│ │ │ │ ├── runner/
│ │ │ │ │ ├── ArkJUnit4EmbedRunner.java
│ │ │ │ │ ├── ArkJUnit4Runner.java
│ │ │ │ │ └── JUnitExecutionListener.java
│ │ │ │ ├── startup/
│ │ │ │ │ ├── EmbedSofaArkBootstrap.java
│ │ │ │ │ ├── EntryMethod.java
│ │ │ │ │ └── SofaArkBootstrap.java
│ │ │ │ └── thread/
│ │ │ │ ├── IsolatedThreadGroup.java
│ │ │ │ └── LaunchRunner.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── services/
│ │ │ ├── org.testng.ITestNGListener
│ │ │ └── sofa-ark/
│ │ │ └── com.alipay.sofa.ark.spi.service.biz.AddBizToStaticDeployHook
│ │ └── test/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── alipay/
│ │ │ └── sofa/
│ │ │ └── ark/
│ │ │ └── support/
│ │ │ ├── AddBizInResourcesHookTest.java
│ │ │ ├── DefaultClassLoaderHookTest.java
│ │ │ ├── MultiSuiteTest.java
│ │ │ ├── TestNGCommonTest.java
│ │ │ ├── TestNGOnArkTest.java
│ │ │ ├── runner/
│ │ │ │ ├── ArkJUnit4RunnerTest.java
│ │ │ │ └── CommonJUnit4Test.java
│ │ │ ├── startup/
│ │ │ │ └── EmbedSofaArkBootstrapTest.java
│ │ │ └── thread/
│ │ │ ├── IsolatedThreadGroupTest.java
│ │ │ └── LaunchRunnerTest.java
│ │ └── resources/
│ │ ├── SOFA-ARK/
│ │ │ └── biz/
│ │ │ └── biz1-bootstrap-0.0.1-SNAPSHOT-ark-biz.jar
│ │ ├── aopalliance-1.0.jar
│ │ ├── com.springsource.org.aopalliance-1.0.0.jar
│ │ ├── sample-ark-1.0.0-ark-biz.jar
│ │ ├── sample-ark-plugin-common-0.5.1.jar
│ │ └── sofa-ark-sample-springboot-ark-0.3.0.jar
│ ├── ark-tools/
│ │ ├── CLAUDE.md
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── alipay/
│ │ │ └── sofa/
│ │ │ └── ark/
│ │ │ └── tools/
│ │ │ ├── ArtifactItem.java
│ │ │ ├── JarWriter.java
│ │ │ ├── Layout.java
│ │ │ ├── Layouts.java
│ │ │ ├── Libraries.java
│ │ │ ├── Library.java
│ │ │ ├── LibraryCallback.java
│ │ │ ├── LibraryScope.java
│ │ │ ├── LoaderClassesWriter.java
│ │ │ ├── MainClassFinder.java
│ │ │ ├── Repackager.java
│ │ │ ├── RepackagingLayout.java
│ │ │ └── git/
│ │ │ ├── GitInfo.java
│ │ │ └── JGitParser.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── alipay/
│ │ │ └── sofa/
│ │ │ └── ark/
│ │ │ └── tools/
│ │ │ ├── ArtifactItemTest.java
│ │ │ ├── JarWriterTest.java
│ │ │ ├── LayoutsTest.java
│ │ │ ├── MainClassFinderTest.java
│ │ │ ├── RepackagerTest.java
│ │ │ └── git/
│ │ │ └── JGitParserTest.java
│ │ └── resources/
│ │ ├── conf/
│ │ │ └── test-jar.jar
│ │ ├── test-jar.jar
│ │ └── test-pom.xml
│ └── pom.xml
└── sofa-ark-plugin/
├── config-ark-plugin/
│ ├── CLAUDE.md
│ ├── DEMO_SHOW.md
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── alipay/
│ │ └── sofa/
│ │ └── ark/
│ │ └── config/
│ │ ├── ConfigBaseActivator.java
│ │ ├── ConfigProcessor.java
│ │ ├── ConfigTypeEnum.java
│ │ ├── LazyActivatorWrapper.java
│ │ ├── OperationProcessor.java
│ │ ├── RegistryConfig.java
│ │ ├── apollo/
│ │ │ └── ApolloConfigActivator.java
│ │ ├── util/
│ │ │ ├── NetUtils.java
│ │ │ └── OperationTransformer.java
│ │ └── zk/
│ │ ├── ZookeeperConfigActivator.java
│ │ └── ZookeeperConfigurator.java
│ └── test/
│ └── java/
│ └── com/
│ └── alipay/
│ └── sofa/
│ └── ark/
│ └── config/
│ ├── ApolloConfigActivatorTest.java
│ ├── ConfigBaseActivatorTest.java
│ ├── MockApolloConfig.java
│ ├── OperationTransformerTest.java
│ └── ZookeeperConfiguratorTest.java
├── netty-ark-plugin/
│ ├── CLAUDE.md
│ ├── pom.xml
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── alipay/
│ └── sofa/
│ └── ark/
│ ├── NettyPluginActivator.java
│ └── netty/
│ ├── ArkNettyIdentification.java
│ └── EmbeddedServerServiceImpl.java
├── pom.xml
└── web-ark-plugin/
├── CLAUDE.md
├── pom.xml
└── src/
├── main/
│ ├── java/
│ │ └── com/
│ │ └── alipay/
│ │ └── sofa/
│ │ └── ark/
│ │ └── web/
│ │ └── embed/
│ │ ├── WebPluginActivator.java
│ │ └── tomcat/
│ │ ├── ArkTomcatEmbeddedWebappClassLoader.java
│ │ ├── EmbeddedServerServiceImpl.java
│ │ └── SwitchClassLoaderAutoConfiguration.java
│ └── resources/
│ └── META-INF/
│ ├── spring/
│ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ └── spring.factories
└── test/
└── java/
└── com/
└── alipay/
└── sofa/
└── ark/
└── web/
└── embed/
├── WebPluginActivatorTest.java
└── tomcat/
├── ArkTomcatEmbeddedWebappClassLoaderTest.java
└── EmbeddedServerServiceImplTest.java
Showing preview only (331K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3659 symbols across 457 files)
FILE: sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/bootstrap/AbstractLauncher.java
class AbstractLauncher (line 36) | public abstract class AbstractLauncher {
method launch (line 42) | public Object launch(String[] args) throws Exception {
method launch (line 61) | public Object launch(String[] args, String classpath, Method method) t...
method launch (line 86) | public Object launch(String classpath, Class testClass) throws Excepti...
method launch (line 100) | protected Object launch(String[] args, String mainClass, ClassLoader c...
method createMainMethodRunner (line 111) | protected MainMethodRunner createMainMethodRunner(String mainClass, St...
method getExecutableArchive (line 120) | protected abstract ExecutableArchive getExecutableArchive() throws Exc...
method getContainerArchive (line 127) | protected ContainerArchive getContainerArchive() throws Exception {
method createContainerClassLoader (line 137) | protected ClassLoader createContainerClassLoader(ContainerArchive cont...
method createContainerClassLoader (line 154) | protected ClassLoader createContainerClassLoader(URL[] urls, ClassLoad...
method isEmbedEnable (line 161) | private boolean isEmbedEnable() {
method getMainClass (line 171) | protected abstract String getMainClass() throws Exception;
FILE: sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/bootstrap/AgentClassLoader.java
class AgentClassLoader (line 28) | public class AgentClassLoader extends URLClassLoader {
method AgentClassLoader (line 33) | public AgentClassLoader(URL[] urls, ClassLoader parent) {
FILE: sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/bootstrap/ArkLauncher.java
class ArkLauncher (line 30) | public class ArkLauncher extends BaseExecutableArchiveLauncher {
method main (line 34) | public static void main(String[] args) throws Exception {
method ArkLauncher (line 38) | public ArkLauncher() {
method ArkLauncher (line 41) | public ArkLauncher(ExecutableArchive executableArchive) {
method getMainClass (line 45) | @Override
FILE: sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/bootstrap/BaseExecutableArchiveLauncher.java
class BaseExecutableArchiveLauncher (line 36) | public abstract class BaseExecutableArchiveLauncher extends AbstractLaun...
method BaseExecutableArchiveLauncher (line 40) | public BaseExecutableArchiveLauncher() {
method BaseExecutableArchiveLauncher (line 48) | protected BaseExecutableArchiveLauncher(ExecutableArchive executableAr...
method getExecutableArchive (line 52) | @Override
method createArchive (line 62) | protected ExecutableArchive createArchive() throws Exception {
FILE: sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/bootstrap/ClasspathLauncher.java
class ClasspathLauncher (line 42) | public class ClasspathLauncher extends ArkLauncher {
method ClasspathLauncher (line 44) | public ClasspathLauncher(ClassPathArchive classPathArchive) {
class ClassPathArchive (line 48) | public static class ClassPathArchive implements ExecutableArchive {
method ClassPathArchive (line 62) | public ClassPathArchive(String className, String methodName, URL[] u...
method filterUrls (line 73) | public List<URL> filterUrls(String resource) throws Exception {
method getContainerArchive (line 88) | @Override
method getJarContainerArchive (line 104) | protected ContainerArchive getJarContainerArchive() throws Exception {
method getBizArchives (line 119) | @Override
method getPluginArchives (line 136) | @Override
method getConfClasspath (line 149) | @Override
method scanConfClasspath (line 159) | private void scanConfClasspath(File arkConfBaseDir, List<URL> classp...
method deduceArkConfBaseDir (line 170) | private File deduceArkConfBaseDir() {
method getUrl (line 195) | @Override
method getManifest (line 200) | @Override
method getNestedArchives (line 205) | @Override
method getNestedArchive (line 210) | @Override
method getInputStream (line 215) | @Override
method iterator (line 220) | @Override
method createDirectoryBizModuleArchive (line 225) | protected BizArchive createDirectoryBizModuleArchive() {
method createDirectoryContainerArchive (line 229) | protected ContainerArchive createDirectoryContainerArchive() {
method fromSurefire (line 240) | protected boolean fromSurefire(URL[] urls) {
method getSurefireBooterJar (line 251) | private URL getSurefireBooterJar(URL[] urls) {
method filterURLs (line 265) | protected URL[] filterURLs(URL[] urls) {
method filterBizUrls (line 288) | protected URL[] filterBizUrls(URL[] urls) {
method parseClassPathFromSurefireBoot (line 322) | protected URL[] parseClassPathFromSurefireBoot(URL surefireBootJar) {
FILE: sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/bootstrap/ContainerClassLoader.java
class ContainerClassLoader (line 32) | public class ContainerClassLoader extends URLClassLoader {
method ContainerClassLoader (line 42) | public ContainerClassLoader(URL[] urls, ClassLoader parent, ClassLoade...
method ContainerClassLoader (line 47) | public ContainerClassLoader(URL[] urls, ClassLoader parent, ClassLoade...
method loadClass (line 54) | @Override
method resolveClass (line 68) | public Class<?> resolveClass(String name, boolean resolve) throws Clas...
method resolveArkExportClass (line 85) | protected Class<?> resolveArkExportClass(String name) {
method isArkExportClass (line 96) | public boolean isArkExportClass(String className) {
method getResource (line 102) | @Override
method getResources (line 112) | @Override
FILE: sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/bootstrap/MainMethodRunner.java
class MainMethodRunner (line 30) | public class MainMethodRunner {
method MainMethodRunner (line 43) | public MainMethodRunner(String mainClass, String[] args, Map<String, S...
method run (line 49) | public Object run() throws Exception {
FILE: sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/bootstrap/UseFastConnectionExceptionsEnumeration.java
class UseFastConnectionExceptionsEnumeration (line 29) | public class UseFastConnectionExceptionsEnumeration implements Enumerati...
method UseFastConnectionExceptionsEnumeration (line 33) | public UseFastConnectionExceptionsEnumeration(Enumeration<URL> delegat...
method hasMoreElements (line 37) | @Override
method nextElement (line 48) | @Override
FILE: sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/DirectoryBizArchive.java
class DirectoryBizArchive (line 37) | public class DirectoryBizArchive implements BizArchive {
method DirectoryBizArchive (line 53) | public DirectoryBizArchive(String className, String methodName, URL[] ...
method isTestMode (line 66) | public boolean isTestMode() {
method getClassName (line 70) | public String getClassName() {
method getMethodName (line 74) | public String getMethodName() {
method getUrls (line 78) | @Override
method isEntryExist (line 83) | @Override
method getUrl (line 98) | @Override
method getManifest (line 103) | @Override
method getNestedArchives (line 108) | @Override
method getNestedArchive (line 113) | @Override
method getInputStream (line 121) | @Override
method iterator (line 126) | @Override
class NoopBizArchive (line 131) | class NoopBizArchive extends JarBizArchive {
method NoopBizArchive (line 132) | public NoopBizArchive() {
FILE: sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/DirectoryContainerArchive.java
class DirectoryContainerArchive (line 39) | public class DirectoryContainerArchive implements ContainerArchive {
method DirectoryContainerArchive (line 57) | public DirectoryContainerArchive(URL[] urls) {
method getArkContainerJarMarkers (line 61) | public static Set<String> getArkContainerJarMarkers() {
method getUrls (line 65) | @Override
method getUrl (line 70) | @Override
method getManifest (line 75) | @Override
method getNestedArchives (line 80) | @Override
method getNestedArchive (line 85) | @Override
method getInputStream (line 90) | @Override
method iterator (line 95) | @Override
FILE: sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/EmbedClassPathArchive.java
class EmbedClassPathArchive (line 42) | public class EmbedClassPathArchive extends ClasspathLauncher.ClassPathAr...
method EmbedClassPathArchive (line 44) | public EmbedClassPathArchive(String className, String method, URL[] ur...
method getContainerArchive (line 48) | @Override
method getBizArchives (line 63) | @Override
method getArchiveFromJarEntry (line 90) | private Archive getArchiveFromJarEntry(URL jarUrl) throws IOException {
method filterBizUrl (line 104) | public List<URL> filterBizUrl(String resource) throws Exception {
method getPluginArchives (line 117) | @Override
method getUrlJarFileArchive (line 128) | protected JarFileArchive getUrlJarFileArchive(URL url) throws IOExcept...
FILE: sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/ExecutableArkBizJar.java
class ExecutableArkBizJar (line 40) | public class ExecutableArkBizJar implements ExecutableArchive {
method ExecutableArkBizJar (line 52) | public ExecutableArkBizJar(Archive archive) {
method ExecutableArkBizJar (line 56) | public ExecutableArkBizJar(Archive archive, URL url) {
method getUrl (line 61) | @Override
method getManifest (line 66) | @Override
method getNestedArchives (line 71) | @Override
method getInputStream (line 82) | @Override
method getNestedArchive (line 87) | @Override
method iterator (line 92) | @Override
method getContainerArchive (line 97) | @Override
method getBizArchives (line 120) | @Override
method getPluginArchives (line 144) | @Override
method getConfClasspath (line 163) | @Override
FILE: sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/ExplodedBizArchive.java
class ExplodedBizArchive (line 39) | public class ExplodedBizArchive implements BizArchive {
method ExplodedBizArchive (line 46) | public ExplodedBizArchive(File root) throws IOException {
method scanUrl (line 54) | private URL[] scanUrl() throws MalformedURLException {
method getUrls (line 69) | @Override
method isEntryExist (line 74) | @Override
method getUrl (line 79) | @Override
method getManifest (line 84) | @Override
method getNestedArchives (line 89) | @Override
method getNestedArchive (line 94) | @Override
method getInputStream (line 99) | @Override
method iterator (line 104) | @Override
FILE: sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/JarBizArchive.java
class JarBizArchive (line 40) | public class JarBizArchive extends AbstractArchive implements BizArchive {
method JarBizArchive (line 48) | public JarBizArchive(Archive archive) {
method getUrl (line 52) | @Override
method getManifest (line 57) | @Override
method getNestedArchives (line 62) | @Override
method getInputStream (line 73) | @Override
method getNestedArchive (line 78) | @Override
method iterator (line 83) | @Override
method getUrls (line 88) | @Override
method getExportUrls (line 98) | public URL[] getExportUrls() throws IOException {
FILE: sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/JarContainerArchive.java
class JarContainerArchive (line 37) | public class JarContainerArchive extends AbstractArchive implements Cont...
method JarContainerArchive (line 43) | public JarContainerArchive(Archive archive) {
method getUrls (line 47) | @Override
method getUrl (line 57) | @Override
method getManifest (line 62) | @Override
method getNestedArchive (line 67) | @Override
method getInputStream (line 72) | @Override
method iterator (line 77) | @Override
FILE: sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/JarPluginArchive.java
class JarPluginArchive (line 35) | public class JarPluginArchive extends AbstractArchive implements PluginA...
method JarPluginArchive (line 42) | public JarPluginArchive(Archive archive) {
method getExtensionUrls (line 46) | public URL[] getExtensionUrls() {
method getUrl (line 50) | @Override
method getManifest (line 55) | @Override
method getNestedArchives (line 60) | @Override
method getInputStream (line 71) | @Override
method getNestedArchive (line 76) | @Override
method iterator (line 81) | @Override
method getUrls (line 91) | @Override
method setExtensionUrls (line 102) | @Override
FILE: sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/archive/ExplodedArchive.java
class ExplodedArchive (line 47) | public class ExplodedArchive implements Archive {
method ExplodedArchive (line 63) | public ExplodedArchive(File root) {
method ExplodedArchive (line 75) | public ExplodedArchive(File root, boolean recursive) {
method getManifestFile (line 84) | private File getManifestFile(File root) {
method getUrl (line 89) | @Override
method getManifest (line 94) | @Override
method getNestedArchives (line 104) | @Override
method getInputStream (line 115) | @Override
method iterator (line 120) | @Override
method getNestedArchive (line 125) | public Archive getNestedArchive(Entry entry) throws IOException {
method toString (line 130) | @Override
class FileEntryIterator (line 142) | private static class FileEntryIterator implements Iterator<Entry> {
method FileEntryIterator (line 154) | FileEntryIterator(File root, boolean recursive) {
method hasNext (line 161) | @Override
method next (line 166) | @Override
method listFiles (line 180) | private Iterator<File> listFiles(File file) {
method poll (line 189) | private File poll() {
method remove (line 202) | @Override
class EntryComparator (line 210) | private static class EntryComparator implements Comparator<File> {
method compare (line 212) | @Override
class FileEntry (line 224) | private static class FileEntry implements Entry {
method FileEntry (line 230) | FileEntry(String name, File file) {
method getFile (line 235) | public File getFile() {
method isDirectory (line 239) | @Override
method getName (line 244) | @Override
FILE: sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/archive/JarFileArchive.java
class JarFileArchive (line 38) | public class JarFileArchive implements Archive {
method JarFileArchive (line 50) | public JarFileArchive(File file) throws IOException {
method JarFileArchive (line 54) | public JarFileArchive(File file, URL url) throws IOException {
method JarFileArchive (line 59) | public JarFileArchive(JarFile jarFile) {
method getUrl (line 63) | @Override
method getManifest (line 71) | @Override
method getNestedArchives (line 76) | @Override
method getInputStream (line 87) | @Override
method iterator (line 92) | @Override
method getPomProperties (line 97) | public Properties getPomProperties() throws IOException {
method getNestedArchive (line 101) | public Archive getNestedArchive(Entry entry) throws IOException {
method getUnpackedNestedArchive (line 115) | private Archive getUnpackedNestedArchive(JarEntry jarEntry) throws IOE...
method getTempUnpackFolder (line 127) | private File getTempUnpackFolder() {
method createUnpackFolder (line 135) | private File createUnpackFolder(File parent) {
method unpack (line 149) | private void unpack(JarEntry entry, File file) throws IOException {
method toString (line 168) | @Override
class EntryIterator (line 180) | private static class EntryIterator implements Iterator<Entry> {
method EntryIterator (line 184) | EntryIterator(Enumeration<JarEntry> enumeration) {
method hasNext (line 188) | @Override
method next (line 193) | @Override
method remove (line 198) | @Override
class JarFileEntry (line 208) | public static class JarFileEntry implements Entry {
method JarFileEntry (line 212) | public JarFileEntry(JarEntry jarEntry) {
method getJarEntry (line 216) | public JarEntry getJarEntry() {
method isDirectory (line 220) | @Override
method getName (line 225) | @Override
FILE: sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/data/RandomAccessData.java
type RandomAccessData (line 28) | public interface RandomAccessData {
method getInputStream (line 37) | InputStream getInputStream(ResourceAccess access) throws IOException;
method getSubsection (line 45) | RandomAccessData getSubsection(long offset, long length);
method getSize (line 51) | long getSize();
type ResourceAccess (line 56) | enum ResourceAccess {
FILE: sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/data/RandomAccessDataFile.java
class RandomAccessDataFile (line 32) | public class RandomAccessDataFile implements RandomAccessData {
method RandomAccessDataFile (line 50) | public RandomAccessDataFile(File file) {
method RandomAccessDataFile (line 62) | public RandomAccessDataFile(File file, int concurrentReads) {
method RandomAccessDataFile (line 82) | private RandomAccessDataFile(File file, FilePool pool, long offset, lo...
method getFile (line 93) | public File getFile() {
method getInputStream (line 97) | @Override
method getSubsection (line 102) | @Override
method getSize (line 110) | @Override
method close (line 115) | public void close() throws IOException {
class DataInputStream (line 122) | private class DataInputStream extends InputStream {
method DataInputStream (line 128) | DataInputStream(ResourceAccess access) throws IOException {
method read (line 135) | @Override
method read (line 140) | @Override
method read (line 145) | @Override
method doRead (line 162) | public int doRead(byte[] b, int off, int len) throws IOException {
method skip (line 190) | @Override
method close (line 195) | @Override
method cap (line 208) | private int cap(long n) {
method moveOn (line 217) | private long moveOn(int amount) {
class FilePool (line 228) | static class FilePool {
method FilePool (line 238) | FilePool(File file, int size) {
method acquire (line 245) | public RandomAccessFile acquire() throws IOException {
method release (line 254) | public void release(RandomAccessFile file) {
method close (line 259) | public void close() throws IOException {
FILE: sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/jar/AsciiBytes.java
class AsciiBytes (line 28) | final public class AsciiBytes {
method AsciiBytes (line 46) | public AsciiBytes(String string) {
method AsciiBytes (line 56) | public AsciiBytes(byte[] bytes) {
method AsciiBytes (line 67) | public AsciiBytes(byte[] bytes, int offset, int length) {
method length (line 76) | public int length() {
method startsWith (line 80) | public boolean startsWith(AsciiBytes prefix) {
method endsWith (line 95) | public boolean endsWith(AsciiBytes postfix) {
method substring (line 112) | public AsciiBytes substring(int beginIndex) {
method substring (line 116) | public AsciiBytes substring(int beginIndex, int endIndex) {
method append (line 124) | public AsciiBytes append(String string) {
method append (line 131) | public AsciiBytes append(AsciiBytes asciiBytes) {
method append (line 138) | public AsciiBytes append(byte[] bytes) {
method toString (line 148) | @Override
method hashCode (line 156) | @Override
method equals (line 193) | @Override
method toString (line 215) | static String toString(byte[] bytes) {
method hashCode (line 219) | public static int hashCode(String string) {
method hashCode (line 224) | public static int hashCode(int hash, String string) {
FILE: sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/jar/Bytes.java
class Bytes (line 30) | final public class Bytes {
method Bytes (line 34) | private Bytes() {
method get (line 37) | public static byte[] get(RandomAccessData data) throws IOException {
method get (line 46) | public static byte[] get(InputStream inputStream, long length) throws ...
method fill (line 57) | public static boolean fill(InputStream inputStream, byte[] bytes) thro...
method fill (line 61) | private static boolean fill(InputStream inputStream, byte[] bytes, int...
method littleEndianValue (line 74) | public static long littleEndianValue(byte[] bytes, int offset, int len...
FILE: sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/jar/CentralDirectoryEndRecord.java
class CentralDirectoryEndRecord (line 30) | final public class CentralDirectoryEndRecord {
method CentralDirectoryEndRecord (line 57) | public CentralDirectoryEndRecord(RandomAccessData data) throws IOExcep...
method createBlockFromEndOfData (line 74) | private byte[] createBlockFromEndOfData(RandomAccessData data, int siz...
method isValid (line 79) | public boolean isValid() {
method getStartOfArchive (line 97) | public long getStartOfArchive(RandomAccessData data) {
method getCentralDirectory (line 110) | public RandomAccessData getCentralDirectory(RandomAccessData data) {
method getNumberOfRecords (line 120) | public int getNumberOfRecords() {
FILE: sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/jar/CentralDirectoryFileHeader.java
class CentralDirectoryFileHeader (line 33) | final public class CentralDirectoryFileHeader implements FileHeader {
method CentralDirectoryFileHeader (line 53) | public CentralDirectoryFileHeader() {
method CentralDirectoryFileHeader (line 56) | public CentralDirectoryFileHeader(byte[] header, int headerOffset, Asc...
method load (line 67) | public void load(byte[] data, int dataOffset, RandomAccessData variabl...
method getName (line 101) | public AsciiBytes getName() {
method hasName (line 105) | @Override
method isDirectory (line 110) | public boolean isDirectory() {
method getMethod (line 114) | @Override
method getTime (line 119) | public long getTime() {
method decodeMsDosFormatDateTime (line 133) | private Calendar decodeMsDosFormatDateTime(long date, long time) {
method getCrc (line 143) | public long getCrc() {
method getCompressedSize (line 147) | @Override
method getSize (line 152) | @Override
method getExtra (line 157) | public byte[] getExtra() {
method getComment (line 161) | public AsciiBytes getComment() {
method getLocalHeaderOffset (line 165) | @Override
method clone (line 170) | @Override
method fromRandomAccessData (line 178) | public static CentralDirectoryFileHeader fromRandomAccessData(RandomAc...
FILE: sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/jar/CentralDirectoryParser.java
class CentralDirectoryParser (line 31) | final public class CentralDirectoryParser {
method addVisitor (line 37) | public <T extends CentralDirectoryVisitor> T addVisitor(T visitor) {
method parse (line 49) | public RandomAccessData parse(RandomAccessData data, boolean skipPrefi...
method parseEntries (line 62) | private void parseEntries(CentralDirectoryEndRecord endRecord,
method getArchiveData (line 75) | private RandomAccessData getArchiveData(CentralDirectoryEndRecord endR...
method visitStart (line 84) | private void visitStart(CentralDirectoryEndRecord endRecord,
method visitFileHeader (line 91) | private void visitFileHeader(int dataOffset, CentralDirectoryFileHeade...
method visitEnd (line 97) | private void visitEnd() {
FILE: sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/jar/CentralDirectoryVisitor.java
type CentralDirectoryVisitor (line 26) | public interface CentralDirectoryVisitor {
method visitStart (line 28) | void visitStart(CentralDirectoryEndRecord endRecord, RandomAccessData ...
method visitFileHeader (line 30) | void visitFileHeader(CentralDirectoryFileHeader fileHeader, int dataOf...
method visitEnd (line 32) | void visitEnd();
FILE: sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/jar/FileHeader.java
type FileHeader (line 28) | interface FileHeader {
method hasName (line 36) | boolean hasName(String name, String suffix);
method getLocalHeaderOffset (line 42) | long getLocalHeaderOffset();
method getCompressedSize (line 48) | long getCompressedSize();
method getSize (line 54) | long getSize();
method getMethod (line 62) | int getMethod();
FILE: sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/jar/Handler.java
class Handler (line 39) | public class Handler extends URLStreamHandler {
method Handler (line 74) | public Handler() {
method Handler (line 78) | public Handler(JarFile jarFile) {
method openConnection (line 82) | @Override
method openFallbackConnection (line 94) | private URLConnection openFallbackConnection(URL url, Exception reason...
method log (line 110) | private void log(boolean warning, Exception cause) {
method getFallbackHandler (line 121) | private URLStreamHandler getFallbackHandler() {
method openConnection (line 137) | private URLConnection openConnection(URLStreamHandler handler, URL url...
method parseURL (line 145) | @Override
method getFileFromSpec (line 154) | private String getFileFromSpec(String spec) {
method getFileFromContext (line 167) | private String getFileFromContext(URL context, String spec) {
method trimToJarRoot (line 184) | private String trimToJarRoot(String file) {
method setFile (line 192) | private void setFile(URL context, String file) {
method normalize (line 196) | private String normalize(String file) {
method replaceParentDir (line 205) | String replaceParentDir(String file) {
method replaceCurrentDir (line 218) | private String replaceCurrentDir(String file) {
method hashCode (line 222) | @Override
method hashCode (line 227) | private int hashCode(String protocol, String file) {
method sameFile (line 244) | @Override
method canonicalize (line 273) | private String canonicalize(String path) {
method getRootJarFileFromUrl (line 277) | public JarFile getRootJarFileFromUrl(URL url) throws IOException {
method getRootJarFile (line 287) | private JarFile getRootJarFile(String name) throws IOException {
method addToRootFileCache (line 311) | static void addToRootFileCache(File sourceFile, JarFile jarFile) {
method setUseFastConnectionExceptions (line 326) | public static void setUseFastConnectionExceptions(boolean useFastConne...
FILE: sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/jar/JarEntry.java
class JarEntry (line 32) | public class JarEntry extends java.util.jar.JarEntry implements FileHead...
method JarEntry (line 42) | JarEntry(JarFile jarFile, CentralDirectoryFileHeader header) {
method hasName (line 56) | @Override
method getUrl (line 67) | URL getUrl() throws MalformedURLException {
method getAttributes (line 71) | @Override
method getCertificates (line 77) | @Override
method getCodeSigners (line 85) | @Override
method setCertificates (line 93) | void setCertificates(java.util.jar.JarEntry entry) {
method getLocalHeaderOffset (line 98) | @Override
FILE: sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/jar/JarEntryFilter.java
type JarEntryFilter (line 24) | public interface JarEntryFilter {
method apply (line 33) | AsciiBytes apply(AsciiBytes name);
FILE: sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/jar/JarFile.java
class JarFile (line 50) | public class JarFile extends java.util.jar.JarFile {
method JarFile (line 85) | public JarFile(File file) throws IOException {
method JarFile (line 94) | JarFile(RandomAccessDataFile file) throws IOException {
method JarFile (line 107) | private JarFile(RandomAccessDataFile rootFile, String pathFromRoot, Ra...
method JarFile (line 112) | private JarFile(RandomAccessDataFile rootFile, String pathFromRoot, Ra...
method centralDirectoryVisitor (line 124) | private CentralDirectoryVisitor centralDirectoryVisitor() {
method getRootJarFile (line 147) | protected final RandomAccessDataFile getRootJarFile() {
method getData (line 151) | RandomAccessData getData() {
method getManifest (line 155) | @Override
method getPomProperties (line 176) | public Properties getPomProperties() throws IOException {
method entries (line 192) | @Override
method getJarEntry (line 210) | @Override
method containsEntry (line 215) | public boolean containsEntry(String name) {
method getEntry (line 219) | @Override
method getInputStream (line 224) | @Override
method getInputStream (line 229) | public InputStream getInputStream(ZipEntry ze, ResourceAccess access) ...
method getInputStream (line 236) | InputStream getInputStream(String name, ResourceAccess access) throws ...
method getNestedJarFile (line 246) | public synchronized JarFile getNestedJarFile(final ZipEntry entry) thr...
method getNestedJarFile (line 256) | public synchronized JarFile getNestedJarFile(JarEntry entry) throws IO...
method createJarFileFromEntry (line 264) | private JarFile createJarFileFromEntry(JarEntry entry) throws IOExcept...
method createJarFileFromDirectoryEntry (line 271) | private JarFile createJarFileFromDirectoryEntry(JarEntry entry) throws...
method createJarFileFromFileEntry (line 289) | private JarFile createJarFileFromFileEntry(JarEntry entry) throws IOEx...
method size (line 302) | @Override
method close (line 307) | @Override
method getUrl (line 319) | public URL getUrl() throws MalformedURLException {
method toString (line 330) | @Override
method getName (line 335) | @Override
method isSigned (line 342) | boolean isSigned() {
method setupEntryCertificates (line 346) | void setupEntryCertificates(JarEntry entry) {
method setCertificates (line 370) | private void setCertificates(JarEntry entry, java.util.jar.JarEntry ce...
method clearCache (line 376) | public void clearCache() {
method getPathFromRoot (line 380) | protected String getPathFromRoot() {
method getType (line 384) | JarFileType getType() {
method registerUrlProtocolHandler (line 392) | public static void registerUrlProtocolHandler() {
method resetCachedUrlHandlers (line 404) | private static void resetCachedUrlHandlers() {
type JarFileType (line 415) | enum JarFileType {
FILE: sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/jar/JarFileEntries.java
class JarFileEntries (line 40) | public class JarFileEntries implements CentralDirectoryVisitor, Iterable...
method removeEldestEntry (line 68) | @Override
method JarFileEntries (line 79) | public JarFileEntries(JarFile jarFile, JarEntryFilter filter) {
method visitStart (line 84) | @Override
method visitFileHeader (line 94) | @Override
method add (line 102) | private void add(AsciiBytes name, CentralDirectoryFileHeader fileHeade...
method visitEnd (line 109) | @Override
method sort (line 119) | private void sort(int left, int right) {
method swap (line 147) | private void swap(int i, int j) {
method swap (line 153) | private void swap(int[] array, int i, int j) {
method iterator (line 159) | @Override
method containsEntry (line 164) | public boolean containsEntry(String name) {
method getEntry (line 168) | public JarEntry getEntry(String name) {
method getInputStream (line 172) | public InputStream getInputStream(String name, ResourceAccess access) ...
method getInputStream (line 177) | public InputStream getInputStream(FileHeader entry, ResourceAccess acc...
method getEntryData (line 188) | public RandomAccessData getEntryData(String name) throws IOException {
method getEntryData (line 196) | private RandomAccessData getEntryData(FileHeader entry) throws IOExcep...
method getEntry (line 209) | private <T extends FileHeader> T getEntry(String name, Class<T> type, ...
method getEntry (line 219) | private <T extends FileHeader> T getEntry(int hashCode, String name, S...
method getEntry (line 232) | @SuppressWarnings("unchecked")
method getFirstIndex (line 252) | private int getFirstIndex(int hashCode) {
method clearCache (line 263) | public void clearCache() {
method applyFilter (line 267) | private AsciiBytes applyFilter(AsciiBytes name) {
class EntryIterator (line 274) | private class EntryIterator implements Iterator<JarEntry> {
method hasNext (line 278) | @Override
method next (line 283) | @Override
method remove (line 293) | @Override
FILE: sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/jar/JarURLConnection.java
class JarURLConnection (line 32) | final public class JarURLConnection extends java.net.JarURLConnection {
method openConnection (line 49) | @Override
method JarURLConnection (line 78) | private JarURLConnection(URL url, JarFile jarFile, JarEntryName jarEnt...
method connect (line 87) | @Override
method getJarFile (line 101) | @Override
method getJarFileURL (line 107) | @Override
method buildJarFileUrl (line 118) | private URL buildJarFileUrl() {
method getJarEntry (line 133) | @Override
method getEntryName (line 142) | @Override
method getInputStream (line 150) | @Override
method throwFileNotFound (line 167) | private void throwFileNotFound(Object entry, JarFile jarFile) throws F...
method getContentLength (line 174) | @Override
method getContentLengthLong (line 183) | @Override
method getContent (line 199) | @Override
method getContentType (line 205) | @Override
method getPermission (line 210) | @Override
method getLastModified (line 222) | @Override
method setUseFastExceptions (line 235) | static void setUseFastExceptions(boolean useFastExceptions) {
method get (line 239) | static JarURLConnection get(URL url, JarFile jarFile) throws IOExcepti...
method extractFullSpec (line 261) | private static String extractFullSpec(URL url, String pathFromRoot) {
method notFound (line 271) | private static JarURLConnection notFound() {
method notFound (line 279) | private static JarURLConnection notFound(JarFile jarFile, JarEntryName...
class JarEntryName (line 290) | static class JarEntryName {
method JarEntryName (line 296) | JarEntryName(String spec) {
method decode (line 300) | private String decode(String source) {
method write (line 310) | private void write(String source, ByteArrayOutputStream outputStream) {
method decodeEscapeSequence (line 335) | private char decodeEscapeSequence(String source, int i) {
method toString (line 345) | @Override
method isEmpty (line 350) | public boolean isEmpty() {
method getContentType (line 354) | public String getContentType() {
method deduceContentType (line 361) | private String deduceContentType() {
method get (line 369) | public static JarEntryName get(String spec) {
method get (line 373) | public static JarEntryName get(String spec, int beginIndex) {
FILE: sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/jar/JarUtils.java
class JarUtils (line 32) | public class JarUtils {
method searchPomProperties (line 57) | static File searchPomProperties(File dirOrFile) {
method getArtifactIdFromLocalClassPath (line 79) | static String getArtifactIdFromLocalClassPath(String fileClassPath) {
method parseArtifactId (line 135) | public static String parseArtifactId(String jarLocation) {
method doGetArtifactIdFromFileName (line 200) | private static String doGetArtifactIdFromFileName(String jarLocation) {
method parseArtifactIdFromJar (line 223) | private static String parseArtifactIdFromJar(String jarLocation) throw...
method getNestedRootJarFromJarLocation (line 230) | public static com.alipay.sofa.ark.loader.jar.JarFile getNestedRootJarF...
method parseArtifactIdFromUnpackedDir (line 252) | private static String parseArtifactIdFromUnpackedDir(String unpackDirP...
FILE: sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/jar/ZipInflaterInputStream.java
class ZipInflaterInputStream (line 31) | public class ZipInflaterInputStream extends InflaterInputStream {
method ZipInflaterInputStream (line 37) | ZipInflaterInputStream(InputStream inputStream, int size) {
method available (line 42) | @Override
method read (line 50) | @Override
method close (line 59) | @Override
method fill (line 65) | @Override
method getInflaterBufferSize (line 80) | private static int getInflaterBufferSize(long size) {
FILE: sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/util/ModifyPathUtils.java
class ModifyPathUtils (line 23) | public class ModifyPathUtils {
method modifyPath (line 33) | public static String modifyPath(String path) {
FILE: sofa-ark-parent/core-impl/archive/src/test/java/com/alipay/sofa/ark/bootstrap/ArkLauncherTest.java
class ArkLauncherTest (line 46) | public class ArkLauncherTest {
method setup (line 50) | @BeforeClass
method tearDown (line 66) | @AfterClass
method testContainerClassLoader (line 71) | @Test
method isNestedArchive (line 104) | protected boolean isNestedArchive(Archive.Entry entry) {
method testMain (line 109) | @Test(expected = Exception.class)
FILE: sofa-ark-parent/core-impl/archive/src/test/java/com/alipay/sofa/ark/bootstrap/ClasspathLauncherTest.java
class ClasspathLauncherTest (line 50) | public class ClasspathLauncherTest {
method setup (line 54) | @BeforeClass
method tearDown (line 69) | @AfterClass
method testFilterAgentClasspath (line 74) | @Test
method testSpringBootFatJar (line 92) | @Test
method isNestedArchive (line 125) | protected boolean isNestedArchive(Archive.Entry entry) {
method testConfClasspath (line 130) | @Test
method testFromSurefire (line 139) | @Test
method testOtherMethods (line 161) | @Test
method testBaseExecutableArchiveLauncher (line 212) | @Test
FILE: sofa-ark-parent/core-impl/archive/src/test/java/com/alipay/sofa/ark/bootstrap/MainMethodRunnerTest.java
class MainMethodRunnerTest (line 27) | public class MainMethodRunnerTest {
method init (line 31) | @Before
method testRunner (line 36) | @Test
class MainClass (line 50) | public static class MainClass {
method main (line 52) | public static void main(String[] args) {
FILE: sofa-ark-parent/core-impl/archive/src/test/java/com/alipay/sofa/ark/loader/DirectoryBizArchiveTest.java
class DirectoryBizArchiveTest (line 36) | public class DirectoryBizArchiveTest {
method setUp (line 40) | @Before
method testDirectoryBizArchive (line 45) | @Test
method testJarBizArchive (line 94) | @Test
FILE: sofa-ark-parent/core-impl/archive/src/test/java/com/alipay/sofa/ark/loader/DirectoryContainerArchiveTest.java
class DirectoryContainerArchiveTest (line 25) | public class DirectoryContainerArchiveTest {
method testDirectoryContainerArchive (line 29) | @Test
FILE: sofa-ark-parent/core-impl/archive/src/test/java/com/alipay/sofa/ark/loader/EmbedClassPathArchiveTest.java
class EmbedClassPathArchiveTest (line 47) | public class EmbedClassPathArchiveTest {
method testGetContainerArchive (line 49) | @Test
method isNestedArchive (line 77) | protected boolean isNestedArchive(Archive.Entry entry) {
method testStaticCombineGetBizArchives (line 82) | @Test
FILE: sofa-ark-parent/core-impl/archive/src/test/java/com/alipay/sofa/ark/loader/ExecutableArkBizJarTest.java
class ExecutableArkBizJarTest (line 29) | public class ExecutableArkBizJarTest {
method setUp (line 35) | @Before
method testExecutableArkBizJar (line 40) | @Test
FILE: sofa-ark-parent/core-impl/archive/src/test/java/com/alipay/sofa/ark/loader/ExplodedBizArchiveTest.java
class ExplodedBizArchiveTest (line 33) | public class ExplodedBizArchiveTest {
method testCreate (line 35) | @Test
method testCloseManifestFileStream (line 93) | @Test
FILE: sofa-ark-parent/core-impl/archive/src/test/java/com/alipay/sofa/ark/loader/archive/ExplodedArchiveTest.java
class ExplodedArchiveTest (line 29) | public class ExplodedArchiveTest {
method setUp (line 37) | @Before
method testGetMethods (line 42) | @Test
FILE: sofa-ark-parent/core-impl/archive/src/test/java/com/alipay/sofa/ark/loader/archive/JarFileArchiveTest.java
class JarFileArchiveTest (line 30) | public class JarFileArchiveTest {
method setUp (line 38) | @Before
method testGetMethods (line 43) | @Test
FILE: sofa-ark-parent/core-impl/archive/src/test/java/com/alipay/sofa/ark/loader/jar/HandlerTest.java
class HandlerTest (line 26) | public class HandlerTest {
method testOpenConnectionWithIOException (line 33) | @Test(expected = MalformedURLException.class)
method testOpenConnectionWithNPE (line 39) | @Test(expected = NullPointerException.class)
method testParseURLWithIllegalSpec (line 45) | @Test(expected = IllegalArgumentException.class)
method testParseURLWithEmptySpec (line 50) | @Test(expected = SecurityException.class)
method testReplaceParentDir (line 55) | @Test
FILE: sofa-ark-parent/core-impl/archive/src/test/java/com/alipay/sofa/ark/loader/jar/JarEntryTest.java
class JarEntryTest (line 28) | public class JarEntryTest {
method setUp (line 34) | @Before
method testGetters (line 42) | @Test
FILE: sofa-ark-parent/core-impl/archive/src/test/java/com/alipay/sofa/ark/loader/jar/JarFileTest.java
class JarFileTest (line 28) | public class JarFileTest {
method testSetupEntryCertificates (line 30) | @Test
FILE: sofa-ark-parent/core-impl/archive/src/test/java/com/alipay/sofa/ark/loader/jar/JarURLConnectionTest.java
class JarURLConnectionTest (line 32) | public class JarURLConnectionTest {
method setUp (line 39) | @Before
method testGetJarFileURL (line 44) | @Test
method testGetContentLength (line 60) | @Test
method testGetContent (line 69) | @Test
method testGetLastModified (line 75) | @Test
method testJarEntryName (line 84) | @Test
FILE: sofa-ark-parent/core-impl/archive/src/test/java/com/alipay/sofa/ark/loader/jar/JarUtilsParseArtifactIdFromUnpackedDirTest.java
class JarUtilsParseArtifactIdFromUnpackedDirTest (line 28) | public class JarUtilsParseArtifactIdFromUnpackedDirTest {
method testParseArtifactIdFromUnpackedDir_StandardLocation (line 30) | @Test
method testParseArtifactIdFromUnpackedDir_NonStandardLocation (line 55) | @Test
method testParseArtifactIdFromUnpackedDir_DirectoryDoesNotExist (line 81) | @Test
method testParseArtifactIdFromUnpackedDir_EmptyPomProperties (line 89) | @Test
method testParseArtifactIdFromUnpackedDir_MissingArtifactIdProperty (line 114) | @Test
FILE: sofa-ark-parent/core-impl/archive/src/test/java/com/alipay/sofa/ark/loader/jar/JarUtilsTest.java
class JarUtilsTest (line 31) | public class JarUtilsTest {
method testSearchPomProperties (line 33) | @Test
method testGetArtifactIdFromLocalClassPath (line 48) | @Test
method testParseArtifactId (line 55) | @Test
method testParseArtifactId2 (line 62) | @Test
method testParseArtifactIdFromUnpackDirNameFallback (line 69) | @Test
method testParseArtifactIdFromUnpackDirNameFallbackWhenArtifactIdMissing (line 84) | @Test
method normalizePath (line 109) | private String normalizePath(File file) {
FILE: sofa-ark-parent/core-impl/archive/src/test/java/com/alipay/sofa/ark/loader/jar/JarUtilsTestHelper.java
class JarUtilsTestHelper (line 24) | public class JarUtilsTestHelper {
method parseArtifactIdFromUnpackedDir (line 32) | public static String parseArtifactIdFromUnpackedDir(String unpackDirPa...
FILE: sofa-ark-parent/core-impl/archive/src/test/java/com/alipay/sofa/ark/loader/jar/ZipInflaterInputStreamTest.java
class ZipInflaterInputStreamTest (line 27) | public class ZipInflaterInputStreamTest {
method testFill (line 29) | @Test
FILE: sofa-ark-parent/core-impl/archive/src/test/java/com/alipay/sofa/ark/loader/test/base/BaseTest.java
class BaseTest (line 36) | public abstract class BaseTest {
method startUp (line 53) | @BeforeClass
method shutDown (line 59) | @AfterClass
method generateFile (line 67) | public static void generateFile() throws IOException {
method generateZip (line 81) | public static void generateZip() throws IOException {
method generateManifest (line 113) | private static byte[] generateManifest() {
method fetchResource (line 118) | private static byte[] fetchResource(String resourceName) throws IOExce...
method getTmpDir (line 125) | public static File getTmpDir() {
method getWorkspace (line 130) | public static File getWorkspace() {
method getTempDemoFile (line 138) | public static File getTempDemoFile() {
method getTempDemoZip (line 142) | public static File getTempDemoZip() {
method cleanWorkspace (line 146) | public static boolean cleanWorkspace() {
method compareByteArray (line 151) | public static boolean compareByteArray(byte[] a, byte[] b) {
FILE: sofa-ark-parent/core-impl/archive/src/test/java/com/alipay/sofa/ark/loader/test/data/RandomAccessDataFileTest.java
class RandomAccessDataFileTest (line 32) | public class RandomAccessDataFileTest extends BaseTest {
method testInputStream (line 34) | @Test
method testSize (line 55) | @Test
method testSubsection (line 61) | @Test
FILE: sofa-ark-parent/core-impl/archive/src/test/java/com/alipay/sofa/ark/loader/test/jar/AsciiBytesTest.java
class AsciiBytesTest (line 28) | public class AsciiBytesTest {
method testAsciiBytes (line 34) | @Test
method testHashCode (line 52) | @Test
FILE: sofa-ark-parent/core-impl/archive/src/test/java/com/alipay/sofa/ark/loader/test/jar/BytesTest.java
class BytesTest (line 32) | public class BytesTest extends BaseTest {
method testBytes (line 34) | @Test
FILE: sofa-ark-parent/core-impl/archive/src/test/java/com/alipay/sofa/ark/loader/test/jar/CentralDirectoryEndRecordTest.java
class CentralDirectoryEndRecordTest (line 39) | public class CentralDirectoryEndRecordTest extends BaseTest {
method testEOCD (line 41) | @Test
method testWithInvalidFile (line 52) | @Test
FILE: sofa-ark-parent/core-impl/archive/src/test/java/com/alipay/sofa/ark/loader/test/jar/CentralDirectoryFileHeaderTest.java
class CentralDirectoryFileHeaderTest (line 39) | public class CentralDirectoryFileHeaderTest extends BaseTest {
method testCDFH (line 43) | @Test
method testOtherMethods (line 66) | @Test
FILE: sofa-ark-parent/core-impl/archive/src/test/java/com/alipay/sofa/ark/loader/test/jar/CentralDirectoryParserTest.java
class CentralDirectoryParserTest (line 34) | public class CentralDirectoryParserTest extends BaseTest {
method testParser (line 36) | @Test
class TestVisitor (line 53) | public static class TestVisitor implements CentralDirectoryVisitor {
method visitStart (line 58) | @Override
method visitFileHeader (line 64) | @Override
method visitEnd (line 69) | @Override
method getEntryNum (line 74) | public int getEntryNum() {
method getCdfhList (line 78) | public List<CentralDirectoryFileHeader> getCdfhList() {
FILE: sofa-ark-parent/core-impl/archive/src/test/java/com/alipay/sofa/ark/loader/test/jar/JarFileTest.java
class JarFileTest (line 34) | public class JarFileTest extends BaseTest {
method testJarFile (line 36) | @Test
FILE: sofa-ark-parent/core-impl/archive/src/test/java/com/alipay/sofa/ark/loader/test/jar/JarUtilsTest.java
class JarUtilsTest (line 40) | public class JarUtilsTest {
method getArtifactIdFromTestClassPath (line 42) | @Test
method getArtifactIdFromTestClassPath1 (line 49) | @Test
method getArtifactIdFromClassPath (line 56) | @Test
method extractResourceURLs (line 80) | private List<URL> extractResourceURLs(String pathToFatJar, String reso...
method testParseArtifactIdFromJarName (line 101) | @Test
method testParseArtifactIdFromJarInJarName (line 126) | @Test
method testParseArtifactIdFromJarInJar (line 155) | @Test
method testParseArtifactIdFromJarInJarPom (line 164) | @Test
method testParseArtifactIdFromJarWithBlankPath (line 171) | @Test
method testParseArtifactIdFromJarInJarInJarMore (line 187) | @Test
FILE: sofa-ark-parent/core-impl/archive/src/test/java/com/alipay/sofa/ark/loader/test/util/ModifyPathUtilsTest.java
class ModifyPathUtilsTest (line 27) | public class ModifyPathUtilsTest {
method modifyPathTest (line 28) | @Test
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/ArkContainer.java
class ArkContainer (line 73) | public class ArkContainer {
method main (line 93) | public static Object main(String[] args) throws ArkRuntimeException {
method ArkContainer (line 127) | public ArkContainer(ExecutableArchive executableArchive) throws Except...
method ArkContainer (line 132) | public ArkContainer(ExecutableArchive executableArchive, LaunchCommand...
method start (line 145) | public Object start() throws ArkRuntimeException {
method deployBizAfterMasterBizReady (line 168) | public Object deployBizAfterMasterBizReady() throws Exception {
method addStaticBizFromCustomHooks (line 184) | private void addStaticBizFromCustomHooks() throws Exception {
method addStaticBiz (line 193) | private void addStaticBiz(List<BizArchive> bizArchives) throws IOExcep...
method prepareArkConfig (line 208) | public void prepareArkConfig() throws ArkRuntimeException {
method getProfileConfFiles (line 228) | public List<URL> getProfileConfFiles(String... profiles) {
method reInitializeArkLogger (line 252) | public void reInitializeArkLogger() throws ArkRuntimeException {
method isStarted (line 283) | public boolean isStarted() {
method stop (line 292) | public void stop() throws ArkRuntimeException {
method isRunning (line 303) | public boolean isRunning() {
method getArkServiceContainer (line 312) | public ArkServiceContainer getArkServiceContainer() {
method getPipelineContext (line 321) | public PipelineContext getPipelineContext() {
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/guice/ContainerModule.java
class ContainerModule (line 55) | public class ContainerModule extends AbstractArkGuiceModule {
method configure (line 57) | @Override
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/model/BizModel.java
class BizModel (line 74) | public class BizModel implements Biz {
method setBizName (line 123) | public BizModel setBizName(String bizName) {
method setBizVersion (line 129) | public BizModel setBizVersion(String bizVersion) {
method setBizState (line 135) | public BizModel setBizState(BizState bizState) {
method setBizState (line 141) | public BizModel setBizState(BizState bizState, StateChangeReason reaso...
method setBizState (line 147) | public BizModel setBizState(BizState bizState, StateChangeReason reaso...
method setMainClass (line 153) | public BizModel setMainClass(String mainClass) {
method setClassPath (line 159) | public BizModel setClassPath(URL[] urls) {
method setBizUrl (line 164) | public BizModel setBizUrl(URL url) {
method setPluginClassPath (line 169) | public BizModel setPluginClassPath(URL[] urls) {
method setClassLoader (line 174) | public BizModel setClassLoader(ClassLoader classLoader) {
method setPriority (line 179) | public BizModel setPriority(String priority) {
method setWebContextPath (line 184) | public BizModel setWebContextPath(String webContextPath) {
method setDenyImportPackages (line 190) | public BizModel setDenyImportPackages(String denyImportPackages) {
method setDenyImportClasses (line 198) | public BizModel setDenyImportClasses(String denyImportClasses) {
method setDenyImportResources (line 204) | public BizModel setDenyImportResources(String denyImportResources) {
method setAttribute (line 212) | public BizModel setAttribute(String key, String val) {
method setAttributes (line 217) | public BizModel setAttributes(Map<String, String> attributes) {
method setInjectPluginDependencies (line 222) | public BizModel setInjectPluginDependencies(Set<String> injectPluginDe...
method setInjectExportPackages (line 227) | public BizModel setInjectExportPackages(String injectExportPackages) {
method getInjectExportPackages (line 233) | public Set<String> getInjectExportPackages() {
method addStateChangeLog (line 237) | private void addStateChangeLog(StateChangeReason reason, String messag...
method getDependentPlugins (line 241) | public Set<Plugin> getDependentPlugins() {
method setDependentPlugins (line 245) | public BizModel setDependentPlugins(Set<Plugin> dependentPlugins) {
method getBizName (line 250) | @Override
method getBizVersion (line 255) | @Override
method getIdentity (line 260) | @Override
method getMainClass (line 265) | @Override
method getClassPath (line 270) | @Override
method getBizUrl (line 275) | @Override
method getPriority (line 280) | @Override
method getBizClassLoader (line 285) | @Override
method getDenyImportPackages (line 290) | @Override
method getDenyImportPackageNodes (line 295) | @Override
method getDenyImportPackageStems (line 300) | @Override
method getDenyImportClasses (line 305) | @Override
method getDenyImportResources (line 310) | @Override
method getInjectPluginDependencies (line 315) | public Set<String> getInjectPluginDependencies() {
method getDenyPrefixImportResourceStems (line 319) | @Override
method getDenySuffixImportResourceStems (line 324) | @Override
method start (line 329) | @Override
method start (line 334) | @Override
method doStart (line 339) | private void doStart(String[] args, Map<String, String> envs) throws T...
method stop (line 421) | @Override
method setCustomBizName (line 488) | @Override
method getBizState (line 493) | @Override
method getWebContextPath (line 498) | @Override
method getAttributes (line 503) | @Override
method getBizStateRecords (line 508) | @Override
method toString (line 513) | @Override
method resetProperties (line 520) | private void resetProperties() {
method getBizTempWorkDir (line 528) | public File getBizTempWorkDir() {
method setBizTempWorkDir (line 532) | public BizModel setBizTempWorkDir(File bizTempWorkDir) {
method isMasterBizAndEmbedEnable (line 537) | private boolean isMasterBizAndEmbedEnable() {
method setDeclaredLibraries (line 541) | public BizModel setDeclaredLibraries(String declaredLibraries) {
method isDeclared (line 555) | public boolean isDeclared(URL url, String resourceName) {
method isDeclaredMode (line 571) | public boolean isDeclaredMode() {
method checkDeclaredWithCache (line 578) | private boolean checkDeclaredWithCache(String libraryFile) {
method doCheckDeclared (line 583) | boolean doCheckDeclared(String jarFilePath) {
method isFromPlugin (line 615) | private boolean isFromPlugin(String jarFilePath) {
method recycleBizTempWorkDir (line 638) | public static boolean recycleBizTempWorkDir(File bizTempWorkDir) {
method markBizTempWorkDirRecycled (line 672) | private static String markBizTempWorkDirRecycled(File bizTempWorkDir) ...
method getStackTraceAsString (line 684) | private static String getStackTraceAsString(Throwable throwable) {
method getExportClassAndClassLoaderMap (line 701) | public ConcurrentHashMap<String, Plugin> getExportClassAndClassLoaderM...
method getExportNodeAndClassLoaderMap (line 705) | public ConcurrentHashMap<String, Plugin> getExportNodeAndClassLoaderMa...
method getExportStemAndClassLoaderMap (line 709) | public ConcurrentHashMap<String, Plugin> getExportStemAndClassLoaderMa...
method getExportResourceAndClassLoaderMap (line 713) | public ConcurrentHashMap<String, List<Plugin>> getExportResourceAndCla...
method getExportPrefixStemResourceAndClassLoaderMap (line 717) | public ConcurrentHashMap<String, List<Plugin>> getExportPrefixStemReso...
method getExportSuffixStemResourceAndClassLoaderMap (line 721) | public ConcurrentHashMap<String, List<Plugin>> getExportSuffixStemReso...
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/model/PluginContextImpl.java
class PluginContextImpl (line 38) | public class PluginContextImpl implements PluginContext {
method PluginContextImpl (line 48) | public PluginContextImpl(Plugin plugin) {
method getPlugin (line 52) | @Override
method getPlugin (line 57) | @Override
method publishService (line 62) | @Override
method publishService (line 67) | @Override
method referenceService (line 73) | @Override
method referenceService (line 78) | @Override
method referenceServices (line 84) | @Override
method getPluginNames (line 90) | @Override
method getClassLoader (line 95) | @Override
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/model/PluginModel.java
class PluginModel (line 44) | public class PluginModel implements Plugin {
method setPluginName (line 103) | public PluginModel setPluginName(String pluginName) {
method setGroupId (line 108) | public PluginModel setGroupId(String groupId) {
method setArtifactId (line 113) | public PluginModel setArtifactId(String artifactId) {
method setVersion (line 118) | public PluginModel setVersion(String version) {
method setPriority (line 123) | public PluginModel setPriority(String priority) {
method setPluginActivator (line 128) | public PluginModel setPluginActivator(String activator) {
method setClassPath (line 133) | public PluginModel setClassPath(URL[] urls) {
method setExportMode (line 138) | public PluginModel setExportMode(String exportMode) {
method setExportPackages (line 143) | public PluginModel setExportPackages(String exportPackages) {
method setExportPackages (line 150) | public PluginModel setExportPackages(String exportPackages, Set<String...
method setExportClasses (line 158) | public PluginModel setExportClasses(String exportClasses) {
method setImportPackages (line 163) | public PluginModel setImportPackages(String importPackages) {
method setImportClasses (line 170) | public PluginModel setImportClasses(String importClasses) {
method setImportResources (line 175) | public PluginModel setImportResources(String importResources) {
method setExportResources (line 182) | public PluginModel setExportResources(String exportResources) {
method setPluginClassLoader (line 189) | public PluginModel setPluginClassLoader(ClassLoader classLoader) {
method setPluginContext (line 194) | public PluginModel setPluginContext(PluginContext context) {
method setPluginUrl (line 199) | public PluginModel setPluginUrl(URL pluginUrl) {
method getPriority (line 204) | @Override
method getPluginName (line 209) | @Override
method getGroupId (line 214) | @Override
method getArtifactId (line 219) | @Override
method getVersion (line 224) | @Override
method getPluginActivator (line 229) | @Override
method getClassPath (line 234) | @Override
method getPluginClassLoader (line 239) | @Override
method getPluginContext (line 244) | @Override
method getExportMode (line 249) | @Override
method getExportPackages (line 257) | @Override
method getExportPackageNodes (line 262) | @Override
method getExportPackageStems (line 267) | @Override
method getExportClasses (line 272) | @Override
method getImportPackages (line 277) | @Override
method getImportPackageNodes (line 282) | @Override
method getImportPackageStems (line 287) | @Override
method getImportClasses (line 292) | @Override
method getImportResources (line 297) | @Override
method getImportPrefixResourceStems (line 302) | @Override
method getImportSuffixResourceStems (line 307) | @Override
method getExportResources (line 312) | @Override
method getExportPrefixResourceStems (line 317) | @Override
method getExportSuffixResourceStems (line 322) | @Override
method getPluginURL (line 327) | @Override
method start (line 332) | @Override
method stop (line 357) | @Override
method toString (line 376) | @Override
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/pipeline/DeployBizStage.java
class DeployBizStage (line 35) | @Singleton
method process (line 44) | @Override
method processStaticBiz (line 54) | public void processStaticBiz(PipelineContext pipelineContext) throws A...
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/pipeline/DeployPluginStage.java
class DeployPluginStage (line 33) | @Singleton
method process (line 42) | @Override
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/pipeline/ExtensionLoaderStage.java
class ExtensionLoaderStage (line 32) | @Singleton
method process (line 38) | @Override
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/pipeline/FinishStartupStage.java
class FinishStartupStage (line 33) | @Singleton
method process (line 38) | @Override
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/pipeline/HandleArchiveStage.java
class HandleArchiveStage (line 63) | @Singleton
method process (line 77) | @Override
method processEmbed (line 175) | protected void processEmbed(PipelineContext pipelineContext) throws Ex...
method processStaticBizFromClasspath (line 195) | public void processStaticBizFromClasspath(PipelineContext pipelineCont...
method isPluginExcluded (line 204) | public boolean isPluginExcluded(Plugin plugin) {
method isBizExcluded (line 219) | public boolean isBizExcluded(Biz biz) {
method useDynamicConfig (line 234) | public boolean useDynamicConfig() {
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/pipeline/RegisterServiceStage.java
class RegisterServiceStage (line 49) | @Singleton
method process (line 55) | @Override
method registryDefaultService (line 63) | private void registryDefaultService() {
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/pipeline/StandardPipeline.java
class StandardPipeline (line 38) | @Singleton
method StandardPipeline (line 43) | public StandardPipeline() {
method initializePipeline (line 47) | private void initializePipeline() {
method addPipelineStage (line 62) | @Override
method process (line 68) | @Override
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/registry/AbstractServiceProvider.java
class AbstractServiceProvider (line 29) | public abstract class AbstractServiceProvider implements ServiceProvider {
method AbstractServiceProvider (line 33) | public AbstractServiceProvider(ServiceProviderType providerType) {
method equals (line 37) | @Override
method getServiceProviderType (line 54) | @Override
method getServiceProviderDesc (line 59) | @Override
method toString (line 64) | @Override
method hashCode (line 70) | @Override
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/registry/ContainerServiceProvider.java
class ContainerServiceProvider (line 27) | public class ContainerServiceProvider extends AbstractServiceProvider {
method ContainerServiceProvider (line 31) | public ContainerServiceProvider() {
method ContainerServiceProvider (line 35) | public ContainerServiceProvider(int order) {
method getPriority (line 40) | @Override
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/registry/DefaultServiceFilter.java
class DefaultServiceFilter (line 28) | public class DefaultServiceFilter<T> implements ServiceFilter<T> {
method match (line 36) | @Override
method matchProviderType (line 48) | private boolean matchProviderType(ServiceProviderType serviceProviderT...
method matchServiceInterface (line 55) | private boolean matchServiceInterface(Class serviceInterface) {
method matchUniqueId (line 62) | private boolean matchUniqueId(String uniqueId) {
method getProviderType (line 69) | public ServiceProviderType getProviderType() {
method setProviderType (line 73) | public DefaultServiceFilter setProviderType(ServiceProviderType provid...
method getServiceInterface (line 78) | public Class<?> getServiceInterface() {
method setServiceInterface (line 82) | public DefaultServiceFilter setServiceInterface(Class<?> serviceInterf...
method getUniqueId (line 87) | public String getUniqueId() {
method setUniqueId (line 91) | public DefaultServiceFilter setUniqueId(String uniqueId) {
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/registry/PluginServiceProvider.java
class PluginServiceProvider (line 29) | public class PluginServiceProvider extends AbstractServiceProvider {
method PluginServiceProvider (line 33) | public PluginServiceProvider(Plugin plugin) {
method getServiceProviderDesc (line 39) | @Override
method getPriority (line 44) | @Override
method getPluginName (line 49) | public String getPluginName() {
method getPlugin (line 53) | public Plugin getPlugin() {
method hashCode (line 57) | @Override
method equals (line 64) | @Override
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/registry/ServiceMetadataImpl.java
class ServiceMetadataImpl (line 30) | public class ServiceMetadataImpl implements ServiceMetadata {
method ServiceMetadataImpl (line 36) | public ServiceMetadataImpl(Class<?> interfaceClass, String uniqueId,
method getUniqueId (line 46) | @Override
method getInterfaceClass (line 51) | @Override
method getServiceProvider (line 56) | @Override
method getServiceName (line 61) | @Override
method equals (line 70) | @Override
method hashCode (line 93) | @Override
method toString (line 102) | @Override
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/registry/ServiceReferenceImpl.java
class ServiceReferenceImpl (line 28) | public class ServiceReferenceImpl<T> implements ServiceReference<T> {
method ServiceReferenceImpl (line 34) | public ServiceReferenceImpl(ServiceMetadata serviceMetadata, T service...
method getService (line 39) | @Override
method getServiceMetadata (line 44) | @Override
method getPriority (line 49) | @Override
method hashCode (line 54) | @Override
method toString (line 59) | @Override
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/service/ArkServiceContainer.java
class ArkServiceContainer (line 49) | public class ArkServiceContainer {
method ArkServiceContainer (line 60) | public ArkServiceContainer(String[] arguments) {
method start (line 69) | public void start() throws ArkRuntimeException {
method findServiceModules (line 107) | private List<AbstractArkGuiceModule> findServiceModules() throws ArkRu...
method getService (line 126) | public <T> T getService(Class<T> clazz) {
method stop (line 135) | public void stop() throws ArkRuntimeException {
method isStarted (line 160) | public boolean isStarted() {
method isRunning (line 169) | public boolean isRunning() {
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/service/ArkServiceContainerHolder.java
class ArkServiceContainerHolder (line 25) | public class ArkServiceContainerHolder {
method getContainer (line 29) | public static ArkServiceContainer getContainer() {
method setContainer (line 33) | public static void setContainer(ArkServiceContainer container) {
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/service/biz/BizCommandProvider.java
class BizCommandProvider (line 42) | public class BizCommandProvider implements CommandProvider {
method getHelp (line 47) | @Override
method handleCommand (line 52) | @Override
method validate (line 57) | @Override
class BizCommand (line 74) | class BizCommand {
method BizCommand (line 79) | BizCommand(String command) {
method isValidate (line 168) | boolean isValidate() {
method process (line 172) | String process() {
method bizList (line 206) | String bizList() {
method installBiz (line 217) | String installBiz() {
method uninstallBiz (line 257) | String uninstallBiz() {
method switchBiz (line 285) | String switchBiz() {
method bizInfo (line 308) | String bizInfo(String bizIdentity) {
method isReadyInstall (line 347) | public boolean isReadyInstall() {
method join (line 357) | String join(URL[] urls, String separator) {
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/service/biz/BizDeployServiceImpl.java
class BizDeployServiceImpl (line 36) | @Singleton
method deploy (line 44) | @Override
method unDeploy (line 57) | @Override
method init (line 66) | @Override
method dispose (line 71) | @Override
method getPriority (line 76) | @Override
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/service/biz/BizFactoryServiceImpl.java
class BizFactoryServiceImpl (line 62) | @Singleton
method createBiz (line 68) | @Override
method createBiz (line 73) | @Override
method createBiz (line 80) | @Override
method createBiz (line 86) | @Override
method createBiz (line 94) | @Override
method createBiz (line 102) | @Override
method createBiz (line 108) | @Override
method createEmbedMasterBiz (line 163) | @Override
method prepareBizArchive (line 176) | private BizArchive prepareBizArchive(File file) throws IOException {
method getMergedBizClassPath (line 198) | private URL[] getMergedBizClassPath(URL[] bizArchiveUrls, URL[] extens...
method resolveExportMapIfNecessary (line 205) | private void resolveExportMapIfNecessary(BizModel bizModel, List<Strin...
method getInjectDependencies (line 247) | private Set<String> getInjectDependencies(String injectPluginDependenc...
method isArkBiz (line 256) | private boolean isArkBiz(BizArchive bizArchive) {
method getBizUcp (line 268) | private URL[] getBizUcp(BizModel bizModel) {
method getPluginURLs (line 275) | private URL[] getPluginURLs(BizModel bizModel) {
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/service/biz/BizManagerServiceImpl.java
class BizManagerServiceImpl (line 41) | @Singleton
method getBizLock (line 48) | @Override
method registerBiz (line 55) | @Override
method unRegisterBiz (line 66) | @Override
method unRegisterBizStrictly (line 73) | @Override
method getBiz (line 84) | @Override
method getBiz (line 95) | @Override
method getBizByIdentity (line 106) | @Override
method getBizByClassLoader (line 114) | @Override
method getAllBizNames (line 128) | @Override
method getAllBizIdentities (line 133) | @Override
method getBizInOrder (line 142) | @Override
method getActiveBiz (line 152) | @Override
method isActiveBiz (line 166) | @Override
method activeBiz (line 178) | @Override
method getBizState (line 196) | @Override
method getBizState (line 208) | @Override
method removeAndAddBiz (line 216) | @Override
method getBizRegistration (line 230) | @Override
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/service/biz/DefaultBizDeployer.java
class DefaultBizDeployer (line 34) | public class DefaultBizDeployer implements BizDeployer {
method init (line 41) | @Override
method deploy (line 46) | @Override
method unDeploy (line 66) | @Override
method isEmbedStaticBizAndIllegalState (line 83) | public boolean isEmbedStaticBizAndIllegalState(Biz biz) {
method getDesc (line 87) | @Override
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/service/classloader/AbstractClasspathClassLoader.java
class AbstractClasspathClassLoader (line 64) | public abstract class AbstractClasspathClassLoader extends URLClassLoader {
method AbstractClasspathClassLoader (line 86) | public AbstractClasspathClassLoader(URL[] urls) {
method AbstractClasspathClassLoader (line 107) | public AbstractClasspathClassLoader(URL[] urls, boolean exploded) {
method loadClass (line 112) | @Override
method definePackageIfNecessary (line 134) | private void definePackageIfNecessary(String className) {
method definePackage (line 155) | private void definePackage(final String className, final String packag...
method getPackage (line 190) | @Override
method loadClassWithCache (line 213) | protected Class<?> loadClassWithCache(String name, boolean resolve) th...
method loadClassInternal (line 244) | abstract protected Class<?> loadClassInternal(String name, boolean res...
method getResource (line 247) | @Override
method getResourceInternal (line 273) | protected URL getResourceInternal(String name) {
method getResources (line 295) | @Override
method uniqueUrls (line 328) | private Enumeration<URL> uniqueUrls(List<Enumeration<URL>> enumeration...
method getResourcesInternal (line 361) | protected Enumeration<URL> getResourcesInternal(String name) throws IO...
method shouldFindExportedClass (line 381) | abstract boolean shouldFindExportedClass(String className);
method shouldFindExportedResource (line 388) | abstract boolean shouldFindExportedResource(String resourceName);
method isDeclaredMode (line 390) | private boolean isDeclaredMode() {
method resolveJDKClass (line 399) | protected Class<?> resolveJDKClass(String name) {
method resolveExportClass (line 413) | protected Class<?> resolveExportClass(String name) {
method getClassBytesFromJar (line 441) | private byte[] getClassBytesFromJar(String jarFilePath, String classNa...
method doResolveExportClass (line 458) | private Class<?> doResolveExportClass(String name) {
method resolveArkClass (line 515) | protected Class<?> resolveArkClass(String name) {
method resolveLocalClass (line 533) | protected Class<?> resolveLocalClass(String name) {
method resolveJavaAgentClass (line 547) | protected Class<?> resolveJavaAgentClass(String name) {
method getExportResource (line 562) | protected URL getExportResource(String resourceName) {
method getJdkResource (line 596) | protected URL getJdkResource(String resourceName) {
method getClassResource (line 605) | protected URL getClassResource(String resourceName) {
method getLocalResource (line 625) | protected URL getLocalResource(String resourceName) {
method transformClassName (line 629) | private String transformClassName(String name) {
method getExportResources (line 641) | @SuppressWarnings("unchecked")
method getLocalResources (line 685) | protected Enumeration<URL> getLocalResources(String resourceName) thro...
method getJdkResources (line 689) | protected Enumeration<URL> getJdkResources(String resourceName) throws...
method clearCache (line 694) | public void clearCache() {
method invalidAllCache (line 700) | public void invalidAllCache() {
method preLoadClass (line 713) | protected abstract Class<?> preLoadClass(String className) throws ArkL...
method postLoadClass (line 722) | protected abstract Class<?> postLoadClass(String className) throws Ark...
method preFindResource (line 730) | protected abstract URL preFindResource(String resourceName);
method postFindResource (line 738) | protected abstract URL postFindResource(String resourceName);
method preFindResources (line 746) | protected abstract Enumeration<URL> preFindResources(String resourceNa...
method postFindResources (line 754) | protected abstract Enumeration<URL> postFindResources(String resourceN...
class LoadClassResult (line 756) | public static class LoadClassResult {
method getEx (line 760) | public ArkLoaderException getEx() {
method setEx (line 764) | public void setEx(ArkLoaderException ex) {
method getClazz (line 768) | public Class getClazz() {
method setClazz (line 772) | public void setClazz(Class clazz) {
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/service/classloader/BizClassLoader.java
class BizClassLoader (line 44) | public class BizClassLoader extends AbstractClasspathClassLoader {
method setBizModel (line 56) | public void setBizModel(BizModel bizModel) {
method getBizModel (line 60) | public BizModel getBizModel() {
method BizClassLoader (line 68) | public BizClassLoader(String bizIdentity, URL[] urls) {
method BizClassLoader (line 73) | public BizClassLoader(String bizIdentity, URL[] urls, boolean exploded) {
method publicDefineClass (line 79) | public Class<?> publicDefineClass(String name, byte[] b, ProtectionDom...
method loadClassInternal (line 83) | @Override
method shouldFindExportedClass (line 147) | @Override
method shouldFindExportedResource (line 152) | @Override
method checkDeclaredMode (line 157) | public boolean checkDeclaredMode() {
method loadBizClassLoaderHook (line 165) | private void loadBizClassLoaderHook() {
method preLoadClass (line 194) | @Override
method postLoadClass (line 207) | @Override
method preFindResource (line 220) | @Override
method postFindResource (line 227) | @Override
method preFindResources (line 234) | @Override
method postFindResources (line 241) | @Override
method getBizIdentity (line 253) | public String getBizIdentity() {
method setBizIdentity (line 257) | public void setBizIdentity(String bizIdentity) {
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/service/classloader/ClassLoaderServiceImpl.java
class ClassLoaderServiceImpl (line 53) | @Singleton
method isSunReflectClass (line 90) | @Override
method isArkSpiClass (line 100) | @Override
method isArkApiClass (line 105) | @Override
method isArkLogClass (line 110) | @Override
method isArkExceptionClass (line 115) | @Override
method prepareExportClassAndResourceCache (line 120) | @Override
method isClassInImport (line 147) | @Override
method getExportMode (line 174) | public String getExportMode(String className) {
method findExportClassLoader (line 183) | @Override
method findExportClassLoaderByBiz (line 193) | @Override
method findExportPlugin (line 212) | @Override
method isResourceInImport (line 226) | @Override
method findExportResourceClassLoadersInOrder (line 252) | @Override
method findExportResourceClassLoadersInOrderByBiz (line 263) | @Override
method findExportResourcePluginsInOrderByBiz (line 275) | private List<Plugin> findExportResourcePluginsInOrderByBiz(BizModel bi...
method findExportResourcePluginsInOrder (line 295) | private List<Plugin> findExportResourcePluginsInOrder(String resourceN...
method getJDKClassLoader (line 314) | @Override
method getArkClassLoader (line 319) | @Override
method getSystemClassLoader (line 324) | @Override
method getAgentClassLoader (line 329) | @Override
method getBizClassLoader (line 334) | @Override
method getMasterBizClassLoader (line 340) | @Override
method getPluginClassLoader (line 346) | @Override
method init (line 352) | @Override
method dispose (line 382) | @Override
method createAgentClassLoader (line 387) | private ClassLoader createAgentClassLoader() throws ArkRuntimeException {
method isDeniedImportClass (line 391) | @Override
method isDeniedImportResource (line 420) | @Override
method getPriority (line 448) | @Override
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/service/classloader/CompoundEnumeration.java
class CompoundEnumeration (line 25) | public final class CompoundEnumeration<E> implements Enumeration<E> {
method CompoundEnumeration (line 29) | public CompoundEnumeration(Enumeration<E>[] enums) {
method next (line 33) | private boolean next() {
method hasMoreElements (line 43) | public boolean hasMoreElements() {
method nextElement (line 47) | public E nextElement() {
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/service/classloader/JDKDelegateClassLoader.java
class JDKDelegateClassLoader (line 28) | public class JDKDelegateClassLoader extends URLClassLoader {
method JDKDelegateClassLoader (line 33) | public JDKDelegateClassLoader(URL[] urls, ClassLoader parent) {
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/service/classloader/PluginClassLoader.java
class PluginClassLoader (line 38) | public class PluginClassLoader extends AbstractClasspathClassLoader {
method PluginClassLoader (line 53) | public PluginClassLoader(String pluginName, URL[] urls) {
method getPluginName (line 58) | public String getPluginName() {
method loadClassInternal (line 62) | @Override
method shouldFindExportedClass (line 126) | @Override
method shouldFindExportedResource (line 131) | @Override
method loadPluginClassLoaderHook (line 136) | private void loadPluginClassLoaderHook() {
method preLoadClass (line 148) | @Override
method postLoadClass (line 161) | @Override
method preFindResource (line 174) | @Override
method postFindResource (line 181) | @Override
method preFindResources (line 188) | @Override
method postFindResources (line 195) | @Override
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/service/event/EventAdminServiceImpl.java
class EventAdminServiceImpl (line 43) | @Singleton
method EventAdminServiceImpl (line 51) | public EventAdminServiceImpl() {
method sendEvent (line 55) | @Override
method register (line 73) | @Override
method unRegister (line 90) | @Override
method unRegister (line 101) | @Override
method handleEvent (line 109) | @Override
method getPriority (line 113) | @Override
method isSupportEventType (line 118) | private boolean isSupportEventType(EventHandler eventHandler, ArkEvent...
method checkEventHandlerType (line 156) | private boolean checkEventHandlerType(Type type) {
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/service/extension/ExtensionLoaderServiceImpl.java
class ExtensionLoaderServiceImpl (line 53) | @Singleton
method getExtensionContributorFromArkPlugin (line 61) | @Override
method getExtensionContributorFromArkBiz (line 73) | @Override
method getExtensionContributorsFromArkBiz (line 84) | @Override
method getExtensionContributor (line 93) | public <T, L> T getExtensionContributor(Class<T> interfaceType, String...
method getExtensionContributors (line 114) | public <T, L> List<T> getExtensionContributors(Class<T> interfaceType,
method loadExtension (line 138) | private <I, L> Set<ExtensionClass<I, L>> loadExtension(Class<I> interf...
method loadExtensions (line 146) | private <I, L> Set<ExtensionClass<I, L>> loadExtensions(Class<I> inter...
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/service/injection/InjectionServiceImpl.java
class InjectionServiceImpl (line 38) | @Singleton
method inject (line 44) | @Override
method inject (line 49) | @Override
method inject (line 54) | private void inject(final Object instance, final String type) {
method getService (line 86) | private Object getService(Class serviceType, String uniqueId) {
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/service/plugin/PluginCommandProvider.java
class PluginCommandProvider (line 35) | public class PluginCommandProvider implements CommandProvider {
method getHelp (line 40) | @Override
method handleCommand (line 45) | @Override
method validate (line 50) | @Override
class PluginCommand (line 64) | class PluginCommand {
method PluginCommand (line 69) | PluginCommand(String command) {
method isValidate (line 145) | boolean isValidate() {
method process (line 149) | String process() {
method pluginList (line 177) | String pluginList() {
method pluginInfo (line 191) | String pluginInfo(String pluginName) {
method join (line 236) | String join(URL[] urls, String separator) {
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/service/plugin/PluginDeployServiceImpl.java
class PluginDeployServiceImpl (line 36) | @Singleton
method deploy (line 42) | @Override
method deployPlugin (line 55) | private void deployPlugin(Plugin plugin) throws ArkRuntimeException {
method unDeploy (line 69) | @Override
method unDeployPlugin (line 84) | private void unDeployPlugin(Plugin plugin) throws ArkRuntimeException {
method init (line 100) | @Override
method dispose (line 105) | @Override
method getPriority (line 110) | @Override
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/service/plugin/PluginFactoryServiceImpl.java
class PluginFactoryServiceImpl (line 51) | @Singleton
method createPlugin (line 54) | @Override
method createPlugin (line 81) | @Override
method createPlugin (line 115) | @Override
method createPlugin (line 123) | @Override
method createPlugin (line 131) | @Override
method createEmbedPlugin (line 171) | @Override
method getFinalPluginUrls (line 211) | private URL[] getFinalPluginUrls(PluginArchive pluginArchive, URL[] ex...
method isArkPlugin (line 244) | private boolean isArkPlugin(PluginArchive pluginArchive) {
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/service/plugin/PluginManagerServiceImpl.java
class PluginManagerServiceImpl (line 37) | @Singleton
method registerPlugin (line 42) | @Override
method getPluginByName (line 50) | @Override
method getAllPluginNames (line 55) | @Override
method getPluginsInOrder (line 60) | @Override
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/service/registry/RegistryServiceImpl.java
class RegistryServiceImpl (line 44) | @Singleton
method publishService (line 54) | @Override
method publishService (line 60) | @Override
method referenceService (line 93) | @SuppressWarnings("unchecked")
method referenceService (line 99) | @Override
method referenceServices (line 106) | @Override
method referenceServices (line 112) | @Override
method referenceServices (line 122) | @Override
method unPublishServices (line 137) | @Override
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/service/retrieval/ClassInfoMethod.java
class ClassInfoMethod (line 30) | public class ClassInfoMethod {
method getCodeSource (line 40) | private static String getCodeSource(final CodeSource cs) {
method getClassName (line 54) | private static String getClassName(Class<?> clazz) {
method getModifier (line 74) | private static String getModifier(int mod, char splitter) {
method getSuperClass (line 124) | private static String[] getSuperClass(Class clazz) {
method getClassloader (line 146) | private static String[] getClassloader(Class clazz) {
method createClassInfo (line 169) | public static String createClassInfo(Class<?> clazz, String bizName) {
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/service/retrieval/ClassInfoVO.java
class ClassInfoVO (line 28) | public class ClassInfoVO {
method ClassInfoVO (line 41) | public ClassInfoVO() {
method getClassInfo (line 44) | public String getClassInfo() {
method setClassInfo (line 48) | public void setClassInfo(String classInfo) {
method getCodeSource (line 52) | public String getCodeSource() {
method setCodeSource (line 56) | public void setCodeSource(String codeSource) {
method isInterface (line 60) | public boolean isInterface() {
method setInterface (line 64) | public void setInterface(boolean anInterface) {
method isAnnotation (line 68) | public boolean isAnnotation() {
method setAnnotation (line 72) | public void setAnnotation(boolean annotation) {
method isEnum (line 76) | public boolean isEnum() {
method setEnum (line 80) | public void setEnum(boolean anEnum) {
method getContainerName (line 84) | public String getContainerName() {
method setContainerName (line 88) | public void setContainerName(String containerName) {
method getSimpleName (line 92) | public String getSimpleName() {
method setSimpleName (line 96) | public void setSimpleName(String simpleName) {
method getModifier (line 100) | public String getModifier() {
method setModifier (line 104) | public void setModifier(String modifier) {
method getSuperClass (line 108) | public String[] getSuperClass() {
method setSuperClass (line 112) | public void setSuperClass(String[] superClass) {
method getClassloader (line 116) | public String[] getClassloader() {
method setClassloader (line 120) | public void setClassloader(String[] classloader) {
method toString (line 124) | @Override
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/service/retrieval/InfoQueryCommandProvider.java
class InfoQueryCommandProvider (line 37) | public class InfoQueryCommandProvider implements CommandProvider {
method getHelp (line 39) | @Override
method handleCommand (line 44) | @Override
method validate (line 49) | @Override
class ContainerQueryInfoCommand (line 60) | class ContainerQueryInfoCommand {
method ContainerQueryInfoCommand (line 66) | ContainerQueryInfoCommand(String command) {
method isValidate (line 148) | boolean isValidate() {
method process (line 152) | String process() {
method queryClass (line 166) | String queryClass() {
method createClassInfo (line 186) | StringBuilder createClassInfo(Set<Class<?>> classSet) {
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/service/retrieval/ViewRender.java
class ViewRender (line 31) | public class ViewRender {
method renderClassInfo (line 39) | public static String renderClassInfo(ClassInfoVO clazz) {
method drawSuperClass (line 64) | private static Element drawSuperClass(ClassInfoVO clazz) {
method drawClassLoader (line 68) | private static Element drawClassLoader(String[] classloaders) {
method drawTree (line 72) | private static Element drawTree(String[] nodes) {
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/session/NettyTelnetServer.java
class NettyTelnetServer (line 49) | public class NettyTelnetServer {
method NettyTelnetServer (line 57) | public NettyTelnetServer(int port, Executor executor) {
method open (line 63) | public void open() throws InterruptedException {
method close (line 71) | public void close() {
class NettyTelnetInitializer (line 77) | static class NettyTelnetInitializer extends ChannelInitializer<SocketC...
method initChannel (line 81) | @Override
class NettyTelnetHandler (line 96) | static class NettyTelnetHandler extends SimpleChannelInboundHandler<St...
method channelActive (line 100) | @Override
method exceptionCaught (line 107) | @Override
method channelRead0 (line 114) | @Override
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/session/StandardTelnetServerImpl.java
class StandardTelnetServerImpl (line 44) | @Singleton
method StandardTelnetServerImpl (line 59) | public StandardTelnetServerImpl() {
method run (line 77) | @Override
method shutdown (line 95) | @Override
method init (line 111) | @Override
method dispose (line 120) | @Override
method getPriority (line 127) | @Override
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/session/handler/AbstractTerminalTypeMapping.java
class AbstractTerminalTypeMapping (line 29) | public abstract class AbstractTerminalTypeMapping {
method getDefaultTerminalType (line 31) | public static String getDefaultTerminalType() {
method AbstractTerminalTypeMapping (line 41) | public AbstractTerminalTypeMapping(byte backSpace, byte del) {
method getBackspace (line 50) | public byte getBackspace() {
method getDel (line 54) | public byte getDel() {
method getMatchKeys (line 58) | public KEYS getMatchKeys(String str) {
method isPossibleEscKeys (line 68) | protected boolean isPossibleEscKeys(String str) {
type KEYS (line 77) | public enum KEYS {
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/session/handler/ArkCommandHandler.java
class ArkCommandHandler (line 36) | public class ArkCommandHandler {
method init (line 44) | private static void init() {
method ArkCommandHandler (line 51) | public ArkCommandHandler() {
method handleCommand (line 56) | public String handleCommand(String cmdLine) {
method helpMessage (line 71) | public String helpMessage(List<ServiceReference<CommandProvider>> comm...
method promptMessage (line 80) | public String promptMessage() {
method responseMessage (line 84) | public String responseMessage(String cmd) {
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/test/NoneDelegateTestClassLoader.java
class NoneDelegateTestClassLoader (line 33) | public class NoneDelegateTestClassLoader extends BizClassLoader {
method NoneDelegateTestClassLoader (line 34) | public NoneDelegateTestClassLoader(String bizIdentity, URL[] urls) {
method createTestBiz (line 44) | private Biz createTestBiz(String bizIdentity) {
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/test/TestClassLoader.java
class TestClassLoader (line 40) | public class TestClassLoader extends BizClassLoader {
method TestClassLoader (line 61) | public TestClassLoader(String bizIdentity, URL[] urls, ClassLoader del...
method loadClassInternal (line 73) | @Override
method isDelegateToAppClassLoader (line 87) | private boolean isDelegateToAppClassLoader(String name) {
method createTestBiz (line 119) | private Biz createTestBiz(String bizIdentity) {
FILE: sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/test/TestHelper.java
class TestHelper (line 29) | public class TestHelper {
method TestHelper (line 34) | public TestHelper(Object object) {
method createTestClassLoader (line 38) | public ClassLoader createTestClassLoader() {
method createNoneDelegateTestClassLoader (line 47) | public ClassLoader createNoneDelegateTestClassLoader() {
method isStarted (line 55) | public boolean isStarted() {
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/ArkContainerTest.java
class ArkContainerTest (line 49) | public class ArkContainerTest extends BaseTest {
method before (line 53) | @Override
method after (line 58) | @Override
method testStart (line 63) | @Test
method testStop (line 71) | @Test
method testArkServiceLoader (line 80) | @Test
method testResponseMessage (line 88) | @Test
method testDeployBizAfterMasterBizReady (line 103) | @Test
method testStartNotWithCommandLine (line 132) | @Test(expected = ArkRuntimeException.class)
method testOtherMethods (line 139) | @Test
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/BaseTest.java
class BaseTest (line 52) | public class BaseTest {
method createTestBizModel (line 64) | public static BizModel createTestBizModel(String bizName, String bizVe...
method createTestBizModel (line 74) | public static BizModel createTestBizModel(String bizName, String bizVe...
method before (line 82) | @Before
method after (line 104) | @After
method beforeClass (line 114) | @BeforeClass
method registerMockPlugin (line 118) | protected void registerMockPlugin() {
method registerMockBiz (line 131) | protected void registerMockBiz() {
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/ClassLoaderTest.java
class ClassLoaderTest (line 32) | public class ClassLoaderTest extends BaseTest {
method testDefaultDelegate (line 34) | @Test
method testDelegateConfigure (line 47) | @Test
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/model/BizModelTest.java
class BizModelTest (line 52) | public class BizModelTest {
method testDoCheckDeclared (line 54) | @Test
method testBizStateChanged (line 72) | @Test
method testRecycleBizTempWorkDir (line 108) | @Test
method testStopFailedWithClean (line 128) | @Test
method testStopSucceedWithClean (line 172) | @Test
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/pipeline/HandleArchiveStageTest.java
class HandleArchiveStageTest (line 47) | public class HandleArchiveStageTest {
method before (line 67) | @Before
method after (line 91) | @After
method testProcess (line 100) | @Test
method testProcessStaticBizFromClasspath (line 153) | @Test
method testProcessEmbed (line 164) | @Test
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/ArkServiceContainerTest.java
class ArkServiceContainerTest (line 29) | public class ArkServiceContainerTest extends BaseTest {
method testStart (line 30) | @Test
method testStop (line 37) | @Test
method testGetService (line 44) | @Test
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/api/ArkClientTest.java
class ArkClientTest (line 80) | public class ArkClientTest extends BaseTest {
method before (line 95) | @Before
method testCreateBizSaveFile (line 112) | @Test
method testInstallBiz (line 118) | @Test
method testBizArguments (line 174) | @Test
method testCheckBiz (line 212) | @Test
method testUninstallBiz (line 243) | @Test
method testUninstallBizWhenIncludeLib (line 257) | @Test
method testInstallBizWithThrowable (line 271) | @Test
method testInstallOperation (line 297) | @Test
method testInstallOperationWithDynamicMainClass (line 310) | @Test
method testInstallBizFailed (line 344) | @Test
method testUninstallOperation (line 393) | @Test
method testSwitchOperation (line 408) | @Test
method testCheckOperation (line 423) | @Test
method testInvocationReplay (line 442) | @Test
method testInstallPlugin (line 452) | @Test
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/biz/BizCommandProviderTest.java
class BizCommandProviderTest (line 44) | public class BizCommandProviderTest extends BaseTest {
method before (line 51) | @Override
method testBizCommandPattern (line 69) | @Test
method testBizInfo (line 103) | @Test
method testInstallBiz (line 122) | @Test
method testSwitchBiz (line 135) | @Test
method testUninstallBiz (line 151) | @Test
method testUninstallMasterBiz (line 167) | @Test
method mockBiz (line 185) | private void mockBiz() {
method sleep (line 204) | private void sleep(long mill) {
class MockBiz (line 212) | class MockBiz extends BizModel {
method start (line 213) | @Override
method stop (line 217) | @Override
method testBizCommandInvalidate (line 227) | @Test
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/biz/BizFactoryServiceTest.java
class BizFactoryServiceTest (line 45) | public class BizFactoryServiceTest extends BaseTest {
method before (line 55) | @Override
method test (line 64) | @Test
method testCreateBizWithoutBizOperation (line 85) | @Test
method testCreateBiz (line 111) | @Test
method testPackageInfo (line 122) | @Test
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/biz/BizManagerServiceTest.java
class BizManagerServiceTest (line 40) | public class BizManagerServiceTest extends BaseTest {
method before (line 44) | @Before
method testRegisterBiz (line 52) | @Test
method testDuplicatedRegisterBiz (line 58) | @Test
method testRemovingAndAddBiz (line 66) | @Test
method testUnRegister (line 86) | @Test
method testBizGet (line 100) | @Test
method testDeployWithException (line 151) | @Test(expected = ArkRuntimeException.class)
method testUndeployWithException (line 163) | @Test(expected = ArkRuntimeException.class)
method testIsActiveBiz (line 175) | @Test
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/biz/hook/TestAddBizToStaticDeployHook.java
class TestAddBizToStaticDeployHook (line 36) | @Extension("before-embed-static-deploy-biz-hook")
method getStaticBizToAdd (line 39) | @Override
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/classloader/BizClassLoaderTest.java
class BizClassLoaderTest (line 55) | public class BizClassLoaderTest extends BaseTest {
method before (line 68) | @Before
method testImport (line 81) | @Test
method testAgentClass (line 114) | @Test
method testLoadClassFromPluginClassLoader (line 128) | @Test
method testLoadOverrideClassFromPluginClassLoader (line 228) | @Test
method testGetPluginClassResource (line 291) | @Test
method testLoadClassFromAgentClassLoader (line 320) | @Test
method testDenyImport (line 335) | @Test
method testDenyImportResourceStems (line 392) | @Test
method testSlashResource (line 428) | @Test
method testGetJdkResource (line 447) | @Test
method testCacheResource (line 471) | @Test
method testPublicDefineClass (line 495) | @Test
method getUrlResourceCache (line 509) | private Cache<String, Optional<URL>> getUrlResourceCache(Object classl...
method invalidClassLoaderCache (line 517) | private void invalidClassLoaderCache(ClassLoader classloader) {
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/classloader/ClassLoaderConcurrencyTest.java
class ClassLoaderConcurrencyTest (line 35) | public class ClassLoaderConcurrencyTest extends BaseTest {
method concurrencyLoadClass (line 39) | @Test
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/classloader/ClassLoaderHookTest.java
class ClassLoaderHookTest (line 43) | public class ClassLoaderHookTest extends BaseTest {
method before (line 44) | @Override
method testBizClassLoaderSPI (line 51) | @Test
method testDefaultBizClassLoaderSPI (line 88) | @Test
method testPluginClassLoaderSPI (line 110) | @Test
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/classloader/ClassLoaderServiceTest.java
class ClassLoaderServiceTest (line 49) | public class ClassLoaderServiceTest extends BaseTest {
method before (line 55) | @Before
method testIsSunReflect (line 66) | @Test
method testIsNotSunReflect (line 71) | @Test
method testIsArkSpiClass (line 76) | @Test
method testIsNotArkSpiClass (line 81) | @Test
method testJDKClassLoader (line 86) | @Test
method testArkClassLoader (line 101) | @Test
method testSystemClassLoader (line 107) | @Test
method testAgentClassLoader (line 113) | @Test
method testIsDeniedImportClass (line 121) | @Test
method testIsClassImport (line 142) | @Test
method testFindExportClass (line 157) | @Test
method testFindExportResources (line 178) | @Test
method testFindExportResourceClassLoadersInOrder (line 205) | @Test
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/classloader/CompoundEnumerationTest.java
class CompoundEnumerationTest (line 40) | public class CompoundEnumerationTest extends BaseTest {
method before (line 49) | @Before
method test (line 59) | @Test(expected = NoSuchElementException.class)
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/classloader/PluginClassLoaderTest.java
class PluginClassLoaderTest (line 49) | public class PluginClassLoaderTest extends BaseTest {
method before (line 60) | @Before
method testExportAndImport (line 71) | @Test
method testExportAndNotImport (line 109) | @Test
method testExportResource (line 148) | @Test
method testMultiExportResource (line 190) | @Test
method testExportResourceStems (line 267) | @Test
method testLoadClassFromAgentClassLoader (line 317) | @Test
method testGetJdkResource (line 337) | @Test
method testSlashResource (line 370) | @Test
method testLoadClassInternalWithSunClass (line 387) | @Test(expected = ArkLoaderException.class)
method testLoadClassInternalWithResolve (line 395) | @Test(expected = ArkLoaderException.class)
method testPreLoadClassWithException (line 403) | @Test(expected = ArkLoaderException.class)
method testPostLoadClassWithException (line 410) | @Test(expected = ArkLoaderException.class)
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/classloader/hook/AbstractClassLoaderHook.java
class AbstractClassLoaderHook (line 33) | public class AbstractClassLoaderHook<T> implements ClassLoaderHook<T> {
method preFindClass (line 34) | @Override
method postFindClass (line 42) | @Override
method preFindResource (line 47) | @Override
method postFindResource (line 56) | @Override
method preFindResources (line 65) | @Override
method postFindResources (line 75) | @Override
class ClassA (line 85) | public static class ClassA {
class ClassB (line 88) | public static class ClassB {
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/classloader/hook/TestBizClassLoaderHook.java
class TestBizClassLoaderHook (line 27) | @Extension(Constants.BIZ_CLASS_LOADER_HOOK)
class ClassA (line 29) | public class ClassA {
class ClassB (line 32) | public class ClassB {
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/classloader/hook/TestDefaultBizClassLoaderHook.java
class TestDefaultBizClassLoaderHook (line 33) | @Extension(value = Constants.BIZ_CLASS_LOADER_HOOK, order = 99)
method preFindClass (line 35) | @Override
method postFindClass (line 44) | @Override
method preFindResource (line 53) | @Override
method postFindResource (line 58) | @Override
method preFindResources (line 63) | @Override
method postFindResources (line 69) | @Override
class ClassDefaultA (line 75) | public class ClassDefaultA {
class ClassDefaultB (line 78) | public class ClassDefaultB {
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/classloader/hook/TestPluginClassLoaderHook.java
class TestPluginClassLoaderHook (line 27) | @Extension(Constants.PLUGIN_CLASS_LOADER_HOOK)
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/event/EventAdminServiceTest.java
class EventAdminServiceTest (line 40) | public class EventAdminServiceTest extends BaseTest {
method test (line 45) | @Test
class HighPriorityMockEventHandler (line 75) | class HighPriorityMockEventHandler implements EventHandler<BeforeBizSt...
method handleEvent (line 77) | @Override
method getPriority (line 82) | @Override
class LowPriorityMockEventHandler (line 88) | class LowPriorityMockEventHandler implements EventHandler<BeforeBizSto...
method handleEvent (line 90) | @Override
method getPriority (line 95) | @Override
class BeforeBizStopEventHandler (line 101) | class BeforeBizStopEventHandler implements EventHandler<AfterBizStopEv...
method handleEvent (line 103) | @Override
method getPriority (line 108) | @Override
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/event/EventTest.java
class EventTest (line 58) | public class EventTest extends BaseTest {
method before (line 64) | @Before
method after (line 86) | @After
method testEvent (line 92) | @Test
class TestArkEvent (line 148) | static class TestArkEvent extends AbstractArkEvent {
method TestArkEvent (line 150) | public TestArkEvent(Object source) {
class TestArkEventHandler (line 156) | static class TestArkEventHandler implements EventHandler<TestArkEvent> {
method handleEvent (line 158) | @Override
method getPriority (line 163) | @Override
class AfterBizStartupEventHandler (line 169) | static class AfterBizStartupEventHandler implements EventHandler<After...
method handleEvent (line 171) | @Override
method getPriority (line 176) | @Override
class BeforeBizRecycleEventEventHandler (line 182) | static class BeforeBizRecycleEventEventHandler implements EventHandler...
method handleEvent (line 184) | @Override
method getPriority (line 189) | @Override
class AfterBizStopEventHandler (line 195) | static class AfterBizStopEventHandler implements EventHandler<AfterBiz...
method handleEvent (line 197) | @Override
method getPriority (line 202) | @Override
class AfterBizSwitchEventHandler (line 208) | static class AfterBizSwitchEventHandler implements EventHandler<AfterB...
method handleEvent (line 210) | @Override
method getPriority (line 215) | @Override
class BeforeBizStartupEventHandler (line 221) | static class BeforeBizStartupEventHandler implements EventHandler<Befo...
method handleEvent (line 223) | @Override
method getPriority (line 228) | @Override
class BeforeBizStopEventHandler (line 234) | static class BeforeBizStopEventHandler implements EventHandler<BeforeB...
method handleEvent (line 236) | @Override
method getPriority (line 241) | @Override
class BeforeBizSwitchEventHandler (line 247) | static class BeforeBizSwitchEventHandler implements EventHandler<Befor...
method handleEvent (line 249) | @Override
method getPriority (line 254) | @Override
class AfterPluginStartupEventHandler (line 260) | static class AfterPluginStartupEventHandler implements EventHandler<Af...
method handleEvent (line 262) | @Override
method getPriority (line 267) | @Override
class BeforePluginStopEventHandler (line 273) | static class BeforePluginStopEventHandler implements EventHandler<Befo...
method handleEvent (line 275) | @Override
method getPriority (line 280) | @Override
class AfterPluginStopEventHandler (line 286) | static class AfterPluginStopEventHandler implements EventHandler<After...
method handleEvent (line 288) | @Override
method getPriority (line 293) | @Override
class BeforePluginStartupEventHandler (line 299) | static class BeforePluginStartupEventHandler implements EventHandler<B...
method handleEvent (line 301) | @Override
method getPriority (line 306) | @Override
class AfterFinishDeployEventHandler (line 312) | static class AfterFinishDeployEventHandler implements EventHandler<Aft...
method handleEvent (line 314) | @Override
method getPriority (line 319) | @Override
class AfterFinishStartupEventHandler (line 325) | static class AfterFinishStartupEventHandler implements EventHandler<Af...
method handleEvent (line 327) | @Override
method getPriority (line 332) | @Override
class BizFailedEventHandler (line 338) | static class BizFailedEventHandler implements EventHandler<AfterBizSta...
method handleEvent (line 340) | @Override
method getPriority (line 345) | @Override
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/event/GlobalEventHandlerTest.java
class GlobalEventHandlerTest (line 44) | public class GlobalEventHandlerTest extends BaseTest {
method before (line 54) | @Before
method after (line 64) | @After
method testEvent (line 75) | @Test
class ArkEventHandler (line 96) | static class ArkEventHandler implements EventHandler {
method handleEvent (line 98) | @Override
method getPriority (line 103) | @Override
class ArkEventHandler1 (line 109) | static class ArkEventHandler1 implements EventHandler<ArkEvent> {
method handleEvent (line 111) | @Override
method getPriority (line 116) | @Override
class AbstractArkEventHandler (line 122) | static class AbstractArkEventHandler implements EventHandler<AbstractA...
method handleEvent (line 124) | @Override
method getPriority (line 131) | @Override
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/event/MultiEventTest.java
class MultiEventTest (line 38) | public class MultiEventTest extends BaseTest {
method before (line 44) | @Before
method after (line 54) | @After
method testEvent (line 60) | @Test
class MultiAfterFinishStartupEventHandler (line 67) | static class MultiAfterFinishStartupEventHandler implements
method handleEvent (line 71) | @Override
method getPriority (line 76) | @Override
type OtherHandler (line 82) | interface OtherHandler<T extends TestEvent> {
class TestEvent (line 85) | static class TestEvent {
class SubTestEvent (line 86) | public static class SubTestEvent extends TestEvent {
class AbstractEventHandler (line 91) | static class AbstractEventHandler implements EventHandler<AbstractArkE...
method handleEvent (line 93) | @Override
method getPriority (line 100) | @Override
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/extension/ExtensionClassTest.java
class ExtensionClassTest (line 31) | public class ExtensionClassTest {
method testExtensionClass (line 32) | @Test
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/extension/ExtensionServiceTest.java
class ExtensionServiceTest (line 44) | public class ExtensionServiceTest extends BaseTest {
method before (line 49) | @Override
method after (line 55) | @Override
method testExtensionServiceNotInstance (line 60) | @Test
method testNotExtensibleService (line 74) | @Test
method testNoExtensionAnnotation (line 89) | @Test
method testExtensionServiceLoader (line 104) | @Test
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/extension/spi/ServiceA.java
type ServiceA (line 25) | @Extensible(file = "serviceA")
method service (line 27) | String service();
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/extension/spi/ServiceB.java
type ServiceB (line 25) | @Extensible(singleton = false)
method service (line 27) | String service();
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/extension/spi/ServiceC.java
type ServiceC (line 23) | public interface ServiceC {
method service (line 24) | String service();
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/extension/spi/ServiceD.java
type ServiceD (line 25) | @Extensible(file = "serviceD")
method service (line 27) | String service();
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/extension/spi/SingletonService.java
type SingletonService (line 25) | @Extensible
method service (line 27) | String service();
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/extension/spi/impl/ServiceBImpl1.java
class ServiceBImpl1 (line 26) | @Extension(value = "type1", order = 200)
method service (line 28) | @Override
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/extension/spi/impl/ServiceBImpl2.java
class ServiceBImpl2 (line 26) | @Extension(value = "type1", order = 300)
method service (line 28) | @Override
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/extension/spi/impl/ServiceBImpl3.java
class ServiceBImpl3 (line 26) | @Extension(value = "type1", order = 50)
method service (line 28) | @Override
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/extension/spi/impl/ServiceBImpl4.java
class ServiceBImpl4 (line 26) | @Extension(value = "type2", order = 10)
method service (line 28) | @Override
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/extension/spi/impl/ServiceDImpl.java
class ServiceDImpl (line 25) | public class ServiceDImpl implements ServiceD {
method service (line 26) | @Override
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/extension/spi/impl/SingletonServiceImpl.java
class SingletonServiceImpl (line 26) | @Extension(value = "singletonService", order = 200)
method service (line 28) | @Override
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/injection/InjectionServiceTest.java
class InjectionServiceTest (line 34) | public class InjectionServiceTest extends BaseTest {
method test (line 35) | @Test
class PluginMockService (line 47) | public class PluginMockService {
method getBizManagerService (line 57) | public BizManagerService getBizManagerService() {
method getBizFactoryService (line 61) | public BizFactoryService getBizFactoryService() {
method getClassLoaderService (line 65) | public ClassLoaderService getClassLoaderService() {
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/pipeline/HandleArchiveTest.java
class HandleArchiveTest (line 34) | public class HandleArchiveTest {
method testIncludeExcludePlugin (line 36) | @Test
method testIncludePlugin (line 55) | @Test
method testExcludePlugin (line 72) | @Test
method testNoIncludeExcludeBiz (line 89) | @Test
method testIncludeExcludeBiz (line 99) | @Test
method testIncludeBiz (line 118) | @Test
method testExcludeBiz (line 135) | @Test
method testNoIncludeExcludePlugin (line 152) | @Test
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/plugin/PluginCommandProviderTest.java
class PluginCommandProviderTest (line 40) | public class PluginCommandProviderTest {
method testPluginCommandFormat (line 42) | @Test
method testPluginCommandProcess (line 62) | @Test
method testPluginList (line 127) | @Test
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/plugin/PluginFactoryServiceTest.java
class PluginFactoryServiceTest (line 47) | public class PluginFactoryServiceTest extends BaseTest {
method test (line 50) | @Test
method testCreatePluginWithExtensions (line 58) | @Test
method testCreateEmbedPlugin (line 86) | @Test
method testDeploy (line 97) | @Test(expected = ArkRuntimeException.class)
method testUndeploy (line 108) | @Test(expected = ArkRuntimeException.class)
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/plugin/PluginManagerServiceTest.java
class PluginManagerServiceTest (line 32) | public class PluginManagerServiceTest {
method testGetPluginByName (line 36) | @Test
method testGetAllPluginNames (line 45) | @Test
method testGetPluginsInOrder (line 60) | @Test
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/registry/ServiceRegistrationTest.java
class ServiceRegistrationTest (line 63) | public class ServiceRegistrationTest extends BaseTest {
method before (line 78) | @Before
method after (line 91) | @After
method testPublishService (line 99) | @Test
method testReferenceService (line 115) | @Test
method testPublishDuplicateService (line 125) | @Test
method testPublishDuplicateServiceInPlugin (line 167) | @Test
method testMultipleService (line 206) | @Test
method testFilter (line 289) | @Test
method testContainerService (line 349) | @Test
method testEqualsHashCode (line 363) | @Test
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/retrieval/ClassInfoMethodTest.java
class ClassInfoMethodTest (line 29) | public class ClassInfoMethodTest extends BaseTest {
method testCreateClassInfo (line 31) | @Test
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/retrieval/InfoQueryCommandProviderTest.java
class InfoQueryCommandProviderTest (line 29) | public class InfoQueryCommandProviderTest extends BaseTest {
method before (line 34) | @Override
method testInfoQueryCommandPattern (line 47) | @Test
method testClassInfo (line 58) | @Test
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/retrieval/ViewRenderTest.java
class ViewRenderTest (line 28) | public class ViewRenderTest extends BaseTest {
method testRenderClassInfo (line 30) | @Test
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/service/session/CommandHandlerTest.java
class CommandHandlerTest (line 32) | public class CommandHandlerTest extends BaseTest {
method test (line 34) | @Test
class MockCommandProvider (line 46) | public class MockCommandProvider implements CommandProvider {
method getHelp (line 48) | @Override
method validate (line 53) | @Override
method handleCommand (line 58) | @Override
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/session/NettyTelnetServerTest.java
class NettyTelnetServerTest (line 41) | public class NettyTelnetServerTest {
method before (line 49) | @Before
method after (line 56) | @After
method testNettyTelnetInitializer (line 64) | @Test
method testNettyTelnetHandler (line 84) | @Test
method testStandardTelnetServerImplWithInvalidNumber (line 98) | @Test(expected = ArkRuntimeException.class)
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/test/TestHelperTest.java
class TestHelperTest (line 29) | public class TestHelperTest {
method testCreateNoneDelegateTestClassLoader (line 33) | @Test
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/testdata/ITest.java
type ITest (line 23) | public interface ITest {
method test (line 29) | String test();
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/testdata/activator/PluginActivatorA.java
class PluginActivatorA (line 30) | public class PluginActivatorA implements PluginActivator {
method start (line 32) | @Override
method stop (line 37) | @Override
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/testdata/activator/PluginActivatorADup.java
class PluginActivatorADup (line 30) | public class PluginActivatorADup implements PluginActivator {
method start (line 32) | @Override
method stop (line 38) | @Override
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/testdata/activator/PluginActivatorB.java
class PluginActivatorB (line 30) | public class PluginActivatorB implements PluginActivator {
method start (line 32) | @Override
method stop (line 37) | @Override
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/testdata/activator/PluginActivatorC.java
class PluginActivatorC (line 30) | public class PluginActivatorC implements PluginActivator {
method start (line 32) | @Override
method stop (line 37) | @Override
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/testdata/classloader/ClassLoaderTestClass.java
class ClassLoaderTestClass (line 24) | public class ClassLoaderTestClass {
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/testdata/impl/TestObjectA.java
class TestObjectA (line 26) | public class TestObjectA implements ITest {
method test (line 30) | @Override
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/testdata/impl/TestObjectB.java
class TestObjectB (line 26) | public class TestObjectB implements ITest {
method test (line 30) | @Override
FILE: sofa-ark-parent/core-impl/container/src/test/java/com/alipay/sofa/ark/container/testdata/impl/TestObjectC.java
class TestObjectC (line 26) | public class TestObjectC implements ITest {
method test (line 28) | @Override
FILE: sofa-ark-parent/core/api/src/main/java/com/alipay/sofa/ark/api/ArkClient.java
class ArkClient (line 54) | public class ArkClient {
method getBizInstallDirectory (line 71) | private static File getBizInstallDirectory() {
method createBizSaveFile (line 77) | public static File createBizSaveFile(String bizName, String bizVersion...
method createBizSaveFile (line 86) | public static File createBizSaveFile(String bizName, String bizVersion) {
method getInjectionService (line 90) | public static InjectionService getInjectionService() {
method setInjectionService (line 94) | public static void setInjectionService(InjectionService injectionServi...
method getBizManagerService (line 98) | public static BizManagerService getBizManagerService() {
method setBizManagerService (line 102) | public static void setBizManagerService(BizManagerService bizManagerSe...
method getBizFactoryService (line 106) | public static BizFactoryService getBizFactoryService() {
method setBizFactoryService (line 110) | public static void setBizFactoryService(BizFactoryService bizFactorySe...
method setPluginManagerService (line 114) | public static void setPluginManagerService(PluginManagerService plugin...
method getPluginManagerService (line 118) | public static PluginManagerService getPluginManagerService() {
method getPluginFactoryService (line 122) | public static PluginFactoryService getPluginFactoryService() {
method setPluginFactoryService (line 126) | public static void setPluginFactoryService(PluginFactoryService plugin...
method getMasterBiz (line 130) | public static Biz getMasterBiz() {
method setMasterBiz (line 134) | public static void setMasterBiz(Biz masterBiz) {
method getEventAdminService (line 138) | public static EventAdminService getEventAdminService() {
method setEventAdminService (line 142) | public static void setEventAdminService(EventAdminService eventAdminSe...
method getArguments (line 146) | public static String[] getArguments() {
method setArguments (line 150) | public static void setArguments(String[] arguments) {
method getEnvs (line 154) | public static Map<String, String> getEnvs() {
method setEnvs (line 158) | public static void setEnvs(Map<String, String> envs) {
method installBiz (line 168) | public static ClientResponse installBiz(File bizFile) throws Throwable {
method installBiz (line 172) | public static ClientResponse installBiz(File bizFile, String[] args) t...
method installBiz (line 176) | public static ClientResponse installBiz(File bizFile, String[] args, M...
method installBiz (line 184) | public static ClientResponse installBiz(File bizFile, BizConfig bizCon...
method doInstallBiz (line 188) | private static ClientResponse doInstallBiz(File bizFile, BizConfig biz...
method uninstallBiz (line 249) | public static ClientResponse uninstallBiz(String bizName, String bizVe...
method checkBiz (line 286) | public static ClientResponse checkBiz() {
method checkBiz (line 296) | public static ClientResponse checkBiz(String bizName) {
method checkBiz (line 307) | public static ClientResponse checkBiz(String bizName, String bizVersio...
method switchBiz (line 343) | public static ClientResponse switchBiz(String bizName, String bizVersi...
method installOperation (line 371) | public static ClientResponse installOperation(BizOperation bizOperatio...
method installOperation (line 375) | public static ClientResponse installOperation(BizOperation bizOperatio...
method installOperation (line 380) | public static ClientResponse installOperation(BizOperation bizOperatio...
method doInstallOperation (line 385) | private static ClientResponse doInstallOperation(BizOperation bizOpera...
method uninstallOperation (line 424) | public static ClientResponse uninstallOperation(BizOperation bizOperat...
method switchOperation (line 431) | public static ClientResponse switchOperation(BizOperation bizOperation) {
method checkOperation (line 438) | public static ClientResponse checkOperation(BizOperation bizOperation) {
method installPlugin (line 445) | public static ClientResponse installPlugin(PluginOperation pluginOpera...
method checkPlugin (line 518) | public static ClientResponse checkPlugin() {
method checkPlugin (line 522) | public static ClientResponse checkPlugin(String pluginName) {
method invocationReplay (line 555) | public static Object invocationReplay(String version, Replay replay) {
method getLogger (line 564) | private static ArkLogger getLogger() {
FILE: sofa-ark-parent/core/api/src/main/java/com/alipay/sofa/ark/api/ArkConfigs.java
class ArkConfigs (line 38) | public class ArkConfigs {
method init (line 48) | public static void init(List<URL> confFiles) {
method loadConfigFile (line 65) | private static void loadConfigFile(InputStream inputStream) throws IOE...
method setSystemProperty (line 79) | public static void setSystemProperty(String key, String value) {
method getSystemProperty (line 88) | public static String getSystemProperty(String key) {
method getStringValue (line 98) | public static String getStringValue(String primaryKey) {
method getStringValue (line 113) | public static String getStringValue(String primaryKey, String defaultV...
method getIntValue (line 125) | public static int getIntValue(String primaryKey, int defaultValue) {
method getBooleanValue (line 130) | public static boolean getBooleanValue(String primaryKey, boolean defau...
method keySet (line 140) | public static Set<String> keySet() {
method putStringValue (line 151) | public static void putStringValue(String key, String value) {
method isEmbedEnable (line 155) | public static boolean isEmbedEnable() {
method setEmbedEnable (line 159) | public static void setEmbedEnable(boolean enable) {
method isEmbedStaticBizEnable (line 163) | public static boolean isEmbedStaticBizEnable() {
method setEmbedStaticBizEnable (line 167) | public static void setEmbedStaticBizEnable(boolean enable) {
method isBizSpecifyDependentPluginsEnable (line 171) | public static boolean isBizSpecifyDependentPluginsEnable() {
FILE: sofa-ark-parent/core/api/src/main/java/com/alipay/sofa/ark/api/ClientResponse.java
class ClientResponse (line 30) | public class ClientResponse {
method getMessage (line 37) | public String getMessage() {
method setMessage (line 41) | public ClientResponse setMessage(String message) {
method getCode (line 46) | public ResponseCode getCode() {
method setCode (line 50) | public ClientResponse setCode(ResponseCode code) {
method getBizInfos (line 55) | public Set<BizInfo> getBizInfos() {
method setBizInfos (line 59) | public ClientResponse setBizInfos(Set<BizInfo> bizInfos) {
method getPluginInfos (line 64) | public Set<Plugin> getPluginInfos() {
method setPluginInfos (line 68) | public ClientResponse setPluginInfos(Set<Plugin> pluginInfos) {
FILE: sofa-ark-parent/core/api/src/main/java/com/alipay/sofa/ark/api/ResponseCode.java
type ResponseCode (line 23) | public enum ResponseCode {
FILE: sofa-ark-parent/core/api/src/test/java/com/alipay/sofa/ark/api/ArkConfigsTest.java
class ArkConfigsTest (line 28) | public class ArkConfigsTest {
method testLoadConfigFile (line 30) | @Test
FILE: sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/adapter/ArkLogbackContextSelector.java
class ArkLogbackContextSelector (line 29) | public class ArkLogbackContextSelector implements ContextSelector {
method ArkLogbackContextSelector (line 38) | public ArkLogbackContextSelector(LoggerContext loggerContext) {
method getLoggerContext (line 42) | @Override
method findClassLoader (line 51) | private ClassLoader findClassLoader() {
method getContext (line 79) | private LoggerContext getContext(ClassLoader cls) {
method getLoggerContext (line 94) | @Override
method getDefaultLoggerContext (line 108) | @Override
method detachLoggerContext (line 113) | @Override
method removeContext (line 127) | public LoggerContext removeContext(ClassLoader cls) {
method getContextNames (line 134) | @Override
FILE: sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/guice/AbstractArkGuiceModule.java
class AbstractArkGuiceModule (line 27) | public abstract class AbstractArkGuiceModule extends AbstractModule {
FILE: sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/log/ArkLogger.java
class ArkLogger (line 28) | public class ArkLogger implements Logger {
method ArkLogger (line 32) | public ArkLogger(Logger logger) {
method getName (line 36) | @Override
method isTraceEnabled (line 41) | @Override
method trace (line 46) | @Override
method trace (line 51) | @Override
method trace (line 56) | @Override
method trace (line 61) | @Override
method trace (line 66) | @Override
method isTraceEnabled (line 71) | @Override
method trace (line 76) | @Override
method trace (line 81) | @Override
method trace (line 86) | @Override
method trace (line 91) | @Override
method trace (line 96) | @Override
method isDebugEnabled (line 101) | @Override
method debug (line 106) | @Override
method debug (line 111) | @Override
method debug (line 116) | @Override
method debug (line 121) | @Override
method debug (line 126) | @Override
method isDebugEnabled (line 131) | @Override
method debug (line 136) | @Override
method debug (line 141) | @Override
method debug (line 146) | @Override
method debug (line 151) | @Override
method debug (line 156) | @Override
method isInfoEnabled (line 161) | @Override
method info (line 166) | @Override
method info (line 171) | @Override
method info (line 176) | @Override
method info (line 181) | @Override
method info (line 186) | @Override
method isInfoEnabled (line 191) | @Override
method info (line 196) | @Override
method info (line 201) | @Override
method info (line 206) | @Override
method info (line 211) | @Override
method info (line 216) | @Override
method isWarnEnabled (line 221) | @Override
method warn (line 226) | @Override
method warn (line 231) | @Override
method warn (line 236) | @Override
method warn (line 241) | @Override
method warn (line 246) | @Override
method isWarnEnabled (line 251) | @Override
method warn (line 256) | @Override
method warn (line 261) | @Override
method warn (line 266) | @Override
method warn (line 271) | @Override
method warn (line 276) | @Override
method isErrorEnabled (line 281) | @Override
method error (line 286) | @Override
method error (line 291) | @Override
method error (line 296) | @Override
method error (line 301) | @Override
method error (line 306) | @Override
method isErrorEnabled (line 311) | @Override
method error (line 316) | @Override
method error (line 321) | @Override
method error (line 326) | @Override
method error (line 331) | @Override
method error (line 336) | @Override
FILE: sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/log/ArkLoggerFactory.java
class ArkLoggerFactory (line 27) | public class ArkLoggerFactory {
method getLogger (line 35) | public static ArkLogger getLogger(Class<?> clazz) {
method getLogger (line 42) | public static ArkLogger getLogger(String name) {
method getDefaultLogger (line 49) | public static ArkLogger getDefaultLogger() {
FILE: sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/thread/CommonThreadPool.java
class CommonThreadPool (line 30) | public class CommonThreadPool {
method init (line 81) | private void init() {
method getCorePoolSize (line 93) | public int getCorePoolSize() {
method setCorePoolSize (line 97) | public CommonThreadPool setCorePoolSize(int corePoolSize) {
method getMaximumPoolSize (line 102) | public int getMaximumPoolSize() {
method setMaximumPoolSize (line 106) | public CommonThreadPool setMaximumPoolSize(int maximumPoolSize) {
method getKeepAliveTime (line 111) | public int getKeepAliveTime() {
method setKeepAliveTime (line 115) | public CommonThreadPool setKeepAliveTime(int keepAliveTime) {
method getQueueSize (line 120) | public int getQueueSize() {
method setQueueSize (line 124) | public CommonThreadPool setQueueSize(int queueSize) {
method getThreadPoolName (line 129) | public String getThreadPoolName() {
method setThreadPoolName (line 133) | public CommonThreadPool setThreadPoolName(String threadPoolName) {
method isDaemon (line 138) | public boolean isDaemon() {
method setDaemon (line 142) | public CommonThreadPool setDaemon(boolean daemon) {
method isAllowCoreThreadTimeOut (line 147) | public boolean isAllowCoreThreadTimeOut() {
method setAllowCoreThreadTimeOut (line 151) | public CommonThreadPool setAllowCoreThreadTimeOut(boolean allowCoreThr...
method isPrestartAllCoreThreads (line 156) | public boolean isPrestartAllCoreThreads() {
method setPrestartAllCoreThreads (line 160) | public CommonThreadPool setPrestartAllCoreThreads(boolean prestartAllC...
method getExecutor (line 170) | public ThreadPoolExecutor getExecutor() {
FILE: sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/thread/NamedThreadFactory.java
class NamedThreadFactory (line 28) | public class NamedThreadFactory implements ThreadFactory {
method NamedThreadFactory (line 65) | public NamedThreadFactory(String secondPrefix) {
method NamedThreadFactory (line 75) | public NamedThreadFactory(String secondPrefix, boolean daemon) {
method newThread (line 82) | @Override
FILE: sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/thread/ThreadPoolManager.java
class ThreadPoolManager (line 27) | public class ThreadPoolManager {
method registerThreadPool (line 40) | public static synchronized void registerThreadPool(String threadPoolName,
method unRegisterUserThread (line 53) | public static synchronized void unRegisterUserThread(String threadPool...
method getThreadPool (line 65) | public static CommonThreadPool getThreadPool(String threadPoolName) {
FILE: sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/util/AssertUtils.java
class AssertUtils (line 24) | public class AssertUtils {
method assertNotNull (line 33) | public static void assertNotNull(Object instance, String msg) {
method assertNull (line 46) | public static void assertNull(Object instance, String msg) {
method isTrue (line 63) | public static void isTrue(final boolean expression, final String message,
method isFalse (line 81) | public static void isFalse(final boolean expression, final String mess...
FILE: sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/util/BizIdentityUtils.java
class BizIdentityUtils (line 26) | public class BizIdentityUtils {
method generateBizIdentity (line 27) | public static String generateBizIdentity(Biz biz) {
method generateBizIdentity (line 31) | public static String generateBizIdentity(String bizName, String bizVer...
method isValid (line 35) | public static boolean isValid(String bizIdentity) {
FILE: sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/util/ClassLoaderUtils.java
class ClassLoaderUtils (line 38) | public class ClassLoaderUtils {
method pushContextClassLoader (line 54) | public static ClassLoader pushContextClassLoader(ClassLoader newClassL...
method popContextClassLoader (line 65) | public static void popContextClassLoader(ClassLoader oldClassLoader) {
method getAgentClassPath (line 69) | public static URL[] getAgentClassPath() {
method processSkyWalking (line 103) | public static void processSkyWalking(final String path, final List<URL...
method getURLs (line 118) | @SuppressWarnings({ "restriction", "unchecked" })
FILE: sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/util/ClassUtils.java
class ClassUtils (line 37) | public class ClassUtils {
method getPackageName (line 45) | public static String getPackageName(String className) {
method collectClasses (line 59) | public static List<String> collectClasses(File dir) throws IOException {
method getCodeBase (line 80) | public static String getCodeBase(Class<?> cls) {
FILE: sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/util/EnvironmentUtils.java
class EnvironmentUtils (line 29) | public class EnvironmentUtils {
method getProperty (line 33) | public static String getProperty(String key) {
method getProperty (line 41) | public static String getProperty(String key, String defaultValue) {
method setProperty (line 49) | public static void setProperty(String key, String value) {
method setSystemProperty (line 53) | public static void setSystemProperty(String key, String value) {
method clearProperty (line 57) | public static void clearProperty(String key) {
method clearSystemProperty (line 61) | public static void clearSystemProperty(String key) {
method isOpenSecurity (line 65) | public static boolean isOpenSecurity() {
FILE: sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/util/FileUtils.java
class FileUtils (line 39) | public class FileUtils {
method sha1Hash (line 47) | public static String sha1Hash(File file) throws IOException {
method bytesToHex (line 65) | private static String bytesToHex(byte[] bytes) {
method createTempDir (line 77) | public static synchronized File createTempDir(String subPath) {
method copyInputStreamToFile (line 94) | public static void copyInputStreamToFile(final InputStream source, fin...
method getCompatiblePath (line 104) | public static String getCompatiblePath(String path) {
method unzip (line 111) | public static File unzip(File root, String targetPath) throws IOExcept...
method mkdir (line 167) | public static File mkdir(String dirPath) {
method decodePath (line 185) | public static String decodePath(String path) {
method file (line 201) | public static File file(String path) {
method file (line 212) | public static File file(String parent, String path) {
FILE: sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/util/OrderComparator.java
class OrderComparator (line 30) | public class OrderComparator implements Comparator<PriorityOrdered> {
method compare (line 31) | @Override
FILE: sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/util/ParseUtils.java
class ParseUtils (line 29) | public class ParseUtils {
method parsePackageNodeAndStem (line 37) | public static void parsePackageNodeAndStem(Set<String> candidates, Set...
method parseResourceAndStem (line 55) | public static void parseResourceAndStem(Set<String> candidates, Set<St...
method parseExcludeConf (line 73) | public static void parseExcludeConf(LinkedHashSet<String> targetSet, S...
FILE: sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/util/PortSelectUtils.java
class PortSelectUtils (line 27) | public class PortSelectUtils {
method selectAvailablePort (line 46) | public synchronized static int selectAvailablePort(int defaultPort, in...
method available (line 60) | private static boolean available(int port) {
FILE: sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/util/ReflectionUtils.java
class ReflectionUtils (line 32) | public class ReflectionUtils {
type FieldCallback (line 37) | public interface FieldCallback {
method doWith (line 44) | void doWith(Field field) throws ArkRuntimeException;
method doWithFields (line 47) | public static void doWithFields(Class<?> clazz, FieldCallback fc) {
method makeAccessible (line 59) | public static void makeAccessible(Field field) {
FILE: sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/util/SimpleByteBuffer.java
class SimpleByteBuffer (line 26) | public class SimpleByteBuffer {
method SimpleByteBuffer (line 36) | public SimpleByteBuffer() {
method resize (line 40) | private void resize() {
method add (line 46) | public void add(byte b) {
method insert (line 53) | public void insert(byte b) {
method goRight (line 65) | public byte goRight() {
method goLeft (line 72) | public boolean goLeft() {
method backSpace (line 80) | public void backSpace() {
method delete (line 88) | public void delete() {
method getBuffer (line 95) | public byte[] getBuffer() {
method getAndClearBuffer (line 101) | public byte[] getAndClearBuffer() {
method getPos (line 109) | public int getPos() {
method getSize (line 113) | public int getSize() {
method getGap (line 117) | public int getGap() {
FILE: sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/util/StringUtils.java
class StringUtils (line 26) | public class StringUtils {
method isEmpty (line 40) | public static boolean isEmpty(String str) {
method isSameStr (line 50) | public static boolean isSameStr(String a, String b) {
method setToStr (line 62) | public static String setToStr(Set<String> stringSet, String delimiter) {
method contains (line 66) | public static boolean contains(String sourceStr, String searchStr) {
method setToStr (line 81) | public static String setToStr(Set<String> stringSet, String delimiter,...
method strToSet (line 96) | public static Set<String> strToSet(String str, String delimiter) {
method strToList (line 100) | public static List<String> strToList(String str, String delimiter) {
method startWithToLowerCase (line 118) | public static boolean startWithToLowerCase(String thisString, String a...
method removeCR (line 138) | public static String removeCR(String originalStr) {
method removeSpcChar (line 149) | public static String removeSpcChar(String originalStr, String spcChar) {
FILE: sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/util/ThreadPoolUtils.java
class ThreadPoolUtils (line 30) | public class ThreadPoolUtils {
method buildQueue (line 38) | public static BlockingQueue<Runnable> buildQueue(int size) {
method buildQueue (line 49) | public static BlockingQueue<Runnable> buildQueue(int size, boolean isP...
FILE: sofa-ark-parent/core/common/src/test/java/com/alipay/sofa/ark/common/adapter/ArkLogbackContextSelectorTest.java
class ArkLogbackContextSelectorTest (line 39) | public class ArkLogbackContextSelectorTest {
method testContextSelector (line 41) | @Test
FILE: sofa-ark-parent/core/common/src/test/java/com/alipay/sofa/ark/common/thread/CommonThreadPoolTest.java
class CommonThreadPoolTest (line 31) | public class CommonThreadPoolTest {
method testCommonThreadPool (line 35) | @Test
method testBuildQueue (line 49) | @Test
FILE: sofa-ark-parent/core/common/src/test/java/com/alipay/sofa/ark/common/util/AssertUtilsTest.java
class AssertUtilsTest (line 33) | public class AssertUtilsTest {
method getTmpDir (line 35) | public static File getTmpDir() {
method testAssertNotNullNull (line 40) | @Test(expected = IllegalArgumentException.class)
method testAssertNotNullNotNull (line 52) | @Test
method testAssertIsTrue (line 57) | @Test
method testAssertIsFalse (line 67) | @Test
method assertNull (line 77) | @Test(expected = IllegalArgumentException.class)
FILE: sofa-ark-parent/core/common/src/test/java/com/alipay/sofa/ark/common/util/BizIdentityUtilsTest.java
class BizIdentityUtilsTest (line 30) | public class BizIdentityUtilsTest {
method testBizIdentity (line 31) | @Test
FILE: sofa-ark-parent/core/common/src/test/java/com/alipay/sofa/ark/common/util/ClassLoaderUtilTest.java
class ClassLoaderUtilTest (line 44) | public class ClassLoaderUtilTest {
class MockClassLoader (line 46) | private class MockClassLoader extends ClassLoader {
method MockClassLoader (line 50) | private MockClassLoader(URL[] urls) {
method getURLs (line 54) | private URL[] getURLs() {
class URLClassPath (line 58) | private class URLClassPath {
method URLClassPath (line 61) | private URLClassPath(URL[] urls) {
method getURLs (line 65) | private URL[] getURLs() {
method testPushContextClassLoader (line 71) | @Test
method testPopContextClassLoader (line 78) | @Test
method testGetURLs (line 85) | @Test
method testGetAgentClassPath (line 120) | @Test
method testParseSkyWalkingAgentPath (line 139) | @Test
method testEnvironmentUtils (line 157) | @Test
FILE: sofa-ark-parent/core/common/src/test/java/com/alipay/sofa/ark/common/util/ClassUtilsTest.java
class ClassUtilsTest (line 35) | public class ClassUtilsTest {
method testGetPackageName (line 37) | @Test
method testCollectClasses (line 43) | @Test
FILE: sofa-ark-parent/core/common/src/test/java/com/alipay/sofa/ark/common/util/FileUtilsTest.java
class FileUtilsTest (line 38) | public class FileUtilsTest {
method before (line 42) | @Before
method after (line 47) | @After
method testGetCompatiblePath (line 52) | @Test
method testSHA1Hash (line 60) | @Test
method testUnzip (line 66) | @Test
method testMkdir (line 73) | @Test
method testDecodePath (line 85) | @Test
method testNewFile (line 93) | @Test
FILE: sofa-ark-parent/core/common/src/test/java/com/alipay/sofa/ark/common/util/ParseUtilsTest.java
class ParseUtilsTest (line 32) | public class ParseUtilsTest {
method before (line 42) | @Before
method testParseUtils (line 50) | @Test
method after (line 58) | @After
FILE: sofa-ark-parent/core/common/src/test/java/com/alipay/sofa/ark/common/util/PortSelectUtilsTest.java
class PortSelectUtilsTest (line 28) | public class PortSelectUtilsTest {
method selectMinimumPort (line 30) | @Test
method selectUnusedPort (line 36) | @Test
method selectUsedPort (line 42) | @Test
method selectSinglePort (line 52) | @Test
method selectMaximumPort (line 62) | @Test
FILE: sofa-ark-parent/core/common/src/test/java/com/alipay/sofa/ark/common/util/SimpleByteBufferTest.java
class SimpleByteBufferTest (line 23) | public class SimpleByteBufferTest {
method testSimpleByteBuffer (line 27) | @Test
FILE: sofa-ark-parent/core/common/src/test/java/com/alipay/sofa/ark/common/util/StringUtilsTest.java
class StringUtilsTest (line 28) | public class StringUtilsTest {
method testEmpty (line 30) | @Test
method testSameStr (line 37) | @Test
method testListToStr (line 49) | @Test
method testContains (line 68) | @Test
method testStrToList (line 78) | @Test
method testStrToSet (line 87) | @Test
method testStartWithToLowerCase (line 101) | @Test
method testRemoveCR (line 109) | @Test
method testRemoveSpcChar (line 117) | @Test
FILE: sofa-ark-parent/core/exception/src/main/java/com/alipay/sofa/ark/exception/ArkLoaderException.java
class ArkLoaderException (line 25) | public class ArkLoaderException extends ClassNotFoundException {
method ArkLoaderException (line 29) | public ArkLoaderException(String s) {
method ArkLoaderException (line 33) | public ArkLoaderException(String s, Throwable ex) {
method fillInStackTrace (line 38) | @Override
method getCause (line 44) | public Throwable getCause() {
FILE: sofa-ark-parent/core/exception/src/main/java/com/alipay/sofa/ark/exception/ArkRuntimeException.java
class ArkRuntimeException (line 25) | public class ArkRuntimeException extends RuntimeException {
method ArkRuntimeException (line 27) | public ArkRuntimeException(String message, Throwable cause) {
method ArkRuntimeException (line 31) | public ArkRuntimeException(Throwable cause) {
method ArkRuntimeException (line 35) | public ArkRuntimeException(String message) {
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/archive/AbstractArchive.java
class AbstractArchive (line 32) | public abstract class AbstractArchive implements Archive {
method getNestedArchives (line 34) | @SuppressWarnings("unchecked")
method getUrls (line 46) | public URL[] getUrls(EntryFilter entryFilter) throws IOException {
method isEntryExist (line 59) | public boolean isEntryExist(EntryFilter filter) {
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/archive/Archive.java
type Archive (line 32) | public interface Archive extends Iterable<Archive.Entry> {
method getUrl (line 39) | URL getUrl() throws MalformedURLException;
method getManifest (line 46) | Manifest getManifest() throws IOException;
method getNestedArchives (line 54) | List<Archive> getNestedArchives(EntryFilter filter) throws IOException;
method getNestedArchive (line 62) | Archive getNestedArchive(Entry entry) throws IOException;
method getInputStream (line 70) | InputStream getInputStream(ZipEntry zipEntry) throws IOException;
type Entry (line 75) | interface Entry {
method isDirectory (line 81) | boolean isDirectory();
method getName (line 87) | String getName();
type EntryFilter (line 94) | interface EntryFilter {
method matches (line 101) | boolean matches(Entry entry);
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/archive/BizArchive.java
type BizArchive (line 28) | public interface BizArchive extends Archive {
method getUrls (line 36) | URL[] getUrls() throws IOException;
method isEntryExist (line 45) | boolean isEntryExist(EntryFilter filter);
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/archive/ContainerArchive.java
type ContainerArchive (line 28) | public interface ContainerArchive extends Archive {
method getUrls (line 36) | URL[] getUrls() throws IOException;
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/archive/ExecutableArchive.java
type ExecutableArchive (line 28) | public interface ExecutableArchive extends Archive {
method getContainerArchive (line 35) | ContainerArchive getContainerArchive() throws Exception;
method getBizArchives (line 42) | List<BizArchive> getBizArchives() throws Exception;
method getPluginArchives (line 49) | List<PluginArchive> getPluginArchives() throws Exception;
method getConfClasspath (line 57) | List<URL> getConfClasspath() throws Exception;
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/archive/PluginArchive.java
type PluginArchive (line 29) | public interface PluginArchive extends Archive {
method getUrls (line 37) | URL[] getUrls() throws IOException;
method setExtensionUrls (line 43) | void setExtensionUrls(URL[] extensionUrls);
method isEntryExist (line 52) | boolean isEntryExist(EntryFilter filter);
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/argument/CommandArgument.java
type CommandArgument (line 25) | public interface CommandArgument {
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/argument/LaunchCommand.java
class LaunchCommand (line 43) | public class LaunchCommand {
method isExecutedByCommandLine (line 59) | public boolean isExecutedByCommandLine() {
method getExecutableArkBizJar (line 63) | public URL getExecutableArkBizJar() {
method setExecutableArkBizJar (line 67) | public LaunchCommand setExecutableArkBizJar(URL executableArkBizJar) {
method getClasspath (line 72) | public URL[] getClasspath() {
method setClasspath (line 76) | public LaunchCommand setClasspath(URL[] classpath) {
method getEntryMethodName (line 81) | public String getEntryMethodName() {
method setEntryMethodName (line 85) | public LaunchCommand setEntryMethodName(String entryMethodName) {
method getEntryClassName (line 90) | public String getEntryClassName() {
method setEntryClassName (line 94) | public LaunchCommand setEntryClassName(String entryClassName) {
method getLaunchArgs (line 99) | public String[] getLaunchArgs() {
method setLaunchArgs (line 103) | public LaunchCommand setLaunchArgs(String[] launchArgs) {
method getProfiles (line 108) | public String[] getProfiles() {
method setProfiles (line 117) | public LaunchCommand setProfiles(String[] profiles) {
method parse (line 122) | public static LaunchCommand parse(String[] args) throws MalformedURLEx...
method toString (line 169) | public static String toString(String[] args) {
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/command/Command.java
type Command (line 23) | public interface Command {
method getCommandMarker (line 29) | String getCommandMarker();
method getCommandHelp (line 35) | String getCommandHelp();
method process (line 42) | String process() throws Throwable;
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/constant/Constants.java
class Constants (line 26) | public class Constants {
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/event/AbstractArkEvent.java
class AbstractArkEvent (line 23) | public abstract class AbstractArkEvent<T> implements ArkEvent {
method AbstractArkEvent (line 29) | public AbstractArkEvent(T source) {
method getSource (line 34) | public T getSource() {
method setSource (line 38) | public void setSource(T source) {
method getTopic (line 42) | @Override
method setTopic (line 47) | public void setTopic(String topic) {
method getTimestamp (line 51) | public long getTimestamp() {
method setTimestamp (line 55) | public void setTimestamp(long timestamp) {
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/event/AfterFinishDeployEvent.java
class AfterFinishDeployEvent (line 25) | public class AfterFinishDeployEvent extends AbstractArkEvent<String> {
method AfterFinishDeployEvent (line 27) | public AfterFinishDeployEvent() {
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/event/AfterFinishStartupEvent.java
class AfterFinishStartupEvent (line 25) | public class AfterFinishStartupEvent extends AbstractArkEvent<String> {
method AfterFinishStartupEvent (line 27) | public AfterFinishStartupEvent() {
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/event/ArkEvent.java
type ArkEvent (line 25) | public interface ArkEvent {
method getTopic (line 31) | String getTopic();
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/event/biz/AfterAllBizStartupEvent.java
class AfterAllBizStartupEvent (line 28) | public class AfterAllBizStartupEvent extends AbstractArkEvent<Biz> {
method AfterAllBizStartupEvent (line 30) | public AfterAllBizStartupEvent() {
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/event/biz/AfterBizStartupEvent.java
class AfterBizStartupEvent (line 27) | public class AfterBizStartupEvent extends AbstractArkEvent<Biz> {
method AfterBizStartupEvent (line 29) | public AfterBizStartupEvent(Biz source) {
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/event/biz/AfterBizStartupFailedEvent.java
class AfterBizStartupFailedEvent (line 27) | public class AfterBizStartupFailedEvent extends AbstractArkEvent<Biz> {
method AfterBizStartupFailedEvent (line 31) | public AfterBizStartupFailedEvent(Biz source, Throwable e) {
method getThrowable (line 37) | public Throwable getThrowable() {
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/event/biz/AfterBizStopEvent.java
class AfterBizStopEvent (line 27) | public class AfterBizStopEvent extends AbstractArkEvent<Biz> {
method AfterBizStopEvent (line 29) | public AfterBizStopEvent(Biz source) {
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/event/biz/AfterBizStopFailedEvent.java
class AfterBizStopFailedEvent (line 27) | public class AfterBizStopFailedEvent extends AbstractArkEvent<Biz> {
method AfterBizStopFailedEvent (line 31) | public AfterBizStopFailedEvent(Biz source, Throwable t) {
method getThrowable (line 37) | public Throwable getThrowable() {
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/event/biz/AfterBizSwitchEvent.java
class AfterBizSwitchEvent (line 27) | public class AfterBizSwitchEvent extends AbstractArkEvent<Biz> {
method AfterBizSwitchEvent (line 29) | public AfterBizSwitchEvent(Biz source) {
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/event/biz/BeforeBizRecycleEvent.java
class BeforeBizRecycleEvent (line 27) | public class BeforeBizRecycleEvent extends AbstractArkEvent<Biz> {
method BeforeBizRecycleEvent (line 29) | public BeforeBizRecycleEvent(Biz source) {
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/event/biz/BeforeBizStartupEvent.java
class BeforeBizStartupEvent (line 27) | public class BeforeBizStartupEvent extends AbstractArkEvent<Biz> {
method BeforeBizStartupEvent (line 29) | public BeforeBizStartupEvent(Biz source) {
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/event/biz/BeforeBizStopEvent.java
class BeforeBizStopEvent (line 27) | public class BeforeBizStopEvent extends AbstractArkEvent<Biz> {
method BeforeBizStopEvent (line 29) | public BeforeBizStopEvent(Biz source) {
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/event/biz/BeforeBizSwitchEvent.java
class BeforeBizSwitchEvent (line 27) | public class BeforeBizSwitchEvent extends AbstractArkEvent<Biz> {
method BeforeBizSwitchEvent (line 29) | public BeforeBizSwitchEvent(Biz source) {
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/event/plugin/AfterPluginStartupEvent.java
class AfterPluginStartupEvent (line 27) | public class AfterPluginStartupEvent extends AbstractArkEvent<Plugin> {
method AfterPluginStartupEvent (line 29) | public AfterPluginStartupEvent(Plugin source) {
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/event/plugin/AfterPluginStopEvent.java
class AfterPluginStopEvent (line 27) | public class AfterPluginStopEvent extends AbstractArkEvent<Plugin> {
method AfterPluginStopEvent (line 29) | public AfterPluginStopEvent(Plugin source) {
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/event/plugin/BeforePluginStartupEvent.java
class BeforePluginStartupEvent (line 27) | public class BeforePluginStartupEvent extends AbstractArkEvent<Plugin> {
method BeforePluginStartupEvent (line 29) | public BeforePluginStartupEvent(Plugin source) {
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/event/plugin/BeforePluginStopEvent.java
class BeforePluginStopEvent (line 27) | public class BeforePluginStopEvent extends AbstractArkEvent<Plugin> {
method BeforePluginStopEvent (line 29) | public BeforePluginStopEvent(Plugin source) {
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/ext/ExtResponse.java
class ExtResponse (line 19) | public class ExtResponse<T> {
method isSuccess (line 26) | public boolean isSuccess() {
method setSuccess (line 30) | public void setSuccess(boolean success) {
method getErrorMsg (line 34) | public String getErrorMsg() {
method setErrorMsg (line 38) | public void setErrorMsg(String errorMsg) {
method getErrorCode (line 42) | public String getErrorCode() {
method setErrorCode (line 46) | public void setErrorCode(String errorCode) {
method getData (line 50) | public T getData() {
method setData (line 54) | public void setData(T data) {
method toString (line 58) | @Override
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/ext/ExtServiceProvider.java
type ExtServiceProvider (line 19) | public interface ExtServiceProvider {
method invokeService (line 21) | ExtResponse invokeService(String action, String param);
method getType (line 23) | String getType();
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/model/Biz.java
type Biz (line 30) | public interface Biz extends BizInfo, PriorityOrdered {
method start (line 36) | void start(String[] args) throws Throwable;
method start (line 44) | void start(String[] args, Map<String, String> envs) throws Throwable;
method stop (line 50) | void stop() throws Throwable;
method isDeclared (line 56) | boolean isDeclared(URL url, String resourceName);
method isDeclaredMode (line 64) | boolean isDeclaredMode();
method setCustomBizName (line 70) | void setCustomBizName(String bizName);
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/model/BizConfig.java
class BizConfig (line 23) | public class BizConfig {
method getSpecifiedVersion (line 44) | public String getSpecifiedVersion() {
method setSpecifiedVersion (line 48) | public void setSpecifiedVersion(String specifiedVersion) {
method getExtensionUrls (line 52) | public URL[] getExtensionUrls() {
method setExtensionUrls (line 56) | public void setExtensionUrls(URL[] extensionUrls) {
method getDependentPlugins (line 60) | public List<String> getDependentPlugins() {
method setDependentPlugins (line 64) | public void setDependentPlugins(List<String> dependentPlugins) {
method getArgs (line 68) | public String[] getArgs() {
method setArgs (line 72) | public void setArgs(String[] args) {
method getEnvs (line 76) | public Map<String, String> getEnvs() {
method setEnvs (line 80) | public void setEnvs(Map<String, String> envs) {
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/model/BizInfo.java
type BizInfo (line 31) | public interface BizInfo {
method getBizName (line 36) | String getBizName();
method getBizVersion (line 41) | String getBizVersion();
method getIdentity (line 47) | String getIdentity();
method getMainClass (line 53) | String getMainClass();
method getClassPath (line 59) | URL[] getClassPath();
method getBizUrl (line 64) | URL getBizUrl();
method getDenyImportPackages (line 70) | Set<String> getDenyImportPackages();
method getDenyImportPackageNodes (line 76) | Set<String> getDenyImportPackageNodes();
method getDenyImportPackageStems (line 82) | Set<String> getDenyImportPackageStems();
method getDenyImportClasses (line 88) | Set<String> getDenyImportClasses();
method getDenyImportResources (line 94) | Set<String> getDenyImportResources();
method getDenyPrefixImportResourceStems (line 100) | Set<String> getDenyPrefixImportResourceStems();
method getDenySuffixImportResourceStems (line 106) | Set<String> getDenySuffixImportResourceStems();
method getBizClassLoader (line 112) | ClassLoader getBizClassLoader();
method getBizState (line 117) | BizState getBizState();
method getWebContextPath (line 122) | String getWebContextPath();
method getAttributes (line 128) | Map<String, String> getAttributes();
method getBizStateRecords (line 135) | List<BizStateRecord> getBizStateRecords();
class BizStateRecord (line 137) | class BizStateRecord {
method BizStateRecord (line 151) | public BizStateRecord(Date changeTime, BizState state) {
method BizStateRecord (line 158) | public BizStateRecord(Date changeTime, BizState state, StateChangeRe...
method toString (line 166) | @Override
method getChangeTime (line 173) | public Date getChangeTime() {
method getState (line 177) | public BizState getState() {
method getReason (line 181) | public StateChangeReason getReason() {
method getMessage (line 185) | public String getMessage() {
type StateChangeReason (line 190) | enum StateChangeReason {
method StateChangeReason (line 233) | StateChangeReason(String reason) {
method getReason (line 237) | public String getReason() {
method toString (line 241) | @Override
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/model/BizOperation.java
class BizOperation (line 27) | public class BizOperation {
method isValid (line 33) | public boolean isValid() {
method getBizName (line 37) | public String getBizName() {
method setBizName (line 41) | public BizOperation setBizName(String bizName) {
method getBizVersion (line 46) | public String getBizVersion() {
method setBizVersion (line 50) | public BizOperation setBizVersion(String bizVersion) {
method getOperationType (line 55) | public OperationType getOperationType() {
method setOperationType (line 59) | public BizOperation setOperationType(OperationType operationType) {
method getParameters (line 64) | public Map<String, String> getParameters() {
method setParameters (line 68) | public BizOperation setParameters(Map<String, String> parameters) {
method putParameter (line 73) | public BizOperation putParameter(String key, String value) {
method equals (line 78) | @Override
method createBizOperation (line 99) | public static BizOperation createBizOperation() {
type OperationType (line 103) | public enum OperationType {
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/model/BizState.java
type BizState (line 25) | public enum BizState {
method BizState (line 57) | BizState(String state) {
method getBizState (line 61) | public String getBizState() {
method toString (line 65) | @Override
method of (line 70) | public static BizState of(String state) {
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/model/Plugin.java
type Plugin (line 31) | public interface Plugin extends PriorityOrdered {
method getPluginName (line 36) | String getPluginName();
method getGroupId (line 42) | String getGroupId();
method getArtifactId (line 48) | String getArtifactId();
method getVersion (line 54) | String getVersion();
method getPriority (line 64) | int getPriority();
method getPluginActivator (line 70) | String getPluginActivator();
method getClassPath (line 76) | URL[] getClassPath();
method getPluginClassLoader (line 82) | ClassLoader getPluginClassLoader();
method getPluginContext (line 88) | PluginContext getPluginContext();
method getExportMode (line 96) | String getExportMode();
method getExportPackages (line 102) | Set<String> getExportPackages();
method getExportPackageNodes (line 108) | Set<String> getExportPackageNodes();
method getExportPackageStems (line 114) | Set<String> getExportPackageStems();
method getExportClasses (line 120) | Set<String> getExportClasses();
method getImportPackages (line 126) | Set<String> getImportPackages();
method getImportPackageNodes (line 132) | Set<String> getImportPackageNodes();
method getImportPackageStems (line 138) | Set<String> getImportPackageStems();
method getImportClasses (line 144) | Set<String> getImportClasses();
method getImportResources (line 150) | Set<String> getImportResources();
method getImportPrefixResourceStems (line 156) | Set<String> getImportPrefixResourceStems();
method getImportSuffixResourceStems (line 162) | Set<String> getImportSuffixResourceStems();
method getExportResources (line 168) | Set<String> getExportResources();
method getExportPrefixResourceStems (line 174) | Set<String> getExportPrefixResourceStems();
method getExportSuffixResourceStems (line 180) | Set<String> getExportSuffixResourceStems();
method getPluginURL (line 186) | URL getPluginURL();
method start (line 192) | void start() throws ArkRuntimeException;
method stop (line 198) | void stop() throws ArkRuntimeException;
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/model/PluginConfig.java
class PluginConfig (line 21) | public class PluginConfig {
method getSpecifiedName (line 38) | public String getSpecifiedName() {
method setSpecifiedName (line 42) | public void setSpecifiedName(String specifiedName) {
method getSpecifiedVersion (line 46) | public String getSpecifiedVersion() {
method setSpecifiedVersion (line 50) | public void setSpecifiedVersion(String specifiedVersion) {
method getExtensionUrls (line 54) | public URL[] getExtensionUrls() {
method setExtensionUrls (line 58) | public void setExtensionUrls(URL[] extensionUrls) {
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/model/PluginContext.java
type PluginContext (line 31) | public interface PluginContext {
method getPlugin (line 37) | Plugin getPlugin();
method getPlugin (line 44) | Plugin getPlugin(String pluginName);
method getPluginNames (line 50) | Set<String> getPluginNames();
method getClassLoader (line 56) | ClassLoader getClassLoader();
method publishService (line 65) | <T> ServiceReference<T> publishService(Class<T> ifClass, T implObject);
method publishService (line 75) | <T> ServiceReference<T> publishService(Class<T> ifClass, T implObject,...
method referenceService (line 83) | <T> ServiceReference<T> referenceService(Class<T> ifClass);
method referenceService (line 92) | <T> ServiceReference<T> referenceService(Class<T> ifClass, String uniq...
method referenceServices (line 99) | List<ServiceReference> referenceServices(ServiceFilter serviceFilter);
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/model/PluginOperation.java
class PluginOperation (line 22) | public class PluginOperation {
method getPluginName (line 36) | public String getPluginName() {
method setPluginName (line 40) | public void setPluginName(String pluginName) {
method getPluginVersion (line 44) | public String getPluginVersion() {
method setPluginVersion (line 48) | public void setPluginVersion(String pluginVersion) {
method getOperationType (line 52) | public OperationType getOperationType() {
method setOperationType (line 56) | public void setOperationType(OperationType operationType) {
method getUrl (line 60) | public String getUrl() {
method setUrl (line 64) | public void setUrl(String url) {
method getLocalFile (line 68) | public File getLocalFile() {
method setLocalFile (line 72) | public void setLocalFile(File localFile) {
method getExtensionLibs (line 76) | public List<String> getExtensionLibs() {
method setExtensionLibs (line 80) | public void setExtensionLibs(List<String> extensionLibs) {
type OperationType (line 84) | public enum OperationType {
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/pipeline/Pipeline.java
type Pipeline (line 25) | public interface Pipeline extends PipelineStage {
method addPipelineStage (line 32) | Pipeline addPipelineStage(PipelineStage pipelineStage);
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/pipeline/PipelineContext.java
class PipelineContext (line 28) | public class PipelineContext {
method getExecutableArchive (line 34) | public ExecutableArchive getExecutableArchive() {
method setExecutableArchive (line 38) | public void setExecutableArchive(ExecutableArchive executableArchive) {
method getLaunchCommand (line 42) | public LaunchCommand getLaunchCommand() {
method setLaunchCommand (line 46) | public void setLaunchCommand(LaunchCommand launchCommand) {
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/pipeline/PipelineStage.java
type PipelineStage (line 27) | public interface PipelineStage {
method process (line 34) | void process(PipelineContext pipelineContext) throws ArkRuntimeException;
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/registry/ServiceFilter.java
type ServiceFilter (line 25) | public interface ServiceFilter<T> {
method match (line 34) | boolean match(ServiceReference serviceReference);
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/registry/ServiceMetadata.java
type ServiceMetadata (line 26) | public interface ServiceMetadata {
method getUniqueId (line 34) | String getUniqueId();
method getInterfaceClass (line 40) | Class<?> getInterfaceClass();
method getServiceProvider (line 46) | ServiceProvider getServiceProvider();
method getServiceName (line 54) | String getServiceName();
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/registry/ServiceProvider.java
type ServiceProvider (line 26) | public interface ServiceProvider extends PriorityOrdered {
method getServiceProviderType (line 32) | ServiceProviderType getServiceProviderType();
method getServiceProviderDesc (line 38) | String getServiceProviderDesc();
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/registry/ServiceProviderType.java
type ServiceProviderType (line 25) | public enum ServiceProviderType {
method ServiceProviderType (line 31) | ServiceProviderType(String desc) {
method getDesc (line 35) | public String getDesc() {
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/registry/ServiceReference.java
type ServiceReference (line 27) | public interface ServiceReference<T> extends PriorityOrdered {
method getService (line 33) | T getService();
method getServiceMetadata (line 39) | ServiceMetadata getServiceMetadata();
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/replay/Replay.java
type Replay (line 23) | public interface Replay {
method invoke (line 24) | Object invoke();
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/replay/ReplayContext.java
class ReplayContext (line 25) | public class ReplayContext {
method initialValue (line 28) | @Override
method set (line 36) | public static void set(String version) {
method unset (line 40) | public static void unset() {
method get (line 44) | public static String get() {
method setPlaceHolder (line 51) | public static void setPlaceHolder() {
method clearPlaceHolder (line 58) | public static void clearPlaceHolder() {
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/ArkService.java
type ArkService (line 27) | public interface ArkService extends PriorityOrdered {
method init (line 33) | void init() throws ArkRuntimeException;
method dispose (line 39) | void dispose() throws ArkRuntimeException;
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/PluginActivator.java
type PluginActivator (line 28) | public interface PluginActivator {
method start (line 35) | void start(PluginContext context);
method stop (line 42) | void stop(PluginContext context);
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/PriorityOrdered.java
type PriorityOrdered (line 26) | public interface PriorityOrdered {
method getPriority (line 51) | int getPriority();
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/biz/AddBizToStaticDeployHook.java
type AddBizToStaticDeployHook (line 28) | @Extensible
method getStaticBizToAdd (line 31) | List<BizArchive> getStaticBizToAdd() throws Exception;
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/biz/BizDeployService.java
type BizDeployService (line 28) | public interface BizDeployService extends ArkService {
method deploy (line 35) | void deploy(String[] args) throws ArkRuntimeException;
method unDeploy (line 41) | void unDeploy() throws ArkRuntimeException;
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/biz/BizDeployer.java
type BizDeployer (line 25) | public interface BizDeployer {
method init (line 31) | void init(String[] args);
method deploy (line 36) | void deploy();
method unDeploy (line 41) | void unDeploy();
method getDesc (line 48) | String getDesc();
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/biz/BizFactoryService.java
type BizFactoryService (line 34) | public interface BizFactoryService {
method createBiz (line 41) | Biz createBiz(BizArchive bizArchive) throws IOException;
method createBiz (line 50) | Biz createBiz(BizArchive bizArchive, URL[] extensionUrls) throws IOExc...
method createBiz (line 59) | Biz createBiz(File file) throws IOException;
method createBiz (line 67) | Biz createBiz(File file, URL[] extensionUrls) throws IOException;
method createBiz (line 74) | Biz createBiz(BizOperation bizOperation, File file) throws IOException;
method createBiz (line 82) | Biz createBiz(File file, BizConfig bizConfig) throws IOException;
method createBiz (line 90) | Biz createBiz(BizArchive bizArchive, BizConfig bizConfig) throws IOExc...
method createEmbedMasterBiz (line 96) | Biz createEmbedMasterBiz(ClassLoader masterClassLoader);
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/biz/BizManagerService.java
type BizManagerService (line 33) | public interface BizManagerService {
method registerBiz (line 41) | boolean registerBiz(Biz biz);
method unRegisterBiz (line 50) | Biz unRegisterBiz(String bizName, String bizVersion);
method unRegisterBizStrictly (line 58) | Biz unRegisterBizStrictly(String bizName, String bizVersion);
method getBiz (line 66) | List<Biz> getBiz(String bizName);
method getBiz (line 75) | Biz getBiz(String bizName, String bizVersion);
method getBizByIdentity (line 84) | Biz getBizByIdentity(String bizIdentity);
method getBizByClassLoader (line 91) | Biz getBizByClassLoader(ClassLoader classLoader);
method getAllBizNames (line 98) | Set<String> getAllBizNames();
method getAllBizIdentities (line 100) | Set<String> getAllBizIdentities();
method getBizInOrder (line 106) | List<Biz> getBizInOrder();
method getActiveBiz (line 115) | Biz getActiveBiz(String bizName);
method isActiveBiz (line 125) | boolean isActiveBiz(String bizName, String bizVersion);
method activeBiz (line 132) | void activeBiz(String bizName, String bizVersion);
method getBizState (line 141) | BizState getBizState(String bizName, String bizVersion);
method getBizState (line 149) | BizState getBizState(String bizIdentity);
method removeAndAddBiz (line 157) | boolean removeAndAddBiz(Biz addingBiz, Biz removing);
method getBizRegistration (line 159) | ConcurrentHashMap<String, ConcurrentHashMap<String, Biz>> getBizRegist...
method getBizLock (line 166) | ReentrantLock getBizLock(String bizName);
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/classloader/ClassLoaderHook.java
type ClassLoaderHook (line 32) | @Extensible
method preFindClass (line 45) | Class<?> preFindClass(String name, ClassLoaderService classLoaderServi...
method postFindClass (line 57) | Class<?> postFindClass(String name, ClassLoaderService classLoaderServ...
method preFindResource (line 70) | URL preFindResource(String name, ClassLoaderService classLoaderService...
method postFindResource (line 80) | URL postFindResource(String name, ClassLoaderService classLoaderServic...
method preFindResources (line 93) | Enumeration<URL> preFindResources(String name, ClassLoaderService clas...
method postFindResources (line 105) | Enumeration<URL> postFindResources(String name, ClassLoaderService cla...
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/classloader/ClassLoaderService.java
type ClassLoaderService (line 31) | public interface ClassLoaderService extends ArkService {
method prepareExportClassAndResourceCache (line 36) | void prepareExportClassAndResourceCache();
method isSunReflectClass (line 43) | boolean isSunReflectClass(String className);
method isArkSpiClass (line 50) | boolean isArkSpiClass(String className);
method isArkApiClass (line 57) | boolean isArkApiClass(String className);
method isArkLogClass (line 64) | boolean isArkLogClass(String className);
method isArkExceptionClass (line 71) | boolean isArkExceptionClass(String className);
method isClassInImport (line 79) | boolean isClassInImport(String pluginName, String className);
method getExportMode (line 86) | String getExportMode(String className);
method findExportClassLoader (line 93) | ClassLoader findExportClassLoader(String className);
method findExportClassLoaderByBiz (line 95) | ClassLoader findExportClassLoaderByBiz(Biz biz, String className);
method findExportPlugin (line 97) | Plugin findExportPlugin(String className);
method isResourceInImport (line 105) | boolean isResourceInImport(String pluginName, String resourceName);
method findExportResourceClassLoadersInOrder (line 112) | List<ClassLoader> findExportResourceClassLoadersInOrder(String resourc...
method findExportResourceClassLoadersInOrderByBiz (line 114) | List<ClassLoader> findExportResourceClassLoadersInOrderByBiz(Biz biz, ...
method getJDKClassLoader (line 120) | ClassLoader getJDKClassLoader();
method getArkClassLoader (line 126) | ClassLoader getArkClassLoader();
method getSystemClassLoader (line 132) | ClassLoader getSystemClassLoader();
method getAgentClassLoader (line 138) | ClassLoader getAgentClassLoader();
method getBizClassLoader (line 144) | ClassLoader getBizClassLoader(String bizIdentity);
method getMasterBizClassLoader (line 150) | ClassLoader getMasterBizClassLoader();
method getPluginClassLoader (line 157) | ClassLoader getPluginClassLoader(String pluginName);
method isDeniedImportClass (line 165) | boolean isDeniedImportClass(String bizIdentity, String className);
method isDeniedImportResource (line 173) | boolean isDeniedImportResource(String bizIdentity, String resourceName);
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/event/EventAdminService.java
type EventAdminService (line 25) | public interface EventAdminService {
method sendEvent (line 34) | void sendEvent(ArkEvent event);
method register (line 41) | void register(EventHandler eventHandler);
method unRegister (line 47) | void unRegister(EventHandler eventHandler);
method unRegister (line 53) | void unRegister(ClassLoader classLoader);
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/event/EventHandler.java
type EventHandler (line 26) | public interface EventHandler<E extends ArkEvent> extends PriorityOrdered {
method handleEvent (line 33) | void handleEvent(E event);
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/extension/ArkServiceLoader.java
class ArkServiceLoader (line 25) | public class ArkServiceLoader {
method loadExtensionFromArkPlugin (line 28) | public static <T> T loadExtensionFromArkPlugin(Class<T> interfaceType,...
method loadExtensionFromArkBiz (line 34) | public static <T> T loadExtensionFromArkBiz(Class<T> interfaceType, St...
method loadExtensionsFromArkBiz (line 40) | public static <T> List<T> loadExtensionsFromArkBiz(Class<T> interfaceT...
method getExtensionLoaderService (line 45) | public static ExtensionLoaderService getExtensionLoaderService() {
method setExtensionLoaderService (line 49) | public static void setExtensionLoaderService(ExtensionLoaderService ex...
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/extension/ExtensionClass.java
class ExtensionClass (line 28) | public class ExtensionClass<I, T> implements PriorityOrdered {
method getInterfaceClass (line 60) | public Class<I> getInterfaceClass() {
method setInterfaceClass (line 64) | public void setInterfaceClass(Class<I> interfaceClass) {
method getImplementClass (line 68) | public Class<I> getImplementClass() {
method setImplementClass (line 72) | public void setImplementClass(Class<I> implementClass) {
method getExtensible (line 76) | public Extensible getExtensible() {
method setExtensible (line 80) | public void setExtensible(Extensible extensible) {
method getExtension (line 84) | public Extension getExtension() {
method setExtension (line 88) | public void setExtension(Extension extension) {
method getDefinedLocation (line 92) | public T getDefinedLocation() {
method setDefinedLocation (line 96) | public void setDefinedLocation(T definedLocation) {
method getSingleton (line 100) | public I getSingleton() {
method getObject (line 109) | public I getObject() {
method newInstance (line 117) | private I newInstance() {
method getPriority (line 126) | @Override
method equals (line 131) | @Override
method hashCode (line 136) | @Override
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/extension/ExtensionLoaderService.java
type ExtensionLoaderService (line 25) | public interface ExtensionLoaderService {
method getExtensionContributorFromArkPlugin (line 35) | <T> T getExtensionContributorFromArkPlugin(Class<T> interfaceType, Str...
method getExtensionContributorFromArkBiz (line 47) | <T> T getExtensionContributorFromArkBiz(Class<T> interfaceType, String...
method getExtensionContributorsFromArkBiz (line 58) | <T> List<T> getExtensionContributorsFromArkBiz(Class<T> interfaceType,...
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/injection/InjectionService.java
type InjectionService (line 27) | public interface InjectionService {
method inject (line 32) | void inject(ServiceReference reference);
method inject (line 38) | void inject(Object object);
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/plugin/PluginDeployService.java
type PluginDeployService (line 28) | public interface PluginDeployService extends ArkService {
method deploy (line 35) | void deploy() throws ArkRuntimeException;
method unDeploy (line 41) | void unDeploy() throws ArkRuntimeException;
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/plugin/PluginFactoryService.java
type PluginFactoryService (line 34) | public interface PluginFactoryService {
method createPlugin (line 42) | Plugin createPlugin(PluginArchive pluginArchive) throws IOException;
method createPlugin (line 52) | Plugin createPlugin(PluginArchive pluginArchive, URL[] extensions, Set...
method createPlugin (line 62) | Plugin createPlugin(File file) throws IOException;
method createPlugin (line 64) | Plugin createPlugin(File file, URL[] extensions) throws IOException;
method createPlugin (line 66) | Plugin createPlugin(File file, PluginConfig pluginConfig) throws IOExc...
method createEmbedPlugin (line 72) | Plugin createEmbedPlugin(PluginArchive pluginArchive, ClassLoader mast...
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/plugin/PluginManagerService.java
type PluginManagerService (line 30) | public interface PluginManagerService {
method registerPlugin (line 36) | void registerPlugin(Plugin plugin);
method getPluginByName (line 43) | Plugin getPluginByName(String pluginName);
method getAllPluginNames (line 49) | Set<String> getAllPluginNames();
method getPluginsInOrder (line 55) | List<Plugin> getPluginsInOrder();
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/registry/RegistryService.java
type RegistryService (line 31) | public interface RegistryService {
method publishService (line 41) | <T> ServiceReference<T> publishService(Class<T> ifClass, T implObject,
method publishService (line 53) | <T> ServiceReference<T> publishService(Class<T> ifClass, T implObject,...
method referenceService (line 64) | <T> ServiceReference<T> referenceService(Class<T> ifClass);
method referenceService (line 75) | <T> ServiceReference<T> referenceService(Class<T> ifClass, String uniq...
method referenceServices (line 85) | <T> List<ServiceReference<T>> referenceServices(Class<T> ifClass);
method referenceServices (line 96) | <T> List<ServiceReference<T>> referenceServices(Class<T> ifClass, Stri...
method referenceServices (line 105) | <T> List<ServiceReference<T>> referenceServices(ServiceFilter<T> servi...
method unPublishServices (line 113) | int unPublishServices(ServiceFilter serviceFilter);
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/session/CommandProvider.java
type CommandProvider (line 26) | public interface CommandProvider {
method getHelp (line 31) | String getHelp();
method handleCommand (line 38) | String handleCommand(String command);
method validate (line 45) | boolean validate(String command);
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/session/TelnetServerService.java
type TelnetServerService (line 27) | public interface TelnetServerService extends ArkService {
method run (line 29) | void run();
method shutdown (line 31) | void shutdown();
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/web/AbstractEmbeddedServerService.java
class AbstractEmbeddedServerService (line 23) | public abstract class AbstractEmbeddedServerService<T> implements Embedd...
method getEmbedServer (line 26) | @Override
method putEmbedServer (line 31) | @Override
method iterator (line 39) | @Override
FILE: sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/web/EmbeddedServerService.java
type EmbeddedServerService (line 25) | public interface EmbeddedServerService<T> extends Iterable<T> {
method getEmbedServer (line 30) | T getEmbedServer(int port);
method putEmbedServer (line 38) | boolean putEmbedServer(int port, T container);
FILE: sofa-ark-parent/core/spi/src/test/java/com/alipay/sofa/ark/spi/argument/LaunchCommandTest.java
class LaunchCommandTest (line 42) | public class LaunchCommandTest {
method init (line 51) | @Before
method testCommandParser (line 74) | @Test
method testEncodedURL (line 97) | @Test
class MainClass (line 105) | public static class MainClass {
method main (line 107) | public static void main(String[] args) {
method getClasspath (line 115) | private String getClasspath(URL[] urls) {
method getURLs (line 125) | private URL[] getURLs(ClassLoader classLoader) {
method testOtherMethods (line 151) | @Test
FILE: sofa-ark-parent/core/spi/src/test/java/com/alipay/sofa/ark/spi/constant/ConstantsTest.java
class ConstantsTest (line 28) | public class ConstantsTest {
method testAllMethods (line 30) | @Test
FILE: sofa-ark-parent/core/spi/src/test/java/com/alipay/sofa/ark/spi/ext/ExtResponseTest.java
class ExtResponseTest (line 24) | public class ExtResponseTest {
method testAllMethods (line 26) | @Test
FILE: sofa-ark-parent/core/spi/src/test/java/com/alipay/sofa/ark/spi/model/BizOperationTest.java
class BizOperationTest (line 27) | public class BizOperationTest {
method testOperationEqual (line 29) | @Test
method testAbstractArkEvent (line 52) | @Test
method testBizState (line 59) | @Test
FILE: sofa-ark-parent/core/spi/src/test/java/com/alipay/sofa/ark/spi/replay/ReplayContextTest.java
class ReplayContextTest (line 24) | public class ReplayContextTest {
method testAllMethods (line 26) | @Test
FILE: sofa-ark-parent/core/spi/src/test/java/com/alipay/sofa/ark/spi/service/extension/ExtensionClassTest.java
class ExtensionClassTest (line 23) | public class ExtensionClassTest {
method testExtensionClassTest (line 25) | @Test
FILE: sofa-ark-parent/support/ark-gradle-plugin/src/main/java/com/alipay/sofa/ark/plugin/ArkArchiveSupport.java
class ArkArchiveSupport (line 57) | public class ArkArchiveSupport {
method ArkArchiveSupport (line 97) | public ArkArchiveSupport(String loaderMainClass, Spec<FileCopyDetails>...
method configureBizManifest (line 111) | public void configureBizManifest(Manifest manifest, String mainClass, ...
method buildArkManifest (line 120) | public void buildArkManifest(){
method buildModuleManifest (line 144) | private void buildModuleManifest(Manifest manifest){
method joinSet (line 158) | private String joinSet(Set<String> set) {
method appendBuildInfo (line 163) | private void appendBuildInfo(Manifest manifest) {
method determineSpringBootVersion (line 181) | private String determineSpringBootVersion() {
method createCopyAction (line 186) | public CopyAction createCopyAction(Jar jar) throws IOException {
method createCopyAction (line 190) | public CopyAction createCopyAction(Jar jar, String layerToolsLocation)...
method getTargetFile (line 214) | private File getTargetFile(Jar jar, String classifier) {
method getArkBizName (line 232) | private String getArkBizName(Jar jar, String classifier){
method isTrue (line 244) | private Boolean isTrue(Object object){
method maybe (line 251) | private String maybe(String prefix, String value) {
method getDirMode (line 260) | private Integer getDirMode(CopySpec copySpec) {
method getFileMode (line 264) | private Integer getFileMode(CopySpec copySpec) {
method getMode (line 268) | @SuppressWarnings("unchecked")
method isUsingDefaultLoader (line 284) | private boolean isUsingDefaultLoader(Jar jar) {
method requiresUnpack (line 288) | void requiresUnpack(String... patterns) {
method requiresUnpack (line 292) | void requiresUnpack(Spec<FileTreeElement> spec) {
method excludeNonZipLibraryFiles (line 296) | void excludeNonZipLibraryFiles(FileCopyDetails details) {
method excludeNonZipFiles (line 302) | public void excludeNonZipFiles(FileCopyDetails details) {
method isZip (line 308) | private boolean isZip(File file) {
method isZip (line 319) | private boolean isZip(InputStream inputStream) throws IOException {
method isSofaArk (line 329) | private boolean isSofaArk(File jarFile){
method moveModuleInfoToRoot (line 350) | public void moveModuleInfoToRoot(CopySpec spec) {
method moveToRoot (line 354) | public void moveToRoot(FileCopyDetails details) {
cla
Condensed preview — 625 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,436K chars).
[
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 254,
"preview": "---\nname: Feature Request\nabout: Propose a feature on improving user experience or bringing a new functionality.\n\n---\n\n\n"
},
{
"path": ".github/ISSUE_TEMPLATE/question_or_bug_report.md",
"chars": 779,
"preview": "---\nname: Question or Bug Report\nabout: Create a question or bug report to help us improve.\n\n---\n\n### Describe the quest"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 337,
"preview": "### Motivation\n\nExplain the context, and why you're making that change.\nTo make others understand what is the problem yo"
},
{
"path": ".github/workflows/cloud_code_scan.yml",
"chars": 637,
"preview": "name: Alipay Cloud Devops Codescan\non:\n pull_request_target:\njobs:\n stc: # Code security scanning\n runs-on: ubunt"
},
{
"path": ".github/workflows/inactive_issues_robot.yml",
"chars": 1783,
"preview": "name: stale issues monitor and close 🌊\n\non:\n schedule:\n - cron: '30 1 * * *'\n\njobs:\n stale:\n name: \"Update Stale"
},
{
"path": ".github/workflows/linux_unit_test.yml",
"chars": 1047,
"preview": "# This workflow will build a Java project with Maven\n# For more information see: https://help.github.com/actions/languag"
},
{
"path": ".github/workflows/release.yml",
"chars": 1642,
"preview": "# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow executi"
},
{
"path": ".github/workflows/snapshot.yml",
"chars": 1661,
"preview": "# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow executi"
},
{
"path": ".github/workflows/windows_unit_test.yml",
"chars": 1358,
"preview": "# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow executi"
},
{
"path": ".gitignore",
"chars": 551,
"preview": "target/\n*.iml\n.idea/\npom.xml.bak\n.DS_Store\n.settings\n.classpath\n*.log\nlogs/\n.flattened-pom.xml\nlib/\nsofa-ark-parent/supp"
},
{
"path": ".travis.yml",
"chars": 199,
"preview": "language: java\nsudo: false\n\njdk:\n- openjdk8\n\ninstall:\n- mvn clean install -DskipTests -B -U\n- mvn clean test\n\nscript:\n- "
},
{
"path": "CLAUDE.md",
"chars": 9189,
"preview": "# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## "
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 3213,
"preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, w"
},
{
"path": "CONTRIBUTING.md",
"chars": 2164,
"preview": "\n## Contributing to SOFAArk\nSOFAArk is released under the Apache 2.0 license, and follows a very\nstandard Github develop"
},
{
"path": "Formatter.xml",
"chars": 29562,
"preview": "<profiles version=\"11\">\n<profile kind=\"CodeFormatterProfile\" name=\"Alipay Convention\" version=\"11\">\n<setting id=\"org.ecl"
},
{
"path": "HEADER",
"chars": 755,
"preview": "Licensed to the Apache Software Foundation (ASF) under one or more\ncontributor license agreements. See the NOTICE file "
},
{
"path": "LICENSE",
"chars": 11357,
"preview": " Apache License\n Version 2.0, January 2004\n "
},
{
"path": "README.md",
"chars": 6870,
"preview": "# SOFAArk Project\n\n[](https://travis-ci.org/s"
},
{
"path": "README_EN.md",
"chars": 4557,
"preview": "# SOFAArk Project\n\n[](https://travis-ci.org/s"
},
{
"path": "SECURITY.md",
"chars": 593,
"preview": "# Security Policy\n\n## Reporting a Vulnerability\n\nIf you have apprehensions regarding SOFAStack's security or you discove"
},
{
"path": "change_version.sh",
"chars": 542,
"preview": "#!/bin/bash\nshopt -s expand_aliases\nif [ ! -n \"$1\" ] ;then\n\techo \"Please enter a version\"\n \texit 1\t\nelse\n \techo \"The up"
},
{
"path": "check_format.sh",
"chars": 425,
"preview": "#!/bin/sh\n\nBASEDIR=$(dirname $0)\n\ncd ${BASEDIR}\n\n# make sure git has no un commit files\nif [ -n \"$(git status --untracke"
},
{
"path": "codecov.yml",
"chars": 21,
"preview": "ignore:\n - \"pom.xml\""
},
{
"path": "pom.xml",
"chars": 15084,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "sofa-ark-bom/CLAUDE.md",
"chars": 1463,
"preview": "# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## "
},
{
"path": "sofa-ark-bom/pom.xml",
"chars": 15429,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www"
},
{
"path": "sofa-ark-parent/assembly/CLAUDE.md",
"chars": 1237,
"preview": "# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## "
},
{
"path": "sofa-ark-parent/assembly/pom.xml",
"chars": 2977,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "sofa-ark-parent/assembly/src/main/assembly/assembly.xml",
"chars": 919,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<assembly\n xmlns=\"http://maven.apache.org/plugins/maven-assembly-plugin/a"
},
{
"path": "sofa-ark-parent/assembly/src/main/assembly/mark",
"chars": 40,
"preview": "a mark file included in sofa-ark-all.jar"
},
{
"path": "sofa-ark-parent/core/api/CLAUDE.md",
"chars": 1709,
"preview": "# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## "
},
{
"path": "sofa-ark-parent/core/api/pom.xml",
"chars": 1056,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www"
},
{
"path": "sofa-ark-parent/core/api/src/main/java/com/alipay/sofa/ark/api/ArkClient.java",
"chars": 23546,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/api/src/main/java/com/alipay/sofa/ark/api/ArkConfigs.java",
"chars": 5036,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/api/src/main/java/com/alipay/sofa/ark/api/ClientResponse.java",
"chars": 1958,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/api/src/main/java/com/alipay/sofa/ark/api/ResponseCode.java",
"chars": 977,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/api/src/test/java/com/alipay/sofa/ark/api/ArkConfigsTest.java",
"chars": 1415,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/api/src/test/resources/test.props",
"chars": 19,
"preview": "a123=b123\nc123=d123"
},
{
"path": "sofa-ark-parent/core/common/CLAUDE.md",
"chars": 1285,
"preview": "# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## "
},
{
"path": "sofa-ark-parent/core/common/pom.xml",
"chars": 2369,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/adapter/ArkLogbackContextSelector.java",
"chars": 5176,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/guice/AbstractArkGuiceModule.java",
"chars": 1042,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/log/ArkLogger.java",
"chars": 8216,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/log/ArkLoggerFactory.java",
"chars": 1788,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/thread/CommonThreadPool.java",
"chars": 4986,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/thread/NamedThreadFactory.java",
"chars": 2830,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/thread/ThreadPoolManager.java",
"chars": 2264,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/util/AssertUtils.java",
"chars": 3555,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/util/BizIdentityUtils.java",
"chars": 1662,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/util/ClassLoaderUtils.java",
"chars": 5369,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/util/ClassUtils.java",
"chars": 3366,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/util/EnvironmentUtils.java",
"chars": 2184,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/util/FileUtils.java",
"chars": 7353,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/util/OrderComparator.java",
"chars": 1315,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/util/ParseUtils.java",
"chars": 3264,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/util/PortSelectUtils.java",
"chars": 2273,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/util/ReflectionUtils.java",
"chars": 2350,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/util/SimpleByteBuffer.java",
"chars": 3054,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/util/StringUtils.java",
"chars": 5127,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/common/src/main/java/com/alipay/sofa/ark/common/util/ThreadPoolUtils.java",
"chars": 2087,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/common/src/main/resources/com/alipay/sofa/ark/log/log4j/log-conf.xml",
"chars": 2306,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE log4j:configuration SYSTEM \"log4j.dtd\">\n\n<log4j:configuration xmlns:log"
},
{
"path": "sofa-ark-parent/core/common/src/main/resources/com/alipay/sofa/ark/log/log4j2/log-conf.xml",
"chars": 2737,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<configuration status=\"OFF\">\n <Properties>\n <Property name=\"ARK_LOG_LEV"
},
{
"path": "sofa-ark-parent/core/common/src/main/resources/com/alipay/sofa/ark/log/logback/log-conf.xml",
"chars": 4085,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one or more\n ~ c"
},
{
"path": "sofa-ark-parent/core/common/src/test/java/com/alipay/sofa/ark/common/adapter/ArkLogbackContextSelectorTest.java",
"chars": 3158,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/common/src/test/java/com/alipay/sofa/ark/common/thread/CommonThreadPoolTest.java",
"chars": 2571,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/common/src/test/java/com/alipay/sofa/ark/common/util/AssertUtilsTest.java",
"chars": 2542,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/common/src/test/java/com/alipay/sofa/ark/common/util/BizIdentityUtilsTest.java",
"chars": 1679,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/common/src/test/java/com/alipay/sofa/ark/common/util/ClassLoaderUtilTest.java",
"chars": 6282,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/common/src/test/java/com/alipay/sofa/ark/common/util/ClassUtilsTest.java",
"chars": 1923,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/common/src/test/java/com/alipay/sofa/ark/common/util/FileUtilsTest.java",
"chars": 3382,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/common/src/test/java/com/alipay/sofa/ark/common/util/ParseUtilsTest.java",
"chars": 2194,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/common/src/test/java/com/alipay/sofa/ark/common/util/PortSelectUtilsTest.java",
"chars": 2220,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/common/src/test/java/com/alipay/sofa/ark/common/util/SimpleByteBufferTest.java",
"chars": 2366,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/common/src/test/java/com/alipay/sofa/ark/common/util/StringUtilsTest.java",
"chars": 5055,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/exception/CLAUDE.md",
"chars": 905,
"preview": "# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## "
},
{
"path": "sofa-ark-parent/core/exception/pom.xml",
"chars": 566,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "sofa-ark-parent/core/exception/src/main/java/com/alipay/sofa/ark/exception/ArkLoaderException.java",
"chars": 1389,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/exception/src/main/java/com/alipay/sofa/ark/exception/ArkRuntimeException.java",
"chars": 1241,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/pom.xml",
"chars": 749,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "sofa-ark-parent/core/spi/CLAUDE.md",
"chars": 2639,
"preview": "# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## "
},
{
"path": "sofa-ark-parent/core/spi/pom.xml",
"chars": 1168,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/archive/AbstractArchive.java",
"chars": 2208,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/archive/Archive.java",
"chars": 2976,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/archive/BizArchive.java",
"chars": 1520,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/archive/ContainerArchive.java",
"chars": 1286,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/archive/ExecutableArchive.java",
"chars": 1801,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/archive/PluginArchive.java",
"chars": 1649,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/argument/CommandArgument.java",
"chars": 1742,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/argument/LaunchCommand.java",
"chars": 6636,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/command/Command.java",
"chars": 1253,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/constant/Constants.java",
"chars": 18076,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/event/AbstractArkEvent.java",
"chars": 1665,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/event/AfterFinishDeployEvent.java",
"chars": 1205,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/event/AfterFinishStartupEvent.java",
"chars": 1208,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/event/ArkEvent.java",
"chars": 1053,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/event/biz/AfterAllBizStartupEvent.java",
"chars": 1409,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/event/biz/AfterBizStartupEvent.java",
"chars": 1293,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/event/biz/AfterBizStartupFailedEvent.java",
"chars": 1430,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/event/biz/AfterBizStopEvent.java",
"chars": 1286,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/event/biz/AfterBizStopFailedEvent.java",
"chars": 1451,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/event/biz/AfterBizSwitchEvent.java",
"chars": 1292,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/event/biz/BeforeBizRecycleEvent.java",
"chars": 1291,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/event/biz/BeforeBizStartupEvent.java",
"chars": 1297,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/event/biz/BeforeBizStopEvent.java",
"chars": 1289,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/event/biz/BeforeBizSwitchEvent.java",
"chars": 1295,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/event/plugin/AfterPluginStartupEvent.java",
"chars": 1317,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/event/plugin/AfterPluginStopEvent.java",
"chars": 1310,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/event/plugin/BeforePluginStartupEvent.java",
"chars": 1321,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/event/plugin/BeforePluginStopEvent.java",
"chars": 1313,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/ext/ExtResponse.java",
"chars": 1790,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/ext/ExtServiceProvider.java",
"chars": 965,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/model/Biz.java",
"chars": 2027,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/model/BizConfig.java",
"chars": 2132,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/model/BizInfo.java",
"chars": 5636,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/model/BizOperation.java",
"chars": 3041,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/model/BizState.java",
"chars": 2238,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/model/Plugin.java",
"chars": 4908,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/model/PluginConfig.java",
"chars": 1694,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/model/PluginContext.java",
"chars": 2883,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/model/PluginOperation.java",
"chars": 2246,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/pipeline/Pipeline.java",
"chars": 1147,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/pipeline/PipelineContext.java",
"chars": 1581,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/pipeline/PipelineStage.java",
"chars": 1229,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/registry/ServiceFilter.java",
"chars": 1215,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/registry/ServiceMetadata.java",
"chars": 1672,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/registry/ServiceProvider.java",
"chars": 1343,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/registry/ServiceProviderType.java",
"chars": 1211,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/registry/ServiceReference.java",
"chars": 1269,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/replay/Replay.java",
"chars": 972,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/replay/ReplayContext.java",
"chars": 2350,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/ArkInject.java",
"chars": 1416,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/ArkService.java",
"chars": 1375,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/PluginActivator.java",
"chars": 1367,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/PriorityOrdered.java",
"chars": 1670,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/biz/AddBizToStaticDeployHook.java",
"chars": 1235,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/biz/BizDeployService.java",
"chars": 1433,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/biz/BizDeployer.java",
"chars": 1366,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/biz/BizFactoryService.java",
"chars": 2811,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/biz/BizManagerService.java",
"chars": 4252,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/classloader/ClassLoaderHook.java",
"chars": 5466,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/classloader/ClassLoaderService.java",
"chars": 4515,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/event/EventAdminService.java",
"chars": 1723,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/event/EventHandler.java",
"chars": 1274,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/extension/ArkServiceLoader.java",
"chars": 2147,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/extension/Extensible.java",
"chars": 1604,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/extension/Extension.java",
"chars": 1563,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/extension/ExtensionClass.java",
"chars": 3742,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/extension/ExtensionLoaderService.java",
"chars": 2310,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/injection/InjectionService.java",
"chars": 1343,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/plugin/PluginDeployService.java",
"chars": 1380,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/plugin/PluginFactoryService.java",
"chars": 2684,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/plugin/PluginManagerService.java",
"chars": 1556,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/registry/RegistryService.java",
"chars": 3869,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/session/CommandProvider.java",
"chars": 1388,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/service/session/TelnetServerService.java",
"chars": 1122,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/web/AbstractEmbeddedServerService.java",
"chars": 1503,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/main/java/com/alipay/sofa/ark/spi/web/EmbeddedServerService.java",
"chars": 1392,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/test/java/com/alipay/sofa/ark/spi/argument/LaunchCommandTest.java",
"chars": 5884,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/test/java/com/alipay/sofa/ark/spi/constant/ConstantsTest.java",
"chars": 1566,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/test/java/com/alipay/sofa/ark/spi/ext/ExtResponseTest.java",
"chars": 1557,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/test/java/com/alipay/sofa/ark/spi/model/BizOperationTest.java",
"chars": 2512,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/test/java/com/alipay/sofa/ark/spi/replay/ReplayContextTest.java",
"chars": 1489,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/test/java/com/alipay/sofa/ark/spi/service/extension/ExtensionClassTest.java",
"chars": 1206,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core/spi/src/test/resources/test 2.jar",
"chars": 0,
"preview": ""
},
{
"path": "sofa-ark-parent/core-impl/archive/CLAUDE.md",
"chars": 1748,
"preview": "# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## "
},
{
"path": "sofa-ark-parent/core-impl/archive/pom.xml",
"chars": 1959,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/bootstrap/AbstractLauncher.java",
"chars": 7490,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/bootstrap/AgentClassLoader.java",
"chars": 1211,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/bootstrap/ArkLauncher.java",
"chars": 1776,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/bootstrap/BaseExecutableArchiveLauncher.java",
"chars": 2954,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/bootstrap/ClasspathLauncher.java",
"chars": 12315,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/bootstrap/ContainerClassLoader.java",
"chars": 4190,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/bootstrap/MainMethodRunner.java",
"chars": 2076,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/bootstrap/UseFastConnectionExceptionsEnumeration.java",
"chars": 1764,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/DirectoryBizArchive.java",
"chars": 4424,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/DirectoryContainerArchive.java",
"chars": 3407,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/EmbedClassPathArchive.java",
"chars": 5483,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/ExecutableArkBizJar.java",
"chars": 5517,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/ExplodedBizArchive.java",
"chars": 3527,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/JarBizArchive.java",
"chars": 3320,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/JarContainerArchive.java",
"chars": 2470,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/JarPluginArchive.java",
"chars": 3181,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/archive/ExplodedArchive.java",
"chars": 7575,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/archive/JarFileArchive.java",
"chars": 7264,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/data/RandomAccessData.java",
"chars": 2362,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/data/RandomAccessDataFile.java",
"chars": 8809,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/jar/AsciiBytes.java",
"chars": 7274,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/jar/Bytes.java",
"chars": 2751,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/jar/CentralDirectoryEndRecord.java",
"chars": 5132,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/jar/CentralDirectoryFileHeader.java",
"chars": 6821,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/jar/CentralDirectoryParser.java",
"chars": 4086,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/jar/CentralDirectoryVisitor.java",
"chars": 1249,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/jar/FileHeader.java",
"chars": 1944,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/jar/Handler.java",
"chars": 12319,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/jar/JarEntry.java",
"chars": 3415,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/jar/JarEntryFilter.java",
"chars": 1321,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/jar/JarFile.java",
"chars": 14610,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/jar/JarFileEntries.java",
"chars": 11222,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/jar/JarURLConnection.java",
"chars": 13407,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/jar/JarUtils.java",
"chars": 12630,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
}
]
// ... and 425 more files (download for full content)
About this extraction
This page contains the full source code of the alipay/sofa-ark GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 625 files (88.8 MB), approximately 614.6k tokens, and a symbol index with 3659 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.