This is an automated email from the ASF dual-hosted git repository.

lidavidm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow.git


The following commit(s) were added to refs/heads/main by this push:
     new 42b49df0f3 GH-40907: [Java][FlightSQL] Shade slf4j-api in JDBC driver 
(#40908)
42b49df0f3 is described below

commit 42b49df0f3dc1586ad38c608ec93f382a4f4e3c4
Author: Laurent Goujon <[email protected]>
AuthorDate: Tue Apr 2 00:53:56 2024 -0700

    GH-40907: [Java][FlightSQL] Shade slf4j-api in JDBC driver (#40908)
    
    ### Rationale for this change
    
    FlightSQL JDBC Driver does not shade slfj4 api which may come into conflict 
into the version used by an application. If the application uses slf4j 1.x, it 
may cause the application slf4j backend to not be loaded properly.
    
    The change configured maven-shade-plugin to also shade slf4j-api. To make 
sure log messages are still visible, slf4j-jdk14 is included as well so that 
all messages will be redirected to `java.util.logging` framework. The 
application can use jul-to-slf4j adapter to redirect log messages back to slf4j.
    
    ### What changes are included in this PR?
    
    Overrides `Driver#getParentLogger()` to return the root logger for the JDBC 
driver (which is `org.apache.arrow.driver.jdbc`). To make sure shaded 
dependencies loggers are included as well, change relocation from `cfjd.`  to 
`org.apache.arrow.driver.jdbc.shaded. `(or `oaadj` for native libraries)
    
    ### Are these changes tested?
    
    Verifying that slf4j-api is shaded along with the other relocation changes 
are covered by `ITDriverJarValidation`
    
    ### Are there any user-facing changes?
    
    Yes. Driver will not expose directly slf4j api and the logger names for the 
shaded dependencies have been updated. For applications which were relying on 
configuring directly a slf4j logging backend for the driver, they may need to 
include `org.slf4j:slf4-api` and `org.slf4j:jul-to-slf4j` for logging 
configuration to work.
    * GitHub Issue: #40907
    
    Authored-by: Laurent Goujon <[email protected]>
    Signed-off-by: David Li <[email protected]>
---
 .../arrow/driver/jdbc/ArrowFlightJdbcDriver.java     | 10 +++++++++-
 java/flight/flight-sql-jdbc-driver/pom.xml           | 20 ++++++++++++--------
 .../arrow/driver/jdbc/ITDriverJarValidation.java     |  5 +----
 java/pom.xml                                         |  5 +++++
 4 files changed, 27 insertions(+), 13 deletions(-)

diff --git 
a/java/flight/flight-sql-jdbc-core/src/main/java/org/apache/arrow/driver/jdbc/ArrowFlightJdbcDriver.java
 
b/java/flight/flight-sql-jdbc-core/src/main/java/org/apache/arrow/driver/jdbc/ArrowFlightJdbcDriver.java
index 183e3d5c7b..d0daaa8bda 100644
--- 
a/java/flight/flight-sql-jdbc-core/src/main/java/org/apache/arrow/driver/jdbc/ArrowFlightJdbcDriver.java
+++ 
b/java/flight/flight-sql-jdbc-core/src/main/java/org/apache/arrow/driver/jdbc/ArrowFlightJdbcDriver.java
@@ -31,6 +31,7 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.Properties;
+import java.util.logging.Logger;
 
 import 
org.apache.arrow.driver.jdbc.utils.ArrowFlightConnectionConfigImpl.ArrowFlightConnectionProperty;
 import org.apache.arrow.driver.jdbc.utils.UrlParser;
@@ -58,7 +59,7 @@ public class ArrowFlightJdbcDriver extends UnregisteredDriver 
{
     // Netty requires some extra properties to unlock some native memory 
management api
     // Setting this property if not already set externally
     // This has to be done before any netty class is being loaded
-    final String key = "cfjd.io.netty.tryReflectionSetAccessible";
+    final String key = "io.netty.tryReflectionSetAccessible";
     final String tryReflectionSetAccessible = System.getProperty(key);
     if (tryReflectionSetAccessible == null) {
       System.setProperty(key, Boolean.TRUE.toString());
@@ -67,6 +68,13 @@ public class ArrowFlightJdbcDriver extends 
UnregisteredDriver {
     new ArrowFlightJdbcDriver().register();
   }
 
+  @Override
+  public Logger getParentLogger() {
+    // Return the logger associated with the driver package 
('org.apache.arrow.driver.jdbc')
+    // When packaged in flight-sql-jdbc-driver, it will also apply to all 
shaded dependencies
+    return Logger.getLogger(getClass().getPackage().getName());
+  }
+
   @Override
   public ArrowFlightConnection connect(final String url, final Properties info)
       throws SQLException {
diff --git a/java/flight/flight-sql-jdbc-driver/pom.xml 
b/java/flight/flight-sql-jdbc-driver/pom.xml
index 53d929afa7..2157c09eaf 100644
--- a/java/flight/flight-sql-jdbc-driver/pom.xml
+++ b/java/flight/flight-sql-jdbc-driver/pom.xml
@@ -97,6 +97,11 @@
             <artifactId>slf4j-api</artifactId>
             <scope>runtime</scope>
         </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-jdk14</artifactId>
+            <scope>runtime</scope>
+        </dependency>
 
         <dependency>
             <groupId>io.netty</groupId>
@@ -190,17 +195,16 @@
                             <relocations>
                                 <relocation>
                                     <pattern>com.</pattern>
-                                    <shadedPattern>cfjd.com.</shadedPattern>
+                                    
<shadedPattern>org.apache.arrow.driver.jdbc.shaded.com.</shadedPattern>
                                     <excludes>
                                         <exclude>com.sun.**</exclude>
                                     </excludes>
                                 </relocation>
                                 <relocation>
                                     <pattern>org.</pattern>
-                                    <shadedPattern>cfjd.org.</shadedPattern>
+                                    
<shadedPattern>org.apache.arrow.driver.jdbc.shaded.org.</shadedPattern>
                                     <excludes>
                                         
<exclude>org.apache.arrow.driver.jdbc.**</exclude>
-                                        <exclude>org.slf4j.**</exclude>
                                         <!-- Avoid shading Flight JDBC 
Properties -->
                                         
<exclude>org.apache.arrow.flight.name</exclude>
                                         
<exclude>org.apache.arrow.flight.version</exclude>
@@ -210,24 +214,24 @@
                                 </relocation>
                                 <relocation>
                                     <pattern>io.</pattern>
-                                    <shadedPattern>cfjd.io.</shadedPattern>
+                                    
<shadedPattern>org.apache.arrow.driver.jdbc.shaded.io.</shadedPattern>
                                 </relocation>
                                 <relocation>
                                     <pattern>net.</pattern>
-                                    <shadedPattern>cfjd.net.</shadedPattern>
+                                    
<shadedPattern>org.apache.arrow.driver.jdbc.shaded.net.</shadedPattern>
                                 </relocation>
                                 <relocation>
                                     <pattern>mozilla.</pattern>
-                                    
<shadedPattern>cfjd.mozilla.</shadedPattern>
+                                    
<shadedPattern>org.apache.arrow.driver.jdbc.shaded.mozilla.</shadedPattern>
                                 </relocation>
                                 <!-- Entries to relocate netty native 
libraries  -->
                                 <relocation>
                                     
<pattern>META-INF.native.libnetty_</pattern>
-                                    
<shadedPattern>META-INF.native.libcfjd_netty_</shadedPattern>
+                                    
<shadedPattern>META-INF.native.liboaadj_netty_</shadedPattern>
                                 </relocation>
                                 <relocation>
                                     <pattern>META-INF.native.netty_</pattern>
-                                    
<shadedPattern>META-INF.native.cfjd_netty_</shadedPattern>
+                                    
<shadedPattern>META-INF.native.oaadj_netty_</shadedPattern>
                                 </relocation>
                             </relocations>
                             <transformers>
diff --git 
a/java/flight/flight-sql-jdbc-driver/src/test/java/org/apache/arrow/driver/jdbc/ITDriverJarValidation.java
 
b/java/flight/flight-sql-jdbc-driver/src/test/java/org/apache/arrow/driver/jdbc/ITDriverJarValidation.java
index fdb580d493..0cae2fd5f5 100644
--- 
a/java/flight/flight-sql-jdbc-driver/src/test/java/org/apache/arrow/driver/jdbc/ITDriverJarValidation.java
+++ 
b/java/flight/flight-sql-jdbc-driver/src/test/java/org/apache/arrow/driver/jdbc/ITDriverJarValidation.java
@@ -42,8 +42,7 @@ import com.google.common.collect.ImmutableSet;
 /**
  * Check the content of the JDBC driver jar
  *
- * After shading everything should be either under 
org.apache.arrow.driver.jdbc.,
- * org.slf4j., or cfjd. packages
+ * After shading everything should be either under 
org.apache.arrow.driver.jdbc. package
  */
 public class ITDriverJarValidation {
   /**
@@ -57,8 +56,6 @@ public class ITDriverJarValidation {
    */
   public static final Set<String> ALLOWED_PREFIXES = ImmutableSet.of(
       "org/apache/arrow/driver/jdbc/",
-      "cfjd/",
-      "org/slf4j/",
       "META-INF/");
 
   /**
diff --git a/java/pom.xml b/java/pom.xml
index bdefbea2d8..8e9ddd5480 100644
--- a/java/pom.xml
+++ b/java/pom.xml
@@ -680,6 +680,11 @@
         <artifactId>slf4j-api</artifactId>
         <version>${dep.slf4j.version}</version>
       </dependency>
+      <dependency>
+        <groupId>org.slf4j</groupId>
+        <artifactId>slf4j-jdk14</artifactId>
+        <version>${dep.slf4j.version}</version>
+      </dependency>
       <dependency>
         <groupId>javax.annotation</groupId>
         <artifactId>javax.annotation-api</artifactId>

Reply via email to