Search in sources :

Example 1 with ReplayQueueEventProxy

use of org.apache.felix.ipojo.extender.internal.queue.debug.ReplayQueueEventProxy in project felix by apache.

the class Extender method start.

/**
 * The iPOJO bundle is starting.
 * This method configures the iPOJO system (internal dispatcher and bundle processing). Then it initiates the
 * bundle processing.
 * <p/>
 * To optimize the processing, we process the iPOJO bundle first.
 *
 * @param context the iPOJO's bundle bundle context
 * @throws Exception something terrible happen during startup
 */
public void start(BundleContext context) throws Exception {
    m_context = context;
    m_bundle = context.getBundle();
    m_logger = new Logger(m_context, "IPOJO-Main-Extender");
    enablingDispatcher(context, m_logger);
    enablingSynchronousProcessing(context, m_logger);
    // Create the dispatcher only if required.
    if (DISPATCHER_ENABLED) {
        EventDispatcher.create(context);
    }
    // Initialize ConfigurationTracker
    ConfigurationTracker.initialize();
    // Initialize the queue event proxy if wanted
    ReplayQueueEventProxy proxy = null;
    if (Boolean.getBoolean(BOOTSTRAP_QUEUE_DEBUG_PROPERTY)) {
        proxy = new ReplayQueueEventProxy();
        context.registerService(QueueEventProxy.class, proxy, null);
    }
    BundleProcessor extensionBundleProcessor = new ExtensionBundleProcessor(m_logger);
    BundleProcessor componentsProcessor = new ComponentsBundleProcessor(m_logger);
    BundleProcessor configurationProcessor = new ConfigurationProcessor(m_logger);
    if (SYNCHRONOUS_PROCESSING_ENABLED) {
        m_queueService = new EnforcedQueueService(new HeaderPreferenceSelection(), new SynchronousQueueService(context), Preference.SYNC, m_logger);
        // If required, add the event proxy
        if (proxy != null) {
            m_queueService.addQueueListener(proxy);
        }
    } else {
        // Build a thread factory that will groups extender's thread together
        ThreadFactory threadFactory = new GroupThreadFactory(new ThreadGroup("iPOJO Extender"));
        threadFactory = new NamingThreadFactory(threadFactory);
        threadFactory = new PrefixedThreadFactory(threadFactory, "[iPOJO] ");
        // Create the queue services
        SynchronousQueueService sync = new SynchronousQueueService(context);
        ExecutorQueueService async = new ExecutorQueueService(context, Integer.getInteger(ExecutorQueueService.THREADPOOL_SIZE_PROPERTY, // default to 1 if no system property is set
        1), threadFactory);
        m_queueService = new PreferenceQueueService(new HeaderPreferenceSelection(), sync, async);
        extensionBundleProcessor = new QueuingActivationProcessor(extensionBundleProcessor, m_queueService);
        componentsProcessor = new QueuingActivationProcessor(componentsProcessor, m_queueService);
        configurationProcessor = new QueuingActivationProcessor(configurationProcessor, m_queueService);
        // If required, add the event proxy to both real services
        if (proxy != null) {
            sync.addQueueListener(proxy);
            async.addQueueListener(proxy);
        }
    }
    m_queueService.start();
    // Start linking
    m_linker = new DeclarationLinker(context, m_queueService);
    m_linker.start();
    m_processor = ChainedBundleProcessor.create(extensionBundleProcessor, componentsProcessor, configurationProcessor);
    m_processor.start();
    // Begin by initializing core handlers
    m_processor.activate(m_bundle);
    m_tracker = new BundleTracker(context, Bundle.ACTIVE, new BundleTrackerCustomizer() {

        public Object addingBundle(final Bundle bundle, final BundleEvent event) {
            if (bundle.getBundleId() == m_bundle.getBundleId()) {
                // Not interested in our own bundle
                return null;
            }
            m_processor.activate(bundle);
            return bundle;
        }

        public void modifiedBundle(final Bundle bundle, final BundleEvent event, final Object object) {
        }

        public void removedBundle(final Bundle bundle, final BundleEvent event, final Object object) {
            m_processor.deactivate(bundle);
        }
    });
    m_tracker.open();
    m_declarationService = new DeclarationServiceFactory(context);
    m_declarationService.start();
    m_logger.log(Logger.INFO, "iPOJO Main Extender started");
}
Also used : NamingThreadFactory(org.apache.felix.ipojo.extender.internal.queue.NamingThreadFactory) GroupThreadFactory(org.apache.felix.ipojo.extender.internal.queue.GroupThreadFactory) PrefixedThreadFactory(org.apache.felix.ipojo.extender.internal.queue.PrefixedThreadFactory) ThreadFactory(java.util.concurrent.ThreadFactory) NamingThreadFactory(org.apache.felix.ipojo.extender.internal.queue.NamingThreadFactory) HeaderPreferenceSelection(org.apache.felix.ipojo.extender.internal.queue.pref.HeaderPreferenceSelection) GroupThreadFactory(org.apache.felix.ipojo.extender.internal.queue.GroupThreadFactory) BundleTracker(org.osgi.util.tracker.BundleTracker) SynchronousQueueService(org.apache.felix.ipojo.extender.internal.queue.SynchronousQueueService) Logger(org.apache.felix.ipojo.util.Logger) BundleTrackerCustomizer(org.osgi.util.tracker.BundleTrackerCustomizer) EnforcedQueueService(org.apache.felix.ipojo.extender.internal.queue.pref.enforce.EnforcedQueueService) PreferenceQueueService(org.apache.felix.ipojo.extender.internal.queue.pref.PreferenceQueueService) DeclarationServiceFactory(org.apache.felix.ipojo.extender.internal.declaration.service.DeclarationServiceFactory) DeclarationLinker(org.apache.felix.ipojo.extender.internal.linker.DeclarationLinker) ReplayQueueEventProxy(org.apache.felix.ipojo.extender.internal.queue.debug.ReplayQueueEventProxy) ExecutorQueueService(org.apache.felix.ipojo.extender.internal.queue.ExecutorQueueService) PrefixedThreadFactory(org.apache.felix.ipojo.extender.internal.queue.PrefixedThreadFactory)

