in src/main/java/org/apache/sling/launchpad/base/impl/DefaultStartupHandler.java [119:183]
public DefaultStartupHandler(final BundleContext context,
final Logger logger,
final StartupManager manager,
final long startedAt) {
this.logger = logger;
this.bundleContext = context;
this.startedAt = startedAt;
this.startupMode = manager.getMode();
this.targetStartLevel = manager.getTargetStartLevel();
this.startupManager = manager;
StartupListener listener = null;
try {
listener = new MBeanStartupListener();
} catch ( final Exception ignore ) {
// ignore
}
this.mbeanStartupListener = listener;
this.listenerTracker = new ServiceTracker<>(context, StartupListener.class,
new ServiceTrackerCustomizer<StartupListener, StartupListener>() {
@Override
public void removedService(final ServiceReference<StartupListener> reference, final StartupListener service) {
context.ungetService(reference);
}
@Override
public void modifiedService(final ServiceReference<StartupListener> reference, final StartupListener service) {
// nothing to do
}
@Override
public StartupListener addingService(final ServiceReference<StartupListener> reference) {
final StartupListener listener = context.getService(reference);
if (listener != null) {
try {
listener.inform(startupMode, finished.get());
} catch (final Throwable t) {
logger.log(Logger.LOG_ERROR, "Error calling StartupListener " + listener, t);
}
}
return listener;
}
});
this.listenerTracker.open();
this.startLevelService = (StartLevel)context.getService(context.getServiceReference(StartLevel.class.getName()));
context.addFrameworkListener(this);
this.useIncremental = this.startupMode != StartupMode.RESTART && manager.isIncrementalStartupEnabled();
if ( !this.useIncremental ) {
final Bundle[] bundles = context.getBundles();
this.expectedBundlesCount = (bundles != null && bundles.length > 0 ? bundles.length : 10);
context.addBundleListener(this);
} else {
this.expectedBundlesCount = 10;
}
this.bundleContext.registerService(StartupHandler.class.getName(), this, null);
this.log(Logger.LOG_INFO, "Started startup handler with target start level="
+ String.valueOf(this.targetStartLevel) + ", and expected bundle count=" + String.valueOf(this.expectedBundlesCount));
final Thread t = new Thread(this);
t.start();
}