Qiheng He created HIVE-28417: -------------------------------- Summary: Bump log4j2 to 2.23.1 to facilitate the use of HiveServer2 JDBC Driver under GraalVM Native Image Key: HIVE-28417 URL: https://issues.apache.org/jira/browse/HIVE-28417 Project: Hive Issue Type: Improvement Reporter: Qiheng He
* Bump log4j2 to 2.23.1 to facilitate the use of HiveServer2 JDBC Driver under GraalVM Native Image. * apache/logging-log4j2 has eliminated various removed old JDK APIs that prevented it from being used under GraalVM Native Image since `2.24.0`. See [https://github.com/apache/logging-log4j2/issues/1539] . - But apache/hive:4.0.0 is still using the old version of apache/logging-log4j2, which means that in PRs such as [https://github.com/apache/shardingsphere/pull/31526] , in order to execute unit tests related to HiveServer2 JDBC Driver under GraalVM Native Image, I have to manually exclude the dependency of Log4j2. This sounds like, {code:xml} <project> <dependencies> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <version>4.0.0</version> </dependency> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-service</artifactId> <version>4.0.0</version> <exclusions> <exclusion> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client-api</artifactId> </exclusion> <exclusion> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> </exclusion> <exclusion> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> </exclusion> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client-api</artifactId> <version>3.3.6</version> </dependency> </dependencies> </project> {code} - If `org.apache.logging.log4j:log4j-api` is not excluded, HiveServer2 JDBC Driver cannot be used under GraalVM Native Image, and the log is similar to the following. {code:bash} [INFO] Executing: /home/linghengqian/TwinklingLiftWorks/git/public/shardingsphere/test/native/target/native-tests --xml-output-dir /home/linghengqian/TwinklingLiftWorks/git/public/shardingsphere/test/native/target/native-test-reports -Djunit.platform.listeners.uid.tracking.output.dir=/home/linghengqian/TwinklingLiftWorks/git/public/shardingsphere/test/native/target/test-ids JUnit Platform on Native Image - report ---------------------------------------- Failures (1): JUnit Jupiter:HiveTest:assertShardingInLocalTransactions() MethodSource [className = 'org.apache.shardingsphere.test.natived.jdbc.databases.HiveTest', methodName = 'assertShardingInLocalTransactions', methodParameterTypes = ''] => java.lang.NoClassDefFoundError: Could not initialize class org.apache.logging.log4j.LogManager org.apache.commons.logging.LogAdapter$Log4jLog.<clinit>(LogAdapter.java:155) org.apache.commons.logging.LogAdapter$Log4jAdapter.createLog(LogAdapter.java:122) org.apache.commons.logging.LogAdapter.createLog(LogAdapter.java:89) org.apache.commons.logging.LogFactory.getLog(LogFactory.java:67) org.apache.commons.logging.LogFactory.getLog(LogFactory.java:59) org.apache.hadoop.fs.FileSystem.<clinit>(FileSystem.java:135) java.base@22.0.2/java.lang.Class.ensureInitialized(DynamicHub.java:599) java.base@22.0.2/java.lang.Class.ensureInitialized(DynamicHub.java:599) java.base@22.0.2/java.lang.Class.ensureInitialized(DynamicHub.java:599) org.apache.hadoop.hive.conf.valcoersion.JavaIOTmpdirVariableCoercion.<clinit>(JavaIOTmpdirVariableCoercion.java:37) [...] {code} - If the Apache/Hive side can improve the version of log4j2, then to use the HiveServer2 JDBC Driver under the GraalVM Native Image, I only need to provide the GraalVM Reachability Metadata of Log4j2 in the downstream project. -- This message was sent by Atlassian Jira (v8.20.10#820010)