Skip to content

Commit 0e7315d

Browse files
authored
make mybatis indy-ready (#15129)
1 parent b745c9e commit 0e7315d

File tree

2 files changed

+48
-25
lines changed

2 files changed

+48
-25
lines changed

instrumentation/mybatis-3.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mybatis/v3_2/MapperMethodInstrumentation.java

Lines changed: 40 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
package io.opentelemetry.javaagent.instrumentation.mybatis.v3_2;
77

8-
import static io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge.currentContext;
98
import static io.opentelemetry.javaagent.instrumentation.mybatis.v3_2.MyBatisSingletons.instrumenter;
109
import static net.bytebuddy.matcher.ElementMatchers.named;
1110

@@ -14,6 +13,7 @@
1413
import io.opentelemetry.instrumentation.api.incubator.semconv.util.ClassAndMethod;
1514
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1615
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
16+
import javax.annotation.Nullable;
1717
import net.bytebuddy.asm.Advice;
1818
import net.bytebuddy.description.type.TypeDescription;
1919
import net.bytebuddy.matcher.ElementMatcher;
@@ -35,36 +35,52 @@ public void transform(TypeTransformer transformer) {
3535
@SuppressWarnings("unused")
3636
public static class ExecuteAdvice {
3737

38-
@Advice.OnMethodEnter(suppress = Throwable.class)
39-
public static void getMapperInfo(
40-
@Advice.FieldValue("command") SqlCommand command,
41-
@Advice.Local("otelRequest") ClassAndMethod request,
42-
@Advice.Local("otelContext") Context context,
43-
@Advice.Local("otelScope") Scope scope) {
44-
if (command == null) {
45-
return;
38+
public static class AdviceScope {
39+
private final ClassAndMethod classAndMethod;
40+
private final Context context;
41+
private final Scope scope;
42+
43+
private AdviceScope(ClassAndMethod classAndMethod, Context context, Scope scope) {
44+
this.classAndMethod = classAndMethod;
45+
this.context = context;
46+
this.scope = scope;
4647
}
47-
request = SqlCommandUtil.getClassAndMethod(command);
48-
if (request == null) {
49-
return;
48+
49+
@Nullable
50+
public static AdviceScope start(@Nullable SqlCommand command) {
51+
if (command == null) {
52+
return null;
53+
}
54+
ClassAndMethod classAndMethod = SqlCommandUtil.getClassAndMethod(command);
55+
if (classAndMethod == null) {
56+
return null;
57+
}
58+
Context parentContext = Context.current();
59+
if (!instrumenter().shouldStart(parentContext, classAndMethod)) {
60+
return null;
61+
}
62+
Context context = instrumenter().start(parentContext, classAndMethod);
63+
return new AdviceScope(classAndMethod, context, context.makeCurrent());
5064
}
51-
Context parentContext = currentContext();
52-
if (!instrumenter().shouldStart(parentContext, request)) {
53-
return;
65+
66+
public void end(@Nullable Throwable throwable) {
67+
scope.close();
68+
instrumenter().end(context, classAndMethod, null, throwable);
5469
}
55-
context = instrumenter().start(parentContext, request);
56-
scope = context.makeCurrent();
70+
}
71+
72+
@Nullable
73+
@Advice.OnMethodEnter(suppress = Throwable.class)
74+
public static AdviceScope getMapperInfo(@Advice.FieldValue("command") SqlCommand command) {
75+
return AdviceScope.start(command);
5776
}
5877

5978
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
6079
public static void stopSpan(
61-
@Advice.Thrown Throwable throwable,
62-
@Advice.Local("otelRequest") ClassAndMethod request,
63-
@Advice.Local("otelContext") Context context,
64-
@Advice.Local("otelScope") Scope scope) {
65-
if (scope != null) {
66-
scope.close();
67-
instrumenter().end(context, request, null, throwable);
80+
@Advice.Thrown @Nullable Throwable throwable,
81+
@Advice.Enter @Nullable AdviceScope adviceScope) {
82+
if (adviceScope != null) {
83+
adviceScope.end(throwable);
6884
}
6985
}
7086
}

instrumentation/mybatis-3.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mybatis/v3_2/MyBatisInstrumentationModule.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@
1010
import com.google.auto.service.AutoService;
1111
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
1212
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
13+
import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule;
1314
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
1415
import java.util.List;
1516

1617
@AutoService(InstrumentationModule.class)
17-
public class MyBatisInstrumentationModule extends InstrumentationModule {
18+
public class MyBatisInstrumentationModule extends InstrumentationModule
19+
implements ExperimentalInstrumentationModule {
1820

1921
public MyBatisInstrumentationModule() {
2022
super("mybatis", "mybatis-3.2");
@@ -29,4 +31,9 @@ public List<TypeInstrumentation> typeInstrumentations() {
2931
public boolean defaultEnabled(ConfigProperties config) {
3032
return false;
3133
}
34+
35+
@Override
36+
public boolean isIndyReady() {
37+
return true;
38+
}
3239
}

0 commit comments

Comments
 (0)