Skip to content

Commit a548f7e

Browse files
authored
make jsf indy-ready (#14813)
1 parent 8549c29 commit a548f7e

File tree

8 files changed

+169
-88
lines changed

8 files changed

+169
-88
lines changed

instrumentation/jsf/jsf-mojarra-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mojarra/ActionListenerImplInstrumentation.java

Lines changed: 34 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@
1010

1111
import io.opentelemetry.context.Context;
1212
import io.opentelemetry.context.Scope;
13-
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
1413
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1514
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
1615
import io.opentelemetry.javaagent.instrumentation.jsf.javax.JsfRequest;
16+
import javax.annotation.Nullable;
1717
import javax.faces.event.ActionEvent;
1818
import net.bytebuddy.asm.Advice;
1919
import net.bytebuddy.description.type.TypeDescription;
@@ -36,34 +36,47 @@ public void transform(TypeTransformer transformer) {
3636
@SuppressWarnings("unused")
3737
public static class ProcessActionAdvice {
3838

39-
@Advice.OnMethodEnter(suppress = Throwable.class)
40-
public static void onEnter(
41-
@Advice.Argument(0) ActionEvent event,
42-
@Advice.Local("otelRequest") JsfRequest request,
43-
@Advice.Local("otelContext") Context context,
44-
@Advice.Local("otelScope") Scope scope) {
45-
Context parentContext = Java8BytecodeBridge.currentContext();
39+
public static class AdviceScope {
40+
private final JsfRequest request;
41+
private final Context context;
42+
private final Scope scope;
43+
44+
private AdviceScope(JsfRequest request, Context context, Scope scope) {
45+
this.request = request;
46+
this.context = context;
47+
this.scope = scope;
48+
}
4649

47-
request = new JsfRequest(event);
48-
if (!request.shouldStartSpan() || !instrumenter().shouldStart(parentContext, request)) {
49-
return;
50+
@Nullable
51+
public static AdviceScope start(@Advice.Argument(0) ActionEvent event) {
52+
Context parentContext = Context.current();
53+
JsfRequest request = new JsfRequest(event);
54+
if (!request.shouldStartSpan() || !instrumenter().shouldStart(parentContext, request)) {
55+
return null;
56+
}
57+
Context context = instrumenter().start(parentContext, request);
58+
return new AdviceScope(request, context, context.makeCurrent());
5059
}
5160

52-
context = instrumenter().start(parentContext, request);
53-
scope = context.makeCurrent();
61+
public void end(@Nullable Throwable throwable) {
62+
scope.close();
63+
instrumenter().end(context, request, null, throwable);
64+
}
65+
}
66+
67+
@Nullable
68+
@Advice.OnMethodEnter(suppress = Throwable.class)
69+
public static AdviceScope onEnter(@Advice.Argument(0) ActionEvent event) {
70+
return AdviceScope.start(event);
5471
}
5572

5673
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
5774
public static void stopSpan(
58-
@Advice.Thrown Throwable throwable,
59-
@Advice.Local("otelRequest") JsfRequest request,
60-
@Advice.Local("otelContext") Context context,
61-
@Advice.Local("otelScope") Scope scope) {
62-
if (scope == null) {
63-
return;
75+
@Advice.Thrown @Nullable Throwable throwable,
76+
@Advice.Enter @Nullable AdviceScope adviceScope) {
77+
if (adviceScope != null) {
78+
adviceScope.end(throwable);
6479
}
65-
scope.close();
66-
instrumenter().end(context, request, null, throwable);
6780
}
6881
}
6982
}

instrumentation/jsf/jsf-mojarra-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mojarra/MojarraInstrumentationModule.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@
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 java.util.List;
1415

1516
@AutoService(InstrumentationModule.class)
16-
public class MojarraInstrumentationModule extends InstrumentationModule {
17+
public class MojarraInstrumentationModule extends InstrumentationModule
18+
implements ExperimentalInstrumentationModule {
1719
public MojarraInstrumentationModule() {
1820
super("jsf-mojarra", "jsf-mojarra-1.2");
1921
}
@@ -22,4 +24,9 @@ public MojarraInstrumentationModule() {
2224
public List<TypeInstrumentation> typeInstrumentations() {
2325
return asList(new ActionListenerImplInstrumentation(), new RestoreViewPhaseInstrumentation());
2426
}
27+
28+
@Override
29+
public boolean isIndyReady() {
30+
return true;
31+
}
2532
}

instrumentation/jsf/jsf-mojarra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mojarra/v3_0/ActionListenerImplInstrumentation.java

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@
1010

1111
import io.opentelemetry.context.Context;
1212
import io.opentelemetry.context.Scope;
13-
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
1413
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1514
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
1615
import io.opentelemetry.javaagent.instrumentation.jsf.jakarta.JsfRequest;
1716
import jakarta.faces.event.ActionEvent;
17+
import javax.annotation.Nullable;
1818
import net.bytebuddy.asm.Advice;
1919
import net.bytebuddy.description.type.TypeDescription;
2020
import net.bytebuddy.matcher.ElementMatcher;
@@ -36,34 +36,46 @@ public void transform(TypeTransformer transformer) {
3636
@SuppressWarnings("unused")
3737
public static class ProcessActionAdvice {
3838

39-
@Advice.OnMethodEnter(suppress = Throwable.class)
40-
public static void onEnter(
41-
@Advice.Argument(0) ActionEvent event,
42-
@Advice.Local("otelRequest") JsfRequest request,
43-
@Advice.Local("otelContext") Context context,
44-
@Advice.Local("otelScope") Scope scope) {
45-
Context parentContext = Java8BytecodeBridge.currentContext();
39+
public static class AdviceScope {
40+
private final JsfRequest request;
41+
private final Context context;
42+
private final Scope scope;
43+
44+
private AdviceScope(JsfRequest request, Context context, Scope scope) {
45+
this.request = request;
46+
this.context = context;
47+
this.scope = scope;
48+
}
4649

47-
request = new JsfRequest(event);
48-
if (!request.shouldStartSpan() || !instrumenter().shouldStart(parentContext, request)) {
49-
return;
50+
@Nullable
51+
public static AdviceScope start(ActionEvent event) {
52+
Context parentContext = Context.current();
53+
JsfRequest request = new JsfRequest(event);
54+
if (!request.shouldStartSpan() || !instrumenter().shouldStart(parentContext, request)) {
55+
return null;
56+
}
57+
Context context = instrumenter().start(parentContext, request);
58+
return new AdviceScope(request, context, context.makeCurrent());
5059
}
5160

52-
context = instrumenter().start(parentContext, request);
53-
scope = context.makeCurrent();
61+
public void end(@Nullable Throwable throwable) {
62+
scope.close();
63+
instrumenter().end(context, request, null, throwable);
64+
}
65+
}
66+
67+
@Nullable
68+
@Advice.OnMethodEnter(suppress = Throwable.class)
69+
public static AdviceScope onEnter(@Advice.Argument(0) ActionEvent event) {
70+
return AdviceScope.start(event);
5471
}
5572

5673
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
5774
public static void stopSpan(
58-
@Advice.Thrown Throwable throwable,
59-
@Advice.Local("otelRequest") JsfRequest request,
60-
@Advice.Local("otelContext") Context context,
61-
@Advice.Local("otelScope") Scope scope) {
62-
if (scope == null) {
63-
return;
75+
@Advice.Thrown Throwable throwable, @Advice.Enter @Nullable AdviceScope adviceScope) {
76+
if (adviceScope != null) {
77+
adviceScope.end(throwable);
6478
}
65-
scope.close();
66-
instrumenter().end(context, request, null, throwable);
6779
}
6880
}
6981
}

instrumentation/jsf/jsf-mojarra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mojarra/v3_0/MojarraInstrumentationModule.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@
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 java.util.List;
1415

1516
@AutoService(InstrumentationModule.class)
16-
public class MojarraInstrumentationModule extends InstrumentationModule {
17+
public class MojarraInstrumentationModule extends InstrumentationModule
18+
implements ExperimentalInstrumentationModule {
1719
public MojarraInstrumentationModule() {
1820
super("jsf-mojarra", "jsf-mojarra-3.0");
1921
}
@@ -22,4 +24,9 @@ public MojarraInstrumentationModule() {
2224
public List<TypeInstrumentation> typeInstrumentations() {
2325
return asList(new ActionListenerImplInstrumentation(), new RestoreViewPhaseInstrumentation());
2426
}
27+
28+
@Override
29+
public boolean isIndyReady() {
30+
return true;
31+
}
2532
}

instrumentation/jsf/jsf-myfaces-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/myfaces/ActionListenerImplInstrumentation.java

Lines changed: 35 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@
1010

1111
import io.opentelemetry.context.Context;
1212
import io.opentelemetry.context.Scope;
13-
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
1413
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1514
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
1615
import io.opentelemetry.javaagent.instrumentation.jsf.javax.JsfRequest;
16+
import javax.annotation.Nullable;
1717
import javax.faces.event.ActionEvent;
1818
import net.bytebuddy.asm.Advice;
1919
import net.bytebuddy.description.type.TypeDescription;
@@ -36,34 +36,48 @@ public void transform(TypeTransformer transformer) {
3636
@SuppressWarnings("unused")
3737
public static class ProcessActionAdvice {
3838

39-
@Advice.OnMethodEnter(suppress = Throwable.class)
40-
public static void onEnter(
41-
@Advice.Argument(0) ActionEvent event,
42-
@Advice.Local("otelRequest") JsfRequest request,
43-
@Advice.Local("otelContext") Context context,
44-
@Advice.Local("otelScope") Scope scope) {
45-
Context parentContext = Java8BytecodeBridge.currentContext();
39+
public static class AdviceScope {
40+
private final JsfRequest request;
41+
private final Context context;
42+
private final Scope scope;
43+
44+
private AdviceScope(JsfRequest request, Context context, Scope scope) {
45+
this.request = request;
46+
this.context = context;
47+
this.scope = scope;
48+
}
4649

47-
request = new JsfRequest(event);
48-
if (!request.shouldStartSpan() || !instrumenter().shouldStart(parentContext, request)) {
49-
return;
50+
@Nullable
51+
public static AdviceScope start(ActionEvent event) {
52+
Context parentContext = Context.current();
53+
JsfRequest request = new JsfRequest(event);
54+
if (!request.shouldStartSpan() || !instrumenter().shouldStart(parentContext, request)) {
55+
return null;
56+
}
57+
Context context = instrumenter().start(parentContext, request);
58+
Scope scope = context.makeCurrent();
59+
return new AdviceScope(request, context, scope);
5060
}
5161

52-
context = instrumenter().start(parentContext, request);
53-
scope = context.makeCurrent();
62+
public void end(Throwable throwable) {
63+
scope.close();
64+
instrumenter().end(context, request, null, throwable);
65+
}
66+
}
67+
68+
@Nullable
69+
@Advice.OnMethodEnter(suppress = Throwable.class)
70+
public static AdviceScope onEnter(@Advice.Argument(0) ActionEvent event) {
71+
return AdviceScope.start(event);
5472
}
5573

5674
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
5775
public static void stopSpan(
58-
@Advice.Thrown Throwable throwable,
59-
@Advice.Local("otelRequest") JsfRequest request,
60-
@Advice.Local("otelContext") Context context,
61-
@Advice.Local("otelScope") Scope scope) {
62-
if (scope == null) {
63-
return;
76+
@Advice.Thrown @Nullable Throwable throwable,
77+
@Advice.Enter @Nullable AdviceScope adviceScope) {
78+
if (adviceScope != null) {
79+
adviceScope.end(throwable);
6480
}
65-
scope.close();
66-
instrumenter().end(context, request, null, throwable);
6781
}
6882
}
6983
}

instrumentation/jsf/jsf-myfaces-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/myfaces/MyFacesInstrumentationModule.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@
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 java.util.List;
1415

1516
@AutoService(InstrumentationModule.class)
16-
public class MyFacesInstrumentationModule extends InstrumentationModule {
17+
public class MyFacesInstrumentationModule extends InstrumentationModule
18+
implements ExperimentalInstrumentationModule {
1719
public MyFacesInstrumentationModule() {
1820
super("jsf-myfaces", "jsf-myfaces-1.2");
1921
}
@@ -23,4 +25,9 @@ public List<TypeInstrumentation> typeInstrumentations() {
2325
return asList(
2426
new ActionListenerImplInstrumentation(), new RestoreViewExecutorInstrumentation());
2527
}
28+
29+
@Override
30+
public boolean isIndyReady() {
31+
return true;
32+
}
2633
}

instrumentation/jsf/jsf-myfaces-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/myfaces/v3_0/ActionListenerImplInstrumentation.java

Lines changed: 35 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@
1010

1111
import io.opentelemetry.context.Context;
1212
import io.opentelemetry.context.Scope;
13-
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
1413
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1514
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
1615
import io.opentelemetry.javaagent.instrumentation.jsf.jakarta.JsfRequest;
1716
import jakarta.faces.event.ActionEvent;
17+
import javax.annotation.Nullable;
1818
import net.bytebuddy.asm.Advice;
1919
import net.bytebuddy.description.type.TypeDescription;
2020
import net.bytebuddy.matcher.ElementMatcher;
@@ -36,34 +36,48 @@ public void transform(TypeTransformer transformer) {
3636
@SuppressWarnings("unused")
3737
public static class ProcessActionAdvice {
3838

39-
@Advice.OnMethodEnter(suppress = Throwable.class)
40-
public static void onEnter(
41-
@Advice.Argument(0) ActionEvent event,
42-
@Advice.Local("otelRequest") JsfRequest request,
43-
@Advice.Local("otelContext") Context context,
44-
@Advice.Local("otelScope") Scope scope) {
45-
Context parentContext = Java8BytecodeBridge.currentContext();
39+
public static class AdviceScope {
40+
private final JsfRequest request;
41+
private final Context context;
42+
private final Scope scope;
43+
44+
private AdviceScope(JsfRequest request, Context context, Scope scope) {
45+
this.request = request;
46+
this.context = context;
47+
this.scope = scope;
48+
}
4649

47-
request = new JsfRequest(event);
48-
if (!request.shouldStartSpan() || !instrumenter().shouldStart(parentContext, request)) {
49-
return;
50+
@Nullable
51+
public static AdviceScope start(ActionEvent event) {
52+
Context parentContext = Context.current();
53+
JsfRequest request = new JsfRequest(event);
54+
if (!request.shouldStartSpan() || !instrumenter().shouldStart(parentContext, request)) {
55+
return null;
56+
}
57+
Context context = instrumenter().start(parentContext, request);
58+
Scope scope = context.makeCurrent();
59+
return new AdviceScope(request, context, scope);
5060
}
5161

52-
context = instrumenter().start(parentContext, request);
53-
scope = context.makeCurrent();
62+
public void end(Throwable throwable) {
63+
scope.close();
64+
instrumenter().end(context, request, null, throwable);
65+
}
66+
}
67+
68+
@Nullable
69+
@Advice.OnMethodEnter(suppress = Throwable.class)
70+
public static AdviceScope onEnter(@Advice.Argument(0) ActionEvent event) {
71+
return AdviceScope.start(event);
5472
}
5573

5674
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
5775
public static void stopSpan(
58-
@Advice.Thrown Throwable throwable,
59-
@Advice.Local("otelRequest") JsfRequest request,
60-
@Advice.Local("otelContext") Context context,
61-
@Advice.Local("otelScope") Scope scope) {
62-
if (scope == null) {
63-
return;
76+
@Advice.Thrown @Nullable Throwable throwable,
77+
@Advice.Enter @Nullable AdviceScope adviceScope) {
78+
if (adviceScope != null) {
79+
adviceScope.end(throwable);
6480
}
65-
scope.close();
66-
instrumenter().end(context, request, null, throwable);
6781
}
6882
}
6983
}

0 commit comments

Comments
 (0)