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

benjobs pushed a commit to branch dev-2.1.5
in repository https://gitbox.apache.org/repos/asf/incubator-streampark.git


The following commit(s) were added to refs/heads/dev-2.1.5 by this push:
     new dd3339943 [Improve] childFirstClassLoader minor improvement
dd3339943 is described below

commit dd33399430f99ebfce2ca272f8a8791d24ce1ab2
Author: benjobs <[email protected]>
AuthorDate: Sun Jul 14 15:35:53 2024 +0800

    [Improve] childFirstClassLoader minor improvement
---
 .../flink/proxy/ChildFirstClassLoader.scala        | 41 ++++++++++------------
 1 file changed, 18 insertions(+), 23 deletions(-)

diff --git 
a/streampark-flink/streampark-flink-proxy/src/main/scala/org/apache/streampark/flink/proxy/ChildFirstClassLoader.scala
 
b/streampark-flink/streampark-flink-proxy/src/main/scala/org/apache/streampark/flink/proxy/ChildFirstClassLoader.scala
index 7db1fbe90..447c6c2a3 100644
--- 
a/streampark-flink/streampark-flink-proxy/src/main/scala/org/apache/streampark/flink/proxy/ChildFirstClassLoader.scala
+++ 
b/streampark-flink/streampark-flink-proxy/src/main/scala/org/apache/streampark/flink/proxy/ChildFirstClassLoader.scala
@@ -48,7 +48,7 @@ class ChildFirstClassLoader(
       parent,
       flinkResourcePattern,
       new Consumer[Throwable] {
-        override def accept(t: Throwable): Unit = {}
+        override def accept(t: Throwable): Unit = { throw t }
       })
   }
 
@@ -64,6 +64,7 @@ class ChildFirstClassLoader(
     "org.apache.log4j",
     "org.apache.logging",
     "org.apache.commons.logging",
+    "org.apache.commons.cli",
     "ch.qos.logback",
     "org.xml",
     "org.w3c",
@@ -73,11 +74,25 @@ class ChildFirstClassLoader(
   @throws[ClassNotFoundException]
   override def loadClass(name: String, resolve: Boolean): Class[_] = {
     try {
-      this.synchronized(this.loadClassWithoutExceptionHandling(name, resolve))
+      this.synchronized {
+        super.findLoadedClass(name) match {
+          case null =>
+            // check whether the class should go parent-first
+            PARENT_FIRST_PATTERNS.find(name.startsWith) match {
+              case Some(_) => super.loadClass(name, resolve)
+              case _ => Try(findClass(name)).getOrElse(super.loadClass(name, 
resolve))
+            }
+          case c =>
+            if (resolve) {
+              resolveClass(c)
+            }
+            c
+        }
+      }
     } catch {
       case e: Throwable =>
         classLoadingExceptionHandler.accept(e)
-        throw e
+        null
     }
   }
 
@@ -138,24 +153,4 @@ class ChildFirstClassLoader(
     }
   }
 
-  @throws[ClassNotFoundException]
-  private def loadClassWithoutExceptionHandling(name: String, resolve: 
Boolean): Class[_] = {
-    // First, check if the class has already been loaded
-    super.findLoadedClass(name) match {
-      case null =>
-        // check whether the class should go parent-first
-        for (parentFirstPattern <- PARENT_FIRST_PATTERNS) {
-          if (name.startsWith(parentFirstPattern)) {
-            return super.loadClass(name, resolve)
-          }
-        }
-        Try(findClass(name)).getOrElse(super.loadClass(name, resolve))
-      case c =>
-        if (resolve) {
-          resolveClass(c)
-        }
-        c
-    }
-  }
-
 }

Reply via email to