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