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
- }
- }
-
}