修正IPlugin接口以及IBootPluginDefine,及其相关实现。增加代码的一致性。

This commit is contained in:
wusheng 2016-07-31 08:40:30 +08:00
parent 9f317bf59e
commit dd27fad3e2
11 changed files with 38 additions and 49 deletions

View File

@ -5,7 +5,7 @@ import com.ai.cloud.skywalking.conf.ConfigInitializer;
import com.ai.cloud.skywalking.logging.LogManager;
import com.ai.cloud.skywalking.logging.Logger;
import com.ai.cloud.skywalking.plugin.*;
import com.ai.cloud.skywalking.plugin.boot.BootPluginDefine;
import com.ai.cloud.skywalking.plugin.boot.IBootPluginDefine;
import net.bytebuddy.agent.builder.AgentBuilder;
import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.dynamic.DynamicType;
@ -35,7 +35,7 @@ public class SkywalkingAgent {
}
try {
return pluginDefine.define0(builder);
return pluginDefine.define(builder);
} catch (PluginException e) {
logger.error("Failed to enhance plugin " + pluginDefine.getClass().getName(), e);
return builder;
@ -47,9 +47,9 @@ public class SkywalkingAgent {
}
public static void startBootPluginDefines(List<BootPluginDefine> bootPluginDefines) throws PluginException {
for (BootPluginDefine bootPluginDefine : bootPluginDefines) {
bootPluginDefine.define(null);
public static void startBootPluginDefines(List<IBootPluginDefine> IBootPluginDefines) throws PluginException {
for (IBootPluginDefine bootPluginDefine : IBootPluginDefines) {
bootPluginDefine.boot();
}
}
}

View File

@ -14,13 +14,7 @@ import static com.ai.cloud.skywalking.plugin.PluginBootstrap.CLASS_TYPE_POOL;
public abstract class AbstractClassEnhancePluginDefine implements IPlugin {
private static Logger logger = LogManager.getLogger(AbstractClassEnhancePluginDefine.class);
@Override
public void define(DynamicType.Builder<?> builder) throws PluginException {
builder = define0(builder);
builder.name(enhanceClassName()).make().load(ClassLoader.getSystemClassLoader(), ClassLoadingStrategy.Default.INJECTION).getLoaded();
}
public DynamicType.Builder<?> define0(DynamicType.Builder<?> builder) throws PluginException {
public DynamicType.Builder<?> define(DynamicType.Builder<?> builder) throws PluginException {
String interceptorDefineClassName = this.getClass().getName();
String enhanceOriginClassName = enhanceClassName();

View File

@ -1,8 +1,5 @@
package com.ai.cloud.skywalking.plugin;
import net.bytebuddy.dynamic.DynamicType;
public interface IPlugin {
void define(DynamicType.Builder<?> builder) throws PluginException;
}

View File

@ -1,6 +1,6 @@
package com.ai.cloud.skywalking.plugin;
import com.ai.cloud.skywalking.plugin.boot.BootPluginDefine;
import com.ai.cloud.skywalking.plugin.boot.IBootPluginDefine;
import java.util.ArrayList;
import java.util.HashMap;
@ -12,7 +12,7 @@ public class PluginDefineCategory {
private static PluginDefineCategory pluginDefineCategory;
private final Map<String, AbstractClassEnhancePluginDefine> classEnhancePluginDefines = new HashMap<String, AbstractClassEnhancePluginDefine>();
private final List<BootPluginDefine> bootPluginDefines = new ArrayList<BootPluginDefine>();
private final List<IBootPluginDefine> IBootPluginDefines = new ArrayList<IBootPluginDefine>();
private PluginDefineCategory(List<IPlugin> plugins) {
for (IPlugin plugin : plugins) {
@ -20,8 +20,8 @@ public class PluginDefineCategory {
classEnhancePluginDefines.put(((AbstractClassEnhancePluginDefine) plugin).enhanceClassName(), (AbstractClassEnhancePluginDefine) plugin);
}
if (plugin instanceof BootPluginDefine) {
bootPluginDefines.add((BootPluginDefine) plugin);
if (plugin instanceof IBootPluginDefine) {
IBootPluginDefines.add((IBootPluginDefine) plugin);
}
}
}
@ -33,8 +33,8 @@ public class PluginDefineCategory {
return pluginDefineCategory;
}
public List<BootPluginDefine> getBootPluginsDefines() {
return pluginDefineCategory.bootPluginDefines;
public List<IBootPluginDefine> getBootPluginsDefines() {
return pluginDefineCategory.IBootPluginDefines;
}
public Map<String, AbstractClassEnhancePluginDefine> getClassEnhancePluginDefines() {

View File

@ -2,9 +2,11 @@ package com.ai.cloud.skywalking.plugin;
import com.ai.cloud.skywalking.logging.LogManager;
import com.ai.cloud.skywalking.logging.Logger;
import com.ai.cloud.skywalking.plugin.boot.IBootPluginDefine;
import net.bytebuddy.ByteBuddy;
import net.bytebuddy.dynamic.ClassFileLocator;
import net.bytebuddy.dynamic.DynamicType;
import net.bytebuddy.dynamic.loading.ClassLoadingStrategy;
import net.bytebuddy.pool.TypePool;
import java.lang.reflect.InvocationTargetException;
@ -38,8 +40,6 @@ public class TracingBootstrap {
}
for (IPlugin plugin : plugins) {
DynamicType.Builder<?> newClassBuilder = null;
if (plugin instanceof AbstractClassEnhancePluginDefine) {
String enhanceClassName = ((AbstractClassEnhancePluginDefine) plugin).enhanceClassName();
TypePool.Resolution resolution = TypePool.Default.ofClassPath().describe(enhanceClassName);
@ -47,10 +47,15 @@ public class TracingBootstrap {
logger.error("Failed to resolve the class " + enhanceClassName);
continue;
}
newClassBuilder = new ByteBuddy().rebase(resolution.resolve(), ClassFileLocator.ForClassLoader.ofClassPath());
DynamicType.Builder<?> newClassBuilder = new ByteBuddy().rebase(resolution.resolve(), ClassFileLocator.ForClassLoader.ofClassPath());
newClassBuilder = ((AbstractClassEnhancePluginDefine)plugin).define(newClassBuilder);
newClassBuilder.make().load(ClassLoader.getSystemClassLoader(), ClassLoadingStrategy.Default.INJECTION).getLoaded();
}
if(plugin instanceof IBootPluginDefine){
((IBootPluginDefine)plugin).boot();
}
plugin.define(newClassBuilder);
}

View File

@ -1,16 +0,0 @@
package com.ai.cloud.skywalking.plugin.boot;
import com.ai.cloud.skywalking.plugin.IPlugin;
import com.ai.cloud.skywalking.plugin.PluginException;
import net.bytebuddy.dynamic.DynamicType;
public abstract class BootPluginDefine implements IPlugin {
@Override
public void define(DynamicType.Builder<?> builder) throws PluginException {
this.boot();
}
protected abstract void boot() throws BootException;
}

View File

@ -0,0 +1,9 @@
package com.ai.cloud.skywalking.plugin.boot;
import com.ai.cloud.skywalking.plugin.IPlugin;
public interface IBootPluginDefine extends IPlugin {
void boot() throws BootException;
}

View File

@ -5,6 +5,7 @@ import junit.framework.TestCase;
import net.bytebuddy.ByteBuddy;
import net.bytebuddy.dynamic.ClassFileLocator;
import net.bytebuddy.dynamic.DynamicType;
import net.bytebuddy.dynamic.loading.ClassLoadingStrategy;
import net.bytebuddy.pool.TypePool;
import org.junit.Test;
@ -23,7 +24,8 @@ public class ExclusionMatcherTest extends TestCase {
DynamicType.Builder<?> newClassBuilder =
new ByteBuddy().rebase(TypePool.Default.ofClassPath().describe(entry.getKey()).resolve(), ClassFileLocator.ForClassLoader.ofClassPath());
entry.getValue().define(newClassBuilder);
newClassBuilder = entry.getValue().define(newClassBuilder);
newClassBuilder.make().load(ClassLoader.getSystemClassLoader(), ClassLoadingStrategy.Default.INJECTION).getLoaded();
}
TestMatcherClass testMatcherClass = (TestMatcherClass) Class.forName("test.ai.cloud.matcher.TestMatcherClass").newInstance();

View File

@ -2,20 +2,19 @@ package com.ai.cloud.skywalking.plugin.jdbc;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.sql.Driver;
import java.sql.DriverManager;
import java.util.concurrent.CopyOnWriteArrayList;
import com.ai.cloud.skywalking.logging.LogManager;
import com.ai.cloud.skywalking.logging.Logger;
import com.ai.cloud.skywalking.plugin.boot.BootException;
import com.ai.cloud.skywalking.plugin.boot.BootPluginDefine;
import com.ai.cloud.skywalking.plugin.boot.IBootPluginDefine;
public class JDBCPluginDefine extends BootPluginDefine {
private static Logger logger = LogManager.getLogger(JDBCPluginDefine.class);
public class JDBCPluginDefineI implements IBootPluginDefine {
private static Logger logger = LogManager.getLogger(JDBCPluginDefineI.class);
@Override
protected void boot() throws BootException {
public void boot() throws BootException {
try {
Class<?> classes = Class.forName("java.sql.DriverInfo");
Object traceDriverInfo = newDriverInfoInstance(classes);

View File

@ -1 +1 @@
com.ai.cloud.skywalking.plugin.jdbc.JDBCPluginDefine
com.ai.cloud.skywalking.plugin.jdbc.JDBCPluginDefineI

View File

@ -43,7 +43,6 @@ public class PersistenceThread extends Thread {
BufferFileReader bufferReader = new BufferFileReader(bufferFile, offset);
while (bufferReader.hasNext()) {
List<AbstractDataSerializable> serializableDataList = bufferReader.next();
System.out.println(serializableDataList.size());
//handleSpans(spans);
}