Fix jaxrs annotation instrumentation on openliberty (#7890)

Hopefully resolves
https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/7870
Jax-rs annotation instrumentation is only enabled when jax-rs api is
found in the class loader. This check does a `ClassLoader.getResource`
call for the resource name corresponding to class
`javax.ws.rs.container.AsyncResponse`. As far as I understand this
particular class is used only because it was added in jax-rs 2.0, any
other class added in jax-rs 2.0 could be used instead of it. On
openliberty we fail to find this class because it should be resolved
through bundle dynamic imports but we disable looking into dynamic
imports in
https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/instrumentation/internal/internal-eclipse-osgi-3.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/osgi/EclipseOsgiInstrumentation.java
when we do the class presence check. Using a class in `javax.ws.rs.core`
package seems to work better as the import for that package is already
resolved by the time we make the `getResource` call.
This commit is contained in:
Lauri Tulmin 2023-02-24 13:00:11 +02:00 committed by GitHub
parent cbc616cbff
commit 64eb58633f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 2 additions and 12 deletions

View File

@ -5,7 +5,6 @@
package io.opentelemetry.javaagent.instrumentation.jaxrs.v2_0; package io.opentelemetry.javaagent.instrumentation.jaxrs.v2_0;
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed;
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasSuperMethod; import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasSuperMethod;
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasSuperType; import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasSuperType;
import static io.opentelemetry.javaagent.instrumentation.jaxrs.v2_0.JaxrsAnnotationsSingletons.instrumenter; import static io.opentelemetry.javaagent.instrumentation.jaxrs.v2_0.JaxrsAnnotationsSingletons.instrumenter;
@ -37,10 +36,6 @@ import net.bytebuddy.implementation.bytecode.assign.Assigner.Typing;
import net.bytebuddy.matcher.ElementMatcher; import net.bytebuddy.matcher.ElementMatcher;
public class JaxrsAnnotationsInstrumentation implements TypeInstrumentation { public class JaxrsAnnotationsInstrumentation implements TypeInstrumentation {
@Override
public ElementMatcher<ClassLoader> classLoaderOptimization() {
return hasClassesNamed("javax.ws.rs.Path");
}
@Override @Override
public ElementMatcher<TypeDescription> typeMatcher() { public ElementMatcher<TypeDescription> typeMatcher() {

View File

@ -23,7 +23,7 @@ public class JaxrsAnnotationsInstrumentationModule extends InstrumentationModule
// require jax-rs 2 // require jax-rs 2
@Override @Override
public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() { public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
return hasClassesNamed("javax.ws.rs.container.AsyncResponse"); return hasClassesNamed("javax.ws.rs.core.Configurable");
} }
@Override @Override

View File

@ -5,7 +5,6 @@
package io.opentelemetry.javaagent.instrumentation.jaxrs.v3_0; package io.opentelemetry.javaagent.instrumentation.jaxrs.v3_0;
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed;
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasSuperMethod; import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasSuperMethod;
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasSuperType; import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasSuperType;
import static io.opentelemetry.javaagent.instrumentation.jaxrs.v3_0.JaxrsAnnotationsSingletons.instrumenter; import static io.opentelemetry.javaagent.instrumentation.jaxrs.v3_0.JaxrsAnnotationsSingletons.instrumenter;
@ -37,10 +36,6 @@ import net.bytebuddy.implementation.bytecode.assign.Assigner.Typing;
import net.bytebuddy.matcher.ElementMatcher; import net.bytebuddy.matcher.ElementMatcher;
public class JaxrsAnnotationsInstrumentation implements TypeInstrumentation { public class JaxrsAnnotationsInstrumentation implements TypeInstrumentation {
@Override
public ElementMatcher<ClassLoader> classLoaderOptimization() {
return hasClassesNamed("jakarta.ws.rs.Path");
}
@Override @Override
public ElementMatcher<TypeDescription> typeMatcher() { public ElementMatcher<TypeDescription> typeMatcher() {

View File

@ -23,7 +23,7 @@ public class JaxrsAnnotationsInstrumentationModule extends InstrumentationModule
// require jax-rs 3 // require jax-rs 3
@Override @Override
public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() { public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
return hasClassesNamed("jakarta.ws.rs.container.AsyncResponse"); return hasClassesNamed("jakarta.ws.rs.Path");
} }
@Override @Override