Search in sources :

Example 1 with ShutdownEvent

use of io.micronaut.context.event.ShutdownEvent in project micronaut-core by micronaut-projects.

the class DefaultBeanContext method stop.

/**
 * The close method will shut down the context calling {@link jakarta.annotation.PreDestroy} hooks on loaded
 * singletons.
 */
@Override
public synchronized BeanContext stop() {
    if (terminating.compareAndSet(false, true)) {
        if (LOG.isDebugEnabled()) {
            LOG.debug("Stopping BeanContext");
        }
        publishEvent(new ShutdownEvent(this));
        attributes.clear();
        // need to sort registered singletons so that beans with that require other beans appear first
        List<BeanRegistration> objects = topologicalSort(singletonObjects.values());
        Set<Integer> processed = new HashSet<>();
        for (BeanRegistration beanRegistration : objects) {
            BeanDefinition def = beanRegistration.beanDefinition;
            Object bean = beanRegistration.bean;
            int sysId = System.identityHashCode(bean);
            if (processed.contains(sysId)) {
                continue;
            }
            if (LOG_LIFECYCLE.isDebugEnabled()) {
                LOG_LIFECYCLE.debug("Destroying bean [{}] with identifier [{}]", bean, beanRegistration.identifier);
            }
            processed.add(sysId);
            try {
                disposeBean(beanRegistration, def.asArgument(), bean, def);
            } catch (BeanDestructionException e) {
                if (LOG.isErrorEnabled()) {
                    LOG.error(e.getMessage(), e);
                }
            }
        }
        terminating.set(false);
        running.set(false);
    }
    return this;
}
Also used : BeanDestructionException(io.micronaut.context.exceptions.BeanDestructionException) ShutdownEvent(io.micronaut.context.event.ShutdownEvent) ProxyBeanDefinition(io.micronaut.inject.ProxyBeanDefinition) BeanDefinition(io.micronaut.inject.BeanDefinition) ValidatedBeanDefinition(io.micronaut.inject.ValidatedBeanDefinition) DisposableBeanDefinition(io.micronaut.inject.DisposableBeanDefinition) InitializingBeanDefinition(io.micronaut.inject.InitializingBeanDefinition) FieldInjectionPoint(io.micronaut.inject.FieldInjectionPoint) ConstructorInjectionPoint(io.micronaut.inject.ConstructorInjectionPoint) InjectionPoint(io.micronaut.inject.InjectionPoint) MethodInjectionPoint(io.micronaut.inject.MethodInjectionPoint) HashSet(java.util.HashSet)

Aggregations

ShutdownEvent (io.micronaut.context.event.ShutdownEvent)1 BeanDestructionException (io.micronaut.context.exceptions.BeanDestructionException)1 BeanDefinition (io.micronaut.inject.BeanDefinition)1 ConstructorInjectionPoint (io.micronaut.inject.ConstructorInjectionPoint)1 DisposableBeanDefinition (io.micronaut.inject.DisposableBeanDefinition)1 FieldInjectionPoint (io.micronaut.inject.FieldInjectionPoint)1 InitializingBeanDefinition (io.micronaut.inject.InitializingBeanDefinition)1 InjectionPoint (io.micronaut.inject.InjectionPoint)1 MethodInjectionPoint (io.micronaut.inject.MethodInjectionPoint)1 ProxyBeanDefinition (io.micronaut.inject.ProxyBeanDefinition)1 ValidatedBeanDefinition (io.micronaut.inject.ValidatedBeanDefinition)1 HashSet (java.util.HashSet)1