Class AbstractPropertyBackedBean
- java.lang.Object
-
- org.alfresco.repo.management.subsystems.AbstractPropertyBackedBean
-
- All Implemented Interfaces:
java.util.EventListener,PropertyBackedBean,PropertyBackedBeanState,org.springframework.beans.factory.Aware,org.springframework.beans.factory.BeanNameAware,org.springframework.beans.factory.DisposableBean,org.springframework.beans.factory.InitializingBean,org.springframework.context.ApplicationContextAware,org.springframework.context.ApplicationListener<org.springframework.context.ApplicationEvent>
- Direct Known Subclasses:
AuditModelRegistryImpl,ChildApplicationContextFactory,CompositeDataBean,DefaultChildApplicationContextManager,SwitchableApplicationContextFactory
public abstract class AbstractPropertyBackedBean extends java.lang.Object implements PropertyBackedBean, org.springframework.context.ApplicationContextAware, org.springframework.context.ApplicationListener<org.springframework.context.ApplicationEvent>, org.springframework.beans.factory.InitializingBean, org.springframework.beans.factory.DisposableBean, org.springframework.beans.factory.BeanNameAware
A base class forPropertyBackedBeans. Gets its category from its Spring bean name and automatically propagates and resolves property defaults on initialization. Automatically destroys itself on server shutdown. Communicates its creation and destruction and start and stop events to aPropertyBackedBeanRegistry. Listens for start and stop events from remote nodes in order to keep the bean in sync with edits made on a remote node. On receiving a start event from a remote node, the bean is completely reinitialized, allowing it to be resynchronized with any persisted changes.- Author:
- dward
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description classAbstractPropertyBackedBean.DefaultResolverUses a SpringPropertyPlaceholderHelperto resolve placeholders in the property defaults.protected static classAbstractPropertyBackedBean.RuntimeStateThe lifecycle states.
-
Field Summary
Fields Modifier and Type Field Description protected static java.lang.StringDEFAULT_INSTANCE_NAMEThe default final part of an ID.protected java.util.concurrent.locks.ReentrantReadWriteLocklockLock for concurrent access.protected AbstractPropertyBackedBean.RuntimeStateruntimeState
-
Constructor Summary
Constructors Constructor Description AbstractPropertyBackedBean()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description voidafterPropertiesSet()protected voidapplyDefaultOverrides(PropertyBackedBeanState state)Applies default overrides to the initial state.protected abstract PropertyBackedBeanStatecreateInitialState()Creates the initial state.voiddestroy()protected voiddestroy(boolean isPermanent)Releases any resources held by this component.protected voiddoInit()Initializes or resets the bean and its state.protected java.lang.StringgetCategory()Gets the category.java.lang.StringgetDescription(java.lang.String name)Gets a Human readable description of the property, e.g.protected java.util.PropertiesgetEncryptedPropertyDefaults()java.util.List<java.lang.String>getId()Gets a unique identifier for the bean.protected java.util.List<java.lang.String>getInstancePath()Gets the hierarchical instance path within the category (second part of the ID).protected org.springframework.context.ApplicationContextgetParent()Gets the parent application context.java.lang.StringgetProperty(java.lang.String name)Gets a property value.protected java.util.PropertiesgetPropertyDefaults()Gets the property defaults provided by the installer or System properties.java.util.Set<java.lang.String>getPropertyNames()Gets the names of all properties.protected PropertyBackedBeanRegistrygetRegistry()Gets the registry of all property backed beans.protected PropertyBackedBeanStategetState(boolean start)Gets the state.voidinit()Initializes or resets the bean and its state.booleanisUpdateable(java.lang.String name)Checks if a property is updateable.voidonApplicationEvent(org.springframework.context.ApplicationEvent event)java.lang.StringperformEarlyPropertyChecks(java.util.Map<java.lang.String,java.lang.String> properties)Check properties for invalid values usingSubsystemEarlyPropertyCheckersvoidremoveProperties(java.util.Collection<java.lang.String> properties)Removes properties added by code within the local node.voidremoveProperty(java.lang.String name)Removes a property added by code within the local node.protected java.lang.StringresolveDefault(java.lang.String name)Resolves the default value of a property, if there is one, expanding placholders as necessary.voidrevert()Reverts this component to its original default start state, removing any previously persisted state changes.voidsetApplicationContext(org.springframework.context.ApplicationContext applicationContext)voidsetAutoStart(boolean autoStart)Indicates whether the bean should be started on startup of the parent application context.voidsetBeanName(java.lang.String name)voidsetCategory(java.lang.String category)Sets the category (first part of the ID).voidsetEarlyPropertyCheckers(java.util.Map<java.lang.String,SubsystemEarlyPropertyChecker> earlyPropertyCheckers)voidsetEncryptedPropertyDefaults(java.util.Properties propertyDefaults)voidsetInstancePath(java.util.List<java.lang.String> instancePath)Sets the hierarchical instance path within the category (second part of the ID)..voidsetProperties(java.util.Map<java.lang.String,java.lang.String> properties)Tries setting the given properties on this component.voidsetProperty(java.lang.String name, java.lang.String value)Sets the value of a property.voidsetPropertyDefaults(java.util.Properties propertyDefaults)Sets the property defaults provided by the installer or System properties.voidsetRegistry(PropertyBackedBeanRegistry registry)Sets the registry of all property backed beans.voidsetSaveSetProperty(boolean saveSetProperty)When set to true, calls to setProperties / setProperty are persisted to the MBean if it exists.voidstart()Starts up the component, using its new property values.protected voidstart(boolean broadcastNow, boolean broadcastLater)Starts the bean, optionally broadcasting the event to remote nodes.voidstop()Stops the component, so that its property values can be changed.protected voidstop(boolean broadcast)Stops the bean, optionally broadcasting the event to remote nodes.
-
-
-
Field Detail
-
DEFAULT_INSTANCE_NAME
protected static final java.lang.String DEFAULT_INSTANCE_NAME
The default final part of an ID.- See Also:
- Constant Field Values
-
runtimeState
protected AbstractPropertyBackedBean.RuntimeState runtimeState
-
lock
protected java.util.concurrent.locks.ReentrantReadWriteLock lock
Lock for concurrent access.
-
-
Method Detail
-
setEarlyPropertyCheckers
public void setEarlyPropertyCheckers(java.util.Map<java.lang.String,SubsystemEarlyPropertyChecker> earlyPropertyCheckers)
-
setApplicationContext
public void setApplicationContext(org.springframework.context.ApplicationContext applicationContext) throws org.springframework.beans.BeansException- Specified by:
setApplicationContextin interfaceorg.springframework.context.ApplicationContextAware- Throws:
org.springframework.beans.BeansException
-
setRegistry
public void setRegistry(PropertyBackedBeanRegistry registry)
Sets the registry of all property backed beans.- Parameters:
registry- the registry of all property backed beans
-
getRegistry
protected PropertyBackedBeanRegistry getRegistry()
Gets the registry of all property backed beans.- Returns:
- the registry of all property backed beans
-
setBeanName
public void setBeanName(java.lang.String name)
- Specified by:
setBeanNamein interfaceorg.springframework.beans.factory.BeanNameAware
-
setCategory
public void setCategory(java.lang.String category)
Sets the category (first part of the ID).- Parameters:
category- the category
-
setInstancePath
public void setInstancePath(java.util.List<java.lang.String> instancePath)
Sets the hierarchical instance path within the category (second part of the ID)..- Parameters:
instancePath- the instance path
-
setAutoStart
public void setAutoStart(boolean autoStart)
Indicates whether the bean should be started on startup of the parent application context.- Parameters:
autoStart-trueif the bean should be started on startup of the parent application context
-
setPropertyDefaults
public void setPropertyDefaults(java.util.Properties propertyDefaults)
Sets the property defaults provided by the installer or System properties.- Parameters:
propertyDefaults- the property defaults
-
setEncryptedPropertyDefaults
public void setEncryptedPropertyDefaults(java.util.Properties propertyDefaults)
-
getPropertyDefaults
protected java.util.Properties getPropertyDefaults()
Gets the property defaults provided by the installer or System properties.- Returns:
- the property defaults
-
getEncryptedPropertyDefaults
protected java.util.Properties getEncryptedPropertyDefaults()
-
resolveDefault
protected java.lang.String resolveDefault(java.lang.String name)
Resolves the default value of a property, if there is one, expanding placholders as necessary.- Parameters:
name- the property name- Returns:
- the resolved default value or
nullif there isn't one
-
getParent
protected org.springframework.context.ApplicationContext getParent()
Gets the parent application context.- Returns:
- the parent application context
-
getState
protected PropertyBackedBeanState getState(boolean start)
Gets the state.- Parameters:
start- are we making use of the state? I.e. should we start it if it has not been already?- Returns:
- the state
-
setSaveSetProperty
public void setSaveSetProperty(boolean saveSetProperty)
When set to true, calls to setProperties / setProperty are persisted to the MBean if it exists.
-
performEarlyPropertyChecks
public java.lang.String performEarlyPropertyChecks(java.util.Map<java.lang.String,java.lang.String> properties)
Check properties for invalid values usingSubsystemEarlyPropertyCheckers- Parameters:
properties-- Returns:
- The complete error message in case of exceptions or empty string otherwise
-
afterPropertiesSet
public void afterPropertiesSet() throws java.lang.Exception- Specified by:
afterPropertiesSetin interfaceorg.springframework.beans.factory.InitializingBean- Throws:
java.lang.Exception
-
init
public final void init()
Initializes or resets the bean and its state.
-
doInit
protected void doInit()
Initializes or resets the bean and its state.
-
revert
public final void revert()
Reverts this component to its original default start state, removing any previously persisted state changes.- Specified by:
revertin interfacePropertyBackedBean
-
createInitialState
protected abstract PropertyBackedBeanState createInitialState() throws java.io.IOException
Creates the initial state.- Returns:
- the property backed bean state
- Throws:
java.io.IOException- Signals that an I/O exception has occurred.
-
applyDefaultOverrides
protected void applyDefaultOverrides(PropertyBackedBeanState state) throws java.io.IOException
Applies default overrides to the initial state.- Parameters:
state- the state- Throws:
java.io.IOException- Signals that an I/O exception has occurred.
-
getId
public java.util.List<java.lang.String> getId()
Gets a unique identifier for the bean. The ID is a List to encourage hierarchical structuring of IDs, e.g. to aid construction of JMX Object names and presentation in JConsole.- Specified by:
getIdin interfacePropertyBackedBean- Returns:
- the id
-
getCategory
protected java.lang.String getCategory()
Gets the category.- Returns:
- the category
-
getInstancePath
protected java.util.List<java.lang.String> getInstancePath()
Gets the hierarchical instance path within the category (second part of the ID).- Returns:
- the instance path
-
destroy
public final void destroy()
- Specified by:
destroyin interfaceorg.springframework.beans.factory.DisposableBean
-
destroy
protected void destroy(boolean isPermanent)
Releases any resources held by this component.- Parameters:
isPermanent- is the component being destroyed forever, i.e. should persisted values be removed? On server shutdown, this value would befalse, whereas on the removal of a dynamically created instance, this value would betrue.
-
isUpdateable
public boolean isUpdateable(java.lang.String name)
Checks if a property is updateable.- Specified by:
isUpdateablein interfacePropertyBackedBean- Parameters:
name- the property name- Returns:
trueif the property is updateable
-
getDescription
public java.lang.String getDescription(java.lang.String name)
Gets a Human readable description of the property, e.g. to provide via JMX.- Specified by:
getDescriptionin interfacePropertyBackedBean- Parameters:
name- the name- Returns:
- the description
-
onApplicationEvent
public void onApplicationEvent(org.springframework.context.ApplicationEvent event)
- Specified by:
onApplicationEventin interfaceorg.springframework.context.ApplicationListener<org.springframework.context.ApplicationEvent>
-
getProperty
public java.lang.String getProperty(java.lang.String name)
Gets a property value.- Specified by:
getPropertyin interfacePropertyBackedBeanState- Parameters:
name- the name- Returns:
- the property value
-
getPropertyNames
public java.util.Set<java.lang.String> getPropertyNames()
Gets the names of all properties.- Specified by:
getPropertyNamesin interfacePropertyBackedBeanState- Returns:
- the property names
-
setProperty
public void setProperty(java.lang.String name, java.lang.String value)Sets the value of a property. This may only be called afterPropertyBackedBeanState.stop().When called from code within the local node the values are saved to the database in the Enterprise edition and will be visible in a JMX client.
- Specified by:
setPropertyin interfacePropertyBackedBeanState- Parameters:
name-value-
-
setProperties
public void setProperties(java.util.Map<java.lang.String,java.lang.String> properties)
Tries setting the given properties on this component. Will leave the component in a started state consisting of the new properties if they are valid, or the previous state otherwise. Note that the new state still has to be confirmed to the entire cluster withPropertyBackedBeanState.start(), presumably after persistence of the new state has been completed.When called from code within the local node the values are saved to the database in the Enterprise edition and will be visible in a JMX client.
- Specified by:
setPropertiesin interfacePropertyBackedBean- Parameters:
properties- to be saved.
-
removeProperty
public void removeProperty(java.lang.String name)
Removes a property added by code within the local node.- Specified by:
removePropertyin interfacePropertyBackedBeanState- Parameters:
name- to be removed.
-
removeProperties
public void removeProperties(java.util.Collection<java.lang.String> properties)
Removes properties added by code within the local node.- Specified by:
removePropertiesin interfacePropertyBackedBean- Parameters:
properties- to be removed.
-
start
public final void start()
Starts up the component, using its new property values.- Specified by:
startin interfacePropertyBackedBeanState
-
start
protected void start(boolean broadcastNow, boolean broadcastLater)Starts the bean, optionally broadcasting the event to remote nodes.- Parameters:
broadcastNow- Should the event be broadcast immediately?broadcastLater- Should the event be broadcast ever?
-
stop
public final void stop()
Stops the component, so that its property values can be changed.- Specified by:
stopin interfacePropertyBackedBeanState
-
stop
protected void stop(boolean broadcast)
Stops the bean, optionally broadcasting the event to remote nodes.- Parameters:
broadcast- Should the event be broadcast?
-
-