diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/loader/AgentClassLoader.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/loader/AgentClassLoader.java index 542ebc256edecf4e2e4e3c38a626383cecd1bdad..24fe3be87dd7a720aebec7ed22af5c1ea96827dd 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/loader/AgentClassLoader.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/loader/AgentClassLoader.java @@ -34,6 +34,7 @@ import java.util.jar.JarEntry; import java.util.jar.JarFile; import org.skywalking.apm.agent.core.boot.AgentPackageNotFoundException; import org.skywalking.apm.agent.core.boot.AgentPackagePath; +import org.skywalking.apm.agent.core.plugin.PluginBootstrap; import org.skywalking.apm.logging.ILog; import org.skywalking.apm.logging.LogManager; @@ -50,14 +51,13 @@ public class AgentClassLoader extends ClassLoader { private List classpath; private List allJars; private ReentrantLock jarScanLock = new ReentrantLock(); - private ReentrantLock loadClassLock = new ReentrantLock(); public static AgentClassLoader getDefault() { return LOADER; } public static AgentClassLoader initDefaultLoader() throws AgentPackageNotFoundException { - LOADER = new AgentClassLoader(AgentClassLoader.class.getClassLoader()); + LOADER = new AgentClassLoader(PluginBootstrap.class.getClassLoader()); return getDefault(); } @@ -69,44 +69,15 @@ public class AgentClassLoader extends ClassLoader { classpath.add(new File(agentDictionary, "activations")); } - protected Class loadClass(String name, boolean resolve) - throws ClassNotFoundException { - loadClassLock.lock(); - try { - // First, check if the class has already been loaded - Class c = findLoadedClass(name); - if (c == null) { - try { - super.loadClass(name, resolve); - } catch (ClassNotFoundException e) { - // ClassNotFoundException thrown if class not found - // from the non-null parent class loader - } - - if (c == null) { - // If still not found, then invoke findClass in order - // to find the class. - c = findClass(name); - } - } - if (resolve) { - resolveClass(c); - } - return c; - } finally { - loadClassLock.unlock(); - } - } - @Override protected Class findClass(String name) throws ClassNotFoundException { List allJars = getAllJars(); - String path = "/" + name.replace('.', '/').concat(".class"); + String path = name.replace('.', '/').concat(".class"); for (Jar jar : allJars) { JarEntry entry = jar.jarFile.getJarEntry(path); if (entry != null) { try { - URL classFileUrl = new URL("jar:file:" + jar.sourceFile.getAbsolutePath() + "!/" + name); + URL classFileUrl = new URL("jar:file:" + jar.sourceFile.getAbsolutePath() + "!/" + path); byte[] data = null; BufferedInputStream is = null; ByteArrayOutputStream baos = null; diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/loader/InterceptorInstanceLoader.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/loader/InterceptorInstanceLoader.java index 90b66e2bc48adc4de3afc064b2e890267d3e3e56..7b2efeead54dd6c4522ab0708d17a678f1293ae9 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/loader/InterceptorInstanceLoader.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/loader/InterceptorInstanceLoader.java @@ -66,20 +66,16 @@ public class InterceptorInstanceLoader { String instanceKey = className + "_OF_" + targetClassLoader.getClass().getName() + "@" + Integer.toHexString(targetClassLoader.hashCode()); Object inst = INSTANCE_CACHE.get(instanceKey); if (inst == null) { - if (InterceptorInstanceLoader.class.getClassLoader().equals(targetClassLoader)) { - inst = targetClassLoader.loadClass(className).newInstance(); - } else { - INSTANCE_LOAD_LOCK.lock(); - try { - ClassLoader pluginLoader = EXTEND_PLUGIN_CLASSLOADERS.get(targetClassLoader); - if (pluginLoader == null) { - pluginLoader = new AgentClassLoader(targetClassLoader); - EXTEND_PLUGIN_CLASSLOADERS.put(targetClassLoader, pluginLoader); - } - inst = Class.forName(className, true, pluginLoader).newInstance(); - } finally { - INSTANCE_LOAD_LOCK.unlock(); + INSTANCE_LOAD_LOCK.lock(); + try { + ClassLoader pluginLoader = EXTEND_PLUGIN_CLASSLOADERS.get(targetClassLoader); + if (pluginLoader == null) { + pluginLoader = new AgentClassLoader(targetClassLoader); + EXTEND_PLUGIN_CLASSLOADERS.put(targetClassLoader, pluginLoader); } + inst = Class.forName(className, true, pluginLoader).newInstance(); + } finally { + INSTANCE_LOAD_LOCK.unlock(); } if (inst != null) { INSTANCE_CACHE.put(instanceKey, inst); diff --git a/apm-sniffer/apm-agent/pom.xml b/apm-sniffer/apm-agent/pom.xml index d947eb0cdac5569db5caa3649e582899a040f59b..07fd2bed53bf5e8812161cf6e140e6162661bcc3 100644 --- a/apm-sniffer/apm-agent/pom.xml +++ b/apm-sniffer/apm-agent/pom.xml @@ -35,8 +35,6 @@ UTF-8 org.skywalking.apm.agent.SkyWalkingAgent - - org.skywalking.apm.dependencies net.bytebuddy ${shade.package}.${shade.net.bytebuddy.source} diff --git a/apm-sniffer/apm-sdk-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/pom.xml index ef82414e3cc18f0352dd0601dc587e5a7764dde0..9715fc4ffd209993c06843689b11bec791e3015a 100644 --- a/apm-sniffer/apm-sdk-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/pom.xml @@ -55,6 +55,8 @@ UTF-8 + net.bytebuddy + ${shade.package}.${shade.net.bytebuddy.source} @@ -62,6 +64,13 @@ org.skywalking apm-agent-core ${project.version} + provided + + + org.skywalking + apm-util + ${project.version} + provided org.skywalking @@ -73,6 +82,44 @@ + + org.apache.maven.plugins + maven-shade-plugin + 2.4.1 + + + package + + shade + + + false + true + true + true + + + com.lmax:* + org.apache.httpcomponents:* + commons-logging:* + commons-codec:* + *:gson + io.grpc:* + io.netty:* + com.google.*:* + com.google.guava:guava + + + + + ${shade.net.bytebuddy.source} + ${shade.net.bytebuddy.target} + + + + + + org.apache.maven.plugins maven-resources-plugin diff --git a/apm-sniffer/apm-toolkit-activation/pom.xml b/apm-sniffer/apm-toolkit-activation/pom.xml index b0d9e5ed731e8bc2239ea9fdaa9439421966b1d8..8cf9d3450b916cc4c3de1b0e3ec79429ca4a230a 100644 --- a/apm-sniffer/apm-toolkit-activation/pom.xml +++ b/apm-sniffer/apm-toolkit-activation/pom.xml @@ -37,8 +37,73 @@ apm-toolkit-activation + + UTF-8 + net.bytebuddy + ${shade.package}.${shade.net.bytebuddy.source} + + + + + org.skywalking + apm-agent-core + ${project.version} + provided + + + org.skywalking + apm-util + ${project.version} + provided + + + org.skywalking + apm-test-tools + ${project.version} + provided + + + + + org.apache.maven.plugins + maven-shade-plugin + 2.4.1 + + + package + + shade + + + false + true + true + true + + + com.lmax:* + org.apache.httpcomponents:* + commons-logging:* + commons-codec:* + *:gson + io.grpc:* + io.netty:* + com.google.*:* + com.google.guava:guava + + + + + ${shade.net.bytebuddy.source} + ${shade.net.bytebuddy.target} + + + + + + org.apache.maven.plugins maven-antrun-plugin @@ -86,17 +151,4 @@ - - - - org.skywalking - apm-agent-core - ${project.version} - - - org.skywalking - apm-test-tools - ${project.version} - - diff --git a/apm-sniffer/pom.xml b/apm-sniffer/pom.xml index 06a420a22c0f5ccc3d922d066042c33e57816397..e92bd4cc8047623cb2fcd00dd4097f415845fd5a 100644 --- a/apm-sniffer/pom.xml +++ b/apm-sniffer/pom.xml @@ -40,13 +40,14 @@ 1.6 + org.skywalking.apm.dependencies org.skywalking apm-util - 3.2.3-2017 + ${project.version}