You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sirona.apache.org by rm...@apache.org on 2013/11/27 09:45:36 UTC

svn commit: r1545965 - in /incubator/sirona/trunk/agent/javaagent/src: main/java/org/apache/sirona/javaagent/ main/java/org/apache/sirona/javaagent/listener/ main/java/org/apache/sirona/javaagent/spi/ test/java/org/apache/test/sirona/javaagent/

Author: rmannibucau
Date: Wed Nov 27 08:45:35 2013
New Revision: 1545965

URL: http://svn.apache.org/r1545965
Log:
better API for the javaagent

Modified:
    incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/AgentContext.java
    incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaClassVisitor.java
    incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/listener/ConfigurableListener.java
    incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/listener/CounterListener.java
    incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/spi/InvocationListener.java
    incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/AgentPerfInterceptorAgentContractTest.java
    incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/CounterListenerConfigTest.java
    incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/HttpUrlConnectionAddHeaderTest.java

Modified: incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/AgentContext.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/AgentContext.java?rev=1545965&r1=1545964&r2=1545965&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/AgentContext.java (original)
+++ incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/AgentContext.java Wed Nov 27 08:45:35 2013
@@ -38,16 +38,22 @@ import java.util.concurrent.ConcurrentMa
 public class AgentContext {
     private static final InvocationListener[] EXISTING_LISTENERS = loadAllListeners();
 
-    private static final ConcurrentMap<Counter.Key, InvocationListener[]> LISTENERS_BY_KEY = new ConcurrentHashMap<Counter.Key, InvocationListener[]>();
+    private static final ConcurrentMap<String, InvocationListener[]> LISTENERS_BY_KEY = new ConcurrentHashMap<String, InvocationListener[]>();
+    private static final ConcurrentMap<String, Counter.Key> KEYS_CACHE = new ConcurrentHashMap<String, Counter.Key>();
 
     // called by agent
-    public static AgentContext startOn(final Counter.Key key, final Object that) {
-        return new AgentContext(key, that, listeners(key, that));
+    public static AgentContext startOn(final String key, final Object that) {
+        return new AgentContext(key, that, listeners(key));
     }
 
     // helper to init keys in javaagent
     public static Counter.Key key(final String name) {
-        return new Counter.Key(Role.PERFORMANCES, name);
+        Counter.Key key = KEYS_CACHE.get(name);
+        if (key == null) {
+            key = new Counter.Key(Role.PERFORMANCES, name);
+            KEYS_CACHE.putIfAbsent(name, key);
+        }
+        return key;
     }
 
     private static InvocationListener[] loadAllListeners() {
@@ -77,10 +83,10 @@ public class AgentContext {
         listeners.add(autoset);
     }
 
-    private static InvocationListener[] listeners(final Counter.Key key, final Object that) {
+    private static InvocationListener[] listeners(final String key) {
         InvocationListener[] listeners = LISTENERS_BY_KEY.get(key);
         if (listeners == null) {
-            listeners = findListeners(key, that);
+            listeners = findListeners(key);
             final InvocationListener[] old = LISTENERS_BY_KEY.putIfAbsent(key, listeners);
             if (old != null) {
                 listeners = old;
@@ -89,10 +95,10 @@ public class AgentContext {
         return listeners;
     }
 
-    private static InvocationListener[] findListeners(final Counter.Key key, final Object that) {
+    private static InvocationListener[] findListeners(final String key) {
         final List<InvocationListener> listeners = new LinkedList<InvocationListener>();
         for (final InvocationListener listener : EXISTING_LISTENERS) {
-            if (listener.accept(key, that)) {
+            if (listener.accept(key)) {
                 listeners.add(listener);
             }
         }
@@ -100,13 +106,13 @@ public class AgentContext {
         return listeners.toArray(new InvocationListener[listeners.size()]);
     }
 
-    private final Counter.Key key;
+    private final String key;
     private final Object reference;
     private final InvocationListener[] listeners;
     private final boolean hasListeners;
     private final Map<Integer, Object> context = new HashMap<Integer, Object>();
 
-    public AgentContext(final Counter.Key key, final Object that, final InvocationListener[] listeners) {
+    public AgentContext(final String key, final Object that, final InvocationListener[] listeners) {
         this.key = key;
         this.reference = that;
         this.listeners = listeners;
@@ -122,7 +128,7 @@ public class AgentContext {
         return reference;
     }
 
-    public Counter.Key getKey() {
+    public String getKey() {
         return key;
     }
 

Modified: incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaClassVisitor.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaClassVisitor.java?rev=1545965&r1=1545964&r2=1545965&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaClassVisitor.java (original)
+++ incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaClassVisitor.java Wed Nov 27 08:45:35 2013
@@ -16,7 +16,6 @@
  */
 package org.apache.sirona.javaagent;
 
-import org.apache.sirona.counters.Counter;
 import org.objectweb.asm.ClassVisitor;
 import org.objectweb.asm.ClassWriter;
 import org.objectweb.asm.Label;
@@ -42,7 +41,7 @@ public class SironaClassVisitor extends 
     private static final String FIELD_SUFFIX = "_$_$IRONA_$_INTERNAL_$_KEY";
     private static final String STATIC_CLINT_MERGE_PREFIX = "_$_$irona_static_merge";
 
-    private static final Type KEY_TYPE = Type.getType(Counter.Key.class);
+    private static final Type KEY_TYPE = Type.getType(String.class);
     private static final Type AGENT_CONTEXT = Type.getType(AgentContext.class);
 
     private final String javaName;
@@ -115,9 +114,6 @@ public class SironaClassVisitor extends 
     }
 
     private static class AddConstantsFieldVisitor extends GeneratorAdapter {
-        private static final Type STRING_TYPE = Type.getType(String.class);
-        private static final String KEY_METHOD = "key";
-
         private final Map<String, String> keys;
         private final Type clazz;
 
@@ -133,7 +129,6 @@ public class SironaClassVisitor extends 
 
             for (final Map.Entry<String, String> key : keys.entrySet()) {
                 push(key.getValue());
-                invokeStatic(AGENT_CONTEXT, new Method(KEY_METHOD, "(" + STRING_TYPE + ")" + KEY_TYPE));
                 putStatic(clazz, key.getKey(), KEY_TYPE);
             }
         }

Modified: incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/listener/ConfigurableListener.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/listener/ConfigurableListener.java?rev=1545965&r1=1545964&r2=1545965&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/listener/ConfigurableListener.java (original)
+++ incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/listener/ConfigurableListener.java Wed Nov 27 08:45:35 2013
@@ -17,7 +17,6 @@
 package org.apache.sirona.javaagent.listener;
 
 import org.apache.sirona.configuration.predicate.PredicateEvaluator;
-import org.apache.sirona.counters.Counter;
 import org.apache.sirona.javaagent.AgentContext;
 import org.apache.sirona.javaagent.spi.InvocationListener;
 
@@ -31,15 +30,15 @@ public abstract class ConfigurableListen
     private PredicateEvaluator includes = new PredicateEvaluator("true:true", ",");
     private PredicateEvaluator excludes = new PredicateEvaluator(null, null);
 
-    protected void before(final Counter.Key key, final I reference) {
+    protected void before(final String key, final I reference) {
         // no-op
     }
 
-    protected void onSuccess(final Counter.Key key, final I reference, final R result) {
+    protected void onSuccess(final String key, final I reference, final R result) {
         // no-op
     }
 
-    protected void onError(final Counter.Key key, final I reference, final Throwable error) {
+    protected void onError(final String key, final I reference, final Throwable error) {
         // no-op
     }
 
@@ -62,8 +61,7 @@ public abstract class ConfigurableListen
     }
 
     @Override
-    public boolean accept(final Counter.Key key, final Object instance) {
-        final String name = key.getName();
+    public boolean accept(final String name) {
         return includes.matches(name) && !excludes.matches(name);
     }
 

Modified: incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/listener/CounterListener.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/listener/CounterListener.java?rev=1545965&r1=1545964&r2=1545965&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/listener/CounterListener.java (original)
+++ incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/listener/CounterListener.java Wed Nov 27 08:45:35 2013
@@ -26,16 +26,15 @@ import org.apache.sirona.javaagent.spi.O
 
 @Order(0)
 @AutoSet
-public class CounterListener extends AbstractPerformanceInterceptor<Counter.Key> implements InvocationListener {
+public class CounterListener extends AbstractPerformanceInterceptor<String> implements InvocationListener {
     private static final int KEY = 0;
 
     private PredicateEvaluator includes = new PredicateEvaluator("true:true", ",");
     private PredicateEvaluator excludes = new PredicateEvaluator(null, null);
 
     @Override
-    public boolean accept(final Counter.Key key, final Object instance) {
-        final String name = key.getName();
-        return includes.matches(name) && !excludes.matches(name);
+    public boolean accept(final String key) {
+        return includes.matches(key) && !excludes.matches(key);
     }
 
     // @AutoSet
@@ -50,8 +49,8 @@ public class CounterListener extends Abs
 
     @Override
     public void before(final AgentContext ctx) {
-        final Counter.Key key = ctx.getKey();
-        ctx.put(KEY, new CounterListener().before(key, key.getName()));
+        final String key = ctx.getKey();
+        ctx.put(KEY, new CounterListener().before(key, key));
     }
 
     @Override
@@ -65,18 +64,18 @@ public class CounterListener extends Abs
     }
 
     @Override
-    protected Counter.Key getKey(final Counter.Key key, final String name) {
-        return key;
+    protected Counter.Key getKey(final String key, final String name) {
+        return AgentContext.key(key);
     }
 
     @Override
-    protected String getCounterName(final Counter.Key invocation) {
-        return invocation.getName();
+    protected String getCounterName(final String invocation) {
+        return invocation;
     }
 
     @Override
-    protected Object extractContextKey(final Counter.Key invocation) {
-        return invocation;
+    protected Object extractContextKey(final String invocation) {
+        return AgentContext.key(invocation);
     }
 
     @Override
@@ -89,7 +88,7 @@ public class CounterListener extends Abs
     }
 
     @Override
-    protected Object proceed(final Counter.Key invocation) throws Throwable {
+    protected Object proceed(final String invocation) throws Throwable {
         return unsupportedOperation();
     }
 

Modified: incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/spi/InvocationListener.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/spi/InvocationListener.java?rev=1545965&r1=1545964&r2=1545965&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/spi/InvocationListener.java (original)
+++ incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/spi/InvocationListener.java Wed Nov 27 08:45:35 2013
@@ -16,11 +16,10 @@
  */
 package org.apache.sirona.javaagent.spi;
 
-import org.apache.sirona.counters.Counter;
 import org.apache.sirona.javaagent.AgentContext;
 
 public interface InvocationListener {
     void before(AgentContext context);
     void after(AgentContext context, Object result, Throwable error);
-    boolean accept(Counter.Key key, Object instance);
+    boolean accept(String key);
 }

Modified: incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/AgentPerfInterceptorAgentContractTest.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/AgentPerfInterceptorAgentContractTest.java?rev=1545965&r1=1545964&r2=1545965&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/AgentPerfInterceptorAgentContractTest.java (original)
+++ incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/AgentPerfInterceptorAgentContractTest.java Wed Nov 27 08:45:35 2013
@@ -34,21 +34,21 @@ public class AgentPerfInterceptorAgentCo
 
     @Test
     public void start() {
-        final Counter.Key key = AgentContext.key("start");
+        final String key = "start";
         final AgentContext context = AgentContext.startOn(key, null);
         context.stop(null);
         assertEquals("org.apache.sirona.javaagent.AgentContext", context.getClass().getName());
-        assertEquals(1, Repository.INSTANCE.getCounter(key).getHits());
+        assertEquals(1, Repository.INSTANCE.getCounter(AgentContext.key(key)).getHits());
     }
 
     @Test
     public void attributes() {
-        final Counter.Key key = AgentContext.key("ref");
+        final String key = "ref";
         final Object instance = new Object();
         final AgentContext context = AgentContext.startOn(key, instance);
         context.stop(null);
         assertEquals(instance, context.getReference());
         assertEquals(key, context.getKey());
-        assertEquals(1, Repository.INSTANCE.getCounter(key).getHits());
+        assertEquals(1, Repository.INSTANCE.getCounter(AgentContext.key(key)).getHits());
     }
 }

Modified: incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/CounterListenerConfigTest.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/CounterListenerConfigTest.java?rev=1545965&r1=1545964&r2=1545965&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/CounterListenerConfigTest.java (original)
+++ incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/CounterListenerConfigTest.java Wed Nov 27 08:45:35 2013
@@ -16,8 +16,6 @@
  */
 package org.apache.test.sirona.javaagent;
 
-import org.apache.sirona.Role;
-import org.apache.sirona.counters.Counter;
 import org.apache.sirona.javaagent.listener.CounterListener;
 import org.apache.sirona.repositories.Repository;
 import org.junit.AfterClass;
@@ -28,7 +26,7 @@ import static org.junit.Assert.assertFal
 import static org.junit.Assert.assertTrue;
 
 public class CounterListenerConfigTest {
-    private static final Counter.Key KEY = new Counter.Key(Role.PERFORMANCES, "org.apache.test.sirona.javaagent.CounterListenerConfigTest$Foo.fake");
+    private static final String KEY = "org.apache.test.sirona.javaagent.CounterListenerConfigTest$Foo.fake";
 
     private CounterListener listener;
 
@@ -46,25 +44,25 @@ public class CounterListenerConfigTest {
     @Test
     public void include() {
         listener.setExcludes(null);
-        listener.setIncludes("prefix:" + KEY.getName());
-        assertTrue(listener.accept(KEY, null));
+        listener.setIncludes("prefix:" + KEY);
+        assertTrue(listener.accept(KEY));
     }
 
     @Test
     public void exclude() {
-        listener.setExcludes("prefix:" + KEY.getName());
+        listener.setExcludes("prefix:" + KEY);
         listener.setIncludes(null);
-        assertFalse(listener.accept(KEY, null));
+        assertFalse(listener.accept(KEY));
     }
 
     @Test
     public void includeExclude() {
-        listener.setExcludes("prefix:" + KEY.getName());
-        listener.setIncludes("prefix:" + KEY.getName());
-        assertFalse(listener.accept(KEY, null));
-
-        listener.setExcludes("prefix:" + KEY.getName() + "_");
-        listener.setIncludes("prefix:" + KEY.getName());
-        assertTrue(listener.accept(KEY, null));
+        listener.setExcludes("prefix:" + KEY);
+        listener.setIncludes("prefix:" + KEY);
+        assertFalse(listener.accept(KEY));
+
+        listener.setExcludes("prefix:" + KEY + "_");
+        listener.setIncludes("prefix:" + KEY);
+        assertTrue(listener.accept(KEY));
     }
 }

Modified: incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/HttpUrlConnectionAddHeaderTest.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/HttpUrlConnectionAddHeaderTest.java?rev=1545965&r1=1545964&r2=1545965&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/HttpUrlConnectionAddHeaderTest.java (original)
+++ incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/HttpUrlConnectionAddHeaderTest.java Wed Nov 27 08:45:35 2013
@@ -16,7 +16,6 @@
  */
 package org.apache.test.sirona.javaagent;
 
-import org.apache.sirona.counters.Counter;
 import org.apache.sirona.javaagent.AgentContext;
 import org.apache.sirona.javaagent.JavaAgentRunner;
 import org.apache.sirona.javaagent.spi.InvocationListener;
@@ -77,8 +76,8 @@ public class HttpUrlConnectionAddHeaderT
         }
 
         @Override
-        public boolean accept(final Counter.Key key, final Object instance) { // static => instance == null
-            return key.getName().equals("org.apache.test.sirona.javaagent.HttpUrlConnectionAddHeaderTest$ConnectionFactory.createConnection");
+        public boolean accept(final String key) { // static => instance == null
+            return key.equals("org.apache.test.sirona.javaagent.HttpUrlConnectionAddHeaderTest$ConnectionFactory.createConnection");
         }
     }
 }