提交 7829a524 编写于 作者: A ascrutae

移除Javassit的引用并修复编译问题

上级 2158fd0c
#Generated by Maven
#Thu Jul 28 13:53:53 CST 2016
version=1.0-Final
groupId=com.ai.cloud
artifactId=dubbo-impl
com/ai/cloud/skywalking/sample/mybatis/model/Sampletable1Example$Criterion.class
com/ai/cloud/skywalking/sample/mybatis/model/Sampletable2Example$Criterion.class
com/ai/cloud/skywalking/sample/mybatis/model/Sampletable1.class
com/ai/cloud/skywalking/sample/mybatis/model/Sampletable2.class
com/ai/cloud/skywalking/sample/dubbo/impl/SampleDubboInterfaceImpl.class
com/ai/cloud/skywalking/sample/mybatis/model/Sampletable2Example$Criteria.class
com/ai/cloud/skywalking/sample/util/DubboStart.class
com/ai/cloud/skywalking/sample/mybatis/dao/Sampletable1Mapper.class
com/ai/cloud/skywalking/sample/mybatis/model/Sampletable1Example$GeneratedCriteria.class
com/ai/cloud/skywalking/sample/mybatis/dao/Sampletable2Mapper.class
com/ai/cloud/skywalking/sample/mybatis/model/Sampletable2Example.class
com/ai/cloud/skywalking/sample/mybatis/model/Sampletable1Example.class
com/ai/cloud/skywalking/sample/mybatis/model/Sampletable1Example$Criteria.class
com/ai/cloud/skywalking/sample/service/impl/SampleServiceImpl.class
com/ai/cloud/skywalking/sample/service/inter/SampleServiceInterface.class
com/ai/cloud/skywalking/sample/mybatis/model/Sampletable2Example$GeneratedCriteria.class
/Users/xin/workbench/sky-walking/samples/skywalking-example/example-dubbo/dubbo-impl/src/main/java/com/ai/cloud/skywalking/sample/dubbo/impl/SampleDubboInterfaceImpl.java
/Users/xin/workbench/sky-walking/samples/skywalking-example/example-dubbo/dubbo-impl/src/main/java/com/ai/cloud/skywalking/sample/mybatis/model/Sampletable1.java
/Users/xin/workbench/sky-walking/samples/skywalking-example/example-dubbo/dubbo-impl/src/main/java/com/ai/cloud/skywalking/sample/mybatis/dao/Sampletable1Mapper.java
/Users/xin/workbench/sky-walking/samples/skywalking-example/example-dubbo/dubbo-impl/src/main/java/com/ai/cloud/skywalking/sample/mybatis/dao/Sampletable2Mapper.java
/Users/xin/workbench/sky-walking/samples/skywalking-example/example-dubbo/dubbo-impl/src/main/java/com/ai/cloud/skywalking/sample/util/DubboStart.java
/Users/xin/workbench/sky-walking/samples/skywalking-example/example-dubbo/dubbo-impl/src/main/java/com/ai/cloud/skywalking/sample/mybatis/model/Sampletable1Example.java
/Users/xin/workbench/sky-walking/samples/skywalking-example/example-dubbo/dubbo-impl/src/main/java/com/ai/cloud/skywalking/sample/mybatis/model/Sampletable2.java
/Users/xin/workbench/sky-walking/samples/skywalking-example/example-dubbo/dubbo-impl/src/main/java/com/ai/cloud/skywalking/sample/service/impl/SampleServiceImpl.java
/Users/xin/workbench/sky-walking/samples/skywalking-example/example-dubbo/dubbo-impl/src/main/java/com/ai/cloud/skywalking/sample/service/inter/SampleServiceInterface.java
/Users/xin/workbench/sky-walking/samples/skywalking-example/example-dubbo/dubbo-impl/src/main/java/com/ai/cloud/skywalking/sample/mybatis/model/Sampletable2Example.java
#Generated by Maven
#Thu Jul 28 13:53:50 CST 2016
version=1.0-Final
groupId=com.ai.cloud
artifactId=dubbo-interfaces
/Users/xin/workbench/sky-walking/samples/skywalking-example/example-dubbo/dubbo-interfaces/src/main/java/com/ai/cloud/skywalking/sample/dubbo/interfaces/SampleDubboInterface.java
Manifest-Version: 1.0
Built-By: xin
Created-By: IntelliJ IDEA
Build-Jdk: 1.8.0_91
#Generated by Maven
#Thu Jul 28 13:53:52 CST 2016
version=1.0-Final
groupId=com.ai.cloud
artifactId=example-web
/Users/xin/workbench/sky-walking/samples/skywalking-example/example-web/src/main/java/com/ai/cloud/skywalking/sample/web/controller/SampleWebController.java
......@@ -23,8 +23,6 @@
<shade.io.netty.target>com.ai.cloud.skywalking.api.dependencies.io.netty</shade.io.netty.target>
<shade.com.google.protobuf.source>com.google.protobuf</shade.com.google.protobuf.source>
<shade.com.google.protobuf.target>com.ai.cloud.skywalking.api.dependencies.google.protobuf</shade.com.google.protobuf.target>
<shade.javassist.source>javassist</shade.javassist.source>
<shade.javassist.target>com.ai.cloud.skywalking.api.dependencies.javassist</shade.javassist.target>
<shade.com.google.gson.source>com.google.gson</shade.com.google.gson.source>
<shade.com.google.gson.target>com.ai.cloud.skywalking.api.dependencies.com.google.gson</shade.com.google.gson.target>
</properties>
......@@ -97,10 +95,6 @@
<pattern>${shade.com.google.protobuf.source}</pattern>
<shadedPattern>${shade.com.google.protobuf.target}</shadedPattern>
</relocation>
<relocation>
<pattern>${shade.javassist.source}</pattern>
<shadedPattern>${shade.javassist.target}</shadedPattern>
</relocation>
<relocation>
<pattern>${shade.com.google.gson.source}</pattern>
<shadedPattern>${shade.com.google.gson.target}</shadedPattern>
......
......@@ -44,11 +44,7 @@
<version>1.0-Final</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.20.0-GA</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
......
package com.ai.cloud.skywalking.transformer;
import com.ai.cloud.skywalking.logging.LogManager;
import com.ai.cloud.skywalking.logging.Logger;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.IllegalClassFormatException;
import java.lang.reflect.Modifier;
import java.security.ProtectionDomain;
public class ClassTransformer implements ClassFileTransformer {
private static Logger logger = LogManager.getLogger(ClassTransformer.class);
private String interceptorPackage;
public ClassTransformer(String interceptorPackage){
this.interceptorPackage = interceptorPackage;
}
@Override
public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {
if (interceptorPackage == null || interceptorPackage.length() == 0) {
return classfileBuffer;
}
if (!className.replaceAll("/", ".").startsWith(interceptorPackage)) {
return classfileBuffer;
}
try {
ClassPool classPool = ClassPool.getDefault();
CtClass ctClass = classPool.get(className.replaceAll("/", "."));
if (ctClass.isInterface()) {
return classfileBuffer;
}
CtMethod[] ctMethod = ctClass.getDeclaredMethods();
for (CtMethod method : ctMethod) {
if (Modifier.isStatic(method.getModifiers())) {
continue;
}
String methodName = method.getName();
method.setName(methodName + "_skywalking_enhance");
CtMethod newMethod =
new CtMethod(method.getReturnType(), methodName, method.getParameterTypes(),
method.getDeclaringClass());
newMethod.setBody("{" +
MethodInterceptor.class.getName() + ".before($class,,$sig,$args,$0,\"" + methodName + "\");"
+ "return " + methodName + "_skywalking_enhance($$);}");
newMethod.addCatch("{ " + MethodInterceptor.class.getName() + ".handleException(e); throw e;}", classPool.get("java.lang.Throwable"), "e");
newMethod.insertAfter("{" + MethodInterceptor.class.getName() + ".after($class,$type,$_);}", true);
ctClass.addMethod(newMethod);
}
return ctClass.toBytecode();
} catch (Exception e) {
logger.error("Failed to transform class " + className, e);
return classfileBuffer;
}
}
}
package com.ai.cloud.skywalking.transformer;
import com.ai.cloud.skywalking.api.IBuriedPointType;
import com.ai.cloud.skywalking.invoke.monitor.LocalMethodInvokeMonitor;
import com.ai.cloud.skywalking.model.Identification;
import com.ai.cloud.skywalking.protocol.common.CallType;
import com.google.gson.Gson;
public class MethodInterceptor {
public static IBuriedPointType METHOD_INVOKE_BURIEDPOINT = new IBuriedPointType() {
@Override
public String getTypeName() {
return "LOCAL";
}
@Override
public CallType getCallType() {
return CallType.SYNC;
}
};
public void before(Class originClass, Class[] parametersType, Object[] allArgument, Object superCall,
String methodName) {
LocalMethodInvokeMonitor localMethodInvokeMonitor = new LocalMethodInvokeMonitor();
Identification.IdentificationBuilder identificationBuilder = Identification.newBuilder();
identificationBuilder.viewPoint(generateViewPoint(originClass, parametersType, methodName));
appendingParameters(allArgument, identificationBuilder);
identificationBuilder.spanType(METHOD_INVOKE_BURIEDPOINT);
localMethodInvokeMonitor.beforeInvoke(identificationBuilder.build());
}
private void appendingParameters(Object[] allArgument, Identification.IdentificationBuilder identificationBuilder) {
Gson gson = new Gson();
for (int i = 0; i < allArgument.length; i++) {
try {
identificationBuilder.addParameter(gson.toJson(allArgument[i]));
} catch (Exception e) {
identificationBuilder.addParameter("N/A");
}
}
}
private String generateViewPoint(Class originClass, Class[] parametersType, String methodName) {
StringBuilder viewPoint = new StringBuilder(originClass.getName() + "." + methodName + "(");
for (Class parameterType : parametersType) {
viewPoint.append(parameterType.getClass() + ",");
}
viewPoint.append(")");
return viewPoint.toString();
}
public void handleException(Throwable e) {
new LocalMethodInvokeMonitor().occurException(e);
}
public void after(Class originClass, Class resultType, Object result) {
String resultJson = null;
if (!void.class.getName().equals(resultType.getName())) {
try {
resultJson = new Gson().toJson(result);
} catch (Exception e) {
resultJson = "N/A";
}
}
new LocalMethodInvokeMonitor().afterInvoke(resultJson);
}
}
package com.ai.cloud.skywalking.transformer;
public class StaticMethodInterceptor {
public void intercept(Class originClass, Object[] allArgument) {
}
}
#Generated by Maven
#Thu Jul 28 13:53:54 CST 2016
version=1.0-Final
groupId=com.ai.cloud
artifactId=tomcat-7.x-8.x-plugin
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册