package rocks.inspectit.agent.java.sensor.method.remote.server;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import rocks.inspectit.agent.java.core.IPlatformManager;
import rocks.inspectit.agent.java.hooking.IHook;
import rocks.inspectit.agent.java.sensor.method.AbstractMethodSensor;
import rocks.inspectit.agent.java.tracing.core.ServerInterceptor;
import rocks.inspectit.agent.java.tracing.core.adapter.ServerAdapterProvider;
import rocks.inspectit.agent.java.util.ReflectionCache;
/**
* Abstract class for all remote server sensors that can read tracing information on the start of
* the request. Subclasses must implement {@link #getServerAdapterProvider()} that is passed to the
* {@link RemoteServerHook} during initialization.
* <p>
* Note that all remote server sensors class names should be added to the
* {@link rocks.inspectit.agent.java.sensor.method.invocationsequence.InvocationSequenceHook}, as we
* don't want additional invocation children to be created if remote sensor did not create any
* tracing data.
*
* @author Ivan Senic
*
*/
public abstract class RemoteServerSensor extends AbstractMethodSensor {
/**
* One reflection cache for all instances of all remote server sensors.
*/
protected static final ReflectionCache CACHE = new ReflectionCache();
/**
* The Platform manager.
*/
@Autowired
private IPlatformManager platformManager;
/**
* Server interceptor.
*/
@Autowired
private ServerInterceptor serverInterceptor;
/**
* Hook.
*/
private RemoteServerHook hook;
/**
* Sub-classes should provide the correct requestAdapter provider based on the technology and framework
* they are targeting.
*
* @return {@link ServerAdapterProvider}.
*/
protected abstract ServerAdapterProvider getServerAdapterProvider();
/**
* {@inheritDoc}
*/
@Override
public IHook getHook() {
return hook;
}
/**
* {@inheritDoc}
*/
@Override
protected void initHook(Map<String, Object> parameters) {
ServerAdapterProvider serverAdapterProvider = getServerAdapterProvider();
hook = new RemoteServerHook(serverInterceptor, serverAdapterProvider, platformManager);
}
}