public DefaultStartupHandler()

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();
    }