Search in sources :

Example 1 with CamelEvent

use of org.apache.camel.spi.CamelEvent in project camel-spring-boot by apache.

the class CamelSpringBootApplicationListener method onApplicationEvent.

// Overridden
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
    CamelContext camelContext = applicationContext.getBean(CamelContext.class);
    // only add and start Camel if its stopped (initial state)
    if (event.getApplicationContext() == this.applicationContext && camelContext.getStatus().isStopped()) {
        LOG.debug("Post-processing CamelContext bean: {}", camelContext.getName());
        try {
            // we can use the default routes configurer
            RoutesConfigurer configurer = new RoutesConfigurer();
            if (configurationProperties.isRoutesCollectorEnabled()) {
                configurer.setRoutesCollector(springBootRoutesCollector);
            }
            configurer.setBeanPostProcessor(camelContext.adapt(ExtendedCamelContext.class).getBeanPostProcessor());
            configurer.setJavaRoutesExcludePattern(configurationProperties.getJavaRoutesExcludePattern());
            configurer.setJavaRoutesIncludePattern(configurationProperties.getJavaRoutesIncludePattern());
            configurer.setRoutesExcludePattern(configurationProperties.getRoutesExcludePattern());
            configurer.setRoutesIncludePattern(configurationProperties.getRoutesIncludePattern());
            configurer.configureRoutes(camelContext);
            for (CamelContextConfiguration camelContextConfiguration : camelContextConfigurations) {
                LOG.debug("CamelContextConfiguration found. Invoking beforeApplicationStart: {}", camelContextConfiguration);
                camelContextConfiguration.beforeApplicationStart(camelContext);
            }
            if (configurationProperties.isMainRunController()) {
                CamelMainRunController controller = new CamelMainRunController(applicationContext, camelContext);
                if (configurationProperties.getDurationMaxMessages() > 0 || configurationProperties.getDurationMaxIdleSeconds() > 0) {
                    if (configurationProperties.getDurationMaxMessages() > 0) {
                        LOG.info("CamelSpringBoot will terminate after processing {} messages", configurationProperties.getDurationMaxMessages());
                    }
                    if (configurationProperties.getDurationMaxIdleSeconds() > 0) {
                        LOG.info("CamelSpringBoot will terminate after being idle for more {} seconds", configurationProperties.getDurationMaxIdleSeconds());
                    }
                    // register lifecycle so we can trigger to shutdown the JVM when maximum number of messages has been processed
                    EventNotifier notifier = new MainDurationEventNotifier(camelContext, configurationProperties.getDurationMaxMessages(), configurationProperties.getDurationMaxIdleSeconds(), controller.getMainShutdownStrategy(), true, configurationProperties.isRoutesReloadRestartDuration(), configurationProperties.getDurationMaxAction());
                    // register our event notifier
                    ServiceHelper.startService(notifier);
                    camelContext.getManagementStrategy().addEventNotifier(notifier);
                }
                if (configurationProperties.getDurationMaxSeconds() > 0) {
                    LOG.info("CamelSpringBoot will terminate after {} seconds", configurationProperties.getDurationMaxSeconds());
                    terminateMainControllerAfter(camelContext, configurationProperties.getDurationMaxSeconds(), controller.getMainShutdownStrategy(), controller.getMainCompleteTask());
                }
                camelContext.addStartupListener(new StartupListener() {

                    @Override
                    public void onCamelContextStarted(CamelContext context, boolean alreadyStarted) throws Exception {
                        // not running on
                        if (!alreadyStarted) {
                            LOG.info("Starting CamelMainRunController to ensure the main thread keeps running");
                            controller.start();
                        }
                    }
                });
            } else {
                if (applicationContext instanceof ConfigurableApplicationContext) {
                    ConfigurableApplicationContext cac = (ConfigurableApplicationContext) applicationContext;
                    if (configurationProperties.getDurationMaxSeconds() > 0) {
                        LOG.info("CamelSpringBoot will terminate after {} seconds", configurationProperties.getDurationMaxSeconds());
                        terminateApplicationContext(cac, camelContext, configurationProperties.getDurationMaxSeconds());
                    }
                    if (configurationProperties.getDurationMaxMessages() > 0 || configurationProperties.getDurationMaxIdleSeconds() > 0) {
                        if (configurationProperties.getDurationMaxMessages() > 0) {
                            LOG.info("CamelSpringBoot will terminate after processing {} messages", configurationProperties.getDurationMaxMessages());
                        }
                        if (configurationProperties.getDurationMaxIdleSeconds() > 0) {
                            LOG.info("CamelSpringBoot will terminate after being idle for more {} seconds", configurationProperties.getDurationMaxIdleSeconds());
                        }
                        // needed by MainDurationEventNotifier to signal when we have processed the max messages
                        final MainShutdownStrategy strategy = new SimpleMainShutdownStrategy();
                        // register lifecycle so we can trigger to shutdown the JVM when maximum number of messages has been processed
                        EventNotifier notifier = new MainDurationEventNotifier(camelContext, configurationProperties.getDurationMaxMessages(), configurationProperties.getDurationMaxIdleSeconds(), strategy, false, configurationProperties.isRoutesReloadRestartDuration(), configurationProperties.getDurationMaxAction());
                        // register our event notifier
                        ServiceHelper.startService(notifier);
                        camelContext.getManagementStrategy().addEventNotifier(notifier);
                        terminateApplicationContext(cac, camelContext, strategy);
                    }
                }
            }
            if (!camelContextConfigurations.isEmpty()) {
                // we want to call these notifications just after CamelContext has been fully started
                // so use an event notifier to trigger when this happens
                camelContext.getManagementStrategy().addEventNotifier(new EventNotifierSupport() {

                    @Override
                    public void notify(CamelEvent eventObject) throws Exception {
                        for (CamelContextConfiguration camelContextConfiguration : camelContextConfigurations) {
                            LOG.debug("CamelContextConfiguration found. Invoking afterApplicationStart: {}", camelContextConfiguration);
                            try {
                                camelContextConfiguration.afterApplicationStart(camelContext);
                            } catch (Exception e) {
                                LOG.warn("Error during calling afterApplicationStart due " + e.getMessage() + ". This exception is ignored", e);
                            }
                        }
                    }

                    @Override
                    public boolean isEnabled(CamelEvent eventObject) {
                        return eventObject.getType() == Type.CamelContextStarted;
                    }
                });
            }
        } catch (Exception e) {
            throw new CamelSpringBootInitializationException(e);
        }
    } else {
        LOG.debug("Camel already started, not adding routes.");
    }
}
Also used : ExtendedCamelContext(org.apache.camel.ExtendedCamelContext) CamelContext(org.apache.camel.CamelContext) ConfigurableApplicationContext(org.springframework.context.ConfigurableApplicationContext) StartupListener(org.apache.camel.StartupListener) RoutesConfigurer(org.apache.camel.main.RoutesConfigurer) MainDurationEventNotifier(org.apache.camel.main.MainDurationEventNotifier) CamelEvent(org.apache.camel.spi.CamelEvent) EventNotifierSupport(org.apache.camel.support.EventNotifierSupport) MainDurationEventNotifier(org.apache.camel.main.MainDurationEventNotifier) EventNotifier(org.apache.camel.spi.EventNotifier) SimpleMainShutdownStrategy(org.apache.camel.main.SimpleMainShutdownStrategy) MainShutdownStrategy(org.apache.camel.main.MainShutdownStrategy) SimpleMainShutdownStrategy(org.apache.camel.main.SimpleMainShutdownStrategy)

