From 96a7f2bba86097c2c5d8a9215a4000f9d7a0cb21 Mon Sep 17 00:00:00 2001 From: Woonduk Kang Date: Wed, 1 Aug 2012 02:53:18 +0000 Subject: [PATCH] =?UTF-8?q?[=EA=B0=95=EC=9A=B4=EB=8D=95]=20[LUCYSUS-1744]?= =?UTF-8?q?=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://svn.bds.nhncorp.com/pe/hippo-tomcat-profiler/trunk@485 84d0f5b1-2673-498c-a247-62c4ff18d310 --- .../com/profiler/trace/AbstractTracer.java | 18 ------------- .../profiler/trace/DatabaseRequestTracer.java | 23 +++++++++------- .../com/profiler/trace/RequestTracer.java | 2 +- .../com/profiler/util/StackTraceUtil.java | 26 +++++++++++++++++++ 4 files changed, 40 insertions(+), 29 deletions(-) delete mode 100644 src/main/java/com/profiler/trace/AbstractTracer.java create mode 100644 src/main/java/com/profiler/util/StackTraceUtil.java diff --git a/src/main/java/com/profiler/trace/AbstractTracer.java b/src/main/java/com/profiler/trace/AbstractTracer.java deleted file mode 100644 index 51fa2d1a2..000000000 --- a/src/main/java/com/profiler/trace/AbstractTracer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.profiler.trace; - -import java.util.logging.Logger; - -public abstract class AbstractTracer { - - private static final Logger logger = Logger.getLogger(AbstractTracer.class.getName()); - - public static void printStackTrace() { - StackTraceElement[] stackList = Thread.currentThread().getStackTrace(); - - int length = stackList.length; - - for (int loop = 2; loop < length; loop++) { - logger.info("***" + stackList[loop].toString()); - } - } -} diff --git a/src/main/java/com/profiler/trace/DatabaseRequestTracer.java b/src/main/java/com/profiler/trace/DatabaseRequestTracer.java index 493a41fd2..3aea0def7 100644 --- a/src/main/java/com/profiler/trace/DatabaseRequestTracer.java +++ b/src/main/java/com/profiler/trace/DatabaseRequestTracer.java @@ -7,6 +7,8 @@ import java.util.Hashtable; import java.util.Iterator; import java.util.List; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; import java.util.concurrent.CopyOnWriteArraySet; import com.profiler.config.TomcatProfilerConfig; @@ -14,13 +16,14 @@ import com.profiler.config.TomcatProfilerConstant; import com.profiler.dto.AgentInfoDTO; import com.profiler.dto.RequestDataListThriftDTO; import com.profiler.dto.RequestDataThriftDTO; +import com.profiler.util.NamedThreadLocal; import com.profiler.util.QueryStringUtil; public class DatabaseRequestTracer { public static final String FQCN = DatabaseRequestTracer.class.getName(); - private static Hashtable dbConnectionURL = new Hashtable(); + private static ConcurrentMap dbConnectionURL = new ConcurrentHashMap(); private static Set sqlSet = null; static { @@ -31,14 +34,14 @@ public class DatabaseRequestTracer { } } - private static final ThreadLocal requestDataThreadLocal = new ThreadLocal(); - private static final ThreadLocal> sqlParamMapThreadLocal = new ThreadLocal>(); + private static final ThreadLocal requestDataThreadLocal = new NamedThreadLocal("requestDataThreadLocal"); + private static final ThreadLocal> sqlParamMapThreadLocal = new NamedThreadLocal>("sqlParamMapThreadLocal"); /** * These two variables are used counting "ResultSet.next()" times. */ - private static final ThreadLocal fetchCountThreadLocal = new ThreadLocal(); - private static final ThreadLocal totalFetchCountThreadLocal = new ThreadLocal(); + private static final ThreadLocal fetchCountThreadLocal = new NamedThreadLocal("fetchCountThreadLocal"); + private static final ThreadLocal totalFetchCountThreadLocal = new NamedThreadLocal("totalFetchCountThreadLocal"); public static RequestDataListThriftDTO getRequestDataList() { return requestDataThreadLocal.get(); @@ -96,11 +99,11 @@ public class DatabaseRequestTracer { RequestDataThriftDTO dataDto = new RequestDataThriftDTO(dataType, System.currentTimeMillis()); if (url != null) { int hashCode = url.hashCode(); - if (!dbConnectionURL.containsKey(hashCode)) { - dbConnectionURL.put(hashCode, url); - dataDto.setDataString(url); - // System.out.println(url); - } + String before = dbConnectionURL.putIfAbsent(hashCode, url); + if (before == null) { + dataDto.setDataString(url); + } + dataDto.setDataHashCode(hashCode); } list.add(dataDto); diff --git a/src/main/java/com/profiler/trace/RequestTracer.java b/src/main/java/com/profiler/trace/RequestTracer.java index 203fb0f04..2e78debaf 100644 --- a/src/main/java/com/profiler/trace/RequestTracer.java +++ b/src/main/java/com/profiler/trace/RequestTracer.java @@ -10,7 +10,7 @@ import com.profiler.dto.RequestDataListThriftDTO; import com.profiler.dto.RequestThriftDTO; import com.profiler.sender.DataSender; -public class RequestTracer extends AbstractTracer { +public class RequestTracer { public static final String FQCN = RequestTracer.class.getName(); diff --git a/src/main/java/com/profiler/util/StackTraceUtil.java b/src/main/java/com/profiler/util/StackTraceUtil.java new file mode 100644 index 000000000..7f104f116 --- /dev/null +++ b/src/main/java/com/profiler/util/StackTraceUtil.java @@ -0,0 +1,26 @@ +package com.profiler.util; + +import java.util.logging.Level; +import java.util.logging.Logger; + +public class StackTraceUtil { + + private static final Logger logger = Logger.getLogger(StackTraceUtil.class.getName()); + + public static void printCurrentStackTrace() { + printCurrentStackTrace(logger); + } + + public static void printCurrentStackTrace(Logger logger) { + if (!logger.isLoggable(Level.INFO)) { + return; + } + + StackTraceElement[] stackList = Thread.currentThread().getStackTrace(); + int length = stackList.length; + for (int loop = 2; loop < length; loop++) { + logger.info("***" + stackList[loop].toString()); + } + } + +}