public class ManagedServiceFactoryFactoryBean extends java.lang.Object implements org.springframework.beans.factory.InitializingBean, org.springframework.beans.factory.BeanClassLoaderAware, org.springframework.beans.factory.BeanFactoryAware, BundleContextAware, org.springframework.beans.factory.DisposableBean, org.springframework.beans.factory.FactoryBean<java.util.Collection>
Factory class that automatically manages instances based on the configuration available inside a
ManagedServiceFactory.
The factory returns a list of ServiceRegistration of all published instances.| Modifier and Type | Class and Description |
|---|---|
private class |
ManagedServiceFactoryFactoryBean.ConfigurationWatcher
Configuration Admin whiteboard 'listener'.
|
private class |
ManagedServiceFactoryFactoryBean.DestructionInvokerCache
Simple associating cache between types and disposable invoker.
|
private class |
ManagedServiceFactoryFactoryBean.InitialInjectionProcessor
Simple processor that applies the ConfigurationAdmin configuration before the bean is initialized.
|
| Modifier and Type | Field and Description |
|---|---|
private boolean |
autowireOnUpdate |
private org.springframework.beans.factory.support.DefaultListableBeanFactory |
beanFactory
embedded bean factory for instance management
|
private org.osgi.framework.BundleContext |
bundleContext
bundle context
|
private ExportContextClassLoaderEnum |
ccl
ccl
|
private java.lang.ClassLoader |
classLoader
class loader
|
private org.osgi.framework.ServiceRegistration |
configurationWatcher
configuration watcher registration
|
private boolean |
destroyed
destroyed flag - used since some CM implementations still call the service even though it was unregistered
|
private ManagedServiceFactoryFactoryBean.DestructionInvokerCache |
destructionInvokerFactory
special destruction invoker for managed-components/template beans
|
private InterfaceDetector |
detector
auto export
|
private java.lang.String |
factoryPid
Configuration Admin fpid
|
java.util.Map |
initialInjectionProperties |
private java.lang.Class<?>[] |
interfaces
interfaces
|
private OsgiServiceRegistrationListener[] |
listeners
listeners
|
private static org.apache.commons.logging.Log |
log
logger
|
private java.lang.Object |
monitor
visibility monitor
|
private org.springframework.beans.factory.BeanFactory |
owningBeanFactory
owning bean factory - can be null
|
private java.util.Map<java.lang.String,OsgiServiceFactoryBean> |
serviceExporters
lookup map between exporters and associated pids
|
private java.util.Map |
serviceProperties
service properties
|
private DynamicCollection |
serviceRegistrations
inner bean service registrations
|
private org.springframework.beans.factory.support.RootBeanDefinition |
templateDefinition
bean definition template
|
private UpdateCallback |
updateCallback
update callback
|
private java.lang.String |
updateMethod |
private java.util.Collection<org.osgi.framework.ServiceRegistration> |
userReturnedCollection
read-only view of the registration
|
| Constructor and Description |
|---|
ManagedServiceFactoryFactoryBean() |
| Modifier and Type | Method and Description |
|---|---|
void |
afterPropertiesSet() |
private void |
createEmbeddedBeanFactory() |
private OsgiServiceFactoryBean |
createExporter(java.lang.String beanName,
java.lang.Object bean) |
private void |
createInstance(java.lang.String pid,
java.util.Map props) |
private void |
createOrUpdate(java.lang.String pid,
java.util.Map props) |
void |
destroy() |
private void |
destroyFactory() |
private void |
destroyInstance(java.lang.String pid) |
java.util.Collection |
getObject() |
java.lang.Class<java.util.Collection> |
getObjectType() |
boolean |
isSingleton() |
private void |
processTemplateDefinition() |
private void |
registerService() |
private void |
registerService(java.lang.String pid,
java.lang.Object bean) |
void |
setAutowireOnUpdate(boolean autowireOnUpdate)
Sets whether autowire on update should be performed automatically or not.
|
void |
setBeanClassLoader(java.lang.ClassLoader classLoader) |
void |
setBeanFactory(org.springframework.beans.factory.BeanFactory beanFactory) |
void |
setBundleContext(org.osgi.framework.BundleContext bundleContext)
Set the
BundleContext that this bean runs in. |
void |
setExportContextClassLoader(ExportContextClassLoaderEnum ccl) |
void |
setFactoryPid(java.lang.String factoryPid) |
void |
setInterfaceDetector(InterfaceDetector detector) |
void |
setInterfaces(java.lang.Class<?>[] interfaces) |
void |
setListeners(OsgiServiceRegistrationListener[] listeners)
Sets the listeners interested in registration and unregistration events.
|
void |
setServiceProperties(java.util.Map serviceProperties)
Sets the properties used when exposing the target as an OSGi service.
|
void |
setTemplateDefinition(org.springframework.beans.factory.config.BeanDefinition[] templateDefinition) |
void |
setUpdateMethod(java.lang.String updateMethod) |
private void |
unregisterService(java.lang.String pid) |
private void |
updateInstance(java.lang.String pid,
java.util.Map props) |
private static final org.apache.commons.logging.Log log
private final java.lang.Object monitor
private java.lang.String factoryPid
private org.osgi.framework.BundleContext bundleContext
private org.springframework.beans.factory.support.DefaultListableBeanFactory beanFactory
private org.springframework.beans.factory.support.RootBeanDefinition templateDefinition
private org.springframework.beans.factory.BeanFactory owningBeanFactory
private org.osgi.framework.ServiceRegistration configurationWatcher
private final DynamicCollection serviceRegistrations
private final java.util.Collection<org.osgi.framework.ServiceRegistration> userReturnedCollection
private final java.util.Map<java.lang.String,OsgiServiceFactoryBean> serviceExporters
private OsgiServiceRegistrationListener[] listeners
private InterfaceDetector detector
private ExportContextClassLoaderEnum ccl
private java.lang.Class<?>[] interfaces
private java.lang.ClassLoader classLoader
private boolean autowireOnUpdate
private java.lang.String updateMethod
private UpdateCallback updateCallback
public java.util.Map initialInjectionProperties
private boolean destroyed
private volatile java.util.Map serviceProperties
private volatile ManagedServiceFactoryFactoryBean.DestructionInvokerCache destructionInvokerFactory
public void afterPropertiesSet()
throws java.lang.Exception
afterPropertiesSet in interface org.springframework.beans.factory.InitializingBeanjava.lang.Exceptionprivate void processTemplateDefinition()
public void destroy()
throws java.lang.Exception
destroy in interface org.springframework.beans.factory.DisposableBeanjava.lang.Exceptionprivate void createEmbeddedBeanFactory()
private void registerService()
private void destroyFactory()
private void createOrUpdate(java.lang.String pid,
java.util.Map props)
private void createInstance(java.lang.String pid,
java.util.Map props)
private void registerService(java.lang.String pid,
java.lang.Object bean)
private OsgiServiceFactoryBean createExporter(java.lang.String beanName, java.lang.Object bean)
private void updateInstance(java.lang.String pid,
java.util.Map props)
private void destroyInstance(java.lang.String pid)
private void unregisterService(java.lang.String pid)
public void setBeanFactory(org.springframework.beans.factory.BeanFactory beanFactory)
throws org.springframework.beans.BeansException
setBeanFactory in interface org.springframework.beans.factory.BeanFactoryAwareorg.springframework.beans.BeansExceptionpublic void setBundleContext(org.osgi.framework.BundleContext bundleContext)
BundleContextAwareBundleContext that this bean runs in. Normally this can
be used to initialize an object.setBundleContext in interface BundleContextAwarebundleContext - the BundleContext object to be used
by this objectpublic java.util.Collection getObject()
throws java.lang.Exception
getObject in interface org.springframework.beans.factory.FactoryBean<java.util.Collection>java.lang.Exceptionpublic java.lang.Class<java.util.Collection> getObjectType()
getObjectType in interface org.springframework.beans.factory.FactoryBean<java.util.Collection>public boolean isSingleton()
isSingleton in interface org.springframework.beans.factory.FactoryBean<java.util.Collection>public void setListeners(OsgiServiceRegistrationListener[] listeners)
listeners - registration/unregistration listeners.public void setFactoryPid(java.lang.String factoryPid)
factoryPid - The factoryPid to set.public void setTemplateDefinition(org.springframework.beans.factory.config.BeanDefinition[] templateDefinition)
templateDefinition - The templateDefinition to set.public void setBeanClassLoader(java.lang.ClassLoader classLoader)
setBeanClassLoader in interface org.springframework.beans.factory.BeanClassLoaderAwarepublic void setInterfaceDetector(InterfaceDetector detector)
public void setExportContextClassLoader(ExportContextClassLoaderEnum ccl)
ccl - The ccl to set.public void setInterfaces(java.lang.Class<?>[] interfaces)
interfaces - The interfaces to set.public void setAutowireOnUpdate(boolean autowireOnUpdate)
autowireOnUpdate - public void setUpdateMethod(java.lang.String updateMethod)
updateMethod - The updateMethod to set.public void setServiceProperties(java.util.Map serviceProperties)
ServicePropertiesChangeListener), any updates to the properties will be reflected by the service
registration.serviceProperties - properties used for exporting the target as an OSGi service