Skip to content

Commit 07ae4fc

Browse files
committed
Support configuring a different namespace in JMS module
1 parent 7b079e1 commit 07ae4fc

File tree

7 files changed

+61
-29
lines changed

7 files changed

+61
-29
lines changed

dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSDecorator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ public static void logJMSException(JMSException ex) {
116116

117117
@Override
118118
protected String[] instrumentationNames() {
119-
return new String[] {"jms", "jms-1", "jms-2"};
119+
return new String[] {"jms"};
120120
}
121121

122122
@Override

dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageConsumerInstrumentation.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,15 @@
3434

3535
public final class JMSMessageConsumerInstrumentation
3636
implements Instrumenter.ForTypeHierarchy, Instrumenter.HasMethodAdvice {
37+
private final String namespace;
38+
39+
public JMSMessageConsumerInstrumentation(String namespace) {
40+
this.namespace = namespace;
41+
}
3742

3843
@Override
3944
public String hierarchyMarkerType() {
40-
return "javax.jms.MessageConsumer";
45+
return namespace + ".jms.MessageConsumer";
4146
}
4247

4348
@Override
@@ -59,7 +64,7 @@ public void methodAdvice(MethodTransformer transformer) {
5964
transformer.applyAdvice(
6065
isMethod()
6166
.and(named("setMessageListener"))
62-
.and(takesArgument(0, hasInterface(named("javax.jms.MessageListener")))),
67+
.and(takesArgument(0, hasInterface(named(namespace + ".jms.MessageListener")))),
6368
getClass().getName() + "$DecorateMessageListener");
6469
}
6570

dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageProducerInstrumentation.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,15 @@
2929

3030
public final class JMSMessageProducerInstrumentation
3131
implements Instrumenter.ForTypeHierarchy, Instrumenter.HasMethodAdvice {
32+
private final String namespace;
33+
34+
public JMSMessageProducerInstrumentation(String namespace) {
35+
this.namespace = namespace;
36+
}
3237

3338
@Override
3439
public String hierarchyMarkerType() {
35-
return "javax.jms.MessageProducer";
40+
return namespace + ".jms.MessageProducer";
3641
}
3742

3843
@Override
@@ -43,12 +48,12 @@ public ElementMatcher<TypeDescription> hierarchyMatcher() {
4348
@Override
4449
public void methodAdvice(MethodTransformer transformer) {
4550
transformer.applyAdvice(
46-
named("send").and(takesArgument(0, named("javax.jms.Message"))).and(isPublic()),
51+
named("send").and(takesArgument(0, named(namespace + ".jms.Message"))).and(isPublic()),
4752
JMSMessageProducerInstrumentation.class.getName() + "$ProducerAdvice");
4853
transformer.applyAdvice(
4954
named("send")
50-
.and(takesArgument(0, hasInterface(named("javax.jms.Destination"))))
51-
.and(takesArgument(1, named("javax.jms.Message")))
55+
.and(takesArgument(0, hasInterface(named(namespace + ".jms.Destination"))))
56+
.and(takesArgument(1, named(namespace + ".jms.Message")))
5257
.and(isPublic()),
5358
JMSMessageProducerInstrumentation.class.getName() + "$ProducerWithDestinationAdvice");
5459
}

dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JavaxJmsModule.java

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,15 @@
1313

1414
@AutoService(InstrumenterModule.class)
1515
public class JavaxJmsModule extends InstrumenterModule.Tracing {
16+
private final String namespace;
17+
1618
public JavaxJmsModule() {
17-
super("jms", "jms-1", "jms-2");
19+
this("javax", "jms", "jms-1", "jms-2");
20+
}
21+
22+
public JavaxJmsModule(String namespace, String instrumentationName, String... additionalNames) {
23+
super(instrumentationName, additionalNames);
24+
this.namespace = namespace;
1825
}
1926

2027
@Override
@@ -31,20 +38,20 @@ public String[] helperClassNames() {
3138
@Override
3239
public Map<String, String> contextStore() {
3340
Map<String, String> contextStore = new HashMap<>(4);
34-
contextStore.put("javax.jms.MessageConsumer", MessageConsumerState.class.getName());
35-
contextStore.put("javax.jms.MessageProducer", MessageProducerState.class.getName());
36-
contextStore.put("javax.jms.Message", SessionState.class.getName());
37-
contextStore.put("javax.jms.Session", SessionState.class.getName());
41+
contextStore.put(namespace + ".jms.MessageConsumer", MessageConsumerState.class.getName());
42+
contextStore.put(namespace + ".jms.MessageProducer", MessageProducerState.class.getName());
43+
contextStore.put(namespace + ".jms.Message", SessionState.class.getName());
44+
contextStore.put(namespace + ".jms.Session", SessionState.class.getName());
3845
return contextStore;
3946
}
4047

4148
@Override
4249
public List<Instrumenter> typeInstrumentations() {
4350
return Arrays.asList(
44-
new JMSMessageConsumerInstrumentation(),
45-
new JMSMessageProducerInstrumentation(),
46-
new MDBMessageConsumerInstrumentation(),
47-
new MessageInstrumentation(),
48-
new SessionInstrumentation());
51+
new JMSMessageConsumerInstrumentation(namespace),
52+
new JMSMessageProducerInstrumentation(namespace),
53+
new MDBMessageConsumerInstrumentation(namespace),
54+
new MessageInstrumentation(namespace),
55+
new SessionInstrumentation(namespace));
4956
}
5057
}

dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/MDBMessageConsumerInstrumentation.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,18 +30,23 @@
3030

3131
public final class MDBMessageConsumerInstrumentation
3232
implements Instrumenter.ForTypeHierarchy, Instrumenter.HasMethodAdvice {
33+
private final String namespace;
34+
35+
public MDBMessageConsumerInstrumentation(String namespace) {
36+
this.namespace = namespace;
37+
}
3338

3439
@Override
3540
public String hierarchyMarkerType() {
36-
return "javax.jms.MessageListener";
41+
return namespace + ".jms.MessageListener";
3742
}
3843

3944
@Override
4045
public ElementMatcher<TypeDescription> hierarchyMatcher() {
4146
return implementsInterface(named(hierarchyMarkerType()))
4247
.and(
43-
hasSuperType(declaresAnnotation(named("javax.ejb.MessageDriven")))
44-
.or(implementsInterface(named("javax.ejb.MessageDrivenBean"))));
48+
hasSuperType(declaresAnnotation(named(namespace + ".ejb.MessageDriven")))
49+
.or(implementsInterface(named(namespace + ".ejb.MessageDrivenBean"))));
4550
}
4651

4752
@Override
@@ -51,7 +56,7 @@ public void methodAdvice(MethodTransformer transformer) {
5156
.and(isPublic())
5257
.and(named("onMessage"))
5358
.and(takesArguments(1))
54-
.and(takesArgument(0, (named("javax.jms.Message")))),
59+
.and(takesArgument(0, (named(namespace + ".jms.Message")))),
5560
getClass().getName() + "$MDBAdvice");
5661
}
5762

dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/MessageInstrumentation.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,15 @@
1717

1818
public class MessageInstrumentation
1919
implements Instrumenter.ForTypeHierarchy, Instrumenter.HasMethodAdvice {
20+
private final String namespace;
21+
22+
public MessageInstrumentation(String namespace) {
23+
this.namespace = namespace;
24+
}
2025

2126
@Override
2227
public String hierarchyMarkerType() {
23-
return "javax.jms.Message";
28+
return namespace + ".jms.Message";
2429
}
2530

2631
@Override

dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/SessionInstrumentation.java

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,15 @@
3030

3131
public class SessionInstrumentation
3232
implements Instrumenter.ForTypeHierarchy, Instrumenter.HasMethodAdvice {
33+
private final String namespace;
34+
35+
public SessionInstrumentation(String namespace) {
36+
this.namespace = namespace;
37+
}
3338

3439
@Override
3540
public String hierarchyMarkerType() {
36-
return "javax.jms.Session";
41+
return namespace + ".jms.Session";
3742
}
3843

3944
@Override
@@ -47,38 +52,38 @@ public void methodAdvice(MethodTransformer transformer) {
4752
isMethod()
4853
.and(named("createProducer"))
4954
.and(isPublic())
50-
.and(takesArgument(0, named("javax.jms.Destination"))),
55+
.and(takesArgument(0, named(namespace + ".jms.Destination"))),
5156
getClass().getName() + "$CreateProducer");
5257
transformer.applyAdvice(
5358
isMethod()
5459
.and(named("createSender"))
5560
.and(isPublic())
56-
.and(takesArgument(0, named("javax.jms.Queue"))),
61+
.and(takesArgument(0, named(namespace + ".jms.Queue"))),
5762
getClass().getName() + "$CreateProducer");
5863
transformer.applyAdvice(
5964
isMethod()
6065
.and(named("createPublisher"))
6166
.and(isPublic())
62-
.and(takesArgument(0, named("javax.jms.Topic"))),
67+
.and(takesArgument(0, named(namespace + ".jms.Topic"))),
6368
getClass().getName() + "$CreateProducer");
6469

6570
transformer.applyAdvice(
6671
isMethod()
6772
.and(named("createConsumer"))
6873
.and(isPublic())
69-
.and(takesArgument(0, named("javax.jms.Destination"))),
74+
.and(takesArgument(0, named(namespace + ".jms.Destination"))),
7075
getClass().getName() + "$CreateConsumer");
7176
transformer.applyAdvice(
7277
isMethod()
7378
.and(named("createReceiver"))
7479
.and(isPublic())
75-
.and(takesArgument(0, named("javax.jms.Queue"))),
80+
.and(takesArgument(0, named(namespace + ".jms.Queue"))),
7681
getClass().getName() + "$CreateConsumer");
7782
transformer.applyAdvice(
7883
isMethod()
7984
.and(namedOneOf("createSubscriber", "createDurableSubscriber"))
8085
.and(isPublic())
81-
.and(takesArgument(0, named("javax.jms.Topic"))),
86+
.and(takesArgument(0, named(namespace + ".jms.Topic"))),
8287
getClass().getName() + "$CreateConsumer");
8388

8489
transformer.applyAdvice(

0 commit comments

Comments
 (0)