package rocks.inspectit.agent.java.sensor.method.remote.server.mq;
import io.opentracing.propagation.TextMap;
import rocks.inspectit.agent.java.config.impl.RegisteredSensorConfig;
import rocks.inspectit.agent.java.sensor.method.remote.server.RemoteServerSensor;
import rocks.inspectit.agent.java.tracing.core.adapter.ResponseAdapter;
import rocks.inspectit.agent.java.tracing.core.adapter.ServerAdapterProvider;
import rocks.inspectit.agent.java.tracing.core.adapter.ServerRequestAdapter;
import rocks.inspectit.agent.java.tracing.core.adapter.empty.EmptyResponseAdapter;
import rocks.inspectit.agent.java.tracing.core.adapter.mq.MQRequestAdapter;
import rocks.inspectit.agent.java.tracing.core.adapter.mq.data.impl.JmsMessage;
/**
* Remote server sensor for intercepting JMS message receiving. This sensor is intended to work with
* JMS listener, but in theory can be placed on any method where JMS message is first parameter.
* <p>
* Targeted instrumentation method:
* <ul>
* <li>{@code javax.jms.MessageListener#onMessage(javax.jms.Message)}
* <li>{@code javax.jms.MessageListener#onMessage(javax.jms.Message, javax.jms.Session)}
* </ul>
*
* @author Ivan Senic
*/
public class JmsListenerRemoteServerSensor extends RemoteServerSensor implements ServerAdapterProvider {
/**
* {@inheritDoc}
*/
@Override
protected ServerAdapterProvider getServerAdapterProvider() {
return this;
}
/**
* {@inheritDoc}
*/
@Override
public ServerRequestAdapter<TextMap> getServerRequestAdapter(Object object, Object[] parameters, RegisteredSensorConfig rsc) {
// message is first parameter
Object message = parameters[0];
JmsMessage jmsMessage = new JmsMessage(message, CACHE);
return new MQRequestAdapter(jmsMessage);
}
/**
* {@inheritDoc}
*/
@Override
public ResponseAdapter getServerResponseAdapter(Object object, Object[] parameters, Object result, RegisteredSensorConfig rsc) {
return EmptyResponseAdapter.INSTANCE;
}
}