Skip to content

Commit 101d88f

Browse files
authored
make hibernate-* indy compatible (#11553)
1 parent d0d39b8 commit 101d88f

File tree

17 files changed

+224
-385
lines changed

17 files changed

+224
-385
lines changed

instrumentation/hibernate/hibernate-3.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hibernate/v3_3/CriteriaInstrumentation.java

Lines changed: 11 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,12 @@
1313
import static net.bytebuddy.matcher.ElementMatchers.namedOneOf;
1414

1515
import io.opentelemetry.context.Context;
16-
import io.opentelemetry.context.Scope;
1716
import io.opentelemetry.instrumentation.api.util.VirtualField;
18-
import io.opentelemetry.javaagent.bootstrap.CallDepth;
1917
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
2018
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
2119
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
2220
import io.opentelemetry.javaagent.instrumentation.hibernate.HibernateOperation;
21+
import io.opentelemetry.javaagent.instrumentation.hibernate.HibernateOperationScope;
2322
import io.opentelemetry.javaagent.instrumentation.hibernate.SessionInfo;
2423
import net.bytebuddy.asm.Advice;
2524
import net.bytebuddy.description.type.TypeDescription;
@@ -50,17 +49,11 @@ public void transform(TypeTransformer transformer) {
5049
public static class CriteriaMethodAdvice {
5150

5251
@Advice.OnMethodEnter(suppress = Throwable.class)
53-
public static void startMethod(
54-
@Advice.This Criteria criteria,
55-
@Advice.Origin("#m") String name,
56-
@Advice.Local("otelCallDepth") CallDepth callDepth,
57-
@Advice.Local("otelHibernateOperation") HibernateOperation hibernateOperation,
58-
@Advice.Local("otelContext") Context context,
59-
@Advice.Local("otelScope") Scope scope) {
60-
61-
callDepth = CallDepth.forClass(HibernateOperation.class);
62-
if (callDepth.getAndIncrement() > 0) {
63-
return;
52+
public static HibernateOperationScope startMethod(
53+
@Advice.This Criteria criteria, @Advice.Origin("#m") String name) {
54+
55+
if (HibernateOperationScope.enterDepthSkipCheck()) {
56+
return null;
6457
}
6558

6659
String entityName = null;
@@ -73,31 +66,17 @@ public static void startMethod(
7366
SessionInfo sessionInfo = criteriaVirtualField.get(criteria);
7467

7568
Context parentContext = Java8BytecodeBridge.currentContext();
76-
hibernateOperation = new HibernateOperation("Criteria." + name, entityName, sessionInfo);
77-
if (!instrumenter().shouldStart(parentContext, hibernateOperation)) {
78-
return;
79-
}
69+
HibernateOperation hibernateOperation =
70+
new HibernateOperation("Criteria." + name, entityName, sessionInfo);
8071

81-
context = instrumenter().start(parentContext, hibernateOperation);
82-
scope = context.makeCurrent();
72+
return HibernateOperationScope.start(hibernateOperation, parentContext, instrumenter());
8373
}
8474

8575
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
8676
public static void endMethod(
87-
@Advice.Thrown Throwable throwable,
88-
@Advice.Local("otelCallDepth") CallDepth callDepth,
89-
@Advice.Local("otelHibernateOperation") HibernateOperation hibernateOperation,
90-
@Advice.Local("otelContext") Context context,
91-
@Advice.Local("otelScope") Scope scope) {
92-
93-
if (callDepth.decrementAndGet() > 0) {
94-
return;
95-
}
77+
@Advice.Thrown Throwable throwable, @Advice.Enter HibernateOperationScope scope) {
9678

97-
if (scope != null) {
98-
scope.close();
99-
instrumenter().end(context, hibernateOperation, null, throwable);
100-
}
79+
HibernateOperationScope.end(scope, throwable);
10180
}
10281
}
10382
}

instrumentation/hibernate/hibernate-3.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hibernate/v3_3/HibernateInstrumentationModule.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,13 @@
1111
import com.google.auto.service.AutoService;
1212
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
1313
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
14+
import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule;
1415
import java.util.List;
1516
import net.bytebuddy.matcher.ElementMatcher;
1617

1718
@AutoService(InstrumentationModule.class)
18-
public class HibernateInstrumentationModule extends InstrumentationModule {
19+
public class HibernateInstrumentationModule extends InstrumentationModule
20+
implements ExperimentalInstrumentationModule {
1921

2022
public HibernateInstrumentationModule() {
2123
super("hibernate", "hibernate-3.3");
@@ -30,6 +32,11 @@ public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
3032
"org.hibernate.transaction.JBossTransactionManagerLookup");
3133
}
3234

35+
@Override
36+
public String getModuleGroup() {
37+
return "hibernate";
38+
}
39+
3340
@Override
3441
public List<TypeInstrumentation> typeInstrumentations() {
3542
return asList(

instrumentation/hibernate/hibernate-3.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hibernate/v3_3/QueryInstrumentation.java

Lines changed: 8 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,12 @@
1414
import static net.bytebuddy.matcher.ElementMatchers.namedOneOf;
1515

1616
import io.opentelemetry.context.Context;
17-
import io.opentelemetry.context.Scope;
1817
import io.opentelemetry.instrumentation.api.util.VirtualField;
19-
import io.opentelemetry.javaagent.bootstrap.CallDepth;
2018
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
2119
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
2220
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
2321
import io.opentelemetry.javaagent.instrumentation.hibernate.HibernateOperation;
22+
import io.opentelemetry.javaagent.instrumentation.hibernate.HibernateOperationScope;
2423
import io.opentelemetry.javaagent.instrumentation.hibernate.SessionInfo;
2524
import net.bytebuddy.asm.Advice;
2625
import net.bytebuddy.description.type.TypeDescription;
@@ -50,49 +49,28 @@ public void transform(TypeTransformer transformer) {
5049
public static class QueryMethodAdvice {
5150

5251
@Advice.OnMethodEnter(suppress = Throwable.class)
53-
public static void startMethod(
54-
@Advice.This Query query,
55-
@Advice.Local("otelCallDepth") CallDepth callDepth,
56-
@Advice.Local("otelHibernateOperation") HibernateOperation hibernateOperation,
57-
@Advice.Local("otelContext") Context context,
58-
@Advice.Local("otelScope") Scope scope) {
52+
public static HibernateOperationScope startMethod(@Advice.This Query query) {
5953

60-
callDepth = CallDepth.forClass(HibernateOperation.class);
61-
if (callDepth.getAndIncrement() > 0) {
62-
return;
54+
if (HibernateOperationScope.enterDepthSkipCheck()) {
55+
return null;
6356
}
6457

6558
VirtualField<Query, SessionInfo> queryVirtualField =
6659
VirtualField.find(Query.class, SessionInfo.class);
6760
SessionInfo sessionInfo = queryVirtualField.get(query);
6861

6962
Context parentContext = Java8BytecodeBridge.currentContext();
70-
hibernateOperation =
63+
HibernateOperation hibernateOperation =
7164
new HibernateOperation(getOperationNameForQuery(query.getQueryString()), sessionInfo);
72-
if (!instrumenter().shouldStart(parentContext, hibernateOperation)) {
73-
return;
74-
}
7565

76-
context = instrumenter().start(parentContext, hibernateOperation);
77-
scope = context.makeCurrent();
66+
return HibernateOperationScope.start(hibernateOperation, parentContext, instrumenter());
7867
}
7968

8069
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
8170
public static void endMethod(
82-
@Advice.Thrown Throwable throwable,
83-
@Advice.Local("otelCallDepth") CallDepth callDepth,
84-
@Advice.Local("otelHibernateOperation") HibernateOperation hibernateOperation,
85-
@Advice.Local("otelContext") Context context,
86-
@Advice.Local("otelScope") Scope scope) {
87-
88-
if (callDepth.decrementAndGet() > 0) {
89-
return;
90-
}
71+
@Advice.Thrown Throwable throwable, @Advice.Enter HibernateOperationScope scope) {
9172

92-
if (scope != null) {
93-
scope.close();
94-
instrumenter().end(context, hibernateOperation, null, throwable);
95-
}
73+
HibernateOperationScope.end(scope, throwable);
9674
}
9775
}
9876
}

instrumentation/hibernate/hibernate-3.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hibernate/v3_3/SessionInstrumentation.java

Lines changed: 10 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,12 @@
1818
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
1919

2020
import io.opentelemetry.context.Context;
21-
import io.opentelemetry.context.Scope;
2221
import io.opentelemetry.instrumentation.api.util.VirtualField;
23-
import io.opentelemetry.javaagent.bootstrap.CallDepth;
2422
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
2523
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
2624
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
2725
import io.opentelemetry.javaagent.instrumentation.hibernate.HibernateOperation;
26+
import io.opentelemetry.javaagent.instrumentation.hibernate.HibernateOperationScope;
2827
import io.opentelemetry.javaagent.instrumentation.hibernate.SessionInfo;
2928
import net.bytebuddy.asm.Advice;
3029
import net.bytebuddy.description.type.TypeDescription;
@@ -92,52 +91,32 @@ public void transform(TypeTransformer transformer) {
9291
public static class SessionMethodAdvice {
9392

9493
@Advice.OnMethodEnter(suppress = Throwable.class)
95-
public static void startMethod(
94+
public static HibernateOperationScope startMethod(
9695
@Advice.This Object session,
9796
@Advice.Origin("#m") String name,
9897
@Advice.Origin("#d") String descriptor,
9998
@Advice.Argument(0) Object arg0,
100-
@Advice.Argument(value = 1, optional = true) Object arg1,
101-
@Advice.Local("otelCallDepth") CallDepth callDepth,
102-
@Advice.Local("otelHibernateOperation") HibernateOperation hibernateOperation,
103-
@Advice.Local("otelContext") Context context,
104-
@Advice.Local("otelScope") Scope scope) {
105-
106-
callDepth = CallDepth.forClass(HibernateOperation.class);
107-
if (callDepth.getAndIncrement() > 0) {
108-
return;
99+
@Advice.Argument(value = 1, optional = true) Object arg1) {
100+
101+
if (HibernateOperationScope.enterDepthSkipCheck()) {
102+
return null;
109103
}
110104

111105
Context parentContext = Java8BytecodeBridge.currentContext();
112106
SessionInfo sessionInfo = SessionUtil.getSessionInfo(session);
113107
String entityName =
114108
getEntityName(descriptor, arg0, arg1, EntityNameUtil.bestGuessEntityName(session));
115-
hibernateOperation =
109+
HibernateOperation hibernateOperation =
116110
new HibernateOperation(getSessionMethodOperationName(name), entityName, sessionInfo);
117-
if (!instrumenter().shouldStart(parentContext, hibernateOperation)) {
118-
return;
119-
}
120111

121-
context = instrumenter().start(parentContext, hibernateOperation);
122-
scope = context.makeCurrent();
112+
return HibernateOperationScope.start(hibernateOperation, parentContext, instrumenter());
123113
}
124114

125115
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
126116
public static void endMethod(
127-
@Advice.Thrown Throwable throwable,
128-
@Advice.Local("otelCallDepth") CallDepth callDepth,
129-
@Advice.Local("otelHibernateOperation") HibernateOperation hibernateOperation,
130-
@Advice.Local("otelContext") Context context,
131-
@Advice.Local("otelScope") Scope scope) {
132-
133-
if (callDepth.decrementAndGet() > 0) {
134-
return;
135-
}
117+
@Advice.Thrown Throwable throwable, @Advice.Enter HibernateOperationScope enterScope) {
136118

137-
if (scope != null) {
138-
scope.close();
139-
instrumenter().end(context, hibernateOperation, null, throwable);
140-
}
119+
HibernateOperationScope.end(enterScope, throwable);
141120
}
142121
}
143122

instrumentation/hibernate/hibernate-3.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hibernate/v3_3/TransactionInstrumentation.java

Lines changed: 9 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,12 @@
1313
import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
1414

1515
import io.opentelemetry.context.Context;
16-
import io.opentelemetry.context.Scope;
1716
import io.opentelemetry.instrumentation.api.util.VirtualField;
18-
import io.opentelemetry.javaagent.bootstrap.CallDepth;
1917
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
2018
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
2119
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
2220
import io.opentelemetry.javaagent.instrumentation.hibernate.HibernateOperation;
21+
import io.opentelemetry.javaagent.instrumentation.hibernate.HibernateOperationScope;
2322
import io.opentelemetry.javaagent.instrumentation.hibernate.SessionInfo;
2423
import net.bytebuddy.asm.Advice;
2524
import net.bytebuddy.description.type.TypeDescription;
@@ -49,48 +48,28 @@ public void transform(TypeTransformer transformer) {
4948
public static class TransactionCommitAdvice {
5049

5150
@Advice.OnMethodEnter(suppress = Throwable.class)
52-
public static void startCommit(
53-
@Advice.This Transaction transaction,
54-
@Advice.Local("otelCallDepth") CallDepth callDepth,
55-
@Advice.Local("otelHibernateOperation") HibernateOperation hibernateOperation,
56-
@Advice.Local("otelContext") Context context,
57-
@Advice.Local("otelScope") Scope scope) {
51+
public static HibernateOperationScope startCommit(@Advice.This Transaction transaction) {
5852

59-
callDepth = CallDepth.forClass(HibernateOperation.class);
60-
if (callDepth.getAndIncrement() > 0) {
61-
return;
53+
if (HibernateOperationScope.enterDepthSkipCheck()) {
54+
return null;
6255
}
6356

6457
VirtualField<Transaction, SessionInfo> transactionVirtualField =
6558
VirtualField.find(Transaction.class, SessionInfo.class);
6659
SessionInfo sessionInfo = transactionVirtualField.get(transaction);
6760

6861
Context parentContext = Java8BytecodeBridge.currentContext();
69-
hibernateOperation = new HibernateOperation("Transaction.commit", sessionInfo);
70-
if (!instrumenter().shouldStart(parentContext, hibernateOperation)) {
71-
return;
72-
}
62+
HibernateOperation hibernateOperation =
63+
new HibernateOperation("Transaction.commit", sessionInfo);
7364

74-
context = instrumenter().start(parentContext, hibernateOperation);
75-
scope = context.makeCurrent();
65+
return HibernateOperationScope.start(hibernateOperation, parentContext, instrumenter());
7666
}
7767

7868
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
7969
public static void endCommit(
80-
@Advice.Thrown Throwable throwable,
81-
@Advice.Local("otelCallDepth") CallDepth callDepth,
82-
@Advice.Local("otelHibernateOperation") HibernateOperation hibernateOperation,
83-
@Advice.Local("otelContext") Context context,
84-
@Advice.Local("otelScope") Scope scope) {
85-
86-
if (callDepth.decrementAndGet() > 0) {
87-
return;
88-
}
70+
@Advice.Thrown Throwable throwable, @Advice.Enter HibernateOperationScope scope) {
8971

90-
if (scope != null) {
91-
scope.close();
92-
instrumenter().end(context, hibernateOperation, null, throwable);
93-
}
72+
HibernateOperationScope.end(scope, throwable);
9473
}
9574
}
9675
}

instrumentation/hibernate/hibernate-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/CriteriaInstrumentation.java

Lines changed: 11 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,12 @@
1313
import static net.bytebuddy.matcher.ElementMatchers.namedOneOf;
1414

1515
import io.opentelemetry.context.Context;
16-
import io.opentelemetry.context.Scope;
1716
import io.opentelemetry.instrumentation.api.util.VirtualField;
18-
import io.opentelemetry.javaagent.bootstrap.CallDepth;
1917
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
2018
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
2119
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
2220
import io.opentelemetry.javaagent.instrumentation.hibernate.HibernateOperation;
21+
import io.opentelemetry.javaagent.instrumentation.hibernate.HibernateOperationScope;
2322
import io.opentelemetry.javaagent.instrumentation.hibernate.SessionInfo;
2423
import net.bytebuddy.asm.Advice;
2524
import net.bytebuddy.description.type.TypeDescription;
@@ -50,17 +49,11 @@ public void transform(TypeTransformer transformer) {
5049
public static class CriteriaMethodAdvice {
5150

5251
@Advice.OnMethodEnter(suppress = Throwable.class)
53-
public static void startMethod(
54-
@Advice.This Criteria criteria,
55-
@Advice.Origin("#m") String name,
56-
@Advice.Local("otelCallDepth") CallDepth callDepth,
57-
@Advice.Local("otelHibernateOperation") HibernateOperation hibernateOperation,
58-
@Advice.Local("otelContext") Context context,
59-
@Advice.Local("otelScope") Scope scope) {
60-
61-
callDepth = CallDepth.forClass(HibernateOperation.class);
62-
if (callDepth.getAndIncrement() > 0) {
63-
return;
52+
public static HibernateOperationScope startMethod(
53+
@Advice.This Criteria criteria, @Advice.Origin("#m") String name) {
54+
55+
if (HibernateOperationScope.enterDepthSkipCheck()) {
56+
return null;
6457
}
6558

6659
String entityName = null;
@@ -73,31 +66,17 @@ public static void startMethod(
7366
SessionInfo sessionInfo = criteriaVirtualField.get(criteria);
7467

7568
Context parentContext = Java8BytecodeBridge.currentContext();
76-
hibernateOperation = new HibernateOperation("Criteria." + name, entityName, sessionInfo);
77-
if (!instrumenter().shouldStart(parentContext, hibernateOperation)) {
78-
return;
79-
}
69+
HibernateOperation hibernateOperation =
70+
new HibernateOperation("Criteria." + name, entityName, sessionInfo);
8071

81-
context = instrumenter().start(parentContext, hibernateOperation);
82-
scope = context.makeCurrent();
72+
return HibernateOperationScope.start(hibernateOperation, parentContext, instrumenter());
8373
}
8474

8575
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
8676
public static void endMethod(
87-
@Advice.Thrown Throwable throwable,
88-
@Advice.Local("otelCallDepth") CallDepth callDepth,
89-
@Advice.Local("otelHibernateOperation") HibernateOperation hibernateOperation,
90-
@Advice.Local("otelContext") Context context,
91-
@Advice.Local("otelScope") Scope scope) {
92-
93-
if (callDepth.decrementAndGet() > 0) {
94-
return;
95-
}
77+
@Advice.Thrown Throwable throwable, @Advice.Enter HibernateOperationScope scope) {
9678

97-
if (scope != null) {
98-
scope.close();
99-
instrumenter().end(context, hibernateOperation, null, throwable);
100-
}
79+
HibernateOperationScope.end(scope, throwable);
10180
}
10281
}
10382
}

0 commit comments

Comments
 (0)