From 438a0b43743e1ae39816e3ca6c3f26bdf305872d Mon Sep 17 00:00:00 2001 From: Woonduk Kang Date: Mon, 19 Jan 2015 20:15:48 +0900 Subject: [PATCH] scope api refactoring - added AttachmentSimpleScope --- .../instrument/ByteCodeInstrumentor.java | 2 ++ .../bci/DefaultScopeDefinition.java | 20 +++++++++++++++ .../bci/JavaAssistByteCodeInstrumentor.java | 16 ++++++------ .../pinpoint/profiler/util/ScopePool.java | 25 ++++++++----------- 4 files changed, 42 insertions(+), 21 deletions(-) diff --git a/bootstrap/src/main/java/com/navercorp/pinpoint/bootstrap/instrument/ByteCodeInstrumentor.java b/bootstrap/src/main/java/com/navercorp/pinpoint/bootstrap/instrument/ByteCodeInstrumentor.java index 2946c4da1..81d4625ff 100644 --- a/bootstrap/src/main/java/com/navercorp/pinpoint/bootstrap/instrument/ByteCodeInstrumentor.java +++ b/bootstrap/src/main/java/com/navercorp/pinpoint/bootstrap/instrument/ByteCodeInstrumentor.java @@ -29,6 +29,8 @@ public interface ByteCodeInstrumentor { Scope getScope(String scopeName); + Scope getScope(ScopeDefinition scopeDefinition); + Class defineClass(ClassLoader classLoader, String defineClass, ProtectionDomain protectedDomain) throws InstrumentException; Interceptor newInterceptor(ClassLoader classLoader, ProtectionDomain protectedDomain, String interceptorFQCN) throws InstrumentException; diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/interceptor/bci/DefaultScopeDefinition.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/interceptor/bci/DefaultScopeDefinition.java index 38460b544..b11282f2f 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/interceptor/bci/DefaultScopeDefinition.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/interceptor/bci/DefaultScopeDefinition.java @@ -30,4 +30,24 @@ public class DefaultScopeDefinition implements ScopeDefinition { public Type getType() { return type; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + DefaultScopeDefinition that = (DefaultScopeDefinition) o; + + if (!name.equals(that.name)) return false; + if (type != that.type) return false; + + return true; + } + + @Override + public int hashCode() { + int result = name.hashCode(); + result = 31 * result + type.hashCode(); + return result; + } } diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/interceptor/bci/JavaAssistByteCodeInstrumentor.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/interceptor/bci/JavaAssistByteCodeInstrumentor.java index bfeeb8d6a..90a25da02 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/interceptor/bci/JavaAssistByteCodeInstrumentor.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/interceptor/bci/JavaAssistByteCodeInstrumentor.java @@ -24,10 +24,7 @@ import java.net.URLClassLoader; import java.security.ProtectionDomain; import com.navercorp.pinpoint.bootstrap.Agent; -import com.navercorp.pinpoint.bootstrap.instrument.ByteCodeInstrumentor; -import com.navercorp.pinpoint.bootstrap.instrument.InstrumentClass; -import com.navercorp.pinpoint.bootstrap.instrument.InstrumentException; -import com.navercorp.pinpoint.bootstrap.instrument.Scope; +import com.navercorp.pinpoint.bootstrap.instrument.*; import com.navercorp.pinpoint.bootstrap.interceptor.Interceptor; import com.navercorp.pinpoint.bootstrap.interceptor.TargetClassLoader; import com.navercorp.pinpoint.profiler.util.ScopePool; @@ -81,12 +78,17 @@ public class JavaAssistByteCodeInstrumentor implements ByteCodeInstrumentor { @Override public Scope getScope(String scopeName) { - return getScope(scopeName, false); + final ScopeDefinition scopeDefinition = new DefaultScopeDefinition(scopeName, ScopeDefinition.Type.SIMPLE); + return getScope(scopeDefinition); } - public Scope getScope(String scopeName, boolean attachment) { - return this.scopePool.getScope(scopeName, attachment); + + public Scope getScope(ScopeDefinition scopeDefinition) { + if (scopeDefinition == null) { + throw new NullPointerException("scopeDefinition must not be null"); + } + return this.scopePool.getScope(scopeDefinition); } private NamedClassPool createClassPool(String[] pathNames, String classPoolName) { diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/util/ScopePool.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/util/ScopePool.java index 954e17069..c5b4d1d17 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/util/ScopePool.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/util/ScopePool.java @@ -20,42 +20,39 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import com.navercorp.pinpoint.bootstrap.instrument.Scope; +import com.navercorp.pinpoint.bootstrap.instrument.ScopeDefinition; /** * @author emeroad */ public class ScopePool { - private final ConcurrentMap pool = new ConcurrentHashMap(); + private final ConcurrentMap pool = new ConcurrentHashMap(); - public Scope getScope(String scopeName) { - return getScope(scopeName, false); - } - - public Scope getScope(String scopeName, boolean attachment) { - if (scopeName == null) { + public Scope getScope(ScopeDefinition scopeDefinition) { + if (scopeDefinition == null) { throw new NullPointerException("scopeName must not be null"); } - final Scope scope = this.pool.get(scopeName); + final Scope scope = this.pool.get(scopeDefinition); if (scope != null) { return scope; } - final ScopeFactory factory = createScopeFactory(scopeName, attachment); + final ScopeFactory factory = createScopeFactory(scopeDefinition); final Scope newScope = new ThreadLocalScope(factory); - final Scope exist = this.pool.putIfAbsent(scopeName, newScope); + final Scope exist = this.pool.putIfAbsent(scopeDefinition, newScope); if (exist != null) { return exist; } return newScope; } - private ScopeFactory createScopeFactory(String scopeName, boolean attachment) { - if (attachment) { - return new AttachmentSimpleScopeFactory(scopeName); + private ScopeFactory createScopeFactory(ScopeDefinition scopeDefinition) { + if (scopeDefinition.getType() == ScopeDefinition.Type.ATTACHMENT) { + return new AttachmentSimpleScopeFactory(scopeDefinition.getName()); } - return new SimpleScopeFactory(scopeName); + return new SimpleScopeFactory(scopeDefinition.getName()); } @Override