From 65084063a52c368f4953f40cacad328dac2848ba Mon Sep 17 00:00:00 2001 From: linghengqian Date: Fri, 31 May 2024 13:31:32 +0800 Subject: [PATCH] Add GraalVM Reachability Metadata and corresponding nativeTest for HiveServer2 --- .../graalvm-native-image/_index.cn.md | 132 +- .../graalvm-native-image/_index.en.md | 134 +- .../data/loader/HiveMetaDataLoader.java | 96 -- ...metadata.data.loader.DialectMetaDataLoader | 18 - .../log4j-api/2.18.0/reflect-config.json | 1408 +++++++++++++++++ .../log4j-api/2.18.0/resource-config.json | 113 ++ .../proxy-config.json | 4 + .../reflect-config.json | 50 +- .../resource-config.json | 3 + .../reflect-config.json | 25 + pom.xml | 155 +- .../native-image-filter/extra-filter.json | 54 +- test/native/pom.xml | 86 + .../jdbc/commons/TestShardingService.java | 48 + .../commons/repository/AddressRepository.java | 35 + .../repository/OrderItemRepository.java | 22 + .../commons/repository/OrderRepository.java | 23 + .../test/natived/jdbc/databases/HiveTest.java | 137 ++ .../grpc-netty-shaded/native-image.properties | 45 + .../sql/test-native-databases-hive.sql | 54 + .../test-native/yaml/databases/hive.yaml | 72 + 21 files changed, 2385 insertions(+), 329 deletions(-) delete mode 100644 infra/database/type/hive/src/main/java/org/apache/shardingsphere/infra/database/hive/metadata/data/loader/HiveMetaDataLoader.java delete mode 100644 infra/database/type/hive/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.database.core.metadata.data.loader.DialectMetaDataLoader create mode 100644 infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.logging.log4j/log4j-api/2.18.0/reflect-config.json create mode 100644 infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.logging.log4j/log4j-api/2.18.0/resource-config.json create mode 100644 test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/databases/HiveTest.java create mode 100644 test/native/src/test/resources/META-INF/native-image/io.grpc/grpc-netty-shaded/native-image.properties create mode 100644 test/native/src/test/resources/test-native/sql/test-native-databases-hive.sql create mode 100644 test/native/src/test/resources/test-native/yaml/databases/hive.yaml diff --git a/docs/document/content/user-manual/shardingsphere-jdbc/graalvm-native-image/_index.cn.md b/docs/document/content/user-manual/shardingsphere-jdbc/graalvm-native-image/_index.cn.md index b8bd1fd674270e..2252ddbc8ede25 100644 --- a/docs/document/content/user-manual/shardingsphere-jdbc/graalvm-native-image/_index.cn.md +++ b/docs/document/content/user-manual/shardingsphere-jdbc/graalvm-native-image/_index.cn.md @@ -87,7 +87,7 @@ com.sun.beans.util.Cache$Kind$3 was unintentionally initialized at build time. T 使用者需要主动使用 GraalVM Reachability Metadata 中央仓库。 如下配置可供参考,以配置项目额外的 Gradle Tasks,以 GraalVM Native Build Tools 的文档为准。 -由于 Gradle 8.6 的限制,用户需要通过 Maven 依赖的形式引入 Metadata Repository 的 JSON 文件。 +由于 https://github.com/gradle/gradle/issues/17559 的限制,用户需要通过 Maven 依赖的形式引入 Metadata Repository 的 JSON 文件。 参考 https://github.com/graalvm/native-build-tools/issues/572 。 ```groovy @@ -334,6 +334,132 @@ Caused by: java.io.UnsupportedEncodingException: Codepage Cp1252 is not supporte ClickHouse 不支持 ShardingSphere 集成级别的本地事务,XA 事务和 Seata AT 模式事务,更多讨论位于 https://github.com/ClickHouse/clickhouse-docs/issues/2300 。 +7. 当需要通过 ShardingSphere JDBC 使用 Hive 方言时,受 https://issues.apache.org/jira/browse/HIVE-28308 影响, +用户不应该使用 `classifier` 为 `standalone` 的 `org.apache.hive:hive-jdbc:4.0.0`,以避免依赖冲突。 +可能的配置例子如下, +```xml + + + + org.apache.shardingsphere + shardingsphere-jdbc + ${shardingsphere.version} + + + org.apache.shardingsphere + shardingsphere-infra-database-hive + ${project.version} + + + org.apache.shardingsphere + shardingsphere-parser-sql-hive + ${shardingsphere.version} + + + org.apache.hive + hive-jdbc + 4.0.0 + + + org.apache.hive + hive-service + 4.0.0 + + + org.apache.hadoop + hadoop-client-api + + + org.apache.logging.log4j + log4j-slf4j-impl + + + org.slf4j + slf4j-log4j12 + + + org.bouncycastle + bcprov-jdk15on + + + org.antlr + antlr4-runtime + + + org.codehaus.janino + commons-compiler + + + org.apache.commons + commons-dbcp2 + + + commons-io + commons-io + + + commons-lang + commons-lang + + + org.apache.commons + commons-pool2 + + + org.codehaus.janino + janino + + + com.google.code.findbugs + jsr305 + + + com.fasterxml.woodstox + woodstox-core + + + + + org.apache.hadoop + hadoop-client-api + 3.3.6 + + + +``` +受 https://github.com/grpc/grpc-java/issues/10601 影响,用户如果在项目中引入了 `org.apache.hive:hive-service`, +则需要在项目的 classpath 的 `META-INF/native-image/io.grpc/grpc-netty-shaded` 文件夹下创建包含如下内容的文件 `native-image.properties`, +```properties +Args=--initialize-at-run-time=\ + io.grpc.netty.shaded.io.netty.channel.ChannelHandlerMask,\ + io.grpc.netty.shaded.io.netty.channel.nio.AbstractNioChannel,\ + io.grpc.netty.shaded.io.netty.channel.socket.nio.SelectorProviderUtil,\ + io.grpc.netty.shaded.io.netty.util.concurrent.DefaultPromise,\ + io.grpc.netty.shaded.io.netty.util.internal.MacAddressUtil,\ + io.grpc.netty.shaded.io.netty.util.internal.SystemPropertyUtil,\ + io.grpc.netty.shaded.io.netty.util.NetUtilInitializations,\ + io.grpc.netty.shaded.io.netty.channel.AbstractChannel,\ + io.grpc.netty.shaded.io.netty.util.NetUtil,\ + io.grpc.netty.shaded.io.netty.util.internal.PlatformDependent,\ + io.grpc.netty.shaded.io.netty.util.internal.PlatformDependent0,\ + io.grpc.netty.shaded.io.netty.channel.DefaultChannelPipeline,\ + io.grpc.netty.shaded.io.netty.channel.DefaultChannelId,\ + io.grpc.netty.shaded.io.netty.util.ResourceLeakDetector,\ + io.grpc.netty.shaded.io.netty.channel.AbstractChannelHandlerContext,\ + io.grpc.netty.shaded.io.netty.channel.ChannelOutboundBuffer,\ + io.grpc.netty.shaded.io.netty.util.internal.InternalThreadLocalMap,\ + io.grpc.netty.shaded.io.netty.util.internal.CleanerJava9,\ + io.grpc.netty.shaded.io.netty.util.internal.StringUtil,\ + io.grpc.netty.shaded.io.netty.util.internal.CleanerJava6,\ + io.grpc.netty.shaded.io.netty.buffer.ByteBufUtil$HexUtil,\ + io.grpc.netty.shaded.io.netty.buffer.AbstractByteBufAllocator,\ + io.grpc.netty.shaded.io.netty.util.concurrent.FastThreadLocalThread,\ + io.grpc.netty.shaded.io.netty.buffer.PoolArena,\ + io.grpc.netty.shaded.io.netty.buffer.EmptyByteBuf,\ + io.grpc.netty.shaded.io.netty.buffer.PoolThreadCache,\ + io.grpc.netty.shaded.io.netty.util.AttributeKey +``` + ## 贡献 GraalVM Reachability Metadata ShardingSphere 对在 GraalVM Native Image 下的可用性的验证,是通过 GraalVM Native Build Tools 的 Maven Plugin 子项目来完成的。 @@ -346,7 +472,7 @@ ShardingSphere 定义了 `shardingsphere-test-native` 的 Maven Module 用于为 ShardingSphere 定义了 `nativeTestInShardingSphere` 的 Maven Profile 用于为 `shardingsphere-test-native` 模块执行 nativeTest 。 -假设贡献者处于新的 Ubuntu 22.04.3 LTS 实例下,其可通过如下 bash 命令通过 SDKMAN! 管理 JDK 和工具链, +假设贡献者处于新的 Ubuntu 22.04.4 LTS 实例下,其可通过如下 bash 命令通过 SDKMAN! 管理 JDK 和工具链, 并为 `shardingsphere-test-native` 子模块执行 nativeTest。 你必须安装 Docker Engine 以执行 `testcontainers-java` 相关的单元测试。 @@ -369,7 +495,7 @@ https://github.com/oracle/graalvm-reachability-metadata 打开新的 issue, Metadata 的 PR。ShardingSphere 在 `shardingsphere-infra-reachability-metadata` 子模块主动托管了部分第三方库的 GraalVM Reachability Metadata。 如果 nativeTest 执行失败, 应为单元测试生成初步的 GraalVM Reachability Metadata, -并手动调整 `shardingsphere-infra-reachability-metadata` 子模块的 classpath 的 `META-INF/native-image/org.apache.shardingsphere/shardingsphere-infra-reachability-metadata` 文件夹下的内容以修复 nativeTest。 +并手动调整 `shardingsphere-infra-reachability-metadata` 子模块的 classpath 的 `META-INF/native-image/org.apache.shardingsphere/shardingsphere-infra-reachability-metadata/` 文件夹下的内容以修复 nativeTest。 如有需要,请使用 `org.junit.jupiter.api.condition.DisabledInNativeImage` 注解或 `org.graalvm.nativeimage.imagecode` 的 System Property 屏蔽部分单元测试在 GraalVM Native Image 下运行。 diff --git a/docs/document/content/user-manual/shardingsphere-jdbc/graalvm-native-image/_index.en.md b/docs/document/content/user-manual/shardingsphere-jdbc/graalvm-native-image/_index.en.md index ab76d2834ae590..168b494e5fd7fe 100644 --- a/docs/document/content/user-manual/shardingsphere-jdbc/graalvm-native-image/_index.en.md +++ b/docs/document/content/user-manual/shardingsphere-jdbc/graalvm-native-image/_index.en.md @@ -90,7 +90,7 @@ and the documentation of GraalVM Native Build Tools shall prevail. Users need to actively use the GraalVM Reachability Metadata central repository. The following configuration is for reference to configure additional Gradle Tasks for the project, and the documentation of GraalVM Native Build Tools shall prevail. -Due to the limitations of Gradle 8.6, +Due to the limitations of https://github.com/gradle/gradle/issues/17559 , users need to introduce the JSON file of Metadata Repository through Maven dependency. Reference https://github.com/graalvm/native-build-tools/issues/572 . @@ -349,6 +349,134 @@ Possible configuration examples are as follows, ClickHouse does not support local transactions, XA transactions, and Seata AT mode transactions at the ShardingSphere integration level. More discussion is at https://github.com/ClickHouse/clickhouse-docs/issues/2300 . +7. When using the Hive dialect through ShardingSphere JDBC, affected by https://issues.apache.org/jira/browse/HIVE-28308 , + users should not use `org.apache.hive:hive-jdbc:4.0.0` with `classifier` as `standalone` to avoid dependency conflicts. + Possible configuration examples are as follows, + +```xml + + + + org.apache.shardingsphere + shardingsphere-jdbc + ${shardingsphere.version} + + + org.apache.shardingsphere + shardingsphere-infra-database-hive + ${project.version} + + + org.apache.shardingsphere + shardingsphere-parser-sql-hive + ${shardingsphere.version} + + + org.apache.hive + hive-jdbc + 4.0.0 + + + org.apache.hive + hive-service + 4.0.0 + + + org.apache.hadoop + hadoop-client-api + + + org.apache.logging.log4j + log4j-slf4j-impl + + + org.slf4j + slf4j-log4j12 + + + org.bouncycastle + bcprov-jdk15on + + + org.antlr + antlr4-runtime + + + org.codehaus.janino + commons-compiler + + + org.apache.commons + commons-dbcp2 + + + commons-io + commons-io + + + commons-lang + commons-lang + + + org.apache.commons + commons-pool2 + + + org.codehaus.janino + janino + + + com.google.code.findbugs + jsr305 + + + com.fasterxml.woodstox + woodstox-core + + + + + org.apache.hadoop + hadoop-client-api + 3.3.6 + + + +``` +Affected by https://github.com/grpc-java/issues/10601, should users incorporate `org.apache.hive:hive-service` into their project, +it is imperative to create a file named `native-image.properties` within the directory `META-INF/native-image/io.grpc/grpc-netty-shaded` of the classpath, +containing the following content, +```properties +Args=--initialize-at-run-time=\ + io.grpc.netty.shaded.io.netty.channel.ChannelHandlerMask,\ + io.grpc.netty.shaded.io.netty.channel.nio.AbstractNioChannel,\ + io.grpc.netty.shaded.io.netty.channel.socket.nio.SelectorProviderUtil,\ + io.grpc.netty.shaded.io.netty.util.concurrent.DefaultPromise,\ + io.grpc.netty.shaded.io.netty.util.internal.MacAddressUtil,\ + io.grpc.netty.shaded.io.netty.util.internal.SystemPropertyUtil,\ + io.grpc.netty.shaded.io.netty.util.NetUtilInitializations,\ + io.grpc.netty.shaded.io.netty.channel.AbstractChannel,\ + io.grpc.netty.shaded.io.netty.util.NetUtil,\ + io.grpc.netty.shaded.io.netty.util.internal.PlatformDependent,\ + io.grpc.netty.shaded.io.netty.util.internal.PlatformDependent0,\ + io.grpc.netty.shaded.io.netty.channel.DefaultChannelPipeline,\ + io.grpc.netty.shaded.io.netty.channel.DefaultChannelId,\ + io.grpc.netty.shaded.io.netty.util.ResourceLeakDetector,\ + io.grpc.netty.shaded.io.netty.channel.AbstractChannelHandlerContext,\ + io.grpc.netty.shaded.io.netty.channel.ChannelOutboundBuffer,\ + io.grpc.netty.shaded.io.netty.util.internal.InternalThreadLocalMap,\ + io.grpc.netty.shaded.io.netty.util.internal.CleanerJava9,\ + io.grpc.netty.shaded.io.netty.util.internal.StringUtil,\ + io.grpc.netty.shaded.io.netty.util.internal.CleanerJava6,\ + io.grpc.netty.shaded.io.netty.buffer.ByteBufUtil$HexUtil,\ + io.grpc.netty.shaded.io.netty.buffer.AbstractByteBufAllocator,\ + io.grpc.netty.shaded.io.netty.util.concurrent.FastThreadLocalThread,\ + io.grpc.netty.shaded.io.netty.buffer.PoolArena,\ + io.grpc.netty.shaded.io.netty.buffer.EmptyByteBuf,\ + io.grpc.netty.shaded.io.netty.buffer.PoolThreadCache,\ + io.grpc.netty.shaded.io.netty.util.AttributeKey +``` + ## Contribute GraalVM Reachability Metadata The verification of ShardingSphere's availability under GraalVM Native Image is completed through the Maven Plugin subproject @@ -362,7 +490,7 @@ This subset of unit tests avoids the use of third-party libraries such as Mockit ShardingSphere defines the Maven Profile of `nativeTestInShardingSphere` for executing nativeTest for the `shardingsphere-test-native` module. -Assuming that the contributor is under a new Ubuntu 22.04.3 LTS instance, Contributors can manage the JDK and tool chain through +Assuming that the contributor is under a new Ubuntu 22.04.4 LTS instance, Contributors can manage the JDK and tool chain through `SDKMAN!` through the following bash command, and execute nativeTest for the `shardingsphere-test-native` submodule. You must install Docker Engine to execute `testcontainers-java` related unit tests. @@ -386,7 +514,7 @@ on https://github.com/oracle/graalvm-reachability-metadata . ShardingSphere acti some third-party libraries in the `shardingsphere-infra-reachability-metadata` submodule. If nativeTest execution fails, preliminary GraalVM Reachability Metadata should be generated for unit tests, -and manually adjust the contents of the `META-INF/native-image/org.apache.shardingsphere/shardingsphere-infra-reachability-metadata` folder on the classpath of the `shardingsphere-infra-reachability-metadata` submodule to fix nativeTest. +and manually adjust the contents of the `META-INF/native-image/org.apache.shardingsphere/shardingsphere-infra-reachability-metadata/` folder on the classpath of the `shardingsphere-infra-reachability-metadata` submodule to fix nativeTest. If necessary, use the `org.junit.jupiter.api.condition.DisabledInNativeImage` annotation or the `org.graalvm.nativeimage.imagecode` System Property blocks some unit tests from running under GraalVM Native Image. diff --git a/infra/database/type/hive/src/main/java/org/apache/shardingsphere/infra/database/hive/metadata/data/loader/HiveMetaDataLoader.java b/infra/database/type/hive/src/main/java/org/apache/shardingsphere/infra/database/hive/metadata/data/loader/HiveMetaDataLoader.java deleted file mode 100644 index 6c58c7aeb9aa6f..00000000000000 --- a/infra/database/type/hive/src/main/java/org/apache/shardingsphere/infra/database/hive/metadata/data/loader/HiveMetaDataLoader.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * 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 org.apache.shardingsphere.infra.database.hive.metadata.data.loader; - -import org.apache.hadoop.hive.conf.HiveConf; -import org.apache.hadoop.hive.metastore.HiveMetaStoreClient; -import org.apache.hadoop.hive.metastore.api.FieldSchema; -import org.apache.hadoop.hive.metastore.api.Table; -import org.apache.shardingsphere.infra.database.core.metadata.data.loader.DialectMetaDataLoader; -import org.apache.shardingsphere.infra.database.core.metadata.data.loader.MetaDataLoaderMaterial; -import org.apache.shardingsphere.infra.database.core.metadata.data.model.ColumnMetaData; -import org.apache.shardingsphere.infra.database.core.metadata.data.model.SchemaMetaData; -import org.apache.shardingsphere.infra.database.core.metadata.data.model.TableMetaData; -import org.apache.shardingsphere.infra.database.core.metadata.database.datatype.DataTypeLoader; -import org.apache.thrift.TException; - -import javax.sql.DataSource; -import java.sql.Connection; -import java.sql.SQLException; -import java.sql.Types; -import java.util.Collection; -import java.util.Collections; -import java.util.LinkedList; -import java.util.Map; - -/** - * Hive meta data loader. - */ -public final class HiveMetaDataLoader implements DialectMetaDataLoader { - - private static final String HIVE_METASTORE_URIS = "hive.metastore.uris"; - - @Override - public Collection load(final MetaDataLoaderMaterial material) throws SQLException { - HiveMetaStoreClient storeClient = null; - try { - // TODO Support set hive.metastore uris when register storage unit. - HiveConf hiveConf = new HiveConf(); - hiveConf.set(HIVE_METASTORE_URIS, ""); - storeClient = new HiveMetaStoreClient(hiveConf); - return Collections.singletonList(new SchemaMetaData(material.getDefaultSchemaName(), - getTableMetaData(storeClient.getAllTables(material.getDefaultSchemaName()), storeClient, material))); - } catch (final TException ignored) { - throw new SQLException(); - } finally { - if (null != storeClient) { - storeClient.close(); - } - } - } - - private Collection getTableMetaData(final Collection tables, final HiveMetaStoreClient storeClient, final MetaDataLoaderMaterial material) throws TException, SQLException { - Map dataTypes = getDataType(material.getDataSource()); - Collection result = new LinkedList<>(); - for (String each : tables) { - result.add(new TableMetaData(each, getColumnMetaData(storeClient.getTable(material.getDefaultSchemaName(), each), dataTypes), Collections.emptyList(), Collections.emptyList())); - } - return result; - } - - private Map getDataType(final DataSource dataSource) throws SQLException { - try ( - Connection connection = dataSource.getConnection()) { - return new DataTypeLoader().load(connection.getMetaData(), getType()); - } - } - - private Collection getColumnMetaData(final Table table, final Map dataTypes) { - Collection result = new LinkedList<>(); - for (FieldSchema each : table.getSd().getCols()) { - result.add(new ColumnMetaData(each.getName(), null == dataTypes.get(each.getType()) ? Types.VARCHAR : dataTypes.get(each.getType()), - false, false, false, false, false, false)); - } - return result; - } - - @Override - public String getDatabaseType() { - return "Hive"; - } -} diff --git a/infra/database/type/hive/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.database.core.metadata.data.loader.DialectMetaDataLoader b/infra/database/type/hive/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.database.core.metadata.data.loader.DialectMetaDataLoader deleted file mode 100644 index 6522f228700754..00000000000000 --- a/infra/database/type/hive/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.database.core.metadata.data.loader.DialectMetaDataLoader +++ /dev/null @@ -1,18 +0,0 @@ -# -# 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. -# - -org.apache.shardingsphere.infra.database.hive.metadata.data.loader.HiveMetaDataLoader diff --git a/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.logging.log4j/log4j-api/2.18.0/reflect-config.json b/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.logging.log4j/log4j-api/2.18.0/reflect-config.json new file mode 100644 index 00000000000000..83c38918d19211 --- /dev/null +++ b/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.logging.log4j/log4j-api/2.18.0/reflect-config.json @@ -0,0 +1,1408 @@ +[ +{ + "condition":{"typeReachable":"org.apache.logging.log4j.util.ServiceLoaderUtil"}, + "name":"java.util.ServiceLoader", + "methods":[{"name":"load","parameterTypes":["java.lang.Class","java.lang.ClassLoader"] }] +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.log4j.builders.appender.AsyncAppenderBuilder" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.log4j.builders.appender.ConsoleAppenderBuilder" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.log4j.builders.appender.DailyRollingFileAppenderBuilder" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.log4j.builders.appender.EnhancedRollingFileAppenderBuilder" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.log4j.builders.appender.FileAppenderBuilder" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.log4j.builders.appender.NullAppenderBuilder" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.log4j.builders.appender.RewriteAppenderBuilder" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.log4j.builders.appender.RollingFileAppenderBuilder" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.log4j.builders.appender.SocketAppenderBuilder" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.log4j.builders.appender.SyslogAppenderBuilder" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.log4j.builders.filter.DenyAllFilterBuilder" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.log4j.builders.filter.LevelMatchFilterBuilder" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.log4j.builders.filter.LevelRangeFilterBuilder" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.log4j.builders.filter.StringMatchFilterBuilder" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.log4j.builders.layout.HtmlLayoutBuilder" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.log4j.builders.layout.PatternLayoutBuilder" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.log4j.builders.layout.SimpleLayoutBuilder" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.log4j.builders.layout.TTCCLayoutBuilder" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.log4j.builders.layout.XmlLayoutBuilder" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.log4j.builders.rolling.CompositeTriggeringPolicyBuilder" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.log4j.builders.rolling.SizeBasedTriggeringPolicyBuilder" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.log4j.builders.rolling.TimeBasedRollingPolicyBuilder" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.ConfigurationFactory"}, + "name":"org.apache.log4j.config.PropertiesConfigurationFactory", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.log4j.config.PropertiesConfigurationFactory" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.log4j.layout.Log4j1SyslogLayout" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.log4j.layout.Log4j1XmlLayout" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.log4j.pattern.Log4j1LevelPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.log4j.pattern.Log4j1MdcPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.log4j.pattern.Log4j1NdcPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.ConfigurationFactory"}, + "name":"org.apache.log4j.xml.XmlConfigurationFactory", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.log4j.xml.XmlConfigurationFactory" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.AppenderSet" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.AsyncAppender" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.ConsoleAppender" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.CountingNoOpAppender" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.FailoverAppender" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.FailoversPlugin" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.FileAppender" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.HttpAppender" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.MemoryMappedFileAppender" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.NullAppender" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.OutputStreamAppender" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.RandomAccessFileAppender" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.RollingFileAppender" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.ScriptAppenderSelector" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.SmtpAppender" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.SocketAppender" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.SyslogAppender" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.WriterAppender" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.db.ColumnMapping" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.db.jdbc.ColumnConfig" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.db.jdbc.DataSourceConnectionSource" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.db.jdbc.DriverManagerConnectionSource" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.db.jdbc.FactoryMethodConnectionSource" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.db.jdbc.JdbcAppender" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.mom.JmsAppender" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.mom.jeromq.JeroMqAppender" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.mom.kafka.KafkaAppender" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.nosql.NoSqlAppender" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.rewrite.LoggerNameLevelRewritePolicy" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.rewrite.MapRewritePolicy" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.rewrite.PropertiesRewritePolicy" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.rewrite.RewriteAppender" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.rolling.CompositeTriggeringPolicy" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.rolling.CronTriggeringPolicy" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.rolling.DirectWriteRolloverStrategy" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.rolling.NoOpTriggeringPolicy" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.rolling.OnStartupTriggeringPolicy" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.rolling.SizeBasedTriggeringPolicy" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.rolling.TimeBasedTriggeringPolicy" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.rolling.action.DeleteAction" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.rolling.action.IfAccumulatedFileCount" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.rolling.action.IfAccumulatedFileSize" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.rolling.action.IfAll" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.rolling.action.IfAny" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.rolling.action.IfFileName" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.rolling.action.IfLastModified" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.rolling.action.IfNot" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.rolling.action.PathSortByModificationTime" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.rolling.action.PosixViewAttributeAction" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.rolling.action.ScriptCondition" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.routing.IdlePurgePolicy" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.routing.Route" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.routing.Routes" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.appender.routing.RoutingAppender" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.async.ArrayBlockingQueueFactory" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.async.AsyncLoggerConfig" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.async.AsyncLoggerConfig$RootLogger" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.async.AsyncWaitStrategyFactoryConfig" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.async.DisruptorBlockingQueueFactory" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.async.JCToolsBlockingQueueFactory" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.async.LinkedTransferQueueFactory" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.AppenderControlArraySet"}, + "name":"org.apache.logging.log4j.core.config.AppenderControlArraySet", + "fields":[{"name":"appenderArray"}] +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.AppenderRef" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.AppendersPlugin" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.CustomLevelConfig" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.CustomLevels" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.DefaultAdvertiser" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.HttpWatcher" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.LoggerConfig" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.LoggerConfig$RootLogger" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.LoggersPlugin" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.PropertiesPlugin" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.Property" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.ScriptsPlugin" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.arbiters.ClassArbiter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.arbiters.DefaultArbiter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.arbiters.ScriptArbiter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.arbiters.SelectArbiter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.arbiters.SystemPropertyArbiter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.ConfigurationFactory"}, + "name":"org.apache.logging.log4j.core.config.json.JsonConfigurationFactory", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.json.JsonConfigurationFactory" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$BigDecimalConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$BigIntegerConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$BooleanConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$ByteArrayConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$ByteConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$CharArrayConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$CharacterConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$CharsetConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$ClassConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$CronExpressionConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$DoubleConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$DurationConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$FileConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$FloatConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$InetAddressConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$IntegerConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$LevelConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$LongConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$PathConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$PatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$SecurityProviderConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$ShortConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$StringConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$UriConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$UrlConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$UuidConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.ConfigurationFactory"}, + "name":"org.apache.logging.log4j.core.config.properties.PropertiesConfigurationFactory", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.properties.PropertiesConfigurationFactory" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.ConfigurationFactory"}, + "name":"org.apache.logging.log4j.core.config.xml.XmlConfigurationFactory", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.xml.XmlConfigurationFactory" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.ConfigurationFactory"}, + "name":"org.apache.logging.log4j.core.config.yaml.YamlConfigurationFactory", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.config.yaml.YamlConfigurationFactory" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.filter.BurstFilter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.filter.CompositeFilter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.filter.DenyAllFilter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.filter.DynamicThresholdFilter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.filter.LevelMatchFilter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.filter.LevelRangeFilter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.filter.MapFilter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.filter.MarkerFilter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.filter.MutableThreadContextMapFilter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.filter.NoMarkerFilter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.filter.RegexFilter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.filter.ScriptFilter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.filter.StringMatchFilter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.filter.StructuredDataFilter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.filter.ThreadContextMapFilter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.filter.ThresholdFilter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.filter.TimeFilter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.LogManager"}, + "name":"org.apache.logging.log4j.core.impl.Log4jContextFactory", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.util.ProviderUtil"}, + "name":"org.apache.logging.log4j.core.impl.Log4jProvider" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.impl.ThreadContextDataInjector"}, + "name":"org.apache.logging.log4j.core.impl.ThreadContextDataProvider" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.jmx.Server"}, + "name":"org.apache.logging.log4j.core.jmx.AppenderAdmin", + "queryAllPublicConstructors":true +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.jmx.Server"}, + "name":"org.apache.logging.log4j.core.jmx.AppenderAdminMBean", + "queryAllPublicMethods":true +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.jmx.Server"}, + "name":"org.apache.logging.log4j.core.jmx.ContextSelectorAdmin", + "queryAllPublicConstructors":true +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.jmx.Server"}, + "name":"org.apache.logging.log4j.core.jmx.ContextSelectorAdminMBean", + "queryAllPublicMethods":true +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.jmx.Server"}, + "name":"org.apache.logging.log4j.core.jmx.LoggerContextAdmin", + "queryAllPublicConstructors":true +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.jmx.Server"}, + "name":"org.apache.logging.log4j.core.jmx.LoggerContextAdminMBean", + "queryAllPublicMethods":true +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.jmx.Server"}, + "name":"org.apache.logging.log4j.core.jmx.StatusLoggerAdmin", + "queryAllPublicConstructors":true +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.jmx.Server"}, + "name":"org.apache.logging.log4j.core.jmx.StatusLoggerAdminMBean", + "queryAllPublicMethods":true +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.layout.CsvLogEventLayout" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.layout.CsvParameterLayout" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.layout.GelfLayout" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.layout.HtmlLayout" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.layout.JsonLayout" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.layout.LevelPatternSelector" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.layout.LoggerFields" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.layout.MarkerPatternSelector" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.layout.MessageLayout" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.layout.PatternLayout" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.layout.PatternMatch" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.layout.Rfc5424Layout" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.layout.ScriptPatternSelector" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.layout.SerializedLayout" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.layout.SyslogLayout" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.layout.XmlLayout" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.layout.YamlLayout" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.lookup.ContextMapLookup" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"}, + "name":"org.apache.logging.log4j.core.lookup.ContextMapLookup", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.lookup.DateLookup" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"}, + "name":"org.apache.logging.log4j.core.lookup.DateLookup", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.lookup.EnvironmentLookup" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"}, + "name":"org.apache.logging.log4j.core.lookup.EnvironmentLookup", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.lookup.EventLookup" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"}, + "name":"org.apache.logging.log4j.core.lookup.EventLookup", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.lookup.JavaLookup" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"}, + "name":"org.apache.logging.log4j.core.lookup.JavaLookup", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.lookup.JmxRuntimeInputArgumentsLookup" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"}, + "name":"org.apache.logging.log4j.core.lookup.JmxRuntimeInputArgumentsLookup", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.lookup.JndiLookup" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.lookup.Log4jLookup" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"}, + "name":"org.apache.logging.log4j.core.lookup.Log4jLookup", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.lookup.LowerLookup" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"}, + "name":"org.apache.logging.log4j.core.lookup.LowerLookup", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.lookup.MainMapLookup" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"}, + "name":"org.apache.logging.log4j.core.lookup.MainMapLookup", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.lookup.MapLookup" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"}, + "name":"org.apache.logging.log4j.core.lookup.MapLookup", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.lookup.MarkerLookup" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"}, + "name":"org.apache.logging.log4j.core.lookup.MarkerLookup", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.lookup.ResourceBundleLookup" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"}, + "name":"org.apache.logging.log4j.core.lookup.ResourceBundleLookup", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.lookup.StructuredDataLookup" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"}, + "name":"org.apache.logging.log4j.core.lookup.StructuredDataLookup", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.lookup.SystemPropertiesLookup" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"}, + "name":"org.apache.logging.log4j.core.lookup.SystemPropertiesLookup", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.lookup.UpperLookup" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"}, + "name":"org.apache.logging.log4j.core.lookup.UpperLookup", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.net.MulticastDnsAdvertiser" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.net.SocketAddress" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.net.SocketOptions" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.net.SocketPerformancePreferences" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.net.ssl.KeyStoreConfiguration" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.net.ssl.SslConfiguration" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.net.ssl.TrustStoreConfiguration" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Black" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Blue" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Cyan" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Green" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Magenta" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Red" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$White" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Yellow" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.ClassNamePatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.LoggerContext"}, + "name":"org.apache.logging.log4j.core.pattern.DatePatternConverter", + "queryAllDeclaredMethods":true +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.AbstractConfiguration"}, + "name":"org.apache.logging.log4j.core.pattern.DatePatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.ConfigurationFactory$Factory"}, + "name":"org.apache.logging.log4j.core.pattern.DatePatternConverter", + "queryAllDeclaredMethods":true +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.DefaultConfiguration"}, + "name":"org.apache.logging.log4j.core.pattern.DatePatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.DatePatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout"}, + "name":"org.apache.logging.log4j.core.pattern.DatePatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout$Builder"}, + "name":"org.apache.logging.log4j.core.pattern.DatePatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout$SerializerBuilder"}, + "name":"org.apache.logging.log4j.core.pattern.DatePatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.pattern.PatternParser"}, + "name":"org.apache.logging.log4j.core.pattern.DatePatternConverter", + "methods":[{"name":"newInstance","parameterTypes":["java.lang.String[]"] }] +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.EncodingPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.EndOfBatchPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.EqualsIgnoreCaseReplacementConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.EqualsReplacementConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.ExtendedThrowablePatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.FileDatePatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.FileLocationPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.FullLocationPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.HighlightConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.IntegerPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.LoggerContext"}, + "name":"org.apache.logging.log4j.core.pattern.LevelPatternConverter", + "queryAllDeclaredMethods":true +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.AbstractConfiguration"}, + "name":"org.apache.logging.log4j.core.pattern.LevelPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.ConfigurationFactory$Factory"}, + "name":"org.apache.logging.log4j.core.pattern.LevelPatternConverter", + "queryAllDeclaredMethods":true +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.DefaultConfiguration"}, + "name":"org.apache.logging.log4j.core.pattern.LevelPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.LevelPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout"}, + "name":"org.apache.logging.log4j.core.pattern.LevelPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout$Builder"}, + "name":"org.apache.logging.log4j.core.pattern.LevelPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout$SerializerBuilder"}, + "name":"org.apache.logging.log4j.core.pattern.LevelPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.pattern.PatternParser"}, + "name":"org.apache.logging.log4j.core.pattern.LevelPatternConverter", + "methods":[{"name":"newInstance","parameterTypes":["java.lang.String[]"] }] +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.LineLocationPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.LoggerContext"}, + "name":"org.apache.logging.log4j.core.pattern.LineSeparatorPatternConverter", + "queryAllDeclaredMethods":true +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.AbstractConfiguration"}, + "name":"org.apache.logging.log4j.core.pattern.LineSeparatorPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.ConfigurationFactory$Factory"}, + "name":"org.apache.logging.log4j.core.pattern.LineSeparatorPatternConverter", + "queryAllDeclaredMethods":true +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.DefaultConfiguration"}, + "name":"org.apache.logging.log4j.core.pattern.LineSeparatorPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.LineSeparatorPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout"}, + "name":"org.apache.logging.log4j.core.pattern.LineSeparatorPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout$Builder"}, + "name":"org.apache.logging.log4j.core.pattern.LineSeparatorPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout$SerializerBuilder"}, + "name":"org.apache.logging.log4j.core.pattern.LineSeparatorPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.pattern.PatternParser"}, + "name":"org.apache.logging.log4j.core.pattern.LineSeparatorPatternConverter", + "methods":[{"name":"newInstance","parameterTypes":["java.lang.String[]"] }] +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.LoggerFqcnPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.LoggerContext"}, + "name":"org.apache.logging.log4j.core.pattern.LoggerPatternConverter", + "queryAllDeclaredMethods":true +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.AbstractConfiguration"}, + "name":"org.apache.logging.log4j.core.pattern.LoggerPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.ConfigurationFactory$Factory"}, + "name":"org.apache.logging.log4j.core.pattern.LoggerPatternConverter", + "queryAllDeclaredMethods":true +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.DefaultConfiguration"}, + "name":"org.apache.logging.log4j.core.pattern.LoggerPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.LoggerPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout"}, + "name":"org.apache.logging.log4j.core.pattern.LoggerPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout$Builder"}, + "name":"org.apache.logging.log4j.core.pattern.LoggerPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout$SerializerBuilder"}, + "name":"org.apache.logging.log4j.core.pattern.LoggerPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.pattern.PatternParser"}, + "name":"org.apache.logging.log4j.core.pattern.LoggerPatternConverter", + "methods":[{"name":"newInstance","parameterTypes":["java.lang.String[]"] }] +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.MapPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.MarkerPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.MarkerSimpleNamePatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.MaxLengthConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.MdcPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.LoggerContext"}, + "name":"org.apache.logging.log4j.core.pattern.MessagePatternConverter", + "queryAllDeclaredMethods":true +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.AbstractConfiguration"}, + "name":"org.apache.logging.log4j.core.pattern.MessagePatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.ConfigurationFactory$Factory"}, + "name":"org.apache.logging.log4j.core.pattern.MessagePatternConverter", + "queryAllDeclaredMethods":true +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.DefaultConfiguration"}, + "name":"org.apache.logging.log4j.core.pattern.MessagePatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.MessagePatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout"}, + "name":"org.apache.logging.log4j.core.pattern.MessagePatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout$Builder"}, + "name":"org.apache.logging.log4j.core.pattern.MessagePatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout$SerializerBuilder"}, + "name":"org.apache.logging.log4j.core.pattern.MessagePatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.pattern.PatternParser"}, + "name":"org.apache.logging.log4j.core.pattern.MessagePatternConverter", + "methods":[{"name":"newInstance","parameterTypes":["org.apache.logging.log4j.core.config.Configuration","java.lang.String[]"] }] +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.MethodLocationPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.NanoTimePatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.NdcPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.ProcessIdPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.RegexReplacement" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.RegexReplacementConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.RelativeTimePatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.RepeatPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.RootThrowablePatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.SequenceNumberPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.StyleConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.ThreadIdPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.LoggerContext"}, + "name":"org.apache.logging.log4j.core.pattern.ThreadNamePatternConverter", + "queryAllDeclaredMethods":true +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.AbstractConfiguration"}, + "name":"org.apache.logging.log4j.core.pattern.ThreadNamePatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.ConfigurationFactory$Factory"}, + "name":"org.apache.logging.log4j.core.pattern.ThreadNamePatternConverter", + "queryAllDeclaredMethods":true +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.DefaultConfiguration"}, + "name":"org.apache.logging.log4j.core.pattern.ThreadNamePatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.ThreadNamePatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout"}, + "name":"org.apache.logging.log4j.core.pattern.ThreadNamePatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout$Builder"}, + "name":"org.apache.logging.log4j.core.pattern.ThreadNamePatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout$SerializerBuilder"}, + "name":"org.apache.logging.log4j.core.pattern.ThreadNamePatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.pattern.PatternParser"}, + "name":"org.apache.logging.log4j.core.pattern.ThreadNamePatternConverter", + "methods":[{"name":"newInstance","parameterTypes":["java.lang.String[]"] }] +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.ThreadPriorityPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.ThrowablePatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.UuidPatternConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.pattern.VariablesNotEmptyReplacementConverter" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.script.Script" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.script.ScriptFile" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.script.ScriptRef" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.core.util.KeyValuePair" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.spi.AbstractLogger"}, + "name":"org.apache.logging.log4j.message.DefaultFlowMessageFactory", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.spi.AbstractLogger"}, + "name":"org.apache.logging.log4j.message.ParameterizedMessageFactory", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.util.PropertiesUtil$Environment"}, + "name":"org.apache.logging.log4j.util.EnvironmentPropertySource" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.util.PropertiesUtil$Environment"}, + "name":"org.apache.logging.log4j.util.SystemPropertiesPropertySource" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.util.SortedArrayStringMap"}, + "name":"org.apache.logging.log4j.util.internal.DefaultObjectInputFilter", + "queryAllPublicMethods":true +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.web.WebLookup" +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"}, + "name":"org.apache.logging.log4j.web.WebLookup", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "name":"org.apache.logging.log4j.web.appender.ServletAppender" +} +] diff --git a/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.logging.log4j/log4j-api/2.18.0/resource-config.json b/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.logging.log4j/log4j-api/2.18.0/resource-config.json new file mode 100644 index 00000000000000..a559e74c6ea688 --- /dev/null +++ b/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.logging.log4j/log4j-api/2.18.0/resource-config.json @@ -0,0 +1,113 @@ +{ + "resources":{ + "includes":[{ + "condition":{"typeReachable":"org.apache.logging.log4j.util.ProviderUtil"}, + "pattern":"\\QMETA-INF/log4j-provider.properties\\E" + }, { + "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"}, + "pattern":"\\QMETA-INF/org/apache/logging/log4j/core/config/plugins/Log4j2Plugins.dat\\E" + }, { + "condition":{"typeReachable":"org.apache.logging.log4j.core.jmx.Server"}, + "pattern":"\\QMETA-INF/services/java.lang.System$LoggerFinder\\E" + }, { + "condition":{"typeReachable":"org.apache.logging.log4j.core.impl.ThreadContextDataInjector"}, + "pattern":"\\QMETA-INF/services/org.apache.logging.log4j.core.util.ContextDataProvider\\E" + }, { + "condition":{"typeReachable":"org.apache.logging.log4j.core.util.WatchManager"}, + "pattern":"\\QMETA-INF/services/org.apache.logging.log4j.core.util.WatchEventService\\E" + }, { + "condition":{"typeReachable":"org.apache.logging.log4j.util.ProviderUtil"}, + "pattern":"\\QMETA-INF/services/org.apache.logging.log4j.spi.Provider\\E" + }, { + "condition":{"typeReachable":"org.apache.logging.log4j.util.PropertiesUtil$Environment"}, + "pattern":"\\QMETA-INF/services/org.apache.logging.log4j.util.PropertySource\\E" + }, { + "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"}, + "pattern":"\\Qlog4j2-test.jsn\\E" + }, { + "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"}, + "pattern":"\\Qlog4j2-test.json\\E" + }, { + "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"}, + "pattern":"\\Qlog4j2-test.properties\\E" + }, { + "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"}, + "pattern":"\\Qlog4j2-test.xml\\E" + }, { + "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"}, + "pattern":"\\Qlog4j2-test.yaml\\E" + }, { + "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"}, + "pattern":"\\Qlog4j2-test.yml\\E" + }, { + "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"}, + "pattern":"\\Qlog4j2-test2626b418.jsn\\E" + }, { + "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"}, + "pattern":"\\Qlog4j2-test2626b418.json\\E" + }, { + "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"}, + "pattern":"\\Qlog4j2-test2626b418.properties\\E" + }, { + "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"}, + "pattern":"\\Qlog4j2-test2626b418.xml\\E" + }, { + "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"}, + "pattern":"\\Qlog4j2-test2626b418.yaml\\E" + }, { + "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"}, + "pattern":"\\Qlog4j2-test2626b418.yml\\E" + }, { + "condition":{"typeReachable":"org.apache.logging.log4j.util.PropertiesUtil"}, + "pattern":"\\Qlog4j2.StatusLogger.properties\\E" + }, { + "condition":{"typeReachable":"org.apache.logging.log4j.util.PropertiesUtil"}, + "pattern":"\\Qlog4j2.component.properties\\E" + }, { + "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"}, + "pattern":"\\Qlog4j2.jsn\\E" + }, { + "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"}, + "pattern":"\\Qlog4j2.json\\E" + }, { + "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"}, + "pattern":"\\Qlog4j2.properties\\E" + }, { + "condition":{"typeReachable":"org.apache.logging.log4j.util.PropertiesUtil$Environment"}, + "pattern":"\\Qlog4j2.system.properties\\E" + }, { + "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"}, + "pattern":"\\Qlog4j2.xml\\E" + }, { + "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"}, + "pattern":"\\Qlog4j2.yaml\\E" + }, { + "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"}, + "pattern":"\\Qlog4j2.yml\\E" + }, { + "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"}, + "pattern":"\\Qlog4j22626b418.jsn\\E" + }, { + "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"}, + "pattern":"\\Qlog4j22626b418.json\\E" + }, { + "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"}, + "pattern":"\\Qlog4j22626b418.properties\\E" + }, { + "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"}, + "pattern":"\\Qlog4j22626b418.xml\\E" + }, { + "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"}, + "pattern":"\\Qlog4j22626b418.yaml\\E" + }, { + "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"}, + "pattern":"\\Qlog4j22626b418.yml\\E" + }, { + "condition":{"typeReachable":"org.apache.logging.log4j.core.jmx.Server"}, + "pattern":"jdk.jfr:\\Qjdk/jfr/internal/query/view.ini\\E" + }]}, + "bundles":[{ + "name":"sun.util.resources.cldr.CalendarData", + "locales":["und"] + }] +} diff --git a/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/generated-reachability-metadata/proxy-config.json b/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/generated-reachability-metadata/proxy-config.json index 5ee27623d66689..7a6a8cf430f64a 100644 --- a/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/generated-reachability-metadata/proxy-config.json +++ b/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/generated-reachability-metadata/proxy-config.json @@ -6,5 +6,9 @@ { "condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.cluster.ClusterContextManagerBuilder"}, "interfaces":["java.sql.Connection"] + }, + { + "condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.standalone.StandaloneContextManagerBuilder"}, + "interfaces":["org.apache.hive.service.rpc.thrift.TCLIService$Iface"] } ] \ No newline at end of file diff --git a/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/generated-reachability-metadata/reflect-config.json b/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/generated-reachability-metadata/reflect-config.json index 5bcd4e57449d6c..a9ac7bc02fcd41 100644 --- a/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/generated-reachability-metadata/reflect-config.json +++ b/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/generated-reachability-metadata/reflect-config.json @@ -361,6 +361,14 @@ "condition":{"typeReachable":"org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory"}, "name":"org.apache.shardingsphere.infra.database.h2.type.H2DatabaseType" }, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry"}, + "name":"org.apache.shardingsphere.infra.database.hive.metadata.database.HiveDatabaseMetaData" +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory"}, + "name":"org.apache.shardingsphere.infra.database.hive.type.HiveDatabaseType" +}, { "condition":{"typeReachable":"org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory"}, "name":"org.apache.shardingsphere.infra.database.mariadb.type.MariaDBDatabaseType" @@ -540,12 +548,12 @@ "name":"org.apache.shardingsphere.infra.util.eventbus.EventSubscriber" }, { - "condition":{"typeReachable":"org.apache.shardingsphere.mode.event.subsciber.DeliverEventSubscriberRegistry$$Lambda/0x00007f484f4738b8"}, + "condition":{"typeReachable":"org.apache.shardingsphere.mode.event.subsciber.DeliverEventSubscriberRegistry$$Lambda/0x00007fd55b4bb928"}, "name":"org.apache.shardingsphere.infra.util.eventbus.EventSubscriber", "queryAllDeclaredMethods":true }, { - "condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.registry.ClusterDispatchEventSubscriberRegistry$$Lambda/0x00007f484f48d3f8"}, + "condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.registry.ClusterDispatchEventSubscriberRegistry$$Lambda/0x00007fd55b4d26b0"}, "name":"org.apache.shardingsphere.infra.util.eventbus.EventSubscriber", "queryAllDeclaredMethods":true }, @@ -841,7 +849,7 @@ "name":"org.apache.shardingsphere.mask.yaml.config.rule.YamlMaskTableRuleConfigurationCustomizer" }, { - "condition":{"typeReachable":"org.apache.shardingsphere.mode.event.subsciber.DeliverEventSubscriberRegistry$$Lambda/0x00007f484f4738b8"}, + "condition":{"typeReachable":"org.apache.shardingsphere.mode.event.subsciber.DeliverEventSubscriberRegistry$$Lambda/0x00007fd55b4bb928"}, "name":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.deliver.DeliverQualifiedDataSourceSubscriber", "queryAllDeclaredMethods":true }, @@ -851,42 +859,42 @@ "methods":[{"name":"cleanCache","parameterTypes":["org.apache.shardingsphere.mode.event.dispatch.DispatchEvent"] }] }, { - "condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.registry.ClusterDispatchEventSubscriberRegistry$$Lambda/0x00007f484f48d3f8"}, + "condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.registry.ClusterDispatchEventSubscriberRegistry$$Lambda/0x00007fd55b4d26b0"}, "name":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.dispatch.CacheEvictedSubscriber", "queryAllDeclaredMethods":true }, { - "condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.registry.ClusterDispatchEventSubscriberRegistry$$Lambda/0x00007f484f48d3f8"}, + "condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.registry.ClusterDispatchEventSubscriberRegistry$$Lambda/0x00007fd55b4d26b0"}, "name":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.dispatch.ComputeNodeOnlineSubscriber", "queryAllDeclaredMethods":true }, { - "condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.registry.ClusterDispatchEventSubscriberRegistry$$Lambda/0x00007f484f48d3f8"}, + "condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.registry.ClusterDispatchEventSubscriberRegistry$$Lambda/0x00007fd55b4d26b0"}, "name":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.dispatch.DatabaseChangedSubscriber", "queryAllDeclaredMethods":true }, { - "condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.registry.ClusterDispatchEventSubscriberRegistry$$Lambda/0x00007f484f48d3f8"}, + "condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.registry.ClusterDispatchEventSubscriberRegistry$$Lambda/0x00007fd55b4d26b0"}, "name":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.dispatch.GlobalRuleConfigurationEventSubscriber", "queryAllDeclaredMethods":true }, { - "condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.registry.ClusterDispatchEventSubscriberRegistry$$Lambda/0x00007f484f48d3f8"}, + "condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.registry.ClusterDispatchEventSubscriberRegistry$$Lambda/0x00007fd55b4d26b0"}, "name":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.dispatch.ListenerAssistedSubscriber", "queryAllDeclaredMethods":true }, { - "condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.registry.ClusterDispatchEventSubscriberRegistry$$Lambda/0x00007f484f48d3f8"}, + "condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.registry.ClusterDispatchEventSubscriberRegistry$$Lambda/0x00007fd55b4d26b0"}, "name":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.dispatch.ProcessListChangedSubscriber", "queryAllDeclaredMethods":true }, { - "condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.registry.ClusterDispatchEventSubscriberRegistry$$Lambda/0x00007f484f48d3f8"}, + "condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.registry.ClusterDispatchEventSubscriberRegistry$$Lambda/0x00007fd55b4d26b0"}, "name":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.dispatch.PropertiesEventSubscriber", "queryAllDeclaredMethods":true }, { - "condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.registry.ClusterDispatchEventSubscriberRegistry$$Lambda/0x00007f484f48d3f8"}, + "condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.registry.ClusterDispatchEventSubscriberRegistry$$Lambda/0x00007fd55b4d26b0"}, "name":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.dispatch.QualifiedDataSourceSubscriber", "queryAllDeclaredMethods":true }, @@ -895,26 +903,26 @@ "name":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.dispatch.ResourceMetaDataChangedSubscriber" }, { - "condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.registry.ClusterDispatchEventSubscriberRegistry$$Lambda/0x00007f484f48d3f8"}, + "condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.registry.ClusterDispatchEventSubscriberRegistry$$Lambda/0x00007fd55b4d26b0"}, "name":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.dispatch.ResourceMetaDataChangedSubscriber", "queryAllDeclaredMethods":true }, { - "condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.cluster.listener.MetaDataChangedListener$$Lambda/0x00007f484f5d2048"}, + "condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.cluster.listener.MetaDataChangedListener$$Lambda/0x00007fd55b617230"}, "name":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.dispatch.ResourceMetaDataChangedSubscriber" }, { - "condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.registry.ClusterDispatchEventSubscriberRegistry$$Lambda/0x00007f484f48d3f8"}, + "condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.registry.ClusterDispatchEventSubscriberRegistry$$Lambda/0x00007fd55b4d26b0"}, "name":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.dispatch.RuleItemChangedSubscriber", "queryAllDeclaredMethods":true }, { - "condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.registry.ClusterDispatchEventSubscriberRegistry$$Lambda/0x00007f484f48d3f8"}, + "condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.registry.ClusterDispatchEventSubscriberRegistry$$Lambda/0x00007fd55b4d26b0"}, "name":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.dispatch.StateChangedSubscriber", "queryAllDeclaredMethods":true }, { - "condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.registry.ClusterDispatchEventSubscriberRegistry$$Lambda/0x00007f484f48d3f8"}, + "condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.registry.ClusterDispatchEventSubscriberRegistry$$Lambda/0x00007fd55b4d26b0"}, "name":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.dispatch.StorageUnitEventSubscriber", "queryAllDeclaredMethods":true }, @@ -1363,6 +1371,11 @@ "condition":{"typeReachable":"org.apache.shardingsphere.sql.parser.core.database.cache.ParseTreeCacheBuilder"}, "name":"org.apache.shardingsphere.sql.parser.core.database.cache.ParseTreeCacheLoader" }, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.sql.parser.core.database.visitor.SQLStatementVisitorFactory"}, + "name":"org.apache.shardingsphere.sql.parser.hive.visitor.statement.HiveStatementVisitorFacade", + "methods":[{"name":"","parameterTypes":[] }] +}, { "condition":{"typeReachable":"org.apache.shardingsphere.sql.parser.core.SQLParserFactory"}, "name":"org.apache.shardingsphere.sql.parser.mysql.parser.MySQLLexer", @@ -1483,6 +1496,11 @@ "name":"org.apache.shardingsphere.sql.parser.statement.clickhouse.dml.ClickHouseInsertStatement", "methods":[{"name":"","parameterTypes":[] }] }, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.infra.binder.engine.statement.dml.DeleteStatementBinder"}, + "name":"org.apache.shardingsphere.sql.parser.statement.hive.dml.HiveDeleteStatement", + "methods":[{"name":"","parameterTypes":[] }] +}, { "condition":{"typeReachable":"org.apache.shardingsphere.infra.binder.engine.statement.dml.DeleteStatementBinder"}, "name":"org.apache.shardingsphere.sql.parser.statement.mysql.dml.MySQLDeleteStatement", diff --git a/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/generated-reachability-metadata/resource-config.json b/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/generated-reachability-metadata/resource-config.json index 492f2a423c84d6..a571621406f138 100644 --- a/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/generated-reachability-metadata/resource-config.json +++ b/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/generated-reachability-metadata/resource-config.json @@ -2727,6 +2727,9 @@ }, { "condition":{"typeReachable":"org.apache.shardingsphere.infra.url.classpath.ClassPathURLLoader"}, "pattern":"\\Qtest-native/yaml/databases/clickhouse.yaml\\E" + }, { + "condition":{"typeReachable":"org.apache.shardingsphere.infra.url.classpath.ClassPathURLLoader"}, + "pattern":"\\Qtest-native/yaml/databases/hive.yaml\\E" }, { "condition":{"typeReachable":"org.apache.shardingsphere.infra.url.classpath.ClassPathURLLoader"}, "pattern":"\\Qtest-native/yaml/databases/mysql.yaml\\E" diff --git a/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/shardingsphere-infra-reachability-metadata/reflect-config.json b/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/shardingsphere-infra-reachability-metadata/reflect-config.json index e557ffccedae92..d06109806703f2 100644 --- a/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/shardingsphere-infra-reachability-metadata/reflect-config.json +++ b/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/shardingsphere-infra-reachability-metadata/reflect-config.json @@ -64,5 +64,30 @@ "name":"org.apache.shardingsphere.transaction.yaml.config.YamlTransactionRuleConfiguration", "allDeclaredFields":true, "methods":[{"name":"getDefaultType","parameterTypes":[] }, {"name":"getProps","parameterTypes":[] }, {"name":"getProviderType","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.sql.parser.hive.parser.HiveLexer"}, + "name":"org.apache.shardingsphere.sql.parser.hive.parser.HiveLexer", + "methods":[{"name":"","parameterTypes":["org.antlr.v4.runtime.CharStream"] }] +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.sql.parser.hive.parser.HiveParser"}, + "name":"org.apache.shardingsphere.sql.parser.hive.parser.HiveParser", + "methods":[{"name":"","parameterTypes":["org.antlr.v4.runtime.TokenStream"] }] +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.sql.parser.hive.visitor.statement.type.HiveDMLStatementVisitor"}, + "name":"org.apache.shardingsphere.sql.parser.hive.visitor.statement.type.HiveDMLStatementVisitor", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.sql.parser.statement.hive.dml.HiveInsertStatement"}, + "name":"org.apache.shardingsphere.sql.parser.statement.hive.dml.HiveInsertStatement", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSpherePreparedStatement"}, + "name":"org.apache.shardingsphere.sql.parser.statement.hive.dml.HiveSelectStatement", + "methods":[{"name":"","parameterTypes":[] }] } ] diff --git a/pom.xml b/pom.xml index c0f9abc15bcfc3..d2ceb64a84109f 100644 --- a/pom.xml +++ b/pom.xml @@ -125,7 +125,9 @@ 3.1.0-og 2.4.2 0.6.3 - 3.1.3 + 4.0.0 + + 3.3.6 0.282 4.0.3 @@ -507,153 +509,7 @@ org.apache.hive hive-jdbc ${hive.version} - provided - - - org.glassfish - javax.el - - - com.github.joshelser - dropwizard-metrics-hadoop-metrics2-reporter - - - com.zaxxer - HikariCP-java7 - - - org.slf4j - slf4j-log4j12 - - - org.apache.logging.log4j - log4j-slf4j-impl - - - org.apache.logging.log4j - log4j-1.2-api - - - commons-collections - commons-collections - - - jdk.tools - jdk.tools - - - log4j - log4j - - - org.apache.logging.log4j - log4j-web - - - org.apache.hadoop - hadoop-yarn-server-resourcemanager - - - org.eclipse.jetty - jetty-http - - - org.eclipse.jetty - jetty-rewrite - - - org.eclipse.jetty - jetty-server - - - org.eclipse.jetty - jetty-servlet - - - org.eclipse.jetty - jetty-webapp - - - org.apache.orc - orc-core - - - com.jcraft - jsch - - - jline - jline - - - io.dropwizard.metrics - metrics-core - - - io.dropwizard.metrics - metrics-json - - - io.dropwizard.metrics - metrics-jvm - - - org.apache.ant - ant - - - org.apache.hive - hive-serde - - - co.cask.tephra - tephra-api - - - co.cask.tephra - tephra-core - - - co.cask.tephra - tephra-hbase-compat-1.0 - - - org.eclipse.jetty - jetty-util - - - com.sun.jersey - jersey-servlet - - - org.jruby.joni - joni - - - sqlline - sqlline - - - org.apache.hbase - hbase-metrics - - - org.apache.hbase - hbase-metrics-api - - - com.jolbox - bonecp - - - commons-dbcp - commons-dbcp - - - junit - junit - - + test com.facebook.presto @@ -1338,7 +1194,8 @@ maven-surefire-plugin false - --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED + + --add-opens=java.base/java.net=ALL-UNNAMED diff --git a/test/native/native-image-filter/extra-filter.json b/test/native/native-image-filter/extra-filter.json index ca2b00516a04f4..dcb58d0608e953 100644 --- a/test/native/native-image-filter/extra-filter.json +++ b/test/native/native-image-filter/extra-filter.json @@ -2,55 +2,21 @@ "rules": [ {"includeClasses": "**"}, - {"excludeClasses": "com.sun.crypto.provider.**"}, - {"excludeClasses": "com.sun.org.apache.xerces.internal.jaxp.**"}, - {"excludeClasses": "java.**"}, - {"includeClasses": "java.util.Properties"}, - {"excludeClasses": "javax.security.auth.x500.**"}, - {"excludeClasses": "javax.smartcardio.**"}, - {"excludeClasses": "javax.xml.stream.**"}, - {"excludeClasses": "jdk.internal.misc.**"}, - {"excludeClasses": "sun.misc.**"}, - {"excludeClasses": "sun.nio.ch.**"}, - {"excludeClasses": "sun.security.**"}, - {"excludeClasses": "android.app.**"}, - {"excludeClasses": "com.arjuna.**"}, - {"excludeClasses": "com.atomikos.**"}, - {"excludeClasses": "com.alibaba.druid.**"}, - {"excludeClasses": "com.clickhouse.**"}, - {"excludeClasses": "com.ctc.wstx.stax.**"}, - {"excludeClasses": "com.fasterxml.jackson.databind.**"}, - {"excludeClasses": "com.github.benmanes.caffeine.cache.**"}, - {"excludeClasses": "com.github.dockerjava.api.**"}, - {"excludeClasses": "com.google.common.util.concurrent.**"}, - {"excludeClasses": "com.ibm.icu.text.**"}, - {"excludeClasses": "com.microsoft.sqlserver.jdbc.**"}, - {"excludeClasses": "com.mysql.cj.**"}, - {"excludeClasses": "com.zaxxer.hikari.**"}, + {"excludeClasses": "com.**"}, {"excludeClasses": "ch.qos.logback.classic.**"}, - {"excludeClasses": "io.etcd.**"}, - {"excludeClasses": "io.grpc.**"}, - {"excludeClasses": "io.netty.**"}, - {"excludeClasses": "io.seata.**"}, - {"excludeClasses": "io.vertx.core.**"}, {"excludeClasses": "groovy.**"}, + {"excludeClasses": "io.**"}, + {"excludeClasses": "java.**"}, + {"includeClasses": "java.util.Properties"}, + {"includeClasses": "java.util.ServiceLoader"}, + {"excludeClasses": "javax.**"}, + {"excludeClasses": "jdk.internal.misc.**"}, {"excludeClasses": "libcore.io.**"}, {"excludeClasses": "net.bytebuddy.**"}, - {"excludeClasses": "org.apache.calcite.**"}, - {"excludeClasses": "org.apache.commons.logging.**"}, - {"excludeClasses": "org.apache.logging.log4j.**"}, - {"excludeClasses": "org.apache.log4j.**"}, - {"excludeClasses": "org.apache.zookeeper.**"}, - {"excludeClasses": "org.codehaus.groovy.**"}, - {"excludeClasses": "org.h2.**"}, - {"excludeClasses": "org.jboss.logmanager.**"}, - {"excludeClasses": "org.locationtech.jts.geom.**"}, - {"excludeClasses": "org.opengauss.**"}, - {"excludeClasses": "org.postgresql.**"}, - {"excludeClasses": "org.robolectric.**"}, - {"excludeClasses": "org.slf4j.**"}, - {"excludeClasses": "org.testcontainers.**"}, + {"excludeClasses": "org.**"}, + {"includeClasses": "org.apache.shardingsphere.**"}, + {"excludeClasses": "sun.**"}, {"excludeClasses": "org.apache.shardingsphere.test.natived.**"} ], diff --git a/test/native/pom.xml b/test/native/pom.xml index 872f6b9741fd04..43b1f8dc92bed5 100644 --- a/test/native/pom.xml +++ b/test/native/pom.xml @@ -131,6 +131,17 @@ using Seata Client under GraalVM Native Image requires using the version release ${project.version} test + + org.apache.shardingsphere + shardingsphere-infra-database-hive + ${project.version} + + + org.apache.shardingsphere + shardingsphere-parser-sql-hive + ${project.version} + test + org.awaitility @@ -163,6 +174,81 @@ using Seata Client under GraalVM Native Image requires using the version release http test + + org.apache.hive + hive-jdbc + ${hive.version} + test + + + + org.apache.hive + hive-service + ${hive.version} + test + + + org.apache.hadoop + hadoop-client-api + + + org.apache.logging.log4j + log4j-slf4j-impl + + + org.slf4j + slf4j-log4j12 + + + + org.bouncycastle + bcprov-jdk15on + + + org.antlr + antlr4-runtime + + + org.codehaus.janino + commons-compiler + + + org.apache.commons + commons-dbcp2 + + + commons-io + commons-io + + + commons-lang + commons-lang + + + org.apache.commons + commons-pool2 + + + org.codehaus.janino + janino + + + com.google.code.findbugs + jsr305 + + + com.fasterxml.woodstox + woodstox-core + + + + + + org.apache.hadoop + hadoop-client-api + ${hadoop.version} + test + org.testcontainers junit-jupiter diff --git a/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/commons/TestShardingService.java b/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/commons/TestShardingService.java index 762ab420aa3ff4..395515a37272a1 100644 --- a/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/commons/TestShardingService.java +++ b/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/commons/TestShardingService.java @@ -119,6 +119,28 @@ public void processSuccessInClickHouse() throws SQLException { assertThat(addressRepository.selectAll(), equalTo(Collections.emptyList())); } + /** + * Process success in Hive. + * Hive has not fully supported BEGIN, COMMIT, and ROLLBACK. Refer to Hive Transactions. + * So ShardingSphere should not use {@link OrderItemRepository#assertRollbackWithTransactions()} + * TODO It seems that there is no way to force all HiveServer2 insert statements to complete. + * This results in the following assertion always failing, which needs to be investigated on the apache/hive side. + *
+     * insertDataInHive();
+     * assertThat(addressRepository.selectAll(),
+     *     equalTo(LongStream.range(1L, 11L).mapToObj(each -> new Address(each, "address_test_" + each)).collect(Collectors.toList())));
+     * 
+ * TODO It is currently not convenient to operate on the `t_order` and `t_order_item` tables because + * {@link org.apache.hive.jdbc.HiveStatement} does not implement {@link Statement#getGeneratedKeys()} + * + * @throws SQLException An exception that provides information on a database access error or other errors. + */ + public void processSuccessInHive() throws SQLException { + insertDataInHive(); + deleteDataInHive(); + assertThat(addressRepository.selectAll(), equalTo(Collections.emptyList())); + } + /** * Insert data. * @@ -151,6 +173,20 @@ public Collection insertData(final int autoGeneratedKeys) throws SQLExcept return result; } + /** + * Insert data in Hive. + */ + public void insertDataInHive() { + LongStream.range(1L, 11L).forEach(action -> { + Address address = new Address(action, "address_test_" + action); + try { + addressRepository.insert(address); + } catch (final SQLException ex) { + throw new RuntimeException(ex); + } + }); + } + /** * Delete data. * @@ -181,6 +217,18 @@ public void deleteDataInClickHouse(final Collection orderIds) throws SQLEx } } + /** + * Delete data in Hive. + * + * @throws SQLException An exception that provides information on a database access error or other errors. + */ + public void deleteDataInHive() throws SQLException { + long count = 1L; + for (int i = 1; i <= 10; i++) { + addressRepository.deleteInHive(count++); + } + } + /** * Clean environment. * diff --git a/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/commons/repository/AddressRepository.java b/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/commons/repository/AddressRepository.java index 182913898cd479..ce0712efed868b 100644 --- a/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/commons/repository/AddressRepository.java +++ b/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/commons/repository/AddressRepository.java @@ -70,6 +70,25 @@ public void createTableInSQLServer() throws SQLException { } } + /** + * create table t_address if not exists in Hive. + * + * @throws SQLException SQL exception + */ + public void createTableIfNotExistsInHive() throws SQLException { + String sql = "CREATE TABLE IF NOT EXISTS t_address\n" + + "(\n" + + " address_id BIGINT NOT NULL,\n" + + " address_name VARCHAR(100) NOT NULL,\n" + + " PRIMARY KEY (address_id) disable novalidate\n" + + ") CLUSTERED BY (address_id) INTO 2 BUCKETS STORED AS ORC TBLPROPERTIES ('transactional'='true')"; + try ( + Connection connection = dataSource.getConnection(); + Statement statement = connection.createStatement()) { + statement.executeUpdate(sql); + } + } + /** * drop table t_address. * @@ -133,6 +152,22 @@ public void delete(final Long id) throws SQLException { } } + /** + * delete by id. + * + * @param id id + * @throws SQLException SQL exception + */ + public void deleteInHive(final Long id) throws SQLException { + String sql = "DELETE FROM t_address WHERE address_id=?"; + try ( + Connection connection = dataSource.getConnection(); + PreparedStatement preparedStatement = connection.prepareStatement(sql)) { + preparedStatement.setLong(1, id); + preparedStatement.executeUpdate(); + } + } + /** * delete by id in ClickHouse. * diff --git a/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/commons/repository/OrderItemRepository.java b/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/commons/repository/OrderItemRepository.java index b53071fb09087f..d9b32cbc462284 100644 --- a/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/commons/repository/OrderItemRepository.java +++ b/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/commons/repository/OrderItemRepository.java @@ -125,6 +125,28 @@ public void createTableIfNotExistsInClickHouse() throws SQLException { } } + /** + * create table if not exists in Hive. + * Hive does not support `AUTO_INCREMENT`, refer to HIVE-6905 . + * + * @throws SQLException SQL exception + */ + public void createTableIfNotExistsInHive() throws SQLException { + String sql = "CREATE TABLE IF NOT EXISTS t_order_item\n" + + "(order_item_id BIGINT,\n" + + " order_id BIGINT NOT NULL,\n" + + " user_id INT NOT NULL,\n" + + " phone VARCHAR(50),\n" + + " status VARCHAR(50),\n" + + " PRIMARY KEY (order_item_id) disable novalidate\n" + + ") CLUSTERED BY (order_item_id) INTO 2 BUCKETS STORED AS ORC TBLPROPERTIES ('transactional'='true')"; + try ( + Connection connection = dataSource.getConnection(); + Statement statement = connection.createStatement()) { + statement.executeUpdate(sql); + } + } + /** * drop table. * diff --git a/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/commons/repository/OrderRepository.java b/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/commons/repository/OrderRepository.java index 7cded2baf10f56..b595b672190ba4 100644 --- a/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/commons/repository/OrderRepository.java +++ b/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/commons/repository/OrderRepository.java @@ -122,6 +122,29 @@ public void createTableIfNotExistsInClickHouse() throws SQLException { } } + /** + * create table in Hive. + * Hive does not support `AUTO_INCREMENT`, refer to HIVE-6905 . + * + * @throws SQLException SQL exception + */ + public void createTableIfNotExistsInHive() throws SQLException { + String sql = "CREATE TABLE IF NOT EXISTS t_order\n" + + "(\n" + + " order_id BIGINT,\n" + + " order_type INT,\n" + + " user_id INT NOT NULL,\n" + + " address_id BIGINT NOT NULL,\n" + + " status VARCHAR(50),\n" + + " PRIMARY KEY (order_id) disable novalidate\n" + + ") CLUSTERED BY (order_id) INTO 2 BUCKETS STORED AS ORC TBLPROPERTIES ('transactional'='true')"; + try ( + Connection connection = dataSource.getConnection(); + Statement statement = connection.createStatement()) { + statement.executeUpdate(sql); + } + } + /** * drop table. * TODO There is a bug in this function in shadow's unit test and requires additional fixes. diff --git a/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/databases/HiveTest.java b/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/databases/HiveTest.java new file mode 100644 index 00000000000000..0c21ab91fcfe0c --- /dev/null +++ b/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/databases/HiveTest.java @@ -0,0 +1,137 @@ +/* + * 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 org.apache.shardingsphere.test.natived.jdbc.databases; + +import com.zaxxer.hikari.HikariConfig; +import com.zaxxer.hikari.HikariDataSource; +import org.apache.shardingsphere.test.natived.jdbc.commons.TestShardingService; +import org.awaitility.Awaitility; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.EnabledInNativeImage; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.utility.DockerImageName; + +import javax.sql.DataSource; +import java.nio.file.Paths; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.sql.Statement; +import java.time.Duration; +import java.util.Properties; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.nullValue; + +@SuppressWarnings({"SqlDialectInspection", "SqlNoDataSourceInspection"}) +@EnabledInNativeImage +@Testcontainers +class HiveTest { + + @SuppressWarnings("resource") + @Container + public static final GenericContainer CONTAINER = new GenericContainer<>(DockerImageName.parse("apache/hive:4.0.0")) + .withEnv("SERVICE_NAME", "hiveserver2") + .withExposedPorts(10000, 10002); + + private static final String SYSTEM_PROP_KEY_PREFIX = "fixture.test-native.yaml.database.hive."; + + // Due to https://issues.apache.org/jira/browse/HIVE-28317 , the `initFile` parameter of HiveServer2 JDBC Driver must be an absolute path. + private static final String ABSOLUTE_PATH = Paths.get("src/test/resources/test-native/sql/test-native-databases-hive.sql").toAbsolutePath().normalize().toString(); + + private String jdbcUrlPrefix; + + private TestShardingService testShardingService; + + @BeforeAll + static void beforeAll() { + assertThat(System.getProperty(SYSTEM_PROP_KEY_PREFIX + "ds0.jdbc-url"), is(nullValue())); + assertThat(System.getProperty(SYSTEM_PROP_KEY_PREFIX + "ds1.jdbc-url"), is(nullValue())); + assertThat(System.getProperty(SYSTEM_PROP_KEY_PREFIX + "ds2.jdbc-url"), is(nullValue())); + } + + @AfterAll + static void afterAll() { + System.clearProperty(SYSTEM_PROP_KEY_PREFIX + "ds0.jdbc-url"); + System.clearProperty(SYSTEM_PROP_KEY_PREFIX + "ds1.jdbc-url"); + System.clearProperty(SYSTEM_PROP_KEY_PREFIX + "ds2.jdbc-url"); + } + + /** + * TODO Need to fix `shardingsphere-parser-sql-hive` module to use {@link TestShardingService#cleanEnvironment()} + * after {@link TestShardingService#processSuccessInHive()}. + * + * @throws SQLException An exception that provides information on a database access error or other errors. + */ + @Test + void assertShardingInLocalTransactions() throws SQLException { + jdbcUrlPrefix = "jdbc:hive2://localhost:" + CONTAINER.getMappedPort(10000) + "/"; + DataSource dataSource = createDataSource(); + testShardingService = new TestShardingService(dataSource); + testShardingService.processSuccessInHive(); + } + + /** + * TODO Need to fix `shardingsphere-parser-sql-hive` module to use `initEnvironment()` before {@link TestShardingService#processSuccessInHive()}. + * + * @throws SQLException An exception that provides information on a database access error or other errors. + */ + @SuppressWarnings("unused") + private void initEnvironment() throws SQLException { + testShardingService.getOrderRepository().createTableIfNotExistsInHive(); + testShardingService.getOrderItemRepository().createTableIfNotExistsInHive(); + testShardingService.getAddressRepository().createTableIfNotExistsInHive(); + testShardingService.getOrderRepository().truncateTable(); + testShardingService.getOrderItemRepository().truncateTable(); + testShardingService.getAddressRepository().truncateTable(); + } + + private Connection openConnection() throws SQLException { + Properties props = new Properties(); + return DriverManager.getConnection(jdbcUrlPrefix, props); + } + + private DataSource createDataSource() throws SQLException { + Awaitility.await().atMost(Duration.ofMinutes(1L)).ignoreExceptions().until(() -> { + openConnection().close(); + return true; + }); + try ( + Connection connection = openConnection(); + Statement statement = connection.createStatement()) { + statement.execute("set metastore.compactor.initiator.on=true"); + statement.execute("set metastore.compactor.cleaner.on=true"); + statement.execute("set metastore.compactor.worker.threads=5"); + statement.executeUpdate("CREATE DATABASE demo_ds_0"); + statement.executeUpdate("CREATE DATABASE demo_ds_1"); + statement.executeUpdate("CREATE DATABASE demo_ds_2"); + } + HikariConfig config = new HikariConfig(); + config.setDriverClassName("org.apache.shardingsphere.driver.ShardingSphereDriver"); + config.setJdbcUrl("jdbc:shardingsphere:classpath:test-native/yaml/databases/hive.yaml?placeholder-type=system_props"); + System.setProperty(SYSTEM_PROP_KEY_PREFIX + "ds0.jdbc-url", jdbcUrlPrefix + "demo_ds_0" + ";initFile=" + ABSOLUTE_PATH); + System.setProperty(SYSTEM_PROP_KEY_PREFIX + "ds1.jdbc-url", jdbcUrlPrefix + "demo_ds_1" + ";initFile=" + ABSOLUTE_PATH); + System.setProperty(SYSTEM_PROP_KEY_PREFIX + "ds2.jdbc-url", jdbcUrlPrefix + "demo_ds_2" + ";initFile=" + ABSOLUTE_PATH); + return new HikariDataSource(config); + } +} diff --git a/test/native/src/test/resources/META-INF/native-image/io.grpc/grpc-netty-shaded/native-image.properties b/test/native/src/test/resources/META-INF/native-image/io.grpc/grpc-netty-shaded/native-image.properties new file mode 100644 index 00000000000000..841015af38bc4c --- /dev/null +++ b/test/native/src/test/resources/META-INF/native-image/io.grpc/grpc-netty-shaded/native-image.properties @@ -0,0 +1,45 @@ +# +# 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. +# +# TODO This file exists to address https://github.com/grpc/grpc-java/issues/10601 . +Args=--initialize-at-run-time=\ + io.grpc.netty.shaded.io.netty.channel.ChannelHandlerMask,\ + io.grpc.netty.shaded.io.netty.channel.nio.AbstractNioChannel,\ + io.grpc.netty.shaded.io.netty.channel.socket.nio.SelectorProviderUtil,\ + io.grpc.netty.shaded.io.netty.util.concurrent.DefaultPromise,\ + io.grpc.netty.shaded.io.netty.util.internal.MacAddressUtil,\ + io.grpc.netty.shaded.io.netty.util.internal.SystemPropertyUtil,\ + io.grpc.netty.shaded.io.netty.util.NetUtilInitializations,\ + io.grpc.netty.shaded.io.netty.channel.AbstractChannel,\ + io.grpc.netty.shaded.io.netty.util.NetUtil,\ + io.grpc.netty.shaded.io.netty.util.internal.PlatformDependent,\ + io.grpc.netty.shaded.io.netty.util.internal.PlatformDependent0,\ + io.grpc.netty.shaded.io.netty.channel.DefaultChannelPipeline,\ + io.grpc.netty.shaded.io.netty.channel.DefaultChannelId,\ + io.grpc.netty.shaded.io.netty.util.ResourceLeakDetector,\ + io.grpc.netty.shaded.io.netty.channel.AbstractChannelHandlerContext,\ + io.grpc.netty.shaded.io.netty.channel.ChannelOutboundBuffer,\ + io.grpc.netty.shaded.io.netty.util.internal.InternalThreadLocalMap,\ + io.grpc.netty.shaded.io.netty.util.internal.CleanerJava9,\ + io.grpc.netty.shaded.io.netty.util.internal.StringUtil,\ + io.grpc.netty.shaded.io.netty.util.internal.CleanerJava6,\ + io.grpc.netty.shaded.io.netty.buffer.ByteBufUtil$HexUtil,\ + io.grpc.netty.shaded.io.netty.buffer.AbstractByteBufAllocator,\ + io.grpc.netty.shaded.io.netty.util.concurrent.FastThreadLocalThread,\ + io.grpc.netty.shaded.io.netty.buffer.PoolArena,\ + io.grpc.netty.shaded.io.netty.buffer.EmptyByteBuf,\ + io.grpc.netty.shaded.io.netty.buffer.PoolThreadCache,\ + io.grpc.netty.shaded.io.netty.util.AttributeKey diff --git a/test/native/src/test/resources/test-native/sql/test-native-databases-hive.sql b/test/native/src/test/resources/test-native/sql/test-native-databases-hive.sql new file mode 100644 index 00000000000000..d23900f7d799c0 --- /dev/null +++ b/test/native/src/test/resources/test-native/sql/test-native-databases-hive.sql @@ -0,0 +1,54 @@ +-- +-- 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. +-- + + +-- TODO To execute SQL like `DELETE FROM t_address WHERE address_id=?`, we always need to execute the following Hive Session-level SQL in the current `javax.sql.DataSource`. +-- `shardingsphere-parser-sql-hive` module does not support `CREATE`, `SET`, `TRUNCATE` statements yet. +set hive.support.concurrency=true; +set hive.exec.dynamic.partition.mode=nonstrict; +set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager; + +CREATE TABLE IF NOT EXISTS t_order +( + order_id BIGINT, + order_type INT, + user_id INT NOT NULL, + address_id BIGINT NOT NULL, + status VARCHAR(50), + PRIMARY KEY (order_id) disable novalidate +) CLUSTERED BY (order_id) INTO 2 BUCKETS STORED AS ORC TBLPROPERTIES ('transactional' = 'true'); + +CREATE TABLE IF NOT EXISTS t_order_item +( + order_item_id BIGINT, + order_id BIGINT NOT NULL, + user_id INT NOT NULL, + phone VARCHAR(50), + status VARCHAR(50), + PRIMARY KEY (order_item_id) disable novalidate +) CLUSTERED BY (order_item_id) INTO 2 BUCKETS STORED AS ORC TBLPROPERTIES ('transactional' = 'true'); + +CREATE TABLE IF NOT EXISTS t_address +( + address_id BIGINT NOT NULL, + address_name VARCHAR(100) NOT NULL, + PRIMARY KEY (address_id) disable novalidate +) CLUSTERED BY (address_id) INTO 2 BUCKETS STORED AS ORC TBLPROPERTIES ('transactional' = 'true'); + +TRUNCATE TABLE t_order; +TRUNCATE TABLE t_order_item; +TRUNCATE TABLE t_address; diff --git a/test/native/src/test/resources/test-native/yaml/databases/hive.yaml b/test/native/src/test/resources/test-native/yaml/databases/hive.yaml new file mode 100644 index 00000000000000..c44cd303bb3bc5 --- /dev/null +++ b/test/native/src/test/resources/test-native/yaml/databases/hive.yaml @@ -0,0 +1,72 @@ +# +# 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. +# + +mode: + type: Standalone + repository: + type: JDBC + +dataSources: + ds_0: + dataSourceClassName: com.zaxxer.hikari.HikariDataSource + driverClassName: org.apache.hive.jdbc.HiveDriver + jdbcUrl: $${fixture.test-native.yaml.database.hive.ds0.jdbc-url::} + ds_1: + dataSourceClassName: com.zaxxer.hikari.HikariDataSource + driverClassName: org.apache.hive.jdbc.HiveDriver + jdbcUrl: $${fixture.test-native.yaml.database.hive.ds1.jdbc-url::} + ds_2: + dataSourceClassName: com.zaxxer.hikari.HikariDataSource + driverClassName: org.apache.hive.jdbc.HiveDriver + jdbcUrl: $${fixture.test-native.yaml.database.hive.ds2.jdbc-url::} + +rules: +- !SHARDING + tables: + t_order: + actualDataNodes: + keyGenerateStrategy: + column: order_id + keyGeneratorName: snowflake + t_order_item: + actualDataNodes: + keyGenerateStrategy: + column: order_item_id + keyGeneratorName: snowflake + defaultDatabaseStrategy: + standard: + shardingColumn: user_id + shardingAlgorithmName: inline + shardingAlgorithms: + inline: + type: CLASS_BASED + props: + strategy: STANDARD + algorithmClassName: org.apache.shardingsphere.test.natived.jdbc.commons.algorithm.ClassBasedInlineShardingAlgorithmFixture + keyGenerators: + snowflake: + type: SNOWFLAKE + auditors: + sharding_key_required_auditor: + type: DML_SHARDING_CONDITIONS + +- !BROADCAST + tables: + - t_address + +props: + sql-show: false