LuciferYang opened a new issue, #7733:
URL: https://github.com/apache/kyuubi/issues/7733
### Describe the bug
`ReflectUtils.isClassLoadable` defaults its loader to the thread context
classloader:
```scala
def isClassLoadable(
className: String,
cl: ClassLoader = Thread.currentThread().getContextClassLoader): Boolean
= ...
```
On a thread whose context classloader is null,
`DynClasses.builder().loader(null)` resolves the name with `Class.forName(name,
true, null)`, which delegates to the bootstrap loader. The bootstrap loader
sees only JDK classes, so the probe answers `false` for every application
class, including Kyuubi's own, even when that class is loadable through the
loader that defined `ReflectUtils`.
A thread can carry a null context classloader in embedded scenarios: a host
that starts the JVM through the JNI invocation API without setting one, or a
container framework that clears it. `Logging` and `JDBCMetadataStore` probe
optional integrations through this helper, so on such a thread the SLF4J bridge
or the MySQL driver would be reported as absent when it is present.
Spark's own `Utils.classForName` / `getContextOrSparkClassLoader` guard
against this by falling back to a real loader instead of trusting a null
context loader.
### Affects Version(s)
master (1.13.0-SNAPSHOT), and earlier releases carrying `kyuubi-util-scala`.
### Are you willing to submit PR?
Yes.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]