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");
}
}
}