package org.argeo.init.osgi;
+import java.io.Serializable;
import java.lang.System.LoggerFinder;
import java.util.Collections;
import java.util.Hashtable;
import java.util.ServiceLoader;
import java.util.concurrent.Flow;
import java.util.function.Consumer;
+import java.util.function.Supplier;
import org.argeo.init.RuntimeContext;
-import org.argeo.init.logging.ThinLoggerFinder;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleException;
import org.osgi.framework.Constants;
-import org.osgi.framework.ServiceRegistration;
import org.osgi.framework.launch.Framework;
import org.osgi.framework.launch.FrameworkFactory;
private Framework framework;
private OsgiBoot osgiBoot;
- @SuppressWarnings("rawtypes")
- private ServiceRegistration<Consumer> loggingConfigurationSr;
- @SuppressWarnings("rawtypes")
- private ServiceRegistration<Flow.Publisher> logEntryPublisherSr;
-
/**
* Constructor to use when the runtime context will create the OSGi
* {@link Framework}.
}
public void start(BundleContext bundleContext) {
- // Make sure LoggerFinder has been searched for, since it is lazily loaded
- LoggerFinder.getLoggerFinder();
-
- // logging
- loggingConfigurationSr = bundleContext.registerService(Consumer.class,
- ThinLoggerFinder.getConfigurationConsumer(),
- new Hashtable<>(Collections.singletonMap(Constants.SERVICE_PID, "argeo.logging.configuration")));
- logEntryPublisherSr = bundleContext.registerService(Flow.Publisher.class,
- ThinLoggerFinder.getLogEntryPublisher(),
- new Hashtable<>(Collections.singletonMap(Constants.SERVICE_PID, "argeo.logging.publisher")));
+ // preferences
+// SystemRootPreferences systemRootPreferences = ThinPreferencesFactory.getInstance().getSystemRootPreferences();
+// bundleContext.registerService(AbstractPreferences.class, systemRootPreferences, new Hashtable<>());
+ // Make sure LoggerFinder has been searched for, since it is lazily loaded
+ LoggerFinder loggerFinder = LoggerFinder.getLoggerFinder();
+
+ if (loggerFinder instanceof Consumer<?> && loggerFinder instanceof Supplier<?>) {
+ @SuppressWarnings("unchecked")
+ Consumer<Map<String, Object>> consumer = (Consumer<Map<String, Object>>) loggerFinder;
+ // ThinLoggerFinder.getConfigurationConsumer()
+ // ThinLoggerFinder.getLogEntryPublisher()
+
+ @SuppressWarnings("unchecked")
+ Supplier<Flow.Publisher<Map<String, Serializable>>> supplier = (Supplier<Flow.Publisher<Map<String, Serializable>>>) loggerFinder;
+ // logging
+ bundleContext.registerService(Consumer.class, consumer,
+ new Hashtable<>(Collections.singletonMap(Constants.SERVICE_PID, "argeo.logging.configuration")));
+ bundleContext.registerService(Flow.Publisher.class, supplier.get(),
+ new Hashtable<>(Collections.singletonMap(Constants.SERVICE_PID, "argeo.logging.publisher")));
+ }
osgiBoot = new OsgiBoot(bundleContext);
osgiBoot.bootstrap(config);