From 0c570a0dfb970eb601bcf8471cdeca3e11b72345 Mon Sep 17 00:00:00 2001 From: "koo.taejin" Date: Tue, 2 May 2017 10:26:10 +0900 Subject: [PATCH] [#2886] Use parallel function for ClassLoader when using JDK7+ --- ...llelCapablePinpointClassLoaderFactory.java | 37 +++++++ ...ParallelCapablePinpointURLClassLoader.java | 88 +++++++++++++++ ...llelCapablePinpointURLClassLoaderTest.java | 42 ++++++++ .../DefaultPinpointClassLoaderFactory.java | 37 +++++++ .../InnerPinpointClassLoaderFactory.java | 31 ++++++ .../bootstrap/classloader}/LibClass.java | 2 +- .../PinpointClassLoaderFactory.java | 102 ++++++++++++++++++ .../classloader}/PinpointURLClassLoader.java | 4 +- .../classloader}/ProfilerLibClass.java | 2 +- .../PinpointURLClassLoaderTest.java | 17 +-- .../pinpoint/bootstrap/AgentClassLoader.java | 12 ++- .../JarProfilerPluginClassInjectorTest.java | 8 +- 12 files changed, 364 insertions(+), 18 deletions(-) create mode 100644 bootstrap-core-optional/src/main/java/com/navercorp/pinpoint/bootstrap/classloader/ParallelCapablePinpointClassLoaderFactory.java create mode 100644 bootstrap-core-optional/src/main/java/com/navercorp/pinpoint/bootstrap/classloader/ParallelCapablePinpointURLClassLoader.java create mode 100644 bootstrap-core-optional/src/test/java/com/navercorp/pinpoint/bootstrap/classloader/ParallelCapablePinpointURLClassLoaderTest.java create mode 100644 bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/classloader/DefaultPinpointClassLoaderFactory.java create mode 100644 bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/classloader/InnerPinpointClassLoaderFactory.java rename {bootstrap/src/main/java/com/navercorp/pinpoint/bootstrap => bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/classloader}/LibClass.java (93%) create mode 100644 bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/classloader/PinpointClassLoaderFactory.java rename {bootstrap/src/main/java/com/navercorp/pinpoint/bootstrap => bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/classloader}/PinpointURLClassLoader.java (98%) rename {bootstrap/src/main/java/com/navercorp/pinpoint/bootstrap => bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/classloader}/ProfilerLibClass.java (96%) rename {bootstrap/src/test/java/com/navercorp/pinpoint/bootstrap => bootstrap-core/src/test/java/com/navercorp/pinpoint/bootstrap/classloader}/PinpointURLClassLoaderTest.java (75%) diff --git a/bootstrap-core-optional/src/main/java/com/navercorp/pinpoint/bootstrap/classloader/ParallelCapablePinpointClassLoaderFactory.java b/bootstrap-core-optional/src/main/java/com/navercorp/pinpoint/bootstrap/classloader/ParallelCapablePinpointClassLoaderFactory.java new file mode 100644 index 000000000000..c0325f96b379 --- /dev/null +++ b/bootstrap-core-optional/src/main/java/com/navercorp/pinpoint/bootstrap/classloader/ParallelCapablePinpointClassLoaderFactory.java @@ -0,0 +1,37 @@ +/* + * Copyright 2017 NAVER Corp. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.pinpoint.bootstrap.classloader; + +import java.net.URL; +import java.net.URLClassLoader; + +/** + * @author Taejin Koo + */ +class ParallelCapablePinpointClassLoaderFactory implements InnerPinpointClassLoaderFactory { + + @Override + public URLClassLoader createURLClassLoader(URL[] urls, ClassLoader parent) { + return new ParallelCapablePinpointURLClassLoader(urls, parent); + } + + @Override + public URLClassLoader createURLClassLoader(URL[] urls, ClassLoader parent, LibClass libClass) { + return new ParallelCapablePinpointURLClassLoader(urls, parent, libClass); + } + +} diff --git a/bootstrap-core-optional/src/main/java/com/navercorp/pinpoint/bootstrap/classloader/ParallelCapablePinpointURLClassLoader.java b/bootstrap-core-optional/src/main/java/com/navercorp/pinpoint/bootstrap/classloader/ParallelCapablePinpointURLClassLoader.java new file mode 100644 index 000000000000..9ecfa2b81b7f --- /dev/null +++ b/bootstrap-core-optional/src/main/java/com/navercorp/pinpoint/bootstrap/classloader/ParallelCapablePinpointURLClassLoader.java @@ -0,0 +1,88 @@ +/* + * Copyright 2017 NAVER Corp. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.pinpoint.bootstrap.classloader; + +import java.net.URL; +import java.net.URLClassLoader; + +/** + * @author Taejin Koo + */ +class ParallelCapablePinpointURLClassLoader extends URLClassLoader { + + private static final LibClass PROFILER_LIB_CLASS = new ProfilerLibClass(); + + private final ClassLoader parent; + + private final LibClass libClass; + + static { + ClassLoader.registerAsParallelCapable(); + } + + public ParallelCapablePinpointURLClassLoader(URL[] urls, ClassLoader parent) { + this(urls, parent, PROFILER_LIB_CLASS); + } + + public ParallelCapablePinpointURLClassLoader(URL[] urls, ClassLoader parent, LibClass libClass) { + super(urls, parent); + + if (parent == null) { + throw new NullPointerException("parent must not be null"); + } + if (libClass == null) { + throw new NullPointerException("libClass must not be null"); + } + + this.parent = parent; + this.libClass = libClass; + } + + @Override + protected Class loadClass(String name, boolean resolve) throws ClassNotFoundException { + synchronized (getClassLoadingLock(name)) { + // First, check if the class has already been loaded + Class clazz = findLoadedClass(name); + if (clazz == null) { + if (onLoadClass(name)) { + // load a class used for Pinpoint itself by this PinpointURLClassLoader + clazz = findClass(name); + } else { + try { + // load a class by parent ClassLoader + clazz = parent.loadClass(name); + } catch (ClassNotFoundException ignore) { + } + if (clazz == null) { + // if not found, try to load a class by this PinpointURLClassLoader + clazz = findClass(name); + } + } + } + if (resolve) { + resolveClass(clazz); + } + return clazz; + } + } + + // for test + boolean onLoadClass(String name) { + return libClass.onLoadClass(name); + } + +} diff --git a/bootstrap-core-optional/src/test/java/com/navercorp/pinpoint/bootstrap/classloader/ParallelCapablePinpointURLClassLoaderTest.java b/bootstrap-core-optional/src/test/java/com/navercorp/pinpoint/bootstrap/classloader/ParallelCapablePinpointURLClassLoaderTest.java new file mode 100644 index 000000000000..7519deb2c020 --- /dev/null +++ b/bootstrap-core-optional/src/test/java/com/navercorp/pinpoint/bootstrap/classloader/ParallelCapablePinpointURLClassLoaderTest.java @@ -0,0 +1,42 @@ +package com.navercorp.pinpoint.bootstrap.classloader; + +import org.junit.Assert; +import org.junit.Test; + +import java.net.URL; +import java.net.URLClassLoader; + +/** + * @author Taejin Koo + */ +public class ParallelCapablePinpointURLClassLoaderTest { + + @Test + public void testOnLoadClass() throws Exception { + + URLClassLoader cl = PinpointClassLoaderFactory.createClassLoader(new URL[]{}, Thread.currentThread().getContextClassLoader()); + + try { + cl.loadClass("test"); + Assert.fail(); + } catch (ClassNotFoundException ignored) { + } + +// try { +// cl.loadClass("com.navercorp.pinpoint.profiler.DefaultAgent"); +// } catch (ClassNotFoundException e) { +// +// } + // should be able to test using the above code, but it is not possible from bootstrap testcase. + // it could be possible by specifying the full path to the URL classloader, but it would be harder to maintain. + // for now, just test if DefaultAgent is specified to be loaded + + if (cl instanceof ParallelCapablePinpointURLClassLoader) { + Assert.assertTrue(((ParallelCapablePinpointURLClassLoader) cl).onLoadClass("com.navercorp.pinpoint.profiler.DefaultAgent")); + } else { + Assert.fail(); + } + + } + +} diff --git a/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/classloader/DefaultPinpointClassLoaderFactory.java b/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/classloader/DefaultPinpointClassLoaderFactory.java new file mode 100644 index 000000000000..68c5aafe0622 --- /dev/null +++ b/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/classloader/DefaultPinpointClassLoaderFactory.java @@ -0,0 +1,37 @@ +/* + * Copyright 2017 NAVER Corp. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.pinpoint.bootstrap.classloader; + +import java.net.URL; +import java.net.URLClassLoader; + +/** + * @author Taejin Koo + */ +class DefaultPinpointClassLoaderFactory implements InnerPinpointClassLoaderFactory { + + @Override + public URLClassLoader createURLClassLoader(URL[] urls, ClassLoader parent) { + return new PinpointURLClassLoader(urls, parent); + } + + @Override + public URLClassLoader createURLClassLoader(URL[] urls, ClassLoader parent, LibClass libClass) { + return new PinpointURLClassLoader(urls, parent, libClass); + } + +} diff --git a/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/classloader/InnerPinpointClassLoaderFactory.java b/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/classloader/InnerPinpointClassLoaderFactory.java new file mode 100644 index 000000000000..5b0a607178c6 --- /dev/null +++ b/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/classloader/InnerPinpointClassLoaderFactory.java @@ -0,0 +1,31 @@ +/* + * Copyright 2017 NAVER Corp. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.pinpoint.bootstrap.classloader; + +import java.net.URL; +import java.net.URLClassLoader; + +/** + * @author Taejin Koo + */ +interface InnerPinpointClassLoaderFactory { + + URLClassLoader createURLClassLoader(URL[] urls, ClassLoader parent); + + URLClassLoader createURLClassLoader(URL[] urls, ClassLoader parent, LibClass libClass); + +} diff --git a/bootstrap/src/main/java/com/navercorp/pinpoint/bootstrap/LibClass.java b/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/classloader/LibClass.java similarity index 93% rename from bootstrap/src/main/java/com/navercorp/pinpoint/bootstrap/LibClass.java rename to bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/classloader/LibClass.java index a0c7fe8d34e4..ca9c719cc9d4 100644 --- a/bootstrap/src/main/java/com/navercorp/pinpoint/bootstrap/LibClass.java +++ b/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/classloader/LibClass.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.navercorp.pinpoint.bootstrap; +package com.navercorp.pinpoint.bootstrap.classloader; /** * @author emeroad diff --git a/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/classloader/PinpointClassLoaderFactory.java b/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/classloader/PinpointClassLoaderFactory.java new file mode 100644 index 000000000000..c8143eab11fe --- /dev/null +++ b/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/classloader/PinpointClassLoaderFactory.java @@ -0,0 +1,102 @@ +/* + * Copyright 2017 NAVER Corp. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.pinpoint.bootstrap.classloader; + +import com.navercorp.pinpoint.bootstrap.logging.PLogger; +import com.navercorp.pinpoint.bootstrap.logging.PLoggerFactory; +import com.navercorp.pinpoint.common.util.JvmUtils; +import com.navercorp.pinpoint.common.util.JvmVersion; + +import java.lang.reflect.Method; +import java.net.URL; +import java.net.URLClassLoader; + +/** + * @author Taejin Koo + */ +public final class PinpointClassLoaderFactory { + + private static final PLogger LOGGER = PLoggerFactory.getLogger(PinpointClassLoaderFactory.class); + + private static final InnerPinpointClassLoaderFactory CLASS_LOADER_FACTORY = createClassLoaderFactory(); + + // Jdk 7+ + private static final String PARALLEL_CAPABLE_CLASS_LOADER_FACTORY = "com.navercorp.pinpoint.bootstrap.classloader.ParallelCapablePinpointClassLoaderFactory"; + + private PinpointClassLoaderFactory() { + throw new IllegalAccessError(); + } + + private static InnerPinpointClassLoaderFactory createClassLoaderFactory() { + final JvmVersion jvmVersion = JvmUtils.getVersion(); + if (jvmVersion == JvmVersion.JAVA_6) { + return new DefaultPinpointClassLoaderFactory(); + } else if (jvmVersion.onOrAfter(JvmVersion.JAVA_7)) { + boolean hasRegisterAsParallelCapableMethod = hasRegisterAsParallelCapableMethod(); + if (hasRegisterAsParallelCapableMethod) { + try { + ClassLoader classLoader = getClassLoader(PinpointClassLoaderFactory.class.getClassLoader()); + final Class parallelCapableClassLoaderFactoryClass = + (Class) Class.forName(PARALLEL_CAPABLE_CLASS_LOADER_FACTORY, true, classLoader); + return parallelCapableClassLoaderFactoryClass.newInstance(); + } catch (ClassNotFoundException e) { + logError(e); + } catch (InstantiationException e) { + logError(e); + } catch (IllegalAccessException e) { + logError(e); + } + return new DefaultPinpointClassLoaderFactory(); + } else { + return new DefaultPinpointClassLoaderFactory(); + } + } else { + throw new RuntimeException("Unsupported jvm version " + jvmVersion); + } + } + + private static boolean hasRegisterAsParallelCapableMethod() { + Method[] methods = ClassLoader.class.getDeclaredMethods(); + for (Method method : methods) { + if (method.getName().equals("registerAsParallelCapable")) { + return true; + } + } + + return false; + } + + private static ClassLoader getClassLoader(ClassLoader classLoader) { + if (classLoader == null) { + return ClassLoader.getSystemClassLoader(); + } + return classLoader; + } + + private static void logError(Exception e) { + LOGGER.info("ParallelCapablePinpointClassLoader not found."); + } + + public static URLClassLoader createClassLoader(URL[] urls, ClassLoader parent) { + return CLASS_LOADER_FACTORY.createURLClassLoader(urls, parent); + } + + public static URLClassLoader createClassLoader(URL[] urls, ClassLoader parent, LibClass libClass) { + return CLASS_LOADER_FACTORY.createURLClassLoader(urls, parent, libClass); + } + +} diff --git a/bootstrap/src/main/java/com/navercorp/pinpoint/bootstrap/PinpointURLClassLoader.java b/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/classloader/PinpointURLClassLoader.java similarity index 98% rename from bootstrap/src/main/java/com/navercorp/pinpoint/bootstrap/PinpointURLClassLoader.java rename to bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/classloader/PinpointURLClassLoader.java index 41a54a9c23f3..3679f41a03b7 100644 --- a/bootstrap/src/main/java/com/navercorp/pinpoint/bootstrap/PinpointURLClassLoader.java +++ b/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/classloader/PinpointURLClassLoader.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.navercorp.pinpoint.bootstrap; +package com.navercorp.pinpoint.bootstrap.classloader; import java.net.URL; import java.net.URLClassLoader; @@ -36,12 +36,14 @@ public class PinpointURLClassLoader extends URLClassLoader { public PinpointURLClassLoader(URL[] urls, ClassLoader parent, LibClass libClass) { super(urls, parent); + if (parent == null) { throw new NullPointerException("parent must not be null"); } if (libClass == null) { throw new NullPointerException("libClass must not be null"); } + this.parent = parent; this.libClass = libClass; } diff --git a/bootstrap/src/main/java/com/navercorp/pinpoint/bootstrap/ProfilerLibClass.java b/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/classloader/ProfilerLibClass.java similarity index 96% rename from bootstrap/src/main/java/com/navercorp/pinpoint/bootstrap/ProfilerLibClass.java rename to bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/classloader/ProfilerLibClass.java index 195050641c9a..62fec188c16f 100644 --- a/bootstrap/src/main/java/com/navercorp/pinpoint/bootstrap/ProfilerLibClass.java +++ b/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/classloader/ProfilerLibClass.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.navercorp.pinpoint.bootstrap; +package com.navercorp.pinpoint.bootstrap.classloader; /** * @author emeroad diff --git a/bootstrap/src/test/java/com/navercorp/pinpoint/bootstrap/PinpointURLClassLoaderTest.java b/bootstrap-core/src/test/java/com/navercorp/pinpoint/bootstrap/classloader/PinpointURLClassLoaderTest.java similarity index 75% rename from bootstrap/src/test/java/com/navercorp/pinpoint/bootstrap/PinpointURLClassLoaderTest.java rename to bootstrap-core/src/test/java/com/navercorp/pinpoint/bootstrap/classloader/PinpointURLClassLoaderTest.java index a2132744e3b4..37b64fab9c10 100644 --- a/bootstrap/src/test/java/com/navercorp/pinpoint/bootstrap/PinpointURLClassLoaderTest.java +++ b/bootstrap-core/src/test/java/com/navercorp/pinpoint/bootstrap/classloader/PinpointURLClassLoaderTest.java @@ -14,15 +14,13 @@ * limitations under the License. */ -package com.navercorp.pinpoint.bootstrap; +package com.navercorp.pinpoint.bootstrap.classloader; import org.junit.Assert; - import org.junit.Test; -import com.navercorp.pinpoint.bootstrap.PinpointURLClassLoader; - import java.net.URL; +import java.net.URLClassLoader; /** * @author emeroad @@ -32,7 +30,8 @@ public class PinpointURLClassLoaderTest { @Test public void testOnLoadClass() throws Exception { - PinpointURLClassLoader cl = new PinpointURLClassLoader(new URL[]{}, Thread.currentThread().getContextClassLoader()); + URLClassLoader cl = PinpointClassLoaderFactory.createClassLoader(new URL[]{}, Thread.currentThread().getContextClassLoader()); + try { cl.loadClass("test"); Assert.fail(); @@ -47,6 +46,12 @@ public void testOnLoadClass() throws Exception { // should be able to test using the above code, but it is not possible from bootstrap testcase. // it could be possible by specifying the full path to the URL classloader, but it would be harder to maintain. // for now, just test if DefaultAgent is specified to be loaded - Assert.assertTrue(cl.onLoadClass("com.navercorp.pinpoint.profiler.DefaultAgent")); + + if (cl instanceof PinpointURLClassLoader) { + Assert.assertTrue(((PinpointURLClassLoader)cl).onLoadClass("com.navercorp.pinpoint.profiler.DefaultAgent")); + } else { + Assert.fail(); + } + } } diff --git a/bootstrap/src/main/java/com/navercorp/pinpoint/bootstrap/AgentClassLoader.java b/bootstrap/src/main/java/com/navercorp/pinpoint/bootstrap/AgentClassLoader.java index e4e79b327023..f232d0da3e58 100644 --- a/bootstrap/src/main/java/com/navercorp/pinpoint/bootstrap/AgentClassLoader.java +++ b/bootstrap/src/main/java/com/navercorp/pinpoint/bootstrap/AgentClassLoader.java @@ -16,6 +16,8 @@ package com.navercorp.pinpoint.bootstrap; +import com.navercorp.pinpoint.bootstrap.classloader.PinpointClassLoaderFactory; + import java.lang.reflect.Constructor; import java.net.URL; import java.net.URLClassLoader; @@ -48,15 +50,15 @@ public AgentClassLoader(URL[] urls) { this.executeTemplate = new ContextClassLoaderExecuteTemplate(classLoader); } - private PinpointURLClassLoader createClassLoader(final URL[] urls, final ClassLoader bootStrapClassLoader) { + private URLClassLoader createClassLoader(final URL[] urls, final ClassLoader bootStrapClassLoader) { if (SECURITY_MANAGER != null) { - return AccessController.doPrivileged(new PrivilegedAction() { - public PinpointURLClassLoader run() { - return new PinpointURLClassLoader(urls, bootStrapClassLoader); + return AccessController.doPrivileged(new PrivilegedAction() { + public URLClassLoader run() { + return PinpointClassLoaderFactory.createClassLoader(urls, bootStrapClassLoader); } }); } else { - return new PinpointURLClassLoader(urls, bootStrapClassLoader); + return PinpointClassLoaderFactory.createClassLoader(urls, bootStrapClassLoader); } } diff --git a/profiler/src/test/java/com/navercorp/pinpoint/profiler/instrument/classloading/JarProfilerPluginClassInjectorTest.java b/profiler/src/test/java/com/navercorp/pinpoint/profiler/instrument/classloading/JarProfilerPluginClassInjectorTest.java index 2f427876f21e..9c95541be9a4 100644 --- a/profiler/src/test/java/com/navercorp/pinpoint/profiler/instrument/classloading/JarProfilerPluginClassInjectorTest.java +++ b/profiler/src/test/java/com/navercorp/pinpoint/profiler/instrument/classloading/JarProfilerPluginClassInjectorTest.java @@ -16,8 +16,8 @@ package com.navercorp.pinpoint.profiler.instrument.classloading; -import com.navercorp.pinpoint.bootstrap.LibClass; -import com.navercorp.pinpoint.bootstrap.PinpointURLClassLoader; +import com.navercorp.pinpoint.bootstrap.classloader.LibClass; +import com.navercorp.pinpoint.bootstrap.classloader.PinpointClassLoaderFactory; import com.navercorp.pinpoint.bootstrap.plugin.ProfilerPlugin; import com.navercorp.pinpoint.common.util.ClassLoaderUtils; import com.navercorp.pinpoint.profiler.plugin.PluginConfig; @@ -31,9 +31,9 @@ import java.lang.reflect.Constructor; import java.net.URL; +import java.net.URLClassLoader; import java.security.CodeSource; import java.util.Arrays; -import java.util.List; /** * @author Woonduk Kang(emeroad) @@ -83,8 +83,8 @@ public boolean onLoadClass(String clazzName) { return DELEGATE_PARENT; } }; - PinpointURLClassLoader testClassLoader = new PinpointURLClassLoader(urlArray, ClassLoader.getSystemClassLoader(), libClassFilter); + URLClassLoader testClassLoader = PinpointClassLoaderFactory.createClassLoader(urlArray, ClassLoader.getSystemClassLoader(), libClassFilter); final ClassLoader contextTypeMatchClassLoader = constructor.newInstance(testClassLoader); logger.debug("cl:{}",contextTypeMatchClassLoader);