org.springframework.osgi.context.support
Class AbstractDelegatedExecutionApplicationContext

java.lang.Object
  extended by org.springframework.core.io.DefaultResourceLoader
      extended by org.springframework.context.support.AbstractApplicationContext
          extended by org.springframework.context.support.AbstractRefreshableApplicationContext
              extended by org.springframework.osgi.context.support.AbstractOsgiBundleApplicationContext
                  extended by org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext
All Implemented Interfaces:
BeanFactory, DisposableBean, HierarchicalBeanFactory, ListableBeanFactory, ApplicationContext, ApplicationEventPublisher, ConfigurableApplicationContext, Lifecycle, MessageSource, ResourceLoader, ResourcePatternResolver, ConfigurableOsgiBundleApplicationContext, DelegatedExecutionOsgiBundleApplicationContext
Direct Known Subclasses:
OsgiBundleXmlApplicationContext

public abstract class AbstractDelegatedExecutionApplicationContext
extends AbstractOsgiBundleApplicationContext
implements DelegatedExecutionOsgiBundleApplicationContext

OSGi-specific application context that delegates the execution of its life cycle methods to a different class. The main reason behind this is to break the startup of the application context in steps that can be executed asynchronously.

The refresh() and AbstractApplicationContext.close() methods delegate their execution to an OsgiBundleApplicationContextExecutor class that chooses how to call the lifecycle methods.

One can still call the 'traditional' lifecycle methods through normalRefresh() and normalClose().

Author:
Costin Leau
See Also:
DelegatedExecutionOsgiBundleApplicationContext

Field Summary
 
Fields inherited from class org.springframework.context.support.AbstractApplicationContext
APPLICATION_EVENT_MULTICASTER_BEAN_NAME, LIFECYCLE_PROCESSOR_BEAN_NAME, logger, MESSAGE_SOURCE_BEAN_NAME
 
Fields inherited from interface org.springframework.osgi.context.ConfigurableOsgiBundleApplicationContext
APPLICATION_CONTEXT_SERVICE_PROPERTY_NAME, BUNDLE_BEAN_NAME, BUNDLE_CONTEXT_BEAN_NAME
 
Fields inherited from interface org.springframework.context.ConfigurableApplicationContext
CONFIG_LOCATION_DELIMITERS, CONVERSION_SERVICE_BEAN_NAME, LOAD_TIME_WEAVER_BEAN_NAME, SYSTEM_ENVIRONMENT_BEAN_NAME, SYSTEM_PROPERTIES_BEAN_NAME
 
Fields inherited from interface org.springframework.beans.factory.BeanFactory
FACTORY_BEAN_PREFIX
 
Fields inherited from interface org.springframework.core.io.support.ResourcePatternResolver
CLASSPATH_ALL_URL_PREFIX
 
Fields inherited from interface org.springframework.core.io.ResourceLoader
CLASSPATH_URL_PREFIX
 
Constructor Summary
AbstractDelegatedExecutionApplicationContext()
          Constructs a new AbstractDelegatedExecutionApplicationContext instance.
AbstractDelegatedExecutionApplicationContext(ApplicationContext parent)
          Constructs a new AbstractDelegatedExecutionApplicationContext instance.
 
Method Summary
 void completeRefresh()
          The second, last phase of the refresh.
protected  void doClose()
          Unregister the ApplicationContext OSGi service (in case there is any).
 OsgiBundleApplicationContextEventMulticaster getDelegatedEventMulticaster()
          Returns the OSGi event multicaster (if any) associated with this application context.
protected  void invokeBeanFactoryPostProcessors(ConfigurableListableBeanFactory beanFactory)
           
protected  void loadBeanDefinitions(DefaultListableBeanFactory beanFactory)
           
 void normalClose()
          Non-delegated close operation (execute ConfigurableApplicationContext.close() in the traditional way).
 void normalRefresh()
          Non-delegated refresh operation (execute ConfigurableApplicationContext.refresh() in the traditional way).
 void refresh()
          Delegate execution of refresh method to a third party.
protected  void registerBeanPostProcessors(ConfigurableListableBeanFactory beanFactory)
           
protected  void registerBeanPostProcessors(ConfigurableListableBeanFactory beanFactory, Class<?> type, Class<?> exclude, boolean check)
          Instantiate and invoke all registered BeanPostProcessor beans, respecting explicit order if given.
 void setContextClassLoaderProvider(ContextClassLoaderProvider contextClassLoaderProvider)
          Sets the ContextClassLoaderProvider used by this OSGi application context instance.
 void setDelegatedEventMulticaster(ApplicationEventMulticaster multicaster)
          Sets the OSGi multicaster by using a Spring ApplicationEventMulticaster.
 void setDelegatedEventMulticaster(OsgiBundleApplicationContextEventMulticaster multicaster)
          Allows a delegated OsgiBundleApplicationContextEventMulticaster, external to the application context, to be used for sending OSGi application context events regarding the application context life cycle.
 void setExecutor(OsgiBundleApplicationContextExecutor executor)
          Assigns the OsgiBundleApplicationContextExecutor for this delegated context.
 void startRefresh()
          First phase of the refresh.
 
