alibaba / jvm-sandbox

Real - time non-invasive AOP framework container based on JVM
GNU Lesser General Public License v3.0
6.69k stars 1.55k forks source link

java.lang.LinkageError (attempted duplicate class definition) #429

Open daodaojava opened 1 year ago

daodaojava commented 1 year ago

异常如下: java.lang.LinkageError: loader com.alibaba.jvm.sandbox.core.classloader.ModuleJarClassLoader @34fe56b8 (instance of com.alibaba.jvm.sandbox.core.classloader.ModuleJarClassLoader, child of 'app' jdk.internal.loader.ClassLoaders$AppClassLoader) attempted duplicate class definition for org.apache.commons.logging.impl.LogFactoryImpl. at java.base/java.lang.ClassLoader.defineClass1(Native Method) at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016) at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174) at java.base/java.net.URLClassLoader.defineClass(URLClassLoader.java:555) at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:458) at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:452) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:451) at com.alibaba.jvm.sandbox.core.classloader.RoutingURLClassLoader.loadClass(RoutingURLClassLoader.java:78) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) at org.apache.commons.logging.LogFactory.createFactory(LogFactory.java:1020)

猜测是 https://github.com/alibaba/jvm-sandbox/blob/c01c28ab5d7d97a64071a2aca261804c47a5347e/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/classloader/RoutingURLClassLoader.java#L53 这里缺失了锁,导致并发情况下同时绕过findLoadedClass进入findClass,从而出现attempted duplicate class definition

麻烦确认下,看起来是最新版本特意改的 https://github.com/alibaba/jvm-sandbox/commit/501e572f4e9006e81704aecb7c8f2b33e9290530

oldmanpushcart commented 1 year ago

丫!是的,这个漏了!应该要加getClassLoadingLock()的!多谢提醒,这个问题会比较严重些,本周优先考虑下,发布个版本修复掉。

daodaojava commented 1 year ago

好的,大佬预计什么时候可以出新release版本?

oldmanpushcart commented 1 year ago

@daodaojava 原计划是端午,该死的github在弄XX认证,原来用来发布的账号正在整。我争取这周发布掉。

daodaojava commented 1 year ago

好的,辛苦大佬🤝

ShiningXu commented 6 months ago

我们也遇到了,求大佬们尽快给个 release版本 🤝 @oldmanpushcart @z529192557