From 16aec017d10f8655258beeae78cc49e7de8c368f Mon Sep 17 00:00:00 2001 From: zhangxin10 Date: Mon, 21 Dec 2015 15:29:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90Spring=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E4=BB=A5=E5=8F=8A=E6=8F=92=E4=BB=B6=E7=9A=84=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- skywalking-sdk-plugin/spring-plugin/pom.xml | 22 + .../spring/SpringTagNamespaceHandler.java | 3 +- .../skywalking/plugin/spring/TraceParser.java | 27 -- .../spring/TracingEnhanceProcessor.java | 401 +++++++++--------- .../plugin/spring/TracingPatternParser.java | 12 +- .../extansion/SpringExtensionFactory.java | 4 - .../parser/TracingBeanDefinitionParser.java | 21 - .../TracingBeanPostProcessorParser.java | 18 - .../TracingPackageDefinitionParser.java | 13 - .../spring/schema/SWNamespaceHandler.java | 16 - .../plugin/spring/util/ConcurrentHashSet.java | 6 +- .../main/resources/META-INF/skywalking.xsd | 26 +- .../skywalking/plugin/spring/TestBean.java | 2 +- .../test/resources/springConfig-common.xml | 9 +- 14 files changed, 255 insertions(+), 325 deletions(-) delete mode 100644 skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/TraceParser.java delete mode 100644 skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/extansion/SpringExtensionFactory.java delete mode 100644 skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/parser/TracingBeanDefinitionParser.java delete mode 100644 skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/parser/TracingBeanPostProcessorParser.java delete mode 100644 skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/parser/TracingPackageDefinitionParser.java delete mode 100644 skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/schema/SWNamespaceHandler.java diff --git a/skywalking-sdk-plugin/spring-plugin/pom.xml b/skywalking-sdk-plugin/spring-plugin/pom.xml index e01c1be16..636685650 100644 --- a/skywalking-sdk-plugin/spring-plugin/pom.xml +++ b/skywalking-sdk-plugin/spring-plugin/pom.xml @@ -97,4 +97,26 @@ 4.12 + + + + + + maven-compiler-plugin + + 1.6 + 1.6 + ${project.build.sourceEncoding} + + + + org.apache.maven.plugins + maven-resources-plugin + 2.4.3 + + ${project.build.sourceEncoding} + + + + diff --git a/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/SpringTagNamespaceHandler.java b/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/SpringTagNamespaceHandler.java index 0a572d0c0..c771bc7be 100644 --- a/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/SpringTagNamespaceHandler.java +++ b/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/SpringTagNamespaceHandler.java @@ -5,7 +5,6 @@ import org.springframework.beans.factory.xml.NamespaceHandlerSupport; public class SpringTagNamespaceHandler extends NamespaceHandlerSupport { @Override public void init() { - registerBeanDefinitionParser("tracing-bean", new TracingPatternParser()); - registerBeanDefinitionParser("trace", new TraceParser()); + registerBeanDefinitionParser("trace", new TracingPatternParser()); } } diff --git a/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/TraceParser.java b/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/TraceParser.java deleted file mode 100644 index fcc6ad9d1..000000000 --- a/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/TraceParser.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.ai.cloud.skywalking.plugin.spring; - -import org.springframework.beans.factory.config.BeanDefinition; -import org.springframework.beans.factory.support.RootBeanDefinition; -import org.springframework.beans.factory.xml.BeanDefinitionParser; -import org.springframework.beans.factory.xml.ParserContext; -import org.w3c.dom.Element; - -public class TraceParser implements BeanDefinitionParser { - - private final String TRACE_APPLICATION_BEAN_NAME = "TracingApplication"; - - @Override - public BeanDefinition parse(Element element, ParserContext parserContext) { - if (parserContext.getRegistry().containsBeanDefinition(TRACE_APPLICATION_BEAN_NAME)) { - // 只能存在一个 - throw new IllegalStateException("Duplicate spring bean id "); - } - boolean turnOn = Boolean.parseBoolean(element.getAttribute("turnOn")); - RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(); - rootBeanDefinition.setLazyInit(false); - rootBeanDefinition.setBeanClass(TracingEnhanceProcessor.class); - rootBeanDefinition.getPropertyValues().addPropertyValue("turnOn", turnOn); - parserContext.getRegistry().registerBeanDefinition(TRACE_APPLICATION_BEAN_NAME, rootBeanDefinition); - return rootBeanDefinition; - } -} diff --git a/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/TracingEnhanceProcessor.java b/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/TracingEnhanceProcessor.java index ae1b51b6f..4258f537c 100644 --- a/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/TracingEnhanceProcessor.java +++ b/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/TracingEnhanceProcessor.java @@ -3,10 +3,11 @@ package com.ai.cloud.skywalking.plugin.spring; import com.ai.cloud.skywalking.buriedpoint.LocalBuriedPointSender; import com.ai.cloud.skywalking.model.Identification; import com.ai.cloud.skywalking.plugin.spring.util.ConcurrentHashSet; -import com.ai.cloud.skywalking.util.StringUtil; + import javassist.*; import javassist.bytecode.AnnotationsAttribute; import javassist.bytecode.ConstPool; + import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; import org.springframework.beans.factory.DisposableBean; @@ -19,222 +20,226 @@ import org.springframework.context.ApplicationContextAware; import java.util.Set; import java.util.concurrent.ThreadLocalRandom; -public class TracingEnhanceProcessor implements DisposableBean, BeanPostProcessor, BeanFactoryPostProcessor, ApplicationContextAware { +public class TracingEnhanceProcessor implements DisposableBean, + BeanPostProcessor, BeanFactoryPostProcessor, ApplicationContextAware { - private final Set beanSet = new ConcurrentHashSet(); + private final Set beanSet = new ConcurrentHashSet(); - private boolean turnOn; + + @Override + public void postProcessBeanFactory( + ConfigurableListableBeanFactory beanFactory) throws BeansException { + beanSet.addAll(applicationContext.getBeansOfType(TracingPattern.class) + .values()); + } - public boolean isTurnOn() { - return turnOn; - } + @Override + public Object postProcessBeforeInitialization(Object bean, String beanName) + throws BeansException { + return bean; + } - public void setTurnOn(boolean turnOn) { - this.turnOn = turnOn; - } + private ApplicationContext applicationContext; - @Override - public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { - beanSet.addAll(applicationContext.getBeansOfType(TracingPattern.class).values()); - } + @Override + public void setApplicationContext(ApplicationContext applicationContext) + throws BeansException { + this.applicationContext = applicationContext; + } - @Override - public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { - return bean; - } + public enum MatchType { + METHOD, PACKAGE, CLASS; + } - private ApplicationContext applicationContext; + private boolean checkMatch(String value, String pattern, MatchType matchType) { + boolean result; + if ("*".equals(pattern)) { + return true; + } + if (matchType == MatchType.PACKAGE) { + if (pattern.endsWith(".*")) { + String newPattern = pattern.substring(0, + pattern.lastIndexOf(".*")); + result = value.startsWith(newPattern); + } else { + result = value.equals(pattern); + } + } else { + if (pattern.endsWith("*")) { + String newPattern = pattern.substring(0, + pattern.lastIndexOf("*")); + result = value.startsWith(newPattern); + } else { + result = value.equals(pattern); + } + } + return result; + } - @Override - public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { - this.applicationContext = applicationContext; - } + @Override + public Object postProcessAfterInitialization(Object bean, String beanName) + throws BeansException { + String packageName = bean.getClass().getPackage().getName(); + String className = bean.getClass().getSimpleName(); + TracingPattern matchClassBean = null; + boolean isMatch = false; + for (TracingPattern tracingPattern : beanSet) { + if (checkMatch(packageName, tracingPattern.getPackageName(), + MatchType.PACKAGE) + && checkMatch(className, tracingPattern.getClassName(), + MatchType.CLASS)) { + isMatch = true; + matchClassBean = tracingPattern; + continue; + } + } + if (!isMatch || matchClassBean == null) { + return bean; + } - public enum MatchType { - METHOD, PACKAGE, CLASS; - } + // 符合规范 + try { + ClassPool pool = ClassPool.getDefault(); + CtClass ctSource = pool.get(bean.getClass().getName()); + CtClass ctDestination = pool.makeClass( + generateProxyClassName(bean), ctSource); + // 拷贝所有的方法, + copyAllFields(ctSource, ctDestination); + // 拷贝所有的注解 + copyClassAnnotation(ctSource, ctDestination); + // 拷贝所有的方法,并增强 + ConstPool cp = ctDestination.getClassFile().getConstPool(); + for (CtMethod m : ctSource.getDeclaredMethods()) { + CtMethod newm = CtNewMethod.delegator(m, ctDestination); + copyMethodAnnotation(cp, m, newm); + // 是否符合规范,符合则增强 + if (checkMatch(m.getName(), matchClassBean.getMethod(), + MatchType.METHOD)) { + enhanceMethod(bean, newm); + } + ctDestination.addMethod(newm); + } - private boolean checkMatch(String value, String pattern, MatchType matchType) { - boolean result; - if ("*".equals(pattern)) { - return true; - } - if (matchType == MatchType.PACKAGE) { - if (pattern.endsWith(".*")) { - String newPattern = pattern.substring(0, - pattern.lastIndexOf(".*")); - result = value.startsWith(newPattern); - } else { - result = value.equals(pattern); - } - } else { - if (pattern.endsWith("*")) { - String newPattern = pattern.substring(0, - pattern.lastIndexOf("*")); - result = value.startsWith(newPattern); - } else { - result = value.equals(pattern); - } - } - return result; - } + Class generateClass = ctDestination.toClass(); + Object newBean = generateClass.newInstance(); + BeanUtils.copyProperties(bean, newBean); + return newBean; + } catch (NotFoundException e) { + throw new IllegalStateException("Class [" + + beanName.getClass().getName() + "] cannot be found", e); + } catch (CannotCompileException e) { + throw new IllegalStateException("Class [" + + beanName.getClass().getName() + "] cannot be compile", e); + } catch (InstantiationException e) { + throw new IllegalStateException("Failed to instance class[" + + beanName.getClass().getName() + "]", e); + } catch (IllegalAccessException e) { + throw new IllegalStateException("Failed to access class[" + + beanName.getClass().getName() + "]", e); + } + } - @Override - public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { - if (!turnOn) { - return bean; - } + - String packageName = bean.getClass().getPackage().getName(); - String className = bean.getClass().getSimpleName(); - TracingPattern matchClassBean = null; - boolean isMatch = false; - for (TracingPattern tracingPattern : beanSet) { - if (checkMatch(packageName, tracingPattern.getPackageName(), MatchType.PACKAGE) - && checkMatch(className, tracingPattern.getClassName(), MatchType.CLASS)) { - isMatch = true; - matchClassBean = tracingPattern; - continue; - } - } - if (!isMatch || matchClassBean == null) { - return bean; - } + private void copyMethodAnnotation(ConstPool cp, CtMethod m, CtMethod newm) { + AnnotationsAttribute invAnn = (AnnotationsAttribute) m.getMethodInfo() + .getAttribute(AnnotationsAttribute.invisibleTag); + AnnotationsAttribute visAnn = (AnnotationsAttribute) m.getMethodInfo() + .getAttribute(AnnotationsAttribute.visibleTag); + if (invAnn != null) { + newm.getMethodInfo().addAttribute(invAnn.copy(cp, null)); + } + if (visAnn != null) { + newm.getMethodInfo().addAttribute(visAnn.copy(cp, null)); + } + } - //符合规范 - try { - ClassPool pool = ClassPool.getDefault(); - CtClass ctSource = pool.get(bean.getClass().getName()); - CtClass ctDestination = pool.makeClass(generateProxyClassName(bean), ctSource); - //拷贝所有的方法, - copyAllFields(ctSource, ctDestination); - // 拷贝所有的注解 - copyClassAnnotation(ctSource, ctDestination); - //拷贝所有的方法,并增强 - ConstPool cp = ctDestination.getClassFile().getConstPool(); - for (CtMethod m : ctSource.getDeclaredMethods()) { - CtMethod newm = CtNewMethod.copy(m, m.getName(), ctDestination, null); - copyMethodAnnotation(cp, m, newm); - // 是否符合规范,符合则增强 - if (checkMatch(m.getName(), matchClassBean.getMethod(), MatchType.METHOD)) { - enhanceMethod(bean, newm); - } - ctDestination.addMethod(newm); - } + private String generateProxyClassName(Object bean) { + return bean.getClass().getName() + "$EnhanceBySWTracing$" + + ThreadLocalRandom.current().nextInt(100); + } - Class generateClass = ctDestination.toClass(); - Object newBean = generateClass.newInstance(); - BeanUtils.copyProperties(bean, newBean); - return newBean; - } catch (NotFoundException e) { - throw new IllegalStateException("Class [" + beanName.getClass().getName() + "] cannot be found", e); - } catch (CannotCompileException e) { - throw new IllegalStateException("Class [" + beanName.getClass().getName() + "] cannot be compile", e); - } catch (InstantiationException e) { - throw new IllegalStateException("Failed to instance class[" + beanName.getClass().getName() + "]", e); - } catch (IllegalAccessException e) { - throw new IllegalStateException("Failed to access class[" + beanName.getClass().getName() + "]", e); - } - } + private void copyAllFields(CtClass ctSource, CtClass ctDestination) + throws CannotCompileException, NotFoundException { + // copy fields + ConstPool cp = ctDestination.getClassFile().getConstPool(); + for (CtField ctSourceField : ctSource.getDeclaredFields()) { + CtClass fieldTypeClass = ClassPool.getDefault().get( + ctSourceField.getType().getName()); + CtField ctField = new CtField(fieldTypeClass, + ctSourceField.getName(), ctDestination); + // with annotations + copyAllFieldAnnotation(cp, ctSourceField, ctField); + ctDestination.addField(ctField); + } + } - private void copyMethodAnnotation(ConstPool cp, CtMethod m, CtMethod newm) { - AnnotationsAttribute invAnn = (AnnotationsAttribute) m.getMethodInfo().getAttribute( - AnnotationsAttribute.invisibleTag); - AnnotationsAttribute visAnn = (AnnotationsAttribute) m.getMethodInfo().getAttribute( - AnnotationsAttribute.visibleTag); - if (invAnn != null) { - newm.getMethodInfo().addAttribute(invAnn.copy(cp, null)); - } - if (visAnn != null) { - newm.getMethodInfo().addAttribute(visAnn.copy(cp, null)); - } - } + private void copyAllFieldAnnotation(ConstPool cp, CtField ctSourceField, + CtField ctDestinationField) throws CannotCompileException { + AnnotationsAttribute invAnn = (AnnotationsAttribute) ctSourceField + .getFieldInfo().getAttribute(AnnotationsAttribute.invisibleTag); + AnnotationsAttribute visAnn = (AnnotationsAttribute) ctSourceField + .getFieldInfo().getAttribute(AnnotationsAttribute.visibleTag); - private String generateProxyClassName(Object bean) { - return bean.getClass().getName() + "$EnhanceBySWTracing$" + ThreadLocalRandom.current().nextInt(100); - } + if (invAnn != null) { + ctDestinationField.getFieldInfo().addAttribute( + invAnn.copy(cp, null)); + } + if (visAnn != null) { + ctDestinationField.getFieldInfo().addAttribute( + visAnn.copy(cp, null)); + } + } - private void copyAllFields(CtClass ctSource, CtClass ctDestination) throws CannotCompileException, NotFoundException { - // copy fields - ConstPool cp = ctDestination.getClassFile().getConstPool(); - for (CtField ctSourceField : ctSource.getDeclaredFields()) { - CtClass fieldTypeClass = ClassPool.getDefault().get(ctSourceField.getType().getName()); - CtField ctField = new CtField(fieldTypeClass, ctSourceField.getName(), ctDestination); - //with annotations - copyAllFieldAnnotation(cp, ctSourceField, ctField); - ctDestination.addField(ctField); - } - } + private void copyClassAnnotation(CtClass ctSource, CtClass ctDestination) { + ConstPool cp = ctDestination.getClassFile().getConstPool(); + AnnotationsAttribute invAnn = (AnnotationsAttribute) ctSource + .getClassFile().getAttribute(AnnotationsAttribute.invisibleTag); + AnnotationsAttribute visAnn = (AnnotationsAttribute) ctSource + .getClassFile().getAttribute(AnnotationsAttribute.visibleTag); + if (invAnn != null) { + ctDestination.getClassFile().addAttribute(invAnn.copy(cp, null)); + } + if (visAnn != null) { + ctDestination.getClassFile().addAttribute(visAnn.copy(cp, null)); + } + } - private void copyAllFieldAnnotation(ConstPool cp, CtField ctSourceField, CtField ctDestinationField) throws CannotCompileException { - AnnotationsAttribute invAnn = (AnnotationsAttribute) ctSourceField.getFieldInfo().getAttribute( - AnnotationsAttribute.invisibleTag); - AnnotationsAttribute visAnn = (AnnotationsAttribute) ctSourceField.getFieldInfo().getAttribute( - AnnotationsAttribute.visibleTag); + protected void enhanceMethod(Object bean, CtMethod method) + throws CannotCompileException, NotFoundException { + ClassPool cp = method.getDeclaringClass().getClassPool(); + method.addLocalVariable("___sender", + cp.get(LocalBuriedPointSender.class.getName())); + method.insertBefore("___sender = new " + + LocalBuriedPointSender.class.getName() + + "();\n___sender.beforeSend" + + generateBeforeSendParameter(bean, method) + "\n"); + method.addCatch("new " + LocalBuriedPointSender.class.getName() + + "().handleException(e);throw e;", ClassPool.getDefault() + .getCtClass(Throwable.class.getName()), "e"); + method.insertAfter("new " + LocalBuriedPointSender.class.getName() + + "().afterSend();", true); + } - if (invAnn != null) { - ctDestinationField.getFieldInfo().addAttribute(invAnn.copy(cp, null)); - } - if (visAnn != null) { - ctDestinationField.getFieldInfo().addAttribute(visAnn.copy(cp, null)); - } - } + private String generateBeforeSendParameter(Object bean, CtMethod method) + throws NotFoundException { + StringBuilder builder = new StringBuilder("(" + + Identification.class.getName() + ".newBuilder().viewPoint(\"" + + bean.getClass().getName() + "." + method.getName()); + builder.append("("); + for (CtClass param : method.getParameterTypes()) { + builder.append(param.getSimpleName() + ","); + } + if (method.getParameterTypes().length > 0) { + builder = builder.delete(builder.length() - 1, builder.length()); + } + builder.append(")"); + builder.append("\").spanType('M').build());"); + return builder.toString(); + } - private void copyClassAnnotation(CtClass ctSource, CtClass ctDestination) { - ConstPool cp = ctDestination.getClassFile().getConstPool(); - AnnotationsAttribute invAnn = (AnnotationsAttribute) ctSource.getClassFile().getAttribute( - AnnotationsAttribute.invisibleTag); - AnnotationsAttribute visAnn = (AnnotationsAttribute) ctSource.getClassFile().getAttribute( - AnnotationsAttribute.visibleTag); - if (invAnn != null) { - ctDestination.getClassFile().addAttribute(invAnn.copy(cp, null)); - } - if (visAnn != null) { - ctDestination.getClassFile().addAttribute(visAnn.copy(cp, null)); - } - } + @Override + public void destroy() throws Exception { - protected void enhanceMethod(Object bean, CtMethod method) throws CannotCompileException, NotFoundException { - ClassPool cp = method.getDeclaringClass().getClassPool(); - method.addLocalVariable("___sender", cp.get(LocalBuriedPointSender.class.getName())); - method.insertBefore("___sender = new " + LocalBuriedPointSender.class.getName() + "();___sender.beforeSend" - + generateBeforeSendParameter(bean, method)); - method.addCatch("new " + LocalBuriedPointSender.class.getName() + "().handleException(e);throw e;", - ClassPool.getDefault().getCtClass(Throwable.class.getName()), "e"); - method.insertAfter("new " + LocalBuriedPointSender.class.getName() + "().afterSend();", true); - } - - private String generateBeforeSendParameter(Object bean, CtMethod method) throws NotFoundException { - StringBuilder builder = new StringBuilder("(" + Identification.class.getName() + ".newBuilder().viewPoint(\"" - + bean.getClass().getName() + "." + method.getName()); - builder.append("("); - for (CtClass param : method.getParameterTypes()) { - builder.append(param.getSimpleName() + ","); - } - if (method.getParameterTypes().length > 0) { - builder = builder.delete(builder.length() - 1, builder.length()); - } - builder.append(")"); - builder.append("\").spanType('M').build());"); - return builder.toString(); - } - - - private boolean isClassNameMatch(Object bean, String tracingClassBean) { - // - String classNamePrefix = tracingClassBean; - if (tracingClassBean.endsWith("*")) { - classNamePrefix = tracingClassBean.substring(0, tracingClassBean.indexOf('*')); - } - return bean.getClass().getSimpleName().startsWith(classNamePrefix); - } - - private boolean isPackageMatch(Object bean, String packageName) { - return bean.getClass().getPackage().equals(packageName); - } - - @Override - public void destroy() throws Exception { - - } + } } diff --git a/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/TracingPatternParser.java b/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/TracingPatternParser.java index a33563a6b..d462e0f79 100644 --- a/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/TracingPatternParser.java +++ b/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/TracingPatternParser.java @@ -10,6 +10,9 @@ import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; public class TracingPatternParser implements BeanDefinitionParser { + + private final String TRACE_PROCESSOR_BEAN_NAME = "TraceProcessorBean"; + @Override public BeanDefinition parse(Element element, ParserContext parserContext) { // 获取Method并处理 @@ -48,7 +51,14 @@ public class TracingPatternParser implements BeanDefinitionParser { beanDefinition.getPropertyValues().add(key, value); } } - + + if (!parserContext.getRegistry().containsBeanDefinition(TRACE_PROCESSOR_BEAN_NAME)){ + RootBeanDefinition traceProcessorBeanDefinition = new RootBeanDefinition(); + traceProcessorBeanDefinition.setBeanClass(TracingEnhanceProcessor.class); + traceProcessorBeanDefinition.setLazyInit(false); + parserContext.getRegistry().registerBeanDefinition(TRACE_PROCESSOR_BEAN_NAME, traceProcessorBeanDefinition); + } + return beanDefinition; } } diff --git a/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/extansion/SpringExtensionFactory.java b/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/extansion/SpringExtensionFactory.java deleted file mode 100644 index a93725342..000000000 --- a/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/extansion/SpringExtensionFactory.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.ai.cloud.skywalking.plugin.spring.extansion; - -public class SpringExtensionFactory { -} diff --git a/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/parser/TracingBeanDefinitionParser.java b/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/parser/TracingBeanDefinitionParser.java deleted file mode 100644 index 608b4e025..000000000 --- a/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/parser/TracingBeanDefinitionParser.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.ai.cloud.skywalking.plugin.spring.parser; - -import org.springframework.beans.factory.config.BeanDefinition; -import org.springframework.beans.factory.support.RootBeanDefinition; -import org.springframework.beans.factory.xml.BeanDefinitionParser; -import org.springframework.beans.factory.xml.ParserContext; -import org.w3c.dom.Element; - -public class TracingBeanDefinitionParser implements BeanDefinitionParser { - - @Override - public BeanDefinition parse(Element element, ParserContext parserContext) { - RootBeanDefinition beanDefinition = new RootBeanDefinition(); - String toBeTracingBeanClassName = element.getAttribute("name"); - String methodPattern = element.getAttribute("method"); - //校验入参 - - // - return beanDefinition; - } -} diff --git a/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/parser/TracingBeanPostProcessorParser.java b/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/parser/TracingBeanPostProcessorParser.java deleted file mode 100644 index a94e4722b..000000000 --- a/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/parser/TracingBeanPostProcessorParser.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.ai.cloud.skywalking.plugin.spring.parser; - -import com.ai.cloud.skywalking.plugin.spring.TracingEnhanceProcessor; -import org.springframework.beans.factory.config.BeanDefinition; -import org.springframework.beans.factory.support.RootBeanDefinition; -import org.springframework.beans.factory.xml.BeanDefinitionParser; -import org.springframework.beans.factory.xml.ParserContext; -import org.w3c.dom.Element; - -public class TracingBeanPostProcessorParser implements BeanDefinitionParser { - @Override - public BeanDefinition parse(Element element, ParserContext parserContext) { - RootBeanDefinition beanDefinition = new RootBeanDefinition(); - // - beanDefinition.setBeanClass(TracingEnhanceProcessor.class); - return beanDefinition; - } -} diff --git a/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/parser/TracingPackageDefinitionParser.java b/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/parser/TracingPackageDefinitionParser.java deleted file mode 100644 index 74106ad7f..000000000 --- a/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/parser/TracingPackageDefinitionParser.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.ai.cloud.skywalking.plugin.spring.parser; - -import org.springframework.beans.factory.config.BeanDefinition; -import org.springframework.beans.factory.xml.BeanDefinitionParser; -import org.springframework.beans.factory.xml.ParserContext; -import org.w3c.dom.Element; - -public class TracingPackageDefinitionParser implements BeanDefinitionParser { - @Override - public BeanDefinition parse(Element element, ParserContext parserContext) { - return null; - } -} diff --git a/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/schema/SWNamespaceHandler.java b/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/schema/SWNamespaceHandler.java deleted file mode 100644 index d6f5c822b..000000000 --- a/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/schema/SWNamespaceHandler.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.ai.cloud.skywalking.plugin.spring.schema; - -import com.ai.cloud.skywalking.plugin.spring.parser.TracingBeanDefinitionParser; -import com.ai.cloud.skywalking.plugin.spring.parser.TracingBeanPostProcessorParser; -import com.ai.cloud.skywalking.plugin.spring.parser.TracingPackageDefinitionParser; -import org.springframework.beans.factory.xml.NamespaceHandlerSupport; - -public class SWNamespaceHandler extends NamespaceHandlerSupport { - - @Override - public void init() { - registerBeanDefinitionParser("tracing-class", new TracingBeanDefinitionParser()); - registerBeanDefinitionParser("tracing-package", new TracingPackageDefinitionParser()); - registerBeanDefinitionParser("tracing", new TracingBeanPostProcessorParser()); - } -} diff --git a/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/util/ConcurrentHashSet.java b/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/util/ConcurrentHashSet.java index 1e2e854a9..1160799f1 100644 --- a/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/util/ConcurrentHashSet.java +++ b/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/util/ConcurrentHashSet.java @@ -11,11 +11,13 @@ public class ConcurrentHashSet extends AbstractSet implements Set, Seri private static final Object PRESENT = new Object(); private final ConcurrentHashMap map; - public ConcurrentHashSet() { + @SuppressWarnings("unchecked") + public ConcurrentHashSet() { this.map = new ConcurrentHashMap(); } - public ConcurrentHashSet(int initialCapacity) { + @SuppressWarnings("unchecked") + public ConcurrentHashSet(int initialCapacity) { this.map = new ConcurrentHashMap(initialCapacity); } diff --git a/skywalking-sdk-plugin/spring-plugin/src/main/resources/META-INF/skywalking.xsd b/skywalking-sdk-plugin/spring-plugin/src/main/resources/META-INF/skywalking.xsd index 2d9ef589a..33d71997f 100644 --- a/skywalking-sdk-plugin/spring-plugin/src/main/resources/META-INF/skywalking.xsd +++ b/skywalking-sdk-plugin/spring-plugin/src/main/resources/META-INF/skywalking.xsd @@ -1,22 +1,16 @@ + xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://cloud.asiainfo.com/schema/skywalking"> - + - - - - - - - - - - - - - + + + + + + + \ No newline at end of file diff --git a/skywalking-sdk-plugin/spring-plugin/src/test/java/com/ai/cloud/skywalking/plugin/spring/TestBean.java b/skywalking-sdk-plugin/spring-plugin/src/test/java/com/ai/cloud/skywalking/plugin/spring/TestBean.java index d61e6a1e5..a39702fd7 100644 --- a/skywalking-sdk-plugin/spring-plugin/src/test/java/com/ai/cloud/skywalking/plugin/spring/TestBean.java +++ b/skywalking-sdk-plugin/spring-plugin/src/test/java/com/ai/cloud/skywalking/plugin/spring/TestBean.java @@ -14,4 +14,4 @@ public class TestBean { TestBean testBean = classPathXmlApplicationContext.getBean(TestBean.class); testBean.testPrintln("Hello World"); } -} +} \ No newline at end of file diff --git a/skywalking-sdk-plugin/spring-plugin/src/test/resources/springConfig-common.xml b/skywalking-sdk-plugin/spring-plugin/src/test/resources/springConfig-common.xml index ac9d3d9c4..0d282ea61 100644 --- a/skywalking-sdk-plugin/spring-plugin/src/test/resources/springConfig-common.xml +++ b/skywalking-sdk-plugin/spring-plugin/src/test/resources/springConfig-common.xml @@ -4,14 +4,11 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:skywalking="http://cloud.asiainfo.com/schema/skywalking" xsi:schemaLocation="http://www.springframework.org/schema/beans - http://www.springframework.org/schema/beans/spring-beans-2.5.xsd + http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://cloud.asiainfo.com/schema/skywalking http://cloud.asiainfo.com/schema/skywalking/skywalking.xsd"> - - - - - + + \ No newline at end of file