Methods inherited from class org.springframework.osgi.context.support.AbstractOsgiBundleApplicationContext
createResourcePatternResolver, customizeApplicationContextServiceProperties, destroyBeans, finishRefresh, getBundle, getBundleContext, getClassLoader, getConfigLocations, getDefaultConfigLocations, getResource, getResourceByPath, getResourcePatternResolver, getResources, postProcessBeanFactory, prepareRefresh, setBundleContext, setClassLoader, setConfigLocations, setPublishContextAsService
 
Methods inherited from class org.springframework.context.support.AbstractRefreshableApplicationContext
cancelRefresh, closeBeanFactory, createBeanFactory, customizeBeanFactory, getBeanFactory, hasBeanFactory, refreshBeanFactory, setAllowBeanDefinitionOverriding, setAllowCircularReferences
 
Methods inherited from class org.springframework.context.support.AbstractApplicationContext
addApplicationListener, addBeanFactoryPostProcessor, addListener, close, containsBean, containsBeanDefinition, containsLocalBean, destroy, findAnnotationOnBean, finishBeanFactoryInitialization, getAliases, getApplicationListeners, getAutowireCapableBeanFactory, getBean, getBean, getBean, getBean, getBeanDefinitionCount, getBeanDefinitionNames, getBeanFactoryPostProcessors, getBeanNamesForType, getBeanNamesForType, getBeansOfType, getBeansOfType, getBeansWithAnnotation, getDisplayName, getId, getInternalParentBeanFactory, getInternalParentMessageSource, getMessage, getMessage, getMessage, getParent, getParentBeanFactory, getStartupDate, getType, initApplicationEventMulticaster, initLifecycleProcessor, initMessageSource, isActive, isPrototype, isRunning, isSingleton, isTypeMatch, obtainFreshBeanFactory, onClose, onRefresh, prepareBeanFactory, publishEvent, registerListeners, registerShutdownHook, setDisplayName, setId, setParent, start, stop, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface org.springframework.osgi.context.ConfigurableOsgiBundleApplicationContext
getBundle, getBundleContext, setBundleContext, setConfigLocations, setPublishContextAsService
 
Methods inherited from interface org.springframework.context.ConfigurableApplicationContext
addApplicationListener, addBeanFactoryPostProcessor, close, getBeanFactory, isActive, registerShutdownHook, setId, setParent
 
Methods inherited from interface org.springframework.context.ApplicationContext
getAutowireCapableBeanFactory, getDisplayName, getId, getParent, getStartupDate
 
Methods inherited from interface org.springframework.beans.factory.ListableBeanFactory
containsBeanDefinition, findAnnotationOnBean, getBeanDefinitionCount, getBeanDefinitionNames, getBeanNamesForType, getBeanNamesForType, getBeansOfType, getBeansOfType, getBeansWithAnnotation
 
Methods inherited from interface org.springframework.beans.factory.HierarchicalBeanFactory
containsLocalBean, getParentBeanFactory
 
Methods inherited from interface org.springframework.beans.factory.BeanFactory
containsBean, getAliases, getBean, getBean, getBean, getBean, getType, isPrototype, isSingleton, isTypeMatch
 
Methods inherited from interface org.springframework.context.MessageSource
getMessage, getMessage, getMessage
 
Methods inherited from interface org.springframework.context.ApplicationEventPublisher
publishEvent
 
Methods inherited from interface org.springframework.core.io.support.ResourcePatternResolver
getResources
 
Methods inherited from interface org.springframework.core.io.ResourceLoader
getClassLoader, getResource
 
Methods inherited from interface org.springframework.context.Lifecycle
isRunning, start, stop
 

Constructor Detail

AbstractDelegatedExecutionApplicationContext

public AbstractDelegatedExecutionApplicationContext()
Constructs a new AbstractDelegatedExecutionApplicationContext instance.


AbstractDelegatedExecutionApplicationContext

public AbstractDelegatedExecutionApplicationContext(ApplicationContext parent)
Constructs a new AbstractDelegatedExecutionApplicationContext instance.

Parameters:
parent - parent application context
Method Detail

refresh

public void refresh()
             throws BeansException,
                    IllegalStateException
Delegate execution of refresh method to a third party. This allows breaking the refresh process into several small pieces providing continuation-like behaviour or completion of the refresh method on several threads, in a asynch manner.

By default, the refresh method in executed in one go (normal behaviour).

Specified by:
refresh in interface ConfigurableApplicationContext
Overrides:
refresh in class AbstractApplicationContext
Throws:
BeansException
IllegalStateException

normalRefresh

public void normalRefresh()
Description copied from interface: DelegatedExecutionOsgiBundleApplicationContext
Non-delegated refresh operation (execute ConfigurableApplicationContext.refresh() in the traditional way).

Specified by:
normalRefresh in interface DelegatedExecutionOsgiBundleApplicationContext
See Also:
ConfigurableApplicationContext.refresh()

normalClose

public void normalClose()
Description copied from interface: DelegatedExecutionOsgiBundleApplicationContext
Non-delegated close operation (execute ConfigurableApplicationContext.close() in the traditional way).

Specified by:
normalClose in interface DelegatedExecutionOsgiBundleApplicationContext
See Also:
ConfigurableApplicationContext.close()

doClose

protected void doClose()
Description copied from class: AbstractOsgiBundleApplicationContext
Unregister the ApplicationContext OSGi service (in case there is any).

Overrides:
doClose in class AbstractOsgiBundleApplicationContext

startRefresh

public void startRefresh()
Description copied from interface: DelegatedExecutionOsgiBundleApplicationContext
First phase of the refresh. Normally, this just prepares the beanFactory but does not instantiates any beans.

Specified by:
startRefresh in interface DelegatedExecutionOsgiBundleApplicationContext

completeRefresh

public void completeRefresh()
Description copied from interface: DelegatedExecutionOsgiBundleApplicationContext
The second, last phase of the refresh. Executes after a certain condition, imposed by the executor, has been met. Finishes the rest of the refresh operation. Normally, this operations performs most of the refresh work, such as instantiating singletons.

Specified by:
completeRefresh in interface DelegatedExecutionOsgiBundleApplicationContext

invokeBeanFactoryPostProcessors

protected void invokeBeanFactoryPostProcessors(ConfigurableListableBeanFactory beanFactory)
Overrides:
invokeBeanFactoryPostProcessors in class AbstractApplicationContext

registerBeanPostProcessors

protected void registerBeanPostProcessors(ConfigurableListableBeanFactory beanFactory)
Overrides:
registerBeanPostProcessors in class AbstractApplicationContext

registerBeanPostProcessors

protected void registerBeanPostProcessors(ConfigurableListableBeanFactory beanFactory,
                                          Class<?> type,
                                          Class<?> exclude,
                                          boolean check)
Instantiate and invoke all registered BeanPostProcessor beans, respecting explicit order if given.

Must be called before any instantiation of application beans. Very similar to AbstractApplicationContext.invokeBeanFactoryPostProcessors(org.springframework.beans.factory.config.ConfigurableListableBeanFactory) but allowing exclusion of a certain type.


setExecutor

public void setExecutor(OsgiBundleApplicationContextExecutor executor)
Description copied from interface: DelegatedExecutionOsgiBundleApplicationContext
Assigns the OsgiBundleApplicationContextExecutor for this delegated context.

Specified by:
setExecutor in interface DelegatedExecutionOsgiBundleApplicationContext
Parameters:
executor - the executor of this application context, to which the refresh method is delegated to

loadBeanDefinitions

protected void loadBeanDefinitions(DefaultListableBeanFactory beanFactory)
                            throws IOException,
                                   BeansException
Specified by:
loadBeanDefinitions in class AbstractRefreshableApplicationContext
Throws:
IOException
BeansException

setDelegatedEventMulticaster

public void setDelegatedEventMulticaster(OsgiBundleApplicationContextEventMulticaster multicaster)
Description copied from interface: DelegatedExecutionOsgiBundleApplicationContext
Allows a delegated OsgiBundleApplicationContextEventMulticaster, external to the application context, to be used for sending OSGi application context events regarding the application context life cycle. This method is mainly intended for monitoring the context lifecycle by third parties (such as the OSGi extender). It's up to the implementation to decide whether this setter method is required or not.

Specified by:
setDelegatedEventMulticaster in interface DelegatedExecutionOsgiBundleApplicationContext
Parameters:
multicaster - the application multicaster used for sending events triggered by the delegated execution.
See Also:
OsgiBundleApplicationContextEvent

setDelegatedEventMulticaster

public void setDelegatedEventMulticaster(ApplicationEventMulticaster multicaster)
Sets the OSGi multicaster by using a Spring ApplicationEventMulticaster. This method is added as a covenience.

Parameters:
multicaster - Spring multi-caster used for propagating OSGi specific events
See Also:
OsgiBundleApplicationContextEventMulticasterAdapter

getDelegatedEventMulticaster

public OsgiBundleApplicationContextEventMulticaster getDelegatedEventMulticaster()
Description copied from interface: DelegatedExecutionOsgiBundleApplicationContext
Returns the OSGi event multicaster (if any) associated with this application context.

Specified by:
getDelegatedEventMulticaster in interface DelegatedExecutionOsgiBundleApplicationContext
Returns:
the OSGi event multicaster associated with this context

setContextClassLoaderProvider

public void setContextClassLoaderProvider(ContextClassLoaderProvider contextClassLoaderProvider)
Sets the ContextClassLoaderProvider used by this OSGi application context instance. By default, DefaultContextClassLoaderProvider is used.

Parameters:
contextClassLoaderProvider - context class loader provider to use
See Also:
ContextClassLoaderProvider, DefaultContextClassLoaderProvider


Copyright © 2006-2011 Spring Framework. All Rights Reserved.