Example 2 with CamelEvent

use of org.apache.camel.spi.CamelEvent in project camel-karaf by apache.

the class OsgiEventAdminNotifier method notify.

@Override
public void notify(CamelEvent event) throws Exception {
    EventAdmin eventAdmin = tracker.getService();
    if (eventAdmin == null) {
        return;
    }
    Dictionary<String, Object> props = new Hashtable<>();
    props.put(TYPE, getType(event));
    props.put(EVENT, event);
    props.put(TIMESTAMP, System.currentTimeMillis());
    props.put(BUNDLE, bundleContext.getBundle());
    props.put(BUNDLE_SYMBOLICNAME, bundleContext.getBundle().getSymbolicName());
    props.put(BUNDLE_ID, bundleContext.getBundle().getBundleId());
    props.put(BUNDLE_VERSION, getBundleVersion(bundleContext.getBundle()));
    try {
        props.put(CAUSE, event.getClass().getMethod("getCause").invoke(event));
    } catch (Throwable t) {
    // ignore
    }
    eventAdmin.postEvent(new Event(getTopic(event), props));
}
Also used : EventAdmin(org.osgi.service.event.EventAdmin) Hashtable(java.util.Hashtable) CamelEvent(org.apache.camel.spi.CamelEvent) Event(org.osgi.service.event.Event)

Example 3 with CamelEvent

use of org.apache.camel.spi.CamelEvent in project camel-quarkus by apache.

the class CamelContextRuntime method start.

@Override
public void start(String[] args) {
    if (args.length > 0) {
        LOGGER.info("Ignoring args: {}", Arrays.toString(args));
    }
    camelContext.getManagementStrategy().addEventNotifier(new EventNotifierSupport() {

        @Override
        public void notify(CamelEvent event) throws Exception {
            latch.countDown();
        }

        @Override
        public boolean isEnabled(CamelEvent event) {
            return event instanceof CamelEvent.CamelContextStoppedEvent;
        }
    });
    camelContext.start();
}
Also used : EventNotifierSupport(org.apache.camel.support.EventNotifierSupport) CamelEvent(org.apache.camel.spi.CamelEvent)

Aggregations

CamelEvent (org.apache.camel.spi.CamelEvent)3 EventNotifierSupport (org.apache.camel.support.EventNotifierSupport)2 Hashtable (java.util.Hashtable)1 CamelContext (org.apache.camel.CamelContext)1 ExtendedCamelContext (org.apache.camel.ExtendedCamelContext)1 StartupListener (org.apache.camel.StartupListener)1 MainDurationEventNotifier (org.apache.camel.main.MainDurationEventNotifier)1 MainShutdownStrategy (org.apache.camel.main.MainShutdownStrategy)1 RoutesConfigurer (org.apache.camel.main.RoutesConfigurer)1 SimpleMainShutdownStrategy (org.apache.camel.main.SimpleMainShutdownStrategy)1 EventNotifier (org.apache.camel.spi.EventNotifier)1 Event (org.osgi.service.event.Event)1 EventAdmin (org.osgi.service.event.EventAdmin)1 ConfigurableApplicationContext (org.springframework.context.ConfigurableApplicationContext)1