Aggregations

ThreadFactory (java.util.concurrent.ThreadFactory)1 DeclarationServiceFactory (org.apache.felix.ipojo.extender.internal.declaration.service.DeclarationServiceFactory)1 DeclarationLinker (org.apache.felix.ipojo.extender.internal.linker.DeclarationLinker)1 ExecutorQueueService (org.apache.felix.ipojo.extender.internal.queue.ExecutorQueueService)1 GroupThreadFactory (org.apache.felix.ipojo.extender.internal.queue.GroupThreadFactory)1 NamingThreadFactory (org.apache.felix.ipojo.extender.internal.queue.NamingThreadFactory)1 PrefixedThreadFactory (org.apache.felix.ipojo.extender.internal.queue.PrefixedThreadFactory)1 SynchronousQueueService (org.apache.felix.ipojo.extender.internal.queue.SynchronousQueueService)1 ReplayQueueEventProxy (org.apache.felix.ipojo.extender.internal.queue.debug.ReplayQueueEventProxy)1 HeaderPreferenceSelection (org.apache.felix.ipojo.extender.internal.queue.pref.HeaderPreferenceSelection)1 PreferenceQueueService (org.apache.felix.ipojo.extender.internal.queue.pref.PreferenceQueueService)1 EnforcedQueueService (org.apache.felix.ipojo.extender.internal.queue.pref.enforce.EnforcedQueueService)1 Logger (org.apache.felix.ipojo.util.Logger)1 BundleTracker (org.osgi.util.tracker.BundleTracker)1 BundleTrackerCustomizer (org.osgi.util.tracker.BundleTrackerCustomizer)1