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 2014/02/20 00:08:44 UTC

svn commit: r1569960 - in /incubator/sirona/trunk: agent/javaagent/src/main/java/org/apache/sirona/javaagent/ agent/javaagent/src/main/java/org/apache/sirona/javaagent/listener/ agent/javaagent/src/test/java/org/apache/sirona/pathtracking/ agent/javaag...

Author: rmannibucau
Date: Wed Feb 19 23:08:44 2014
New Revision: 1569960

URL: http://svn.apache.org/r1569960
Log:
@AutoSet was not handling inheritance + supporting simple placeholder in properties

Added:
    incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/sirona/pathtracking/AutoSetPathTrackingListenerTest.java
Modified:
    incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaAgent.java
    incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/listener/PathTrackingInvocationListener.java
    incubator/sirona/trunk/agent/javaagent/src/test/resources/pathtracking/sirona.properties
    incubator/sirona/trunk/agent/javaagent/src/test/resources/sirona.properties
    incubator/sirona/trunk/core/src/main/java/org/apache/sirona/configuration/Configuration.java
    incubator/sirona/trunk/core/src/main/java/org/apache/sirona/configuration/FileConfigurationProvider.java
    incubator/sirona/trunk/core/src/main/java/org/apache/sirona/configuration/ioc/IoCs.java

Modified: incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaAgent.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaAgent.java?rev=1569960&r1=1569959&r2=1569960&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaAgent.java (original)
+++ incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaAgent.java Wed Feb 19 23:08:44 2014
@@ -32,6 +32,8 @@ public class SironaAgent {
 
     public static boolean AGENT_DEBUG = Boolean.getBoolean( "sirona.agent.debug" );
 
+    private static final boolean FORCE_RELOAD = Boolean.getBoolean("sirona.javaagent.force.reload");
+
     public static void premain(final String agentArgs, final Instrumentation instrumentation) {
         agentmain(agentArgs, instrumentation);
     }
@@ -101,7 +103,7 @@ public class SironaAgent {
 
             final Class<? extends Annotation> instrumentedMarker = (Class<? extends Annotation>) loader.loadClass("org.apache.sirona.javaagent.Instrumented");
             final Class<?> listener = loader.loadClass("org.apache.sirona.javaagent.spi.InvocationListener");
-            if (instrumentation.isRetransformClassesSupported()) {
+            if (instrumentation.isRetransformClassesSupported() && FORCE_RELOAD) {
                 for (final Class<?> clazz : instrumentation.getAllLoadedClasses()) {
                     if (!clazz.isArray()
                             && !listener.isAssignableFrom(clazz)

Modified: incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/listener/PathTrackingInvocationListener.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/listener/PathTrackingInvocationListener.java?rev=1569960&r1=1569959&r2=1569960&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/listener/PathTrackingInvocationListener.java (original)
+++ incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/listener/PathTrackingInvocationListener.java Wed Feb 19 23:08:44 2014
@@ -17,29 +17,25 @@
 package org.apache.sirona.javaagent.listener;
 
 import org.apache.sirona.configuration.Configuration;
-import org.apache.sirona.configuration.ioc.IoCs;
+import org.apache.sirona.configuration.ioc.AutoSet;
 import org.apache.sirona.javaagent.AgentContext;
 import org.apache.sirona.javaagent.SironaAgent;
-import org.apache.sirona.javaagent.listener.ConfigurableListener;
-import org.apache.sirona.store.DataStoreFactory;
-import org.apache.sirona.store.tracking.PathTrackingDataStore;
+import org.apache.sirona.javaagent.spi.Order;
 import org.apache.sirona.tracking.PathTracker;
-import org.apache.sirona.tracking.PathTrackingEntry;
 
-/**
- *
- */
+@Order(1)
+@AutoSet
 public class PathTrackingInvocationListener extends ConfigurableListener {
 
-    private static final Integer TIMESTAMP_KEY = "Sirona-path-tracking-key".hashCode();
-
-    private static final Integer PATH_TRACKING_LEVEL_KEY = "Sirona-path-tracking-level-key".hashCode();
+    private static final Integer PATH_TRACKER_KEY = "Sirona-path-tracker-key".hashCode();
+    private static final Integer PATH_TRACKING_INFO_LEVEL_KEY = "Sirona-path-tracking-info-key".hashCode();
 
     private static final boolean TRACKING_ACTIVATED =
         Configuration.is( Configuration.CONFIG_PROPERTY_PREFIX + "javaagent.path.tracking.activate", false );
 
 
-    private PathTracker.PathTrackingInformation pathTrackingInformation;
+    private String className;
+    private String methodName;
 
     @Override
     public boolean accept( String key )
@@ -64,10 +60,8 @@ public class PathTrackingInvocationListe
 
         int lastDot = key.lastIndexOf( "." );
 
-        String className = key.substring( 0, lastDot );
-        String methodName = key.substring(lastDot + 1, key.length());
-
-        this.pathTrackingInformation = new PathTracker.PathTrackingInformation( className, methodName );
+        className = key.substring( 0, lastDot );
+        methodName = key.substring(lastDot + 1, key.length());
 
         return true;
     }
@@ -79,7 +73,9 @@ public class PathTrackingInvocationListe
         {
             System.out.println( "PathTrackingInvocationListener#before:" + context.getKey() );
         }
-        context.put( PATH_TRACKING_LEVEL_KEY, PathTracker.start( this.pathTrackingInformation ) );
+        final PathTracker.PathTrackingInformation pathTrackingInformation = new PathTracker.PathTrackingInformation(className, methodName);
+        context.put(PATH_TRACKING_INFO_LEVEL_KEY, pathTrackingInformation);
+        context.put(PATH_TRACKER_KEY, PathTracker.start(pathTrackingInformation));
     }
 
     @Override
@@ -91,6 +87,7 @@ public class PathTrackingInvocationListe
             System.out.println( "PathTrackingInvocationListener#after: " + context.getKey() );
         }
 
-        context.get(PATH_TRACKING_LEVEL_KEY, PathTracker.class).stop(pathTrackingInformation);
+        context.get(PATH_TRACKER_KEY, PathTracker.class)
+                .stop(context.get(PATH_TRACKING_INFO_LEVEL_KEY, PathTracker.PathTrackingInformation.class));
     }
 }

Added: incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/sirona/pathtracking/AutoSetPathTrackingListenerTest.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/sirona/pathtracking/AutoSetPathTrackingListenerTest.java?rev=1569960&view=auto
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/sirona/pathtracking/AutoSetPathTrackingListenerTest.java (added)
+++ incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/sirona/pathtracking/AutoSetPathTrackingListenerTest.java Wed Feb 19 23:08:44 2014
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sirona.pathtracking;
+
+import org.apache.sirona.configuration.ioc.IoCs;
+import org.apache.sirona.javaagent.listener.PathTrackingInvocationListener;
+import org.junit.Test;
+
+public class AutoSetPathTrackingListenerTest {
+    @Test
+    public void autoSet() throws Exception {
+        final PathTrackingInvocationListener listener = IoCs.autoSet(null, new PathTrackingInvocationListener());
+        System.out.println(listener.accept("org.junit"));
+    }
+}

Modified: incubator/sirona/trunk/agent/javaagent/src/test/resources/pathtracking/sirona.properties
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/test/resources/pathtracking/sirona.properties?rev=1569960&r1=1569959&r2=1569960&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/test/resources/pathtracking/sirona.properties (original)
+++ incubator/sirona/trunk/agent/javaagent/src/test/resources/pathtracking/sirona.properties Wed Feb 19 23:08:44 2014
@@ -14,15 +14,18 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-org.apache.sirona.javaagent.listener.CounterListener.excludes = \
-  prefix:java,\
-  prefix:sun,\
-  prefix:com,\
-  regex:org.apache.test.*Test\\..*,\
-  prefix:org.junit,\
-  prefix:junit, \
-  prefix:com.apple
+excludes = \
+    prefix:java,\
+    prefix:sun,\
+    prefix:com,\
+    regex:org.apache.test.*Test\\..*,\
+    prefix:org.junit,\
+    prefix:junit, \
+    prefix:org.junit, \
+    prefix:com.apple
 
+org.apache.sirona.javaagent.listener.PathTrackingInvocationListener.excludes = ${excludes}
+org.apache.sirona.javaagent.listener.CounterListener.excludes = ${excludes}
 
 org.apache.sirona.store.DataStoreFactory = org.apache.sirona.pathtracking.test.ExtDataStoreFactory
 org.apache.sirona.javaagent.path.tracking.activate=true

Modified: incubator/sirona/trunk/agent/javaagent/src/test/resources/sirona.properties
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/test/resources/sirona.properties?rev=1569960&r1=1569959&r2=1569960&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/test/resources/sirona.properties (original)
+++ incubator/sirona/trunk/agent/javaagent/src/test/resources/sirona.properties Wed Feb 19 23:08:44 2014
@@ -14,6 +14,16 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
+org.apache.sirona.javaagent.listener.PathTrackingInvocationListener.excludes = \
+  prefix:java,\
+  prefix:sun,\
+  prefix:com,\
+  regex:org.apache.test.*Test\\..*,\
+  prefix:org.junit,\
+  prefix:junit, \
+  prefix:org.junit, \
+  prefix:com.apple
+
 org.apache.sirona.javaagent.listener.CounterListener.excludes = \
   prefix:java,\
   prefix:sun,\
@@ -21,6 +31,7 @@ org.apache.sirona.javaagent.listener.Cou
   regex:org.apache.test.*Test\\..*,\
   prefix:org.junit,\
   prefix:junit, \
+  prefix:org.junit, \
   prefix:com.apple
 
 

Modified: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/configuration/Configuration.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/configuration/Configuration.java?rev=1569960&r1=1569959&r2=1569960&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/configuration/Configuration.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/configuration/Configuration.java Wed Feb 19 23:08:44 2014
@@ -64,7 +64,11 @@ public final class Configuration {
     }
 
     public static String getProperty(final String key, final String defaultValue) {
-        return PROPERTIES.getProperty(key, defaultValue);
+        final String property = PROPERTIES.getProperty(key, defaultValue);
+        if (property != null && property.startsWith("${") && property.endsWith("}")) {
+            return getProperty(property.substring("${".length(), property.length() - 1), defaultValue);
+        }
+        return property;
     }
 
     public static String[] getArray(final String key, final String[] defaultValue) {

Modified: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/configuration/FileConfigurationProvider.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/configuration/FileConfigurationProvider.java?rev=1569960&r1=1569959&r2=1569960&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/configuration/FileConfigurationProvider.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/configuration/FileConfigurationProvider.java Wed Feb 19 23:08:44 2014
@@ -58,18 +58,23 @@ public class FileConfigurationProvider i
             if (classLoader == null) {
                 classLoader = ClassLoader.getSystemClassLoader();
             }
-            final InputStream stream = classLoader.getResourceAsStream(filename);
-            if (stream != null) {
-                try {
-                    properties.load(stream);
-                } catch (final IOException e) {
-                    LOGGER.log(Level.SEVERE, e.getMessage(), e);
-                }
-            }
+            load(properties, filename, classLoader);
         }
         return properties;
     }
 
+    private boolean load(final Properties properties, final String filename, final ClassLoader classLoader) {
+        final InputStream stream = classLoader.getResourceAsStream(filename);
+        if (stream != null) {
+            try {
+                properties.load(stream);
+            } catch (final IOException e) {
+                LOGGER.log(Level.SEVERE, e.getMessage(), e);
+            }
+        }
+        return stream != null;
+    }
+
     private void closeQuietly(InputStream inputStream) {
         try {
             if (inputStream != null) {

Modified: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/configuration/ioc/IoCs.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/configuration/ioc/IoCs.java?rev=1569960&r1=1569959&r2=1569960&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/configuration/ioc/IoCs.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/configuration/ioc/IoCs.java Wed Feb 19 23:08:44 2014
@@ -147,7 +147,7 @@ public final class IoCs {
         Class<?> current = loadedClass;
         while (current != null && !current.isInterface() && !Object.class.equals(current)) {
             final Collection<String> done = new LinkedList<String>();
-            for (final Method method : loadedClass.getDeclaredMethods()) {
+            for (final Method method : current.getDeclaredMethods()) {
                 if (!(Void.TYPE.equals(method.getReturnType())
                     && method.getName().startsWith(SETTER_PREFIX)
                     && method.getParameterTypes().length == 1
@@ -156,7 +156,6 @@ public final class IoCs {
                 }
 
                 final String name = Introspector.decapitalize(method.getName().substring(3));
-
                 final String configKey;
                 if (key == null) {
                     configKey = loadedClass.getName() + "." + name;
@@ -181,7 +180,7 @@ public final class IoCs {
                     }
                 }
             }
-            for (final Field field : loadedClass.getDeclaredFields()) {
+            for (final Field field : current.getDeclaredFields()) {
                 if (Modifier.isFinal(field.getModifiers()) || done.contains(field.getName())) {
                     continue;
                 }