package de.twenty11.skysail.server.ext.osgi.monitor.agent.callback.bundlecontext;
import java.util.Dictionary;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.slf4j.Logger;
import de.twenty11.skysail.server.ext.osgi.monitor.agent.Const;
import de.twenty11.skysail.server.ext.osgi.monitor.agent.MethodIdentifier;
import de.twenty11.skysail.server.ext.osgi.monitor.agent.callback.OsgiMonitorCallback;
import de.twenty11.skysail.server.ext.osgi.monitor.agent.callback.messages.RuntimeExceptionMessage;
import de.twenty11.skysail.server.ext.osgi.monitor.agent.instrumentation.bundlecontext.RegisterServiceInstrumentation;
import de.twenty11.skysail.server.ext.osgi.monitor.agent.messages.bundlecontext.RegisterServiceMessage;
import de.twenty11.skysail.server.ext.osgi.monitor.agent.messages.bundlecontext.UngetServiceMessage;
/**
* the class called from the instrumented methods.
*
*/
public class BundleContextCallback extends OsgiMonitorCallback {
public static Logger agentLogger;
static {
addMethodCallback(new MethodIdentifier(Const.OSGI_BUNDLE_CONTEXT_CLASS_NAME, "registerService",
Const.REGISTER_SERVICE_SIGNATURE_1),
new RegisterServiceInstrumentation(BundleContextCallback.class.getSimpleName(), "registerService"));
addMethodCallback(new MethodIdentifier("org.apache.felix.framework.ext.FelixBundleContext", "registerService",
Const.REGISTER_SERVICE_SIGNATURE_1),
new RegisterServiceInstrumentation(BundleContextCallback.class.getSimpleName(), "registerService"));
addMethodCallback(new MethodIdentifier(Const.OSGI_BUNDLE_CONTEXT_CLASS_NAME, "registerService",
Const.REGISTER_SERVICE_SIGNATURE_2),
new RegisterServiceInstrumentation(BundleContextCallback.class.getSimpleName(), "registerService2"));
addMethodCallback(new MethodIdentifier("org.apache.felix.framework.ext.FelixBundleContext", "registerService",
Const.REGISTER_SERVICE_SIGNATURE_2),
new RegisterServiceInstrumentation(BundleContextCallback.class.getSimpleName(), "registerService2"));
addMethodCallback(new MethodIdentifier(Const.OSGI_BUNDLE_CONTEXT_CLASS_NAME, "registerService",
Const.REGISTER_SERVICE_SIGNATURE_3),
new RegisterServiceInstrumentation(BundleContextCallback.class.getSimpleName(), "registerService3"));
addMethodCallback(new MethodIdentifier("org.apache.felix.framework.ext.FelixBundleContext", "registerService",
Const.REGISTER_SERVICE_SIGNATURE_3),
new RegisterServiceInstrumentation(BundleContextCallback.class.getSimpleName(), "registerService3"));
addMethodCallback(new MethodIdentifier("org.apache.felix.framework.ext.FelixBundleContext", "ungetService",
"(Lorg/osgi/framework/ServiceReference;)Z"), new RegisterServiceInstrumentation(
BundleContextCallback.class.getSimpleName(), "ungetService"));
}
public static void registerService(BundleContext bundleContext, String[] strArr, Object obj, Dictionary<?, ?> dict) {
logJson(new RegisterServiceMessage(bundleContext, strArr, obj, dict));
}
public static void registerService(BundleContext bundleContext, String str, Object obj, Dictionary<?, ?> dict) {
String[] strArr = new String[1];
strArr[0] = str;
logJson(new RegisterServiceMessage(bundleContext, strArr, obj, dict));
}
public static void registerService(BundleContext bundleContext, Class<?> cls, Object obj, Dictionary<?, ?> dict) {
String[] strArr = new String[1];
strArr[0] = cls.toString();
logJson(new RegisterServiceMessage(bundleContext, strArr, obj, dict));
}
public static void ungetService(BundleContext bundleContext, ServiceReference sr) {
logJson(new UngetServiceMessage(sr));
}
public static void catchMe(String methodName, RuntimeException e) {
logJson(new RuntimeExceptionMessage("bc", methodName, e));
}
}