Skip to content

Commit d07e674

Browse files
committed
make hibernate-* indy compatible
1 parent 0259a9f commit d07e674

File tree

15 files changed

+211
-282
lines changed

15 files changed

+211
-282
lines changed

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

+13-28
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@
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;
1817
import io.opentelemetry.javaagent.bootstrap.CallDepth;
1918
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
2019
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
2120
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
2221
import io.opentelemetry.javaagent.instrumentation.hibernate.HibernateOperation;
22+
import io.opentelemetry.javaagent.instrumentation.hibernate.HibernateOperationScope;
2323
import io.opentelemetry.javaagent.instrumentation.hibernate.SessionInfo;
2424
import net.bytebuddy.asm.Advice;
2525
import net.bytebuddy.description.type.TypeDescription;
@@ -50,17 +50,12 @@ public void transform(TypeTransformer transformer) {
5050
public static class CriteriaMethodAdvice {
5151

5252
@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);
53+
public static Object startMethod(
54+
@Advice.This Criteria criteria, @Advice.Origin("#m") String name) {
55+
56+
CallDepth callDepth = CallDepth.forClass(HibernateOperation.class);
6257
if (callDepth.getAndIncrement() > 0) {
63-
return;
58+
return callDepth;
6459
}
6560

6661
String entityName = null;
@@ -73,31 +68,21 @@ public static void startMethod(
7368
SessionInfo sessionInfo = criteriaVirtualField.get(criteria);
7469

7570
Context parentContext = Java8BytecodeBridge.currentContext();
76-
hibernateOperation = new HibernateOperation("Criteria." + name, entityName, sessionInfo);
71+
HibernateOperation hibernateOperation =
72+
new HibernateOperation("Criteria." + name, entityName, sessionInfo);
7773
if (!instrumenter().shouldStart(parentContext, hibernateOperation)) {
78-
return;
74+
return callDepth;
7975
}
8076

81-
context = instrumenter().start(parentContext, hibernateOperation);
82-
scope = context.makeCurrent();
77+
return HibernateOperationScope.startNew(
78+
callDepth, hibernateOperation, parentContext, instrumenter());
8379
}
8480

8581
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
8682
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-
}
83+
@Advice.Thrown Throwable throwable, @Advice.Enter Object enterScope) {
9684

97-
if (scope != null) {
98-
scope.close();
99-
instrumenter().end(context, hibernateOperation, null, throwable);
100-
}
85+
HibernateOperationScope.end(enterScope, instrumenter(), throwable);
10186
}
10287
}
10388
}

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

+8-1
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

+10-26
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@
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;
1918
import io.opentelemetry.javaagent.bootstrap.CallDepth;
2019
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
2120
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
2221
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
2322
import io.opentelemetry.javaagent.instrumentation.hibernate.HibernateOperation;
23+
import io.opentelemetry.javaagent.instrumentation.hibernate.HibernateOperationScope;
2424
import io.opentelemetry.javaagent.instrumentation.hibernate.SessionInfo;
2525
import net.bytebuddy.asm.Advice;
2626
import net.bytebuddy.description.type.TypeDescription;
@@ -50,49 +50,33 @@ public void transform(TypeTransformer transformer) {
5050
public static class QueryMethodAdvice {
5151

5252
@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) {
53+
public static Object startMethod(@Advice.This Query query) {
5954

60-
callDepth = CallDepth.forClass(HibernateOperation.class);
55+
CallDepth callDepth = CallDepth.forClass(HibernateOperation.class);
6156
if (callDepth.getAndIncrement() > 0) {
62-
return;
57+
return callDepth;
6358
}
6459

6560
VirtualField<Query, SessionInfo> queryVirtualField =
6661
VirtualField.find(Query.class, SessionInfo.class);
6762
SessionInfo sessionInfo = queryVirtualField.get(query);
6863

6964
Context parentContext = Java8BytecodeBridge.currentContext();
70-
hibernateOperation =
65+
HibernateOperation hibernateOperation =
7166
new HibernateOperation(getOperationNameForQuery(query.getQueryString()), sessionInfo);
7267
if (!instrumenter().shouldStart(parentContext, hibernateOperation)) {
73-
return;
68+
return callDepth;
7469
}
7570

76-
context = instrumenter().start(parentContext, hibernateOperation);
77-
scope = context.makeCurrent();
71+
return HibernateOperationScope.startNew(
72+
callDepth, hibernateOperation, parentContext, instrumenter());
7873
}
7974

8075
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
8176
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) {
77+
@Advice.Thrown Throwable throwable, @Advice.Enter Object enterScope) {
8778

88-
if (callDepth.decrementAndGet() > 0) {
89-
return;
90-
}
91-
92-
if (scope != null) {
93-
scope.close();
94-
instrumenter().end(context, hibernateOperation, null, throwable);
95-
}
79+
HibernateOperationScope.end(enterScope, instrumenter(), throwable);
9680
}
9781
}
9882
}

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

+12-26
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,15 @@
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;
1817
import io.opentelemetry.javaagent.bootstrap.CallDepth;
1918
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
2019
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
2120
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
2221
import io.opentelemetry.javaagent.instrumentation.hibernate.HibernateOperation;
22+
import io.opentelemetry.javaagent.instrumentation.hibernate.HibernateOperationScope;
2323
import io.opentelemetry.javaagent.instrumentation.hibernate.SessionInfo;
24+
import javax.annotation.Nullable;
2425
import net.bytebuddy.asm.Advice;
2526
import net.bytebuddy.description.type.TypeDescription;
2627
import net.bytebuddy.matcher.ElementMatcher;
@@ -49,48 +50,33 @@ public void transform(TypeTransformer transformer) {
4950
public static class TransactionCommitAdvice {
5051

5152
@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) {
53+
public static Object startCommit(@Advice.This Transaction transaction) {
5854

59-
callDepth = CallDepth.forClass(HibernateOperation.class);
55+
CallDepth callDepth = CallDepth.forClass(HibernateOperation.class);
6056
if (callDepth.getAndIncrement() > 0) {
61-
return;
57+
return callDepth;
6258
}
6359

6460
VirtualField<Transaction, SessionInfo> transactionVirtualField =
6561
VirtualField.find(Transaction.class, SessionInfo.class);
6662
SessionInfo sessionInfo = transactionVirtualField.get(transaction);
6763

6864
Context parentContext = Java8BytecodeBridge.currentContext();
69-
hibernateOperation = new HibernateOperation("Transaction.commit", sessionInfo);
65+
HibernateOperation hibernateOperation =
66+
new HibernateOperation("Transaction.commit", sessionInfo);
7067
if (!instrumenter().shouldStart(parentContext, hibernateOperation)) {
71-
return;
68+
return callDepth;
7269
}
7370

74-
context = instrumenter().start(parentContext, hibernateOperation);
75-
scope = context.makeCurrent();
71+
return HibernateOperationScope.startNew(
72+
callDepth, hibernateOperation, parentContext, instrumenter());
7673
}
7774

7875
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
7976
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) {
77+
@Advice.Thrown Throwable throwable, @Advice.Enter @Nullable Object enterScope) {
8578

86-
if (callDepth.decrementAndGet() > 0) {
87-
return;
88-
}
89-
90-
if (scope != null) {
91-
scope.close();
92-
instrumenter().end(context, hibernateOperation, null, throwable);
93-
}
79+
HibernateOperationScope.end(enterScope, instrumenter(), throwable);
9480
}
9581
}
9682
}

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

+13-28
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@
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;
1817
import io.opentelemetry.javaagent.bootstrap.CallDepth;
1918
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
2019
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
2120
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
2221
import io.opentelemetry.javaagent.instrumentation.hibernate.HibernateOperation;
22+
import io.opentelemetry.javaagent.instrumentation.hibernate.HibernateOperationScope;
2323
import io.opentelemetry.javaagent.instrumentation.hibernate.SessionInfo;
2424
import net.bytebuddy.asm.Advice;
2525
import net.bytebuddy.description.type.TypeDescription;
@@ -50,17 +50,12 @@ public void transform(TypeTransformer transformer) {
5050
public static class CriteriaMethodAdvice {
5151

5252
@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);
53+
public static Object startMethod(
54+
@Advice.This Criteria criteria, @Advice.Origin("#m") String name) {
55+
56+
CallDepth callDepth = CallDepth.forClass(HibernateOperation.class);
6257
if (callDepth.getAndIncrement() > 0) {
63-
return;
58+
return callDepth;
6459
}
6560

6661
String entityName = null;
@@ -73,31 +68,21 @@ public static void startMethod(
7368
SessionInfo sessionInfo = criteriaVirtualField.get(criteria);
7469

7570
Context parentContext = Java8BytecodeBridge.currentContext();
76-
hibernateOperation = new HibernateOperation("Criteria." + name, entityName, sessionInfo);
71+
HibernateOperation hibernateOperation =
72+
new HibernateOperation("Criteria." + name, entityName, sessionInfo);
7773
if (!instrumenter().shouldStart(parentContext, hibernateOperation)) {
78-
return;
74+
return callDepth;
7975
}
8076

81-
context = instrumenter().start(parentContext, hibernateOperation);
82-
scope = context.makeCurrent();
77+
return HibernateOperationScope.startNew(
78+
callDepth, hibernateOperation, parentContext, instrumenter());
8379
}
8480

8581
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
8682
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-
}
83+
@Advice.Thrown Throwable throwable, @Advice.Enter Object enterState) {
9684

97-
if (scope != null) {
98-
scope.close();
99-
instrumenter().end(context, hibernateOperation, null, throwable);
100-
}
85+
HibernateOperationScope.end(enterState, instrumenter(), throwable);
10186
}
10287
}
10388
}

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

+5-5
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-4.0");
@@ -31,10 +33,8 @@ public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
3133
}
3234

3335
@Override
34-
public boolean isIndyModule() {
35-
// shares classes with hibernate-procedure-call-4.3, these classes should be in the same class
36-
// loader
37-
return false;
36+
public String getModuleGroup() {
37+
return "hibernate";
3838
}
3939

4040
@Override

0 commit comments

Comments
 (0)