diff --git a/dd-java-agent/instrumentation/hibernate/core-3.5/src/main/java/datadog/trace/instrumentation/hibernate/core/v3_5/AbstractHibernateInstrumentation.java b/dd-java-agent/instrumentation/hibernate/core-3.5/src/main/java/datadog/trace/instrumentation/hibernate/core/v3_5/AbstractHibernateInstrumentation.java new file mode 100644 index 0000000000..58a859748a --- /dev/null +++ b/dd-java-agent/instrumentation/hibernate/core-3.5/src/main/java/datadog/trace/instrumentation/hibernate/core/v3_5/AbstractHibernateInstrumentation.java @@ -0,0 +1,33 @@ +package datadog.trace.instrumentation.hibernate.core.v3_5; + +import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClasses; +import static net.bytebuddy.matcher.ElementMatchers.not; + +import datadog.trace.agent.tooling.Instrumenter; +import net.bytebuddy.matcher.ElementMatcher; + +public abstract class AbstractHibernateInstrumentation extends Instrumenter.Default { + + public AbstractHibernateInstrumentation() { + super("hibernate", "hibernate-core"); + } + + @Override + public String[] helperClassNames() { + return new String[] { + "datadog.trace.instrumentation.hibernate.SessionMethodUtils", + "datadog.trace.instrumentation.hibernate.SessionState", + "datadog.trace.agent.decorator.BaseDecorator", + "datadog.trace.agent.decorator.ClientDecorator", + "datadog.trace.agent.decorator.DatabaseClientDecorator", + "datadog.trace.agent.decorator.OrmClientDecorator", + "datadog.trace.instrumentation.hibernate.HibernateDecorator", + }; + } + + @Override + public ElementMatcher classLoaderMatcher() { + return not(classLoaderHasClasses("org.hibernate.SharedSessionContract")) + .and(classLoaderHasClasses("org.hibernate.EntityNameResolver")); + } +} diff --git a/dd-java-agent/instrumentation/hibernate/core-3.5/src/main/java/datadog/trace/instrumentation/hibernate/core/v3_5/CriteriaInstrumentation.java b/dd-java-agent/instrumentation/hibernate/core-3.5/src/main/java/datadog/trace/instrumentation/hibernate/core/v3_5/CriteriaInstrumentation.java index 65585b52f3..de3cfb6564 100644 --- a/dd-java-agent/instrumentation/hibernate/core-3.5/src/main/java/datadog/trace/instrumentation/hibernate/core/v3_5/CriteriaInstrumentation.java +++ b/dd-java-agent/instrumentation/hibernate/core-3.5/src/main/java/datadog/trace/instrumentation/hibernate/core/v3_5/CriteriaInstrumentation.java @@ -22,30 +22,13 @@ import net.bytebuddy.matcher.ElementMatcher; import org.hibernate.Criteria; @AutoService(Instrumenter.class) -public class CriteriaInstrumentation extends Instrumenter.Default { - - public CriteriaInstrumentation() { - super("hibernate", "hibernate-core"); - } +public class CriteriaInstrumentation extends AbstractHibernateInstrumentation { @Override public Map contextStore() { return singletonMap("org.hibernate.Criteria", SessionState.class.getName()); } - @Override - public String[] helperClassNames() { - return new String[] { - "datadog.trace.instrumentation.hibernate.SessionMethodUtils", - "datadog.trace.instrumentation.hibernate.SessionState", - "datadog.trace.agent.decorator.BaseDecorator", - "datadog.trace.agent.decorator.ClientDecorator", - "datadog.trace.agent.decorator.DatabaseClientDecorator", - "datadog.trace.agent.decorator.OrmClientDecorator", - "datadog.trace.instrumentation.hibernate.HibernateDecorator", - }; - } - @Override public ElementMatcher typeMatcher() { return not(isInterface()).and(safeHasSuperType(named("org.hibernate.Criteria"))); diff --git a/dd-java-agent/instrumentation/hibernate/core-3.5/src/main/java/datadog/trace/instrumentation/hibernate/core/v3_5/QueryInstrumentation.java b/dd-java-agent/instrumentation/hibernate/core-3.5/src/main/java/datadog/trace/instrumentation/hibernate/core/v3_5/QueryInstrumentation.java index 90815aa31a..8d8d2ccbb2 100644 --- a/dd-java-agent/instrumentation/hibernate/core-3.5/src/main/java/datadog/trace/instrumentation/hibernate/core/v3_5/QueryInstrumentation.java +++ b/dd-java-agent/instrumentation/hibernate/core-3.5/src/main/java/datadog/trace/instrumentation/hibernate/core/v3_5/QueryInstrumentation.java @@ -24,30 +24,13 @@ import org.hibernate.Query; import org.hibernate.SQLQuery; @AutoService(Instrumenter.class) -public class QueryInstrumentation extends Instrumenter.Default { - - public QueryInstrumentation() { - super("hibernate", "hibernate-core"); - } +public class QueryInstrumentation extends AbstractHibernateInstrumentation { @Override public Map contextStore() { return singletonMap("org.hibernate.Query", SessionState.class.getName()); } - @Override - public String[] helperClassNames() { - return new String[] { - "datadog.trace.instrumentation.hibernate.SessionMethodUtils", - "datadog.trace.instrumentation.hibernate.SessionState", - "datadog.trace.agent.decorator.BaseDecorator", - "datadog.trace.agent.decorator.ClientDecorator", - "datadog.trace.agent.decorator.DatabaseClientDecorator", - "datadog.trace.agent.decorator.OrmClientDecorator", - "datadog.trace.instrumentation.hibernate.HibernateDecorator", - }; - } - @Override public ElementMatcher typeMatcher() { return not(isInterface()).and(safeHasSuperType(named("org.hibernate.Query"))); diff --git a/dd-java-agent/instrumentation/hibernate/core-3.5/src/main/java/datadog/trace/instrumentation/hibernate/core/v3_5/SessionFactoryInstrumentation.java b/dd-java-agent/instrumentation/hibernate/core-3.5/src/main/java/datadog/trace/instrumentation/hibernate/core/v3_5/SessionFactoryInstrumentation.java index 97a3538a4f..e18c01f0c7 100644 --- a/dd-java-agent/instrumentation/hibernate/core-3.5/src/main/java/datadog/trace/instrumentation/hibernate/core/v3_5/SessionFactoryInstrumentation.java +++ b/dd-java-agent/instrumentation/hibernate/core-3.5/src/main/java/datadog/trace/instrumentation/hibernate/core/v3_5/SessionFactoryInstrumentation.java @@ -27,11 +27,7 @@ import org.hibernate.Session; import org.hibernate.StatelessSession; @AutoService(Instrumenter.class) -public class SessionFactoryInstrumentation extends Instrumenter.Default { - - public SessionFactoryInstrumentation() { - super("hibernate", "hibernate-core"); - } +public class SessionFactoryInstrumentation extends AbstractHibernateInstrumentation { @Override public Map contextStore() { @@ -42,18 +38,6 @@ public class SessionFactoryInstrumentation extends Instrumenter.Default { return stores; } - @Override - public String[] helperClassNames() { - return new String[] { - "datadog.trace.instrumentation.hibernate.SessionState", - "datadog.trace.agent.decorator.BaseDecorator", - "datadog.trace.agent.decorator.ClientDecorator", - "datadog.trace.agent.decorator.DatabaseClientDecorator", - "datadog.trace.agent.decorator.OrmClientDecorator", - "datadog.trace.instrumentation.hibernate.HibernateDecorator", - }; - } - @Override public ElementMatcher typeMatcher() { return not(isInterface()).and(safeHasSuperType(named("org.hibernate.SessionFactory"))); diff --git a/dd-java-agent/instrumentation/hibernate/core-3.5/src/main/java/datadog/trace/instrumentation/hibernate/core/v3_5/SessionInstrumentation.java b/dd-java-agent/instrumentation/hibernate/core-3.5/src/main/java/datadog/trace/instrumentation/hibernate/core/v3_5/SessionInstrumentation.java index 5c90ffbb68..f99b01138b 100644 --- a/dd-java-agent/instrumentation/hibernate/core-3.5/src/main/java/datadog/trace/instrumentation/hibernate/core/v3_5/SessionInstrumentation.java +++ b/dd-java-agent/instrumentation/hibernate/core-3.5/src/main/java/datadog/trace/instrumentation/hibernate/core/v3_5/SessionInstrumentation.java @@ -33,11 +33,7 @@ import org.hibernate.StatelessSession; import org.hibernate.Transaction; @AutoService(Instrumenter.class) -public class SessionInstrumentation extends Instrumenter.Default { - - public SessionInstrumentation() { - super("hibernate", "hibernate-core"); - } +public class SessionInstrumentation extends AbstractHibernateInstrumentation { @Override public Map contextStore() { @@ -50,19 +46,6 @@ public class SessionInstrumentation extends Instrumenter.Default { return Collections.unmodifiableMap(map); } - @Override - public String[] helperClassNames() { - return new String[] { - "datadog.trace.instrumentation.hibernate.SessionMethodUtils", - "datadog.trace.instrumentation.hibernate.SessionState", - "datadog.trace.agent.decorator.BaseDecorator", - "datadog.trace.agent.decorator.ClientDecorator", - "datadog.trace.agent.decorator.DatabaseClientDecorator", - "datadog.trace.agent.decorator.OrmClientDecorator", - "datadog.trace.instrumentation.hibernate.HibernateDecorator", - }; - } - @Override public ElementMatcher typeMatcher() { return not(isInterface()) diff --git a/dd-java-agent/instrumentation/hibernate/core-3.5/src/main/java/datadog/trace/instrumentation/hibernate/core/v3_5/TransactionInstrumentation.java b/dd-java-agent/instrumentation/hibernate/core-3.5/src/main/java/datadog/trace/instrumentation/hibernate/core/v3_5/TransactionInstrumentation.java index cab6ee8e2d..7014290974 100644 --- a/dd-java-agent/instrumentation/hibernate/core-3.5/src/main/java/datadog/trace/instrumentation/hibernate/core/v3_5/TransactionInstrumentation.java +++ b/dd-java-agent/instrumentation/hibernate/core-3.5/src/main/java/datadog/trace/instrumentation/hibernate/core/v3_5/TransactionInstrumentation.java @@ -22,30 +22,13 @@ import net.bytebuddy.matcher.ElementMatcher; import org.hibernate.Transaction; @AutoService(Instrumenter.class) -public class TransactionInstrumentation extends Instrumenter.Default { - - public TransactionInstrumentation() { - super("hibernate", "hibernate-core"); - } +public class TransactionInstrumentation extends AbstractHibernateInstrumentation { @Override public Map contextStore() { return singletonMap("org.hibernate.Transaction", SessionState.class.getName()); } - @Override - public String[] helperClassNames() { - return new String[] { - "datadog.trace.instrumentation.hibernate.SessionMethodUtils", - "datadog.trace.instrumentation.hibernate.SessionState", - "datadog.trace.agent.decorator.BaseDecorator", - "datadog.trace.agent.decorator.ClientDecorator", - "datadog.trace.agent.decorator.DatabaseClientDecorator", - "datadog.trace.agent.decorator.OrmClientDecorator", - "datadog.trace.instrumentation.hibernate.HibernateDecorator", - }; - } - @Override public ElementMatcher typeMatcher() { return not(isInterface()).and(safeHasSuperType(named("org.hibernate.Transaction"))); diff --git a/dd-java-agent/instrumentation/hibernate/core-4.0/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_0/AbstractHibernateInstrumentation.java b/dd-java-agent/instrumentation/hibernate/core-4.0/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_0/AbstractHibernateInstrumentation.java new file mode 100644 index 0000000000..9e69ca72df --- /dev/null +++ b/dd-java-agent/instrumentation/hibernate/core-4.0/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_0/AbstractHibernateInstrumentation.java @@ -0,0 +1,31 @@ +package datadog.trace.instrumentation.hibernate.core.v4_0; + +import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClasses; + +import datadog.trace.agent.tooling.Instrumenter; +import net.bytebuddy.matcher.ElementMatcher; + +public abstract class AbstractHibernateInstrumentation extends Instrumenter.Default { + + public AbstractHibernateInstrumentation() { + super("hibernate", "hibernate-core"); + } + + @Override + public String[] helperClassNames() { + return new String[] { + "datadog.trace.instrumentation.hibernate.SessionMethodUtils", + "datadog.trace.instrumentation.hibernate.SessionState", + "datadog.trace.agent.decorator.BaseDecorator", + "datadog.trace.agent.decorator.ClientDecorator", + "datadog.trace.agent.decorator.DatabaseClientDecorator", + "datadog.trace.agent.decorator.OrmClientDecorator", + "datadog.trace.instrumentation.hibernate.HibernateDecorator", + }; + } + + @Override + public ElementMatcher classLoaderMatcher() { + return classLoaderHasClasses("org.hibernate.SharedSessionContract"); + } +} diff --git a/dd-java-agent/instrumentation/hibernate/core-4.0/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_0/CriteriaInstrumentation.java b/dd-java-agent/instrumentation/hibernate/core-4.0/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_0/CriteriaInstrumentation.java index 4206d25aea..be83988555 100644 --- a/dd-java-agent/instrumentation/hibernate/core-4.0/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_0/CriteriaInstrumentation.java +++ b/dd-java-agent/instrumentation/hibernate/core-4.0/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_0/CriteriaInstrumentation.java @@ -22,30 +22,13 @@ import net.bytebuddy.matcher.ElementMatcher; import org.hibernate.Criteria; @AutoService(Instrumenter.class) -public class CriteriaInstrumentation extends Instrumenter.Default { - - public CriteriaInstrumentation() { - super("hibernate", "hibernate-core"); - } +public class CriteriaInstrumentation extends AbstractHibernateInstrumentation { @Override public Map contextStore() { return singletonMap("org.hibernate.Criteria", SessionState.class.getName()); } - @Override - public String[] helperClassNames() { - return new String[] { - "datadog.trace.instrumentation.hibernate.SessionMethodUtils", - "datadog.trace.instrumentation.hibernate.SessionState", - "datadog.trace.agent.decorator.BaseDecorator", - "datadog.trace.agent.decorator.ClientDecorator", - "datadog.trace.agent.decorator.DatabaseClientDecorator", - "datadog.trace.agent.decorator.OrmClientDecorator", - "datadog.trace.instrumentation.hibernate.HibernateDecorator", - }; - } - @Override public ElementMatcher typeMatcher() { return not(isInterface()).and(safeHasSuperType(named("org.hibernate.Criteria"))); diff --git a/dd-java-agent/instrumentation/hibernate/core-4.0/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_0/QueryInstrumentation.java b/dd-java-agent/instrumentation/hibernate/core-4.0/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_0/QueryInstrumentation.java index afa3c89c28..c955d18b00 100644 --- a/dd-java-agent/instrumentation/hibernate/core-4.0/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_0/QueryInstrumentation.java +++ b/dd-java-agent/instrumentation/hibernate/core-4.0/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_0/QueryInstrumentation.java @@ -24,30 +24,13 @@ import org.hibernate.Query; import org.hibernate.SQLQuery; @AutoService(Instrumenter.class) -public class QueryInstrumentation extends Instrumenter.Default { - - public QueryInstrumentation() { - super("hibernate", "hibernate-core"); - } +public class QueryInstrumentation extends AbstractHibernateInstrumentation { @Override public Map contextStore() { return singletonMap("org.hibernate.Query", SessionState.class.getName()); } - @Override - public String[] helperClassNames() { - return new String[] { - "datadog.trace.instrumentation.hibernate.SessionMethodUtils", - "datadog.trace.instrumentation.hibernate.SessionState", - "datadog.trace.agent.decorator.BaseDecorator", - "datadog.trace.agent.decorator.ClientDecorator", - "datadog.trace.agent.decorator.DatabaseClientDecorator", - "datadog.trace.agent.decorator.OrmClientDecorator", - "datadog.trace.instrumentation.hibernate.HibernateDecorator", - }; - } - @Override public ElementMatcher typeMatcher() { return not(isInterface()).and(safeHasSuperType(named("org.hibernate.Query"))); diff --git a/dd-java-agent/instrumentation/hibernate/core-4.0/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_0/SessionFactoryInstrumentation.java b/dd-java-agent/instrumentation/hibernate/core-4.0/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_0/SessionFactoryInstrumentation.java index ce069f5365..5dabfaca50 100644 --- a/dd-java-agent/instrumentation/hibernate/core-4.0/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_0/SessionFactoryInstrumentation.java +++ b/dd-java-agent/instrumentation/hibernate/core-4.0/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_0/SessionFactoryInstrumentation.java @@ -25,29 +25,13 @@ import net.bytebuddy.matcher.ElementMatcher; import org.hibernate.SharedSessionContract; @AutoService(Instrumenter.class) -public class SessionFactoryInstrumentation extends Instrumenter.Default { - - public SessionFactoryInstrumentation() { - super("hibernate", "hibernate-core"); - } +public class SessionFactoryInstrumentation extends AbstractHibernateInstrumentation { @Override public Map contextStore() { return singletonMap("org.hibernate.SharedSessionContract", SessionState.class.getName()); } - @Override - public String[] helperClassNames() { - return new String[] { - "datadog.trace.instrumentation.hibernate.SessionState", - "datadog.trace.agent.decorator.BaseDecorator", - "datadog.trace.agent.decorator.ClientDecorator", - "datadog.trace.agent.decorator.DatabaseClientDecorator", - "datadog.trace.agent.decorator.OrmClientDecorator", - "datadog.trace.instrumentation.hibernate.HibernateDecorator", - }; - } - @Override public ElementMatcher typeMatcher() { return not(isInterface()).and(safeHasSuperType(named("org.hibernate.SessionFactory"))); diff --git a/dd-java-agent/instrumentation/hibernate/core-4.0/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_0/SessionInstrumentation.java b/dd-java-agent/instrumentation/hibernate/core-4.0/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_0/SessionInstrumentation.java index 3e7759a80c..3c276843ab 100644 --- a/dd-java-agent/instrumentation/hibernate/core-4.0/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_0/SessionInstrumentation.java +++ b/dd-java-agent/instrumentation/hibernate/core-4.0/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_0/SessionInstrumentation.java @@ -32,11 +32,7 @@ import org.hibernate.SharedSessionContract; import org.hibernate.Transaction; @AutoService(Instrumenter.class) -public class SessionInstrumentation extends Instrumenter.Default { - - public SessionInstrumentation() { - super("hibernate", "hibernate-core"); - } +public class SessionInstrumentation extends AbstractHibernateInstrumentation { @Override public Map contextStore() { @@ -48,19 +44,6 @@ public class SessionInstrumentation extends Instrumenter.Default { return Collections.unmodifiableMap(map); } - @Override - public String[] helperClassNames() { - return new String[] { - "datadog.trace.instrumentation.hibernate.SessionMethodUtils", - "datadog.trace.instrumentation.hibernate.SessionState", - "datadog.trace.agent.decorator.BaseDecorator", - "datadog.trace.agent.decorator.ClientDecorator", - "datadog.trace.agent.decorator.DatabaseClientDecorator", - "datadog.trace.agent.decorator.OrmClientDecorator", - "datadog.trace.instrumentation.hibernate.HibernateDecorator", - }; - } - @Override public ElementMatcher typeMatcher() { return not(isInterface()).and(safeHasSuperType(named("org.hibernate.SharedSessionContract"))); diff --git a/dd-java-agent/instrumentation/hibernate/core-4.0/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_0/TransactionInstrumentation.java b/dd-java-agent/instrumentation/hibernate/core-4.0/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_0/TransactionInstrumentation.java index c775018436..48936a9bc4 100644 --- a/dd-java-agent/instrumentation/hibernate/core-4.0/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_0/TransactionInstrumentation.java +++ b/dd-java-agent/instrumentation/hibernate/core-4.0/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_0/TransactionInstrumentation.java @@ -22,30 +22,13 @@ import net.bytebuddy.matcher.ElementMatcher; import org.hibernate.Transaction; @AutoService(Instrumenter.class) -public class TransactionInstrumentation extends Instrumenter.Default { - - public TransactionInstrumentation() { - super("hibernate", "hibernate-core"); - } +public class TransactionInstrumentation extends AbstractHibernateInstrumentation { @Override public Map contextStore() { return singletonMap("org.hibernate.Transaction", SessionState.class.getName()); } - @Override - public String[] helperClassNames() { - return new String[] { - "datadog.trace.instrumentation.hibernate.SessionMethodUtils", - "datadog.trace.instrumentation.hibernate.SessionState", - "datadog.trace.agent.decorator.BaseDecorator", - "datadog.trace.agent.decorator.ClientDecorator", - "datadog.trace.agent.decorator.DatabaseClientDecorator", - "datadog.trace.agent.decorator.OrmClientDecorator", - "datadog.trace.instrumentation.hibernate.HibernateDecorator", - }; - } - @Override public ElementMatcher typeMatcher() { return not(isInterface()).and(safeHasSuperType(named("org.hibernate.Transaction"))); diff --git a/dd-java-agent/instrumentation/hibernate/core-4.3/core-4.3.gradle b/dd-java-agent/instrumentation/hibernate/core-4.3/core-4.3.gradle index 0b0a2f0862..4d2f77ecf9 100644 --- a/dd-java-agent/instrumentation/hibernate/core-4.3/core-4.3.gradle +++ b/dd-java-agent/instrumentation/hibernate/core-4.3/core-4.3.gradle @@ -10,6 +10,7 @@ muzzle { group = "org.hibernate" module = "hibernate-core" versions = "[4.3.0.Final,)" + assertInverse = true } } @@ -27,7 +28,7 @@ dependencies { compileOnly group: 'org.hibernate', name: 'hibernate-core', version: '4.3.0.Final' compile project(':dd-java-agent:agent-tooling') - compile project(':dd-java-agent:instrumentation:hibernate:core-4.0') + compile project(':dd-java-agent:instrumentation:hibernate') compile deps.bytebuddy compile deps.opentracing @@ -36,6 +37,7 @@ dependencies { testCompile project(':dd-java-agent:testing') testCompile project(':dd-java-agent:instrumentation:jdbc') + testCompile project(':dd-java-agent:instrumentation:hibernate:core-4.0') testCompile group: 'org.hibernate', name: 'hibernate-core', version: '4.3.0.Final' testCompile group: 'org.hsqldb', name: 'hsqldb', version: '2.0.0'