Use a Dectorator for the Hibernate instrumentation
This commit is contained in:
parent
8985d6fd07
commit
079fcd6a56
|
@ -0,0 +1,21 @@
|
||||||
|
package datadog.trace.agent.decorator;
|
||||||
|
|
||||||
|
import datadog.trace.api.DDTags;
|
||||||
|
import io.opentracing.Span;
|
||||||
|
|
||||||
|
public abstract class OrmClientDecorator extends DatabaseClientDecorator {
|
||||||
|
|
||||||
|
public abstract <ENTITY> String entityName(final ENTITY entity);
|
||||||
|
|
||||||
|
public <ENTITY> Span onOperation(final Span span, final ENTITY entity) {
|
||||||
|
|
||||||
|
assert span != null;
|
||||||
|
if (entity != null) {
|
||||||
|
final String name = entityName(entity);
|
||||||
|
if (name != null) {
|
||||||
|
span.setTag(DDTags.RESOURCE_NAME, name);
|
||||||
|
} // else we keep any existing resource.
|
||||||
|
}
|
||||||
|
return span;
|
||||||
|
}
|
||||||
|
}
|
|
@ -16,6 +16,7 @@ import java.util.Map;
|
||||||
import net.bytebuddy.asm.Advice;
|
import net.bytebuddy.asm.Advice;
|
||||||
import net.bytebuddy.description.method.MethodDescription;
|
import net.bytebuddy.description.method.MethodDescription;
|
||||||
import net.bytebuddy.description.type.TypeDescription;
|
import net.bytebuddy.description.type.TypeDescription;
|
||||||
|
import net.bytebuddy.implementation.bytecode.assign.Assigner;
|
||||||
import net.bytebuddy.matcher.ElementMatcher;
|
import net.bytebuddy.matcher.ElementMatcher;
|
||||||
import org.hibernate.Criteria;
|
import org.hibernate.Criteria;
|
||||||
|
|
||||||
|
@ -66,16 +67,17 @@ public class CriteriaInstrumentation extends Instrumenter.Default {
|
||||||
InstrumentationContext.get(Criteria.class, SessionState.class);
|
InstrumentationContext.get(Criteria.class, SessionState.class);
|
||||||
|
|
||||||
return SessionMethodUtils.startScopeFrom(
|
return SessionMethodUtils.startScopeFrom(
|
||||||
contextStore, criteria, "hibernate.criteria." + name);
|
contextStore, criteria, "hibernate.criteria." + name, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
|
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
|
||||||
public static void endMethod(
|
public static void endMethod(
|
||||||
@Advice.This final Criteria criteria,
|
@Advice.This final Criteria criteria,
|
||||||
@Advice.Enter final SessionState state,
|
@Advice.Enter final SessionState state,
|
||||||
@Advice.Thrown final Throwable throwable) {
|
@Advice.Thrown final Throwable throwable,
|
||||||
|
@Advice.Return(typing = Assigner.Typing.DYNAMIC) final Object entity) {
|
||||||
|
|
||||||
SessionMethodUtils.closeScope(state, throwable);
|
SessionMethodUtils.closeScope(state, throwable, entity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,61 @@
|
||||||
|
package datadog.trace.instrumentation.hibernate;
|
||||||
|
|
||||||
|
import datadog.trace.agent.decorator.OrmClientDecorator;
|
||||||
|
import datadog.trace.api.DDSpanTypes;
|
||||||
|
import java.util.List;
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
|
||||||
|
public class HibernateDecorator extends OrmClientDecorator {
|
||||||
|
public static final HibernateDecorator INSTANCE = new HibernateDecorator();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String service() {
|
||||||
|
return "hibernate";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String[] instrumentationNames() {
|
||||||
|
return new String[] {"hibernate"};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String spanType() {
|
||||||
|
return DDSpanTypes.HIBERNATE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String component() {
|
||||||
|
return "java-hibernate";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String dbType() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String dbUser(final Object o) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String dbInstance(final Object o) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <ENTITY> String entityName(final ENTITY entity) {
|
||||||
|
String name = null;
|
||||||
|
if (entity instanceof String) {
|
||||||
|
// We were given an entity name, not the entity itself.
|
||||||
|
name = (String) entity;
|
||||||
|
} else if (entity.getClass().isAnnotationPresent(Entity.class)) {
|
||||||
|
// We were given an instance of an entity.
|
||||||
|
name = entity.getClass().getName();
|
||||||
|
} else if (entity instanceof List && ((List) entity).size() > 0) {
|
||||||
|
// We have a list of entities.
|
||||||
|
name = entityName(((List) entity).get(0));
|
||||||
|
}
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
}
|
|
@ -16,6 +16,7 @@ import java.util.Map;
|
||||||
import net.bytebuddy.asm.Advice;
|
import net.bytebuddy.asm.Advice;
|
||||||
import net.bytebuddy.description.method.MethodDescription;
|
import net.bytebuddy.description.method.MethodDescription;
|
||||||
import net.bytebuddy.description.type.TypeDescription;
|
import net.bytebuddy.description.type.TypeDescription;
|
||||||
|
import net.bytebuddy.implementation.bytecode.assign.Assigner;
|
||||||
import net.bytebuddy.matcher.ElementMatcher;
|
import net.bytebuddy.matcher.ElementMatcher;
|
||||||
import org.hibernate.engine.HibernateIterator;
|
import org.hibernate.engine.HibernateIterator;
|
||||||
|
|
||||||
|
@ -65,16 +66,17 @@ public class IteratorInstrumentation extends Instrumenter.Default {
|
||||||
InstrumentationContext.get(HibernateIterator.class, SessionState.class);
|
InstrumentationContext.get(HibernateIterator.class, SessionState.class);
|
||||||
|
|
||||||
return SessionMethodUtils.startScopeFrom(
|
return SessionMethodUtils.startScopeFrom(
|
||||||
contextStore, iterator, "hibernate.iterator." + name);
|
contextStore, iterator, "hibernate.iterator." + name, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
|
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
|
||||||
public static void endMethod(
|
public static void endMethod(
|
||||||
@Advice.This final HibernateIterator iterator,
|
@Advice.This final HibernateIterator iterator,
|
||||||
@Advice.Enter final SessionState state,
|
@Advice.Enter final SessionState state,
|
||||||
@Advice.Thrown final Throwable throwable) {
|
@Advice.Thrown final Throwable throwable,
|
||||||
|
@Advice.Return(typing = Assigner.Typing.DYNAMIC) final Object entity) {
|
||||||
|
|
||||||
SessionMethodUtils.closeScope(state, throwable);
|
SessionMethodUtils.closeScope(state, throwable, entity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,8 +16,10 @@ import java.util.Map;
|
||||||
import net.bytebuddy.asm.Advice;
|
import net.bytebuddy.asm.Advice;
|
||||||
import net.bytebuddy.description.method.MethodDescription;
|
import net.bytebuddy.description.method.MethodDescription;
|
||||||
import net.bytebuddy.description.type.TypeDescription;
|
import net.bytebuddy.description.type.TypeDescription;
|
||||||
|
import net.bytebuddy.implementation.bytecode.assign.Assigner;
|
||||||
import net.bytebuddy.matcher.ElementMatcher;
|
import net.bytebuddy.matcher.ElementMatcher;
|
||||||
import org.hibernate.Query;
|
import org.hibernate.Query;
|
||||||
|
import org.hibernate.SQLQuery;
|
||||||
|
|
||||||
@AutoService(Instrumenter.class)
|
@AutoService(Instrumenter.class)
|
||||||
public class QueryInstrumentation extends Instrumenter.Default {
|
public class QueryInstrumentation extends Instrumenter.Default {
|
||||||
|
@ -55,7 +57,6 @@ public class QueryInstrumentation extends Instrumenter.Default {
|
||||||
named("list")
|
named("list")
|
||||||
.or(named("executeUpdate"))
|
.or(named("executeUpdate"))
|
||||||
.or(named("uniqueResult"))
|
.or(named("uniqueResult"))
|
||||||
.or(named("iterate"))
|
|
||||||
.or(named("scroll"))),
|
.or(named("scroll"))),
|
||||||
QueryMethodAdvice.class.getName());
|
QueryMethodAdvice.class.getName());
|
||||||
|
|
||||||
|
@ -71,16 +72,29 @@ public class QueryInstrumentation extends Instrumenter.Default {
|
||||||
final ContextStore<Query, SessionState> contextStore =
|
final ContextStore<Query, SessionState> contextStore =
|
||||||
InstrumentationContext.get(Query.class, SessionState.class);
|
InstrumentationContext.get(Query.class, SessionState.class);
|
||||||
|
|
||||||
return SessionMethodUtils.startScopeFrom(contextStore, query, "hibernate.query." + name);
|
// Note: We don't know what the entity is until the method is returning.
|
||||||
|
final SessionState state =
|
||||||
|
SessionMethodUtils.startScopeFrom(contextStore, query, "hibernate.query." + name, null);
|
||||||
|
HibernateDecorator.INSTANCE.onStatement(
|
||||||
|
state.getMethodScope().span(), query.getQueryString());
|
||||||
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
|
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
|
||||||
public static void endMethod(
|
public static void endMethod(
|
||||||
@Advice.This final Query query,
|
@Advice.This final Query query,
|
||||||
@Advice.Enter final SessionState state,
|
@Advice.Enter final SessionState state,
|
||||||
@Advice.Thrown final Throwable throwable) {
|
@Advice.Thrown final Throwable throwable,
|
||||||
|
@Advice.Return(typing = Assigner.Typing.DYNAMIC) final Object returned) {
|
||||||
|
|
||||||
SessionMethodUtils.closeScope(state, throwable);
|
Object entity = returned;
|
||||||
|
if (returned == null || query instanceof SQLQuery) {
|
||||||
|
// Not a method that returns results, or the query returns a table rather than an ORM
|
||||||
|
// object.
|
||||||
|
entity = query.getQueryString();
|
||||||
|
}
|
||||||
|
|
||||||
|
SessionMethodUtils.closeScope(state, throwable, entity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,12 +10,9 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
|
||||||
|
|
||||||
import com.google.auto.service.AutoService;
|
import com.google.auto.service.AutoService;
|
||||||
import datadog.trace.agent.tooling.Instrumenter;
|
import datadog.trace.agent.tooling.Instrumenter;
|
||||||
import datadog.trace.api.DDSpanTypes;
|
|
||||||
import datadog.trace.api.DDTags;
|
|
||||||
import datadog.trace.bootstrap.ContextStore;
|
import datadog.trace.bootstrap.ContextStore;
|
||||||
import datadog.trace.bootstrap.InstrumentationContext;
|
import datadog.trace.bootstrap.InstrumentationContext;
|
||||||
import io.opentracing.Span;
|
import io.opentracing.Span;
|
||||||
import io.opentracing.tag.Tags;
|
|
||||||
import io.opentracing.util.GlobalTracer;
|
import io.opentracing.util.GlobalTracer;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
@ -44,6 +41,11 @@ public class SessionFactoryInstrumentation extends Instrumenter.Default {
|
||||||
public String[] helperClassNames() {
|
public String[] helperClassNames() {
|
||||||
return new String[] {
|
return new String[] {
|
||||||
"datadog.trace.instrumentation.hibernate.SessionState",
|
"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",
|
||||||
|
packageName + ".HibernateDecorator",
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,14 +76,9 @@ public class SessionFactoryInstrumentation extends Instrumenter.Default {
|
||||||
@Advice.OnMethodExit(suppress = Throwable.class)
|
@Advice.OnMethodExit(suppress = Throwable.class)
|
||||||
public static void openSession(@Advice.Return final SharedSessionContract session) {
|
public static void openSession(@Advice.Return final SharedSessionContract session) {
|
||||||
|
|
||||||
final Span span =
|
final Span span = GlobalTracer.get().buildSpan("hibernate.session").start();
|
||||||
GlobalTracer.get()
|
HibernateDecorator.INSTANCE.afterStart(span);
|
||||||
.buildSpan("hibernate.session")
|
HibernateDecorator.INSTANCE.onSession(span, session);
|
||||||
.withTag(DDTags.SERVICE_NAME, "hibernate")
|
|
||||||
.withTag(DDTags.SPAN_TYPE, DDSpanTypes.HIBERNATE)
|
|
||||||
.withTag(Tags.COMPONENT.getKey(), "hibernate-java")
|
|
||||||
.withTag(Tags.SPAN_KIND.getKey(), Tags.SPAN_KIND_CLIENT)
|
|
||||||
.start();
|
|
||||||
|
|
||||||
final ContextStore<SharedSessionContract, SessionState> contextStore =
|
final ContextStore<SharedSessionContract, SessionState> contextStore =
|
||||||
InstrumentationContext.get(SharedSessionContract.class, SessionState.class);
|
InstrumentationContext.get(SharedSessionContract.class, SessionState.class);
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
package datadog.trace.instrumentation.hibernate;
|
package datadog.trace.instrumentation.hibernate;
|
||||||
|
|
||||||
import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType;
|
import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType;
|
||||||
import static datadog.trace.instrumentation.hibernate.SessionMethodUtils.entityName;
|
|
||||||
import static io.opentracing.log.Fields.ERROR_OBJECT;
|
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.isInterface;
|
import static net.bytebuddy.matcher.ElementMatchers.isInterface;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||||
|
@ -16,7 +14,6 @@ import datadog.trace.agent.tooling.Instrumenter;
|
||||||
import datadog.trace.bootstrap.ContextStore;
|
import datadog.trace.bootstrap.ContextStore;
|
||||||
import datadog.trace.bootstrap.InstrumentationContext;
|
import datadog.trace.bootstrap.InstrumentationContext;
|
||||||
import io.opentracing.Span;
|
import io.opentracing.Span;
|
||||||
import io.opentracing.tag.Tags;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -54,6 +51,11 @@ public class SessionInstrumentation extends Instrumenter.Default {
|
||||||
return new String[] {
|
return new String[] {
|
||||||
"datadog.trace.instrumentation.hibernate.SessionMethodUtils",
|
"datadog.trace.instrumentation.hibernate.SessionMethodUtils",
|
||||||
"datadog.trace.instrumentation.hibernate.SessionState",
|
"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",
|
||||||
|
packageName + ".HibernateDecorator",
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -132,12 +134,10 @@ public class SessionInstrumentation extends Instrumenter.Default {
|
||||||
if (state.getMethodScope() != null) {
|
if (state.getMethodScope() != null) {
|
||||||
System.err.println("THIS IS WRONG"); // TODO: proper warning/logging.
|
System.err.println("THIS IS WRONG"); // TODO: proper warning/logging.
|
||||||
}
|
}
|
||||||
final Span span = state.getSessionSpan();
|
|
||||||
|
|
||||||
if (throwable != null) {
|
final Span span = state.getSessionSpan();
|
||||||
Tags.ERROR.set(span, true);
|
HibernateDecorator.INSTANCE.onError(span, throwable);
|
||||||
span.log(Collections.singletonMap(ERROR_OBJECT, throwable));
|
HibernateDecorator.INSTANCE.beforeFinish(span);
|
||||||
}
|
|
||||||
span.finish();
|
span.finish();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -152,8 +152,7 @@ public class SessionInstrumentation extends Instrumenter.Default {
|
||||||
|
|
||||||
final ContextStore<SharedSessionContract, SessionState> contextStore =
|
final ContextStore<SharedSessionContract, SessionState> contextStore =
|
||||||
InstrumentationContext.get(SharedSessionContract.class, SessionState.class);
|
InstrumentationContext.get(SharedSessionContract.class, SessionState.class);
|
||||||
return SessionMethodUtils.startScopeFrom(
|
return SessionMethodUtils.startScopeFrom(contextStore, session, "hibernate." + name, entity);
|
||||||
contextStore, session, "hibernate." + name, entityName(entity));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
|
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
|
||||||
|
@ -163,9 +162,9 @@ public class SessionInstrumentation extends Instrumenter.Default {
|
||||||
@Advice.Thrown final Throwable throwable,
|
@Advice.Thrown final Throwable throwable,
|
||||||
@Advice.Return(typing = Assigner.Typing.DYNAMIC) final Object returned) {
|
@Advice.Return(typing = Assigner.Typing.DYNAMIC) final Object returned) {
|
||||||
|
|
||||||
SessionMethodUtils.closeScope(sessionState, throwable);
|
SessionMethodUtils.closeScope(sessionState, throwable, returned);
|
||||||
|
|
||||||
// Attach instrumentation to any returned object.
|
// Attach instrumentation to any returned object (of eligible type).
|
||||||
if (returned == null) {
|
if (returned == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,76 +2,51 @@ package datadog.trace.instrumentation.hibernate;
|
||||||
|
|
||||||
import static io.opentracing.log.Fields.ERROR_OBJECT;
|
import static io.opentracing.log.Fields.ERROR_OBJECT;
|
||||||
|
|
||||||
import datadog.trace.api.DDSpanTypes;
|
|
||||||
import datadog.trace.api.DDTags;
|
|
||||||
import datadog.trace.bootstrap.ContextStore;
|
import datadog.trace.bootstrap.ContextStore;
|
||||||
import io.opentracing.Scope;
|
import io.opentracing.Scope;
|
||||||
import io.opentracing.Span;
|
import io.opentracing.Span;
|
||||||
import io.opentracing.tag.Tags;
|
import io.opentracing.tag.Tags;
|
||||||
import io.opentracing.util.GlobalTracer;
|
import io.opentracing.util.GlobalTracer;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import javax.persistence.Entity;
|
|
||||||
|
|
||||||
public class SessionMethodUtils {
|
public class SessionMethodUtils {
|
||||||
|
|
||||||
public static String entityName(final Object entityOrName) {
|
|
||||||
String name = "unknown object";
|
|
||||||
if (entityOrName == null) {
|
|
||||||
return name; // Hibernate can internally call save(null, Entity).
|
|
||||||
}
|
|
||||||
if (entityOrName instanceof String) {
|
|
||||||
name = (String) entityOrName;
|
|
||||||
} else if (entityOrName.getClass().isAnnotationPresent(Entity.class)) {
|
|
||||||
// This is the object being replicated.
|
|
||||||
name = entityOrName.getClass().getName();
|
|
||||||
}
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Starts a scope as a child from a Span, where the Span is attached to the given spanKey using
|
// Starts a scope as a child from a Span, where the Span is attached to the given spanKey using
|
||||||
// the given contextStore.
|
// the given contextStore.
|
||||||
public static <T> SessionState startScopeFrom(
|
public static <TARGET, ENTITY> SessionState startScopeFrom(
|
||||||
final ContextStore<T, SessionState> contextStore,
|
final ContextStore<TARGET, SessionState> contextStore,
|
||||||
final T spanKey,
|
final TARGET spanKey,
|
||||||
final String operationName,
|
final String operationName,
|
||||||
final String resourceName) {
|
final ENTITY entity) {
|
||||||
|
|
||||||
final SessionState sessionState = contextStore.get(spanKey);
|
final SessionState sessionState = contextStore.get(spanKey);
|
||||||
|
|
||||||
if (sessionState == null) {
|
if (sessionState == null) {
|
||||||
// No state found. Maybe the instrumentation isn't working correctly.
|
// No state found. We aren't in a Session.
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sessionState.getMethodScope() != null) {
|
if (sessionState.getMethodScope() != null) {
|
||||||
// This method call was re-entrant. Do nothing, since it is being traced by the parent/first
|
// This method call was re-entrant. Do nothing, since it is being traced by the parent/first
|
||||||
// call.
|
// call.
|
||||||
return sessionState;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
final Scope scope =
|
final Scope scope =
|
||||||
GlobalTracer.get()
|
GlobalTracer.get()
|
||||||
.buildSpan(operationName)
|
.buildSpan(operationName)
|
||||||
.asChildOf(sessionState.getSessionSpan())
|
.asChildOf(sessionState.getSessionSpan())
|
||||||
.withTag(DDTags.SERVICE_NAME, "hibernate")
|
|
||||||
.withTag(DDTags.SPAN_TYPE, DDSpanTypes.HIBERNATE)
|
|
||||||
.withTag(DDTags.RESOURCE_NAME, resourceName)
|
|
||||||
.withTag(Tags.COMPONENT.getKey(), "hibernate-java")
|
|
||||||
.startActive(true);
|
.startActive(true);
|
||||||
sessionState.setMethodScope(scope);
|
HibernateDecorator.INSTANCE.afterStart(scope.span());
|
||||||
|
HibernateDecorator.INSTANCE.onOperation(scope.span(), entity);
|
||||||
|
|
||||||
|
sessionState.setMethodScope(scope);
|
||||||
return sessionState;
|
return sessionState;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static <T> SessionState startScopeFrom(
|
|
||||||
final ContextStore<T, SessionState> contextStore,
|
|
||||||
final T spanKey,
|
|
||||||
final String operationName) {
|
|
||||||
return startScopeFrom(contextStore, spanKey, operationName, operationName);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Closes a Scope/Span, adding an error tag if the given Throwable is not null.
|
// Closes a Scope/Span, adding an error tag if the given Throwable is not null.
|
||||||
public static void closeScope(final SessionState sessionState, final Throwable throwable) {
|
public static void closeScope(
|
||||||
|
final SessionState sessionState, final Throwable throwable, final Object entity) {
|
||||||
|
|
||||||
if (sessionState == null || sessionState.getMethodScope() == null) {
|
if (sessionState == null || sessionState.getMethodScope() == null) {
|
||||||
// This method call was re-entrant. Do nothing, since it is being traced by the parent/first
|
// This method call was re-entrant. Do nothing, since it is being traced by the parent/first
|
||||||
|
@ -86,6 +61,10 @@ public class SessionMethodUtils {
|
||||||
Tags.ERROR.set(span, true);
|
Tags.ERROR.set(span, true);
|
||||||
span.log(Collections.singletonMap(ERROR_OBJECT, throwable));
|
span.log(Collections.singletonMap(ERROR_OBJECT, throwable));
|
||||||
}
|
}
|
||||||
|
if (entity != null) {
|
||||||
|
HibernateDecorator.INSTANCE.onOperation(span, entity);
|
||||||
|
}
|
||||||
|
HibernateDecorator.INSTANCE.beforeFinish(span);
|
||||||
span.finish();
|
span.finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -69,7 +69,7 @@ public class TransactionInstrumentation extends Instrumenter.Default {
|
||||||
InstrumentationContext.get(Transaction.class, SessionState.class);
|
InstrumentationContext.get(Transaction.class, SessionState.class);
|
||||||
|
|
||||||
return SessionMethodUtils.startScopeFrom(
|
return SessionMethodUtils.startScopeFrom(
|
||||||
contextStore, transaction, "hibernate.transaction.commit");
|
contextStore, transaction, "hibernate.transaction.commit", null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
|
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
|
||||||
|
@ -78,7 +78,7 @@ public class TransactionInstrumentation extends Instrumenter.Default {
|
||||||
@Advice.Enter final SessionState state,
|
@Advice.Enter final SessionState state,
|
||||||
@Advice.Thrown final Throwable throwable) {
|
@Advice.Thrown final Throwable throwable) {
|
||||||
|
|
||||||
SessionMethodUtils.closeScope(state, throwable);
|
SessionMethodUtils.closeScope(state, throwable, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,7 +64,7 @@ class CriteriaTest extends AgentTestRunner {
|
||||||
spanType DDSpanTypes.HIBERNATE
|
spanType DDSpanTypes.HIBERNATE
|
||||||
parent()
|
parent()
|
||||||
tags {
|
tags {
|
||||||
"$Tags.COMPONENT.key" "hibernate-java"
|
"$Tags.COMPONENT.key" "java-hibernate"
|
||||||
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_CLIENT
|
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_CLIENT
|
||||||
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
||||||
defaultTags()
|
defaultTags()
|
||||||
|
@ -77,7 +77,8 @@ class CriteriaTest extends AgentTestRunner {
|
||||||
spanType DDSpanTypes.HIBERNATE
|
spanType DDSpanTypes.HIBERNATE
|
||||||
childOf span(0)
|
childOf span(0)
|
||||||
tags {
|
tags {
|
||||||
"$Tags.COMPONENT.key" "hibernate-java"
|
"$Tags.COMPONENT.key" "java-hibernate"
|
||||||
|
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_CLIENT
|
||||||
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
||||||
defaultTags()
|
defaultTags()
|
||||||
}
|
}
|
||||||
|
@ -89,7 +90,8 @@ class CriteriaTest extends AgentTestRunner {
|
||||||
spanType DDSpanTypes.HIBERNATE
|
spanType DDSpanTypes.HIBERNATE
|
||||||
childOf span(0)
|
childOf span(0)
|
||||||
tags {
|
tags {
|
||||||
"$Tags.COMPONENT.key" "hibernate-java"
|
"$Tags.COMPONENT.key" "java-hibernate"
|
||||||
|
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_CLIENT
|
||||||
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
||||||
defaultTags()
|
defaultTags()
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,7 @@ class QueryTest extends AbstractHibernateTest {
|
||||||
spanType DDSpanTypes.HIBERNATE
|
spanType DDSpanTypes.HIBERNATE
|
||||||
parent()
|
parent()
|
||||||
tags {
|
tags {
|
||||||
"$Tags.COMPONENT.key" "hibernate-java"
|
"$Tags.COMPONENT.key" "java-hibernate"
|
||||||
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_CLIENT
|
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_CLIENT
|
||||||
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
||||||
defaultTags()
|
defaultTags()
|
||||||
|
@ -38,19 +38,21 @@ class QueryTest extends AbstractHibernateTest {
|
||||||
spanType DDSpanTypes.HIBERNATE
|
spanType DDSpanTypes.HIBERNATE
|
||||||
childOf span(0)
|
childOf span(0)
|
||||||
tags {
|
tags {
|
||||||
"$Tags.COMPONENT.key" "hibernate-java"
|
"$Tags.COMPONENT.key" "java-hibernate"
|
||||||
|
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_CLIENT
|
||||||
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
||||||
defaultTags()
|
defaultTags()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
span(2) {
|
span(2) {
|
||||||
serviceName "hibernate"
|
serviceName "hibernate"
|
||||||
resourceName "hibernate.query.$queryMethodName"
|
resourceName "$resource"
|
||||||
operationName "hibernate.query.$queryMethodName"
|
operationName "hibernate.$queryMethodName"
|
||||||
spanType DDSpanTypes.HIBERNATE
|
spanType DDSpanTypes.HIBERNATE
|
||||||
childOf span(0)
|
childOf span(0)
|
||||||
tags {
|
tags {
|
||||||
"$Tags.COMPONENT.key" "hibernate-java"
|
"$Tags.COMPONENT.key" "java-hibernate"
|
||||||
|
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_CLIENT
|
||||||
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
||||||
defaultTags()
|
defaultTags()
|
||||||
}
|
}
|
||||||
|
@ -63,24 +65,24 @@ class QueryTest extends AbstractHibernateTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
where:
|
where:
|
||||||
queryMethodName | isError | queryInteraction
|
queryMethodName | isError | resource | queryInteraction
|
||||||
"list" | false | { sess ->
|
"query.list" | false | "Value" | { sess ->
|
||||||
Query q = sess.createQuery("from Value")
|
Query q = sess.createQuery("from Value")
|
||||||
q.list()
|
q.list()
|
||||||
}
|
}
|
||||||
"executeUpdate" | false | { sess ->
|
"query.executeUpdate" | false | "update Value set name = 'alyx'" | { sess ->
|
||||||
Query q = sess.createQuery("update Value set name = 'alyx'")
|
Query q = sess.createQuery("update Value set name = 'alyx'")
|
||||||
q.executeUpdate()
|
q.executeUpdate()
|
||||||
}
|
}
|
||||||
"uniqueResult" | false | { sess ->
|
"query.uniqueResult" | false | "Value" | { sess ->
|
||||||
Query q = sess.createQuery("from Value where id = 1")
|
Query q = sess.createQuery("from Value where id = 1")
|
||||||
q.uniqueResult()
|
q.uniqueResult()
|
||||||
}
|
}
|
||||||
"iterate" | false | { sess ->
|
"iterate" | false | "from Value" | { sess ->
|
||||||
Query q = sess.createQuery("from Value")
|
Query q = sess.createQuery("from Value")
|
||||||
q.iterate()
|
q.iterate()
|
||||||
}
|
}
|
||||||
"scroll" | false | { sess ->
|
"query.scroll" | false | "from Value" | { sess ->
|
||||||
Query q = sess.createQuery("from Value")
|
Query q = sess.createQuery("from Value")
|
||||||
q.scroll()
|
q.scroll()
|
||||||
}
|
}
|
||||||
|
@ -109,7 +111,7 @@ class QueryTest extends AbstractHibernateTest {
|
||||||
spanType DDSpanTypes.HIBERNATE
|
spanType DDSpanTypes.HIBERNATE
|
||||||
parent()
|
parent()
|
||||||
tags {
|
tags {
|
||||||
"$Tags.COMPONENT.key" "hibernate-java"
|
"$Tags.COMPONENT.key" "java-hibernate"
|
||||||
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_CLIENT
|
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_CLIENT
|
||||||
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
||||||
defaultTags()
|
defaultTags()
|
||||||
|
@ -122,7 +124,8 @@ class QueryTest extends AbstractHibernateTest {
|
||||||
spanType DDSpanTypes.HIBERNATE
|
spanType DDSpanTypes.HIBERNATE
|
||||||
childOf span(0)
|
childOf span(0)
|
||||||
tags {
|
tags {
|
||||||
"$Tags.COMPONENT.key" "hibernate-java"
|
"$Tags.COMPONENT.key" "java-hibernate"
|
||||||
|
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_CLIENT
|
||||||
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
||||||
defaultTags()
|
defaultTags()
|
||||||
}
|
}
|
||||||
|
@ -134,7 +137,8 @@ class QueryTest extends AbstractHibernateTest {
|
||||||
spanType DDSpanTypes.HIBERNATE
|
spanType DDSpanTypes.HIBERNATE
|
||||||
childOf span(0)
|
childOf span(0)
|
||||||
tags {
|
tags {
|
||||||
"$Tags.COMPONENT.key" "hibernate-java"
|
"$Tags.COMPONENT.key" "java-hibernate"
|
||||||
|
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_CLIENT
|
||||||
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
||||||
defaultTags()
|
defaultTags()
|
||||||
}
|
}
|
||||||
|
@ -146,19 +150,21 @@ class QueryTest extends AbstractHibernateTest {
|
||||||
spanType DDSpanTypes.HIBERNATE
|
spanType DDSpanTypes.HIBERNATE
|
||||||
childOf span(0)
|
childOf span(0)
|
||||||
tags {
|
tags {
|
||||||
"$Tags.COMPONENT.key" "hibernate-java"
|
"$Tags.COMPONENT.key" "java-hibernate"
|
||||||
|
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_CLIENT
|
||||||
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
||||||
defaultTags()
|
defaultTags()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
span(4) {
|
span(4) {
|
||||||
serviceName "hibernate"
|
serviceName "hibernate"
|
||||||
resourceName "hibernate.query.iterate"
|
resourceName "from Value"
|
||||||
operationName "hibernate.query.iterate"
|
operationName "hibernate.iterate"
|
||||||
spanType DDSpanTypes.HIBERNATE
|
spanType DDSpanTypes.HIBERNATE
|
||||||
childOf span(0)
|
childOf span(0)
|
||||||
tags {
|
tags {
|
||||||
"$Tags.COMPONENT.key" "hibernate-java"
|
"$Tags.COMPONENT.key" "java-hibernate"
|
||||||
|
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_CLIENT
|
||||||
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
||||||
defaultTags()
|
defaultTags()
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,7 +47,7 @@ class SessionTest extends AbstractHibernateTest {
|
||||||
spanType DDSpanTypes.HIBERNATE
|
spanType DDSpanTypes.HIBERNATE
|
||||||
parent()
|
parent()
|
||||||
tags {
|
tags {
|
||||||
"$Tags.COMPONENT.key" "hibernate-java"
|
"$Tags.COMPONENT.key" "java-hibernate"
|
||||||
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_CLIENT
|
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_CLIENT
|
||||||
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
||||||
defaultTags()
|
defaultTags()
|
||||||
|
@ -60,7 +60,8 @@ class SessionTest extends AbstractHibernateTest {
|
||||||
spanType DDSpanTypes.HIBERNATE
|
spanType DDSpanTypes.HIBERNATE
|
||||||
childOf span(0)
|
childOf span(0)
|
||||||
tags {
|
tags {
|
||||||
"$Tags.COMPONENT.key" "hibernate-java"
|
"$Tags.COMPONENT.key" "java-hibernate"
|
||||||
|
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_CLIENT
|
||||||
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
||||||
defaultTags()
|
defaultTags()
|
||||||
}
|
}
|
||||||
|
@ -78,7 +79,8 @@ class SessionTest extends AbstractHibernateTest {
|
||||||
if (isError) {
|
if (isError) {
|
||||||
errorTags(MappingException, "Unknown entity: java.lang.Long")
|
errorTags(MappingException, "Unknown entity: java.lang.Long")
|
||||||
}
|
}
|
||||||
"$Tags.COMPONENT.key" "hibernate-java"
|
"$Tags.COMPONENT.key" "java-hibernate"
|
||||||
|
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_CLIENT
|
||||||
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
||||||
defaultTags()
|
defaultTags()
|
||||||
}
|
}
|
||||||
|
@ -144,7 +146,7 @@ class SessionTest extends AbstractHibernateTest {
|
||||||
spanType DDSpanTypes.HIBERNATE
|
spanType DDSpanTypes.HIBERNATE
|
||||||
parent()
|
parent()
|
||||||
tags {
|
tags {
|
||||||
"$Tags.COMPONENT.key" "hibernate-java"
|
"$Tags.COMPONENT.key" "java-hibernate"
|
||||||
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_CLIENT
|
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_CLIENT
|
||||||
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
||||||
defaultTags()
|
defaultTags()
|
||||||
|
@ -157,7 +159,8 @@ class SessionTest extends AbstractHibernateTest {
|
||||||
spanType DDSpanTypes.HIBERNATE
|
spanType DDSpanTypes.HIBERNATE
|
||||||
childOf span(0)
|
childOf span(0)
|
||||||
tags {
|
tags {
|
||||||
"$Tags.COMPONENT.key" "hibernate-java"
|
"$Tags.COMPONENT.key" "java-hibernate"
|
||||||
|
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_CLIENT
|
||||||
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
||||||
defaultTags()
|
defaultTags()
|
||||||
}
|
}
|
||||||
|
@ -179,7 +182,8 @@ class SessionTest extends AbstractHibernateTest {
|
||||||
if (isError) {
|
if (isError) {
|
||||||
errorTags(MappingException, "Unknown entity: java.lang.Long")
|
errorTags(MappingException, "Unknown entity: java.lang.Long")
|
||||||
}
|
}
|
||||||
"$Tags.COMPONENT.key" "hibernate-java"
|
"$Tags.COMPONENT.key" "java-hibernate"
|
||||||
|
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_CLIENT
|
||||||
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
||||||
defaultTags()
|
defaultTags()
|
||||||
}
|
}
|
||||||
|
@ -232,7 +236,7 @@ class SessionTest extends AbstractHibernateTest {
|
||||||
spanType DDSpanTypes.HIBERNATE
|
spanType DDSpanTypes.HIBERNATE
|
||||||
parent()
|
parent()
|
||||||
tags {
|
tags {
|
||||||
"$Tags.COMPONENT.key" "hibernate-java"
|
"$Tags.COMPONENT.key" "java-hibernate"
|
||||||
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_CLIENT
|
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_CLIENT
|
||||||
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
||||||
defaultTags()
|
defaultTags()
|
||||||
|
@ -245,21 +249,23 @@ class SessionTest extends AbstractHibernateTest {
|
||||||
spanType DDSpanTypes.HIBERNATE
|
spanType DDSpanTypes.HIBERNATE
|
||||||
childOf span(0)
|
childOf span(0)
|
||||||
tags {
|
tags {
|
||||||
"$Tags.COMPONENT.key" "hibernate-java"
|
"$Tags.COMPONENT.key" "java-hibernate"
|
||||||
|
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_CLIENT
|
||||||
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
||||||
defaultTags()
|
defaultTags()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
span(2) {
|
span(2) {
|
||||||
serviceName "hibernate"
|
serviceName "hibernate"
|
||||||
resourceName "unknown object"
|
resourceName "hibernate.replicate"
|
||||||
operationName "hibernate.replicate"
|
operationName "hibernate.replicate"
|
||||||
spanType DDSpanTypes.HIBERNATE
|
spanType DDSpanTypes.HIBERNATE
|
||||||
childOf span(0)
|
childOf span(0)
|
||||||
tags {
|
tags {
|
||||||
errorTags(MappingException, "Unknown entity: java.lang.Long")
|
errorTags(MappingException, "Unknown entity: java.lang.Long")
|
||||||
|
|
||||||
"$Tags.COMPONENT.key" "hibernate-java"
|
"$Tags.COMPONENT.key" "java-hibernate"
|
||||||
|
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_CLIENT
|
||||||
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
||||||
defaultTags()
|
defaultTags()
|
||||||
}
|
}
|
||||||
|
@ -299,7 +305,7 @@ class SessionTest extends AbstractHibernateTest {
|
||||||
spanType DDSpanTypes.HIBERNATE
|
spanType DDSpanTypes.HIBERNATE
|
||||||
parent()
|
parent()
|
||||||
tags {
|
tags {
|
||||||
"$Tags.COMPONENT.key" "hibernate-java"
|
"$Tags.COMPONENT.key" "java-hibernate"
|
||||||
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_CLIENT
|
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_CLIENT
|
||||||
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
||||||
defaultTags()
|
defaultTags()
|
||||||
|
@ -312,7 +318,8 @@ class SessionTest extends AbstractHibernateTest {
|
||||||
spanType DDSpanTypes.HIBERNATE
|
spanType DDSpanTypes.HIBERNATE
|
||||||
childOf span(0)
|
childOf span(0)
|
||||||
tags {
|
tags {
|
||||||
"$Tags.COMPONENT.key" "hibernate-java"
|
"$Tags.COMPONENT.key" "java-hibernate"
|
||||||
|
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_CLIENT
|
||||||
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
||||||
defaultTags()
|
defaultTags()
|
||||||
}
|
}
|
||||||
|
@ -334,7 +341,8 @@ class SessionTest extends AbstractHibernateTest {
|
||||||
if (isError) {
|
if (isError) {
|
||||||
errorTags(MappingException, "Unknown entity: java.lang.Long")
|
errorTags(MappingException, "Unknown entity: java.lang.Long")
|
||||||
}
|
}
|
||||||
"$Tags.COMPONENT.key" "hibernate-java"
|
"$Tags.COMPONENT.key" "java-hibernate"
|
||||||
|
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_CLIENT
|
||||||
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
||||||
defaultTags()
|
defaultTags()
|
||||||
}
|
}
|
||||||
|
@ -394,7 +402,7 @@ class SessionTest extends AbstractHibernateTest {
|
||||||
spanType DDSpanTypes.HIBERNATE
|
spanType DDSpanTypes.HIBERNATE
|
||||||
parent()
|
parent()
|
||||||
tags {
|
tags {
|
||||||
"$Tags.COMPONENT.key" "hibernate-java"
|
"$Tags.COMPONENT.key" "java-hibernate"
|
||||||
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_CLIENT
|
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_CLIENT
|
||||||
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
||||||
defaultTags()
|
defaultTags()
|
||||||
|
@ -407,19 +415,21 @@ class SessionTest extends AbstractHibernateTest {
|
||||||
spanType DDSpanTypes.HIBERNATE
|
spanType DDSpanTypes.HIBERNATE
|
||||||
childOf span(0)
|
childOf span(0)
|
||||||
tags {
|
tags {
|
||||||
"$Tags.COMPONENT.key" "hibernate-java"
|
"$Tags.COMPONENT.key" "java-hibernate"
|
||||||
|
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_CLIENT
|
||||||
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
||||||
defaultTags()
|
defaultTags()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
span(2) {
|
span(2) {
|
||||||
serviceName "hibernate"
|
serviceName "hibernate"
|
||||||
resourceName "hibernate.query.list"
|
resourceName "$resource"
|
||||||
operationName "hibernate.query.list"
|
operationName "hibernate.query.list"
|
||||||
spanType DDSpanTypes.HIBERNATE
|
spanType DDSpanTypes.HIBERNATE
|
||||||
childOf span(0)
|
childOf span(0)
|
||||||
tags {
|
tags {
|
||||||
"$Tags.COMPONENT.key" "hibernate-java"
|
"$Tags.COMPONENT.key" "java-hibernate"
|
||||||
|
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_CLIENT
|
||||||
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
"$DDTags.SPAN_TYPE" DDSpanTypes.HIBERNATE
|
||||||
defaultTags()
|
defaultTags()
|
||||||
}
|
}
|
||||||
|
@ -432,10 +442,10 @@ class SessionTest extends AbstractHibernateTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
where:
|
where:
|
||||||
queryMethodName | queryBuildMethod
|
queryMethodName | resource | queryBuildMethod
|
||||||
"createQuery" | { sess -> sess.createQuery("from Value") }
|
"createQuery" | "Value" | { sess -> sess.createQuery("from Value") }
|
||||||
"getNamedQuery" | { sess -> sess.getNamedQuery("TestNamedQuery") }
|
"getNamedQuery" | "Value" | { sess -> sess.getNamedQuery("TestNamedQuery") }
|
||||||
"createSQLQuery" | { sess -> sess.createSQLQuery("SELECT * FROM Value") }
|
"createSQLQuery" | "SELECT * FROM Value" | { sess -> sess.createSQLQuery("SELECT * FROM Value") }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue