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 2015/03/19 14:30:33 UTC
svn commit: r1667741 - in /incubator/sirona/trunk:
agent/javaagent/src/main/java/org/apache/sirona/javaagent/
agent/javaagent/src/test/java/org/apache/sirona/javaagent/
agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/
api/src/main/java/o...
Author: rmannibucau
Date: Thu Mar 19 13:30:32 2015
New Revision: 1667741
URL: http://svn.apache.org/r1667741
Log:
adding boolean as alias for true predicate + some exclusions (configurable) of classloader in javaagent - mainly temp classloader used for instrumentation/scanning
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/SironaTransformer.java
incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/sirona/javaagent/InJvmTransformerRunner.java
incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/EnsureInstrumationDoesntFailTest.java
incubator/sirona/trunk/api/src/main/java/org/apache/sirona/configuration/predicate/PredicateEvaluator.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=1667741&r1=1667740&r2=1667741&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 Thu Mar 19 13:30:32 2015
@@ -71,6 +71,7 @@ public class SironaAgent {
}
final boolean debug = "true".equalsIgnoreCase(extractConfig(agentArgs, "debug="));
+ final String tempClassLoaders = extractConfig(agentArgs, "tempClassLoaders=");
final boolean envrtDebug = debug || "true".equalsIgnoreCase(extractConfig(agentArgs, "environment-debug="));
final StringBuilder out = new StringBuilder();
@@ -122,7 +123,7 @@ public class SironaAgent {
System.out.println("Sirona debugging activated, find instrumented classes in /tmp/sirona-dump/");
}
- final SironaTransformer transformer = new SironaTransformer(debug);
+ final SironaTransformer transformer = new SironaTransformer(debug, tempClassLoaders);
final boolean reloadable = instrumentation.isRetransformClassesSupported() && FORCE_RELOAD;
instrumentation.addTransformer(transformer, reloadable);
Modified: incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaTransformer.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaTransformer.java?rev=1667741&r1=1667740&r2=1667741&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaTransformer.java (original)
+++ incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaTransformer.java Thu Mar 19 13:30:32 2015
@@ -30,20 +30,42 @@ public class SironaTransformer implement
private static final String DELEGATING_CLASS_LOADER = "sun.reflect.DelegatingClassLoader";
private final boolean debug;
+ private final String[] autoClassLoaderExcludes;
- public SironaTransformer(final boolean debug) {
+ public SironaTransformer(final boolean debug, final String tempClassLoaders) {
this.debug = debug || Boolean.getBoolean("sirona.javaagent.debug");
+
+ final String excludes = System.getProperty(
+ "sirona.javaagent.dontAutoClassLoaderExclude",
+ tempClassLoaders != null ?
+ tempClassLoaders :
+ "org.apache.openjpa.lib.util.TemporaryClassLoader,org.apache.openejb.core.TempClassLoader");
+ this.autoClassLoaderExcludes = excludes.split(" *, *");
}
@Override
public byte[] transform(final ClassLoader loader, final String className, final Class<?> classBeingRedefined,
final ProtectionDomain protectionDomain, final byte[] classfileBuffer) throws IllegalClassFormatException {
- if (shouldTransform(className, loader)) {
+ if (shouldTransform(className, loader) && !isExcludedLoader(loader)) {
return doTransform(className, classfileBuffer);
}
return classfileBuffer;
}
+ private boolean isExcludedLoader(final ClassLoader loader) {
+ if (loader == null) {
+ return false;
+ }
+
+ final String name = loader.getClass().getName();
+ for (int i = 0; i < autoClassLoaderExcludes.length; i++) {
+ if (autoClassLoaderExcludes[i].equals(name)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
protected byte[] doTransform(final String className, final byte[] classfileBuffer) {
try {
final ClassReader reader = new ClassReader(classfileBuffer);
Modified: incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/sirona/javaagent/InJvmTransformerRunner.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/sirona/javaagent/InJvmTransformerRunner.java?rev=1667741&r1=1667740&r2=1667741&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/sirona/javaagent/InJvmTransformerRunner.java (original)
+++ incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/sirona/javaagent/InJvmTransformerRunner.java Thu Mar 19 13:30:32 2015
@@ -148,7 +148,7 @@ public class InJvmTransformerRunner exte
byte[] buffer = IOUtils.toByteArray(is);
for (final Class<?> t : transformers) {
if (SironaTransformer.class.equals(t)) {
- final SironaTransformer transformer = new SironaTransformer(false);
+ final SironaTransformer transformer = new SironaTransformer(false, null);
buffer = transformer.transform(this, className, null, null, buffer);
} else if (PCClassFileTransformer.class.equals(t)) {
if (name.endsWith("Entity")) {
Modified: incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/EnsureInstrumationDoesntFailTest.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/EnsureInstrumationDoesntFailTest.java?rev=1667741&r1=1667740&r2=1667741&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/EnsureInstrumationDoesntFailTest.java (original)
+++ incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/EnsureInstrumationDoesntFailTest.java Thu Mar 19 13:30:32 2015
@@ -26,7 +26,7 @@ import java.net.URLClassLoader;
public class EnsureInstrumationDoesntFailTest {
@Test // just check it doesn't throw an exception, mainly a debug test
public void run() throws IllegalClassFormatException {
- new SironaTransformer(true)
+ new SironaTransformer(true, null)
.transform(
new URLClassLoader(new URL[0]), App.class.getName().replace('.', '/'),
App.class, App.class.getProtectionDomain(), new byte[]{
Modified: incubator/sirona/trunk/api/src/main/java/org/apache/sirona/configuration/predicate/PredicateEvaluator.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/api/src/main/java/org/apache/sirona/configuration/predicate/PredicateEvaluator.java?rev=1667741&r1=1667740&r2=1667741&view=diff
==============================================================================
--- incubator/sirona/trunk/api/src/main/java/org/apache/sirona/configuration/predicate/PredicateEvaluator.java (original)
+++ incubator/sirona/trunk/api/src/main/java/org/apache/sirona/configuration/predicate/PredicateEvaluator.java Thu Mar 19 13:30:32 2015
@@ -45,6 +45,7 @@ public final class PredicateEvaluator {
predicates.put(regexPredicate.prefix(), regexPredicate);
predicates.put(containersPredicate.prefix(), containersPredicate);
predicates.put(TruePredicate.INSTANCE.prefix(), TruePredicate.INSTANCE);
+ predicates.put("boolean", TruePredicate.INSTANCE); // just an alias for true since we can set false now
// SPI
for (final Predicate predicate : SPI.INSTANCE.find(Predicate.class, PredicateEvaluator.class.getClassLoader())) {
@@ -88,7 +89,10 @@ public final class PredicateEvaluator {
trueValue = false;
truePredicate = false;
}
- predicates.remove(TruePredicate.INSTANCE.prefix()); // no need to keep it in mem
+
+ // no need to keep it in mem
+ predicates.remove(TruePredicate.INSTANCE.prefix());
+ predicates.remove("boolean");
}
public boolean matches(final String value) {