|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.alfresco.repo.management.subsystems.AbstractPropertyBackedBean
org.alfresco.repo.management.subsystems.ChildApplicationContextFactory
public class ChildApplicationContextFactory
A factory allowing initialization of an entire 'subsystem' in a child application context. As with other
PropertyBackedBean
s, can be stopped, reconfigured, started and tested. Each instance possesses a
typeName
property, that determines where the factory will look for default configuration for the
application context. In addition, its id
property will determine where the factory will look for
override configuration in the extension classpath.
The factory will search for a Spring application context in the classpath using the following patterns in order:
${}
placeholders, and will be configured with a
PropertyPlaceholderConfigurer
initialized with properties files found in classpath matching the following
patterns in order:
For advanced purposes, the class also allows management of 'composite' properties, that is properties that can be
populated with a sequence of zero or more objects, themselves registered as property-backed beans. Using the
compositePropertyTypes
property you can register a Map of property names to Java Bean classes. Each
property named in this map will then be materialized as a 'composite' property.
Composite property settings are best controlled either through a JMX console (Enterprise edition only) or
/alfresco-global.properties in the classpath (the replacement to /alfresco/extension/custom-repository.properties).
For example, suppose "imap.server.mountPoints" was registered as a composite property of type
RepositoryPathConfigBean
. You can then use the property to configure a list of
RepositoryPathConfigBean
s. First you specify in the property's value a list of zero or more 'instance names'.
Each name must be unique within the property.
imap.server.mountPoints=Repository_virtual,Repository_archive
Then, by magic you have two separate instances of RepositoryPathConfigBean
whose properties you can address
through an extended set of properties prefixed by "imap.server.mountPoints".
To set a property on one of the instances, you append ".value.<instance name>.<bean property name>" to the parent property name. For example:
imap.server.mountPoints.value.Repository_virtual.store=${spaces.store}
imap.server.mountPoints.value.Repository_virtual.path=/${spaces.company_home.childname}
To specify a default value for a property on all instances of the bean, you append ".default.<bean property name>" to the parent property name. For example:
imap.server.mountPoints.default.store=${spaces.store}
imap.server.mountPoints.default.path=/${spaces.company_home.childname}
Note that it's perfectly valid to use placeholders in property values that will be resolved from other global properties.
In order to actually utilize this configurable list of beans in your child application context, you simply need to
declare a ListFactoryBean
whose ID is the same name as the property. For example:
<bean id="imap.server.mountPoints" class="org.springframework.beans.factory.config.ListFactoryBean"> <property name="sourceList"> <!-- Whatever you declare in here will get replaced by the property value list --> <!-- This property is not actually required at all --> </property> </bean>Then, when the application context is started and before that bean is initialized, it will be given the current configured list of values for the composite property. Magic! This all sounds like a complex, yet primitive replacement for Spring, but it means you can do powerful things to reconfigure the system through an admin UI rather than editing XML.
Nested Class Summary | |
---|---|
protected class |
ChildApplicationContextFactory.ApplicationContextState
The Class ApplicationContextState. |
Nested classes/interfaces inherited from class org.alfresco.repo.management.subsystems.AbstractPropertyBackedBean |
---|
AbstractPropertyBackedBean.DefaultResolver |
Field Summary |
---|
Fields inherited from class org.alfresco.repo.management.subsystems.AbstractPropertyBackedBean |
---|
DEFAULT_INSTANCE_NAME, lock |
Constructor Summary | |
---|---|
ChildApplicationContextFactory()
Default constructor for container construction. |
|
ChildApplicationContextFactory(org.springframework.context.ApplicationContext parent,
PropertyBackedBeanRegistry registry,
java.util.Properties propertyDefaults,
java.lang.String category,
java.lang.String typeName,
java.util.List instancePath)
Constructor for dynamically created instances, e.g. |
Method Summary | |
---|---|
void |
afterPropertiesSet()
|
protected void |
applyDefaultOverrides(PropertyBackedBeanState state)
Applies default overrides to the initial state. |
protected PropertyBackedBeanState |
createInitialState()
Creates the initial state. |
protected void |
destroy(boolean permanent)
Releases any resources held by this component. |
org.springframework.context.ApplicationContext |
getApplicationContext()
Gets the application context, configured according to the properties of the factory. |
java.lang.String |
getDescription(java.lang.String name)
Gets a Human readable description of the property, e.g. |
java.lang.String |
getTypeName()
Gets the type name. |
boolean |
isUpdateable(java.lang.String name)
Checks if a property is updateable. |
void |
setCompositePropertyTypes(java.util.Map compositePropertyTypes)
Registers a set of composite propertes and their types. |
void |
setTypeName(java.lang.String typeName)
Sets the type name. |
Methods inherited from class org.alfresco.repo.management.subsystems.AbstractPropertyBackedBean |
---|
destroy, doInit, getCategory, getId, getInstancePath, getParent, getProperty, getPropertyDefaults, getPropertyNames, getRegistry, getState, init, onApplicationEvent, resolveDefault, revert, setApplicationContext, setAutoStart, setBeanName, setCategory, setInstancePath, setProperties, setProperty, setPropertyDefaults, setRegistry, start, start, stop, stop |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Methods inherited from interface org.alfresco.repo.management.subsystems.PropertyBackedBean |
---|
getId, revert, setProperties |
Methods inherited from interface org.alfresco.repo.management.subsystems.PropertyBackedBeanState |
---|
getProperty, getPropertyNames, setProperty, start, stop |
Constructor Detail |
---|
public ChildApplicationContextFactory()
public ChildApplicationContextFactory(org.springframework.context.ApplicationContext parent, PropertyBackedBeanRegistry registry, java.util.Properties propertyDefaults, java.lang.String category, java.lang.String typeName, java.util.List instancePath) throws java.io.IOException
DefaultChildApplicationContextManager
.
parent
- the parent application contextregistry
- the registry of property backed beanspropertyDefaults
- property defaults provided by the installer or System propertiescategory
- the categorytypeName
- the type nameinstancePath
- the instance path within the category
java.io.IOException
- Signals that an I/O exception has occurred.Method Detail |
---|
public void setTypeName(java.lang.String typeName)
typeName
- the typeName to setpublic java.lang.String getTypeName()
public void setCompositePropertyTypes(java.util.Map compositePropertyTypes)
compositePropertyTypes
- a map of property names to Java classes. The classes should follow standard Java Bean conventions. If
the class implements BeanNameAware
the instance name will be propagated to the
beanName
property automatically.public void afterPropertiesSet() throws java.lang.Exception
AbstractPropertyBackedBean
afterPropertiesSet
in interface org.springframework.beans.factory.InitializingBean
afterPropertiesSet
in class AbstractPropertyBackedBean
java.lang.Exception
protected PropertyBackedBeanState createInitialState() throws java.io.IOException
AbstractPropertyBackedBean
createInitialState
in class AbstractPropertyBackedBean
java.io.IOException
- Signals that an I/O exception has occurred.protected void applyDefaultOverrides(PropertyBackedBeanState state) throws java.io.IOException
AbstractPropertyBackedBean
applyDefaultOverrides
in class AbstractPropertyBackedBean
state
- the state
java.io.IOException
- Signals that an I/O exception has occurred.public boolean isUpdateable(java.lang.String name)
AbstractPropertyBackedBean
isUpdateable
in interface PropertyBackedBean
isUpdateable
in class AbstractPropertyBackedBean
name
- the property name
true
if the property is updateablepublic java.lang.String getDescription(java.lang.String name)
AbstractPropertyBackedBean
getDescription
in interface PropertyBackedBean
getDescription
in class AbstractPropertyBackedBean
name
- the name
protected void destroy(boolean permanent)
AbstractPropertyBackedBean
destroy
in class AbstractPropertyBackedBean
permanent
- is the component being destroyed forever, i.e. should persisted values be removed? On server shutdown,
this value would be false
, whereas on the removal of a dynamically created instance, this
value would be true
.public org.springframework.context.ApplicationContext getApplicationContext()
ApplicationContextFactory
getApplicationContext
in interface ApplicationContextFactory
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |