Interface Configuration
ManagedService
or
ManagedServiceFactory
object. The Configuration Admin service uses
this interface to represent the configuration information for a
ManagedService
or for a service instance of a
ManagedServiceFactory
.
A Configuration
object contains a configuration dictionary and allows
the properties to be updated via this object. Bundles wishing to receive
configuration dictionaries do not need to use this class - they register a
ManagedService
or ManagedServiceFactory
. Only administrative
bundles, and bundles wishing to update their own configurations need to use
this class.
The properties handled in this configuration have case insensitive
String
objects as keys. However, case must be preserved from the last
set key/value.
A configuration can be bound to a specific bundle or to a region of
bundles using the location. In its simplest form the location is the
location of the target bundle that registered a Managed Service or a Managed
Service Factory. However, if the location starts with ?
then the
location indicates multiple delivery. In such a case the configuration must
be delivered to all targets. If security is on, the Configuration Permission
can be used to restrict the targets that receive updates. The Configuration
Admin must only update a target when the configuration location matches the
location of the target's bundle or the target bundle has a Configuration
Permission with the action ConfigurationPermission.TARGET
and a name
that matches the configuration location. The name in the permission may
contain wildcards ( '*'
) to match the location using the same
substring matching rules as Filter
. Bundles can always create,
manipulate, and be updated from configurations that have a location that
matches their bundle location.
If a configuration's location is null
, it is not yet bound to a
location. It will become bound to the location of the first bundle that
registers a ManagedService
or ManagedServiceFactory
object
with the corresponding PID.
The same Configuration
object is used for configuring both a Managed
Service Factory and a Managed Service. When it is important to differentiate
between these two the term "factory configuration" is used.
- "ThreadSafe"
-
Nested Class Summary
Modifier and TypeInterfaceDescriptionstatic enum
Configuration Attributes. -
Method Summary
Modifier and TypeMethodDescriptionvoid
Add attributes to the configuration.void
delete()
Delete thisConfiguration
object.boolean
Equality is defined to have equal PIDs Two Configuration objects are equal when their PIDs are equal.Get the attributes of this configuration.Get the bundle location.long
Get the change count.For a factory configuration return the PID of the corresponding Managed Service Factory, else returnnull
.getPid()
Get the PID for thisConfiguration
object.getProcessedProperties
(ServiceReference<?> reference) Return the processed properties of thisConfiguration
object.Return the properties of thisConfiguration
object.int
hashCode()
Hash code is based on PID.void
Remove attributes from this configuration.void
setBundleLocation
(String location) Bind thisConfiguration
object to the specified location.void
update()
Update theConfiguration
object with the current properties.void
update
(Dictionary<String, ?> properties) Update the properties of thisConfiguration
object.boolean
updateIfDifferent
(Dictionary<String, ?> properties) Update the properties of thisConfiguration
object if the provided properties are different than the currently stored set.
-
Method Details
-
getPid
String getPid()Get the PID for thisConfiguration
object.- Returns:
- the PID for this
Configuration
object. - Throws:
IllegalStateException
- if this configuration has been deleted
-
getProperties
Dictionary<String,Object> getProperties()Return the properties of thisConfiguration
object. TheDictionary
object returned is a private copy for the caller and may be changed without influencing the stored configuration. The keys in the returned dictionary are case insensitive and are always of typeString
.If called just after the configuration is created and before update has been called, this method returns
null
.- Returns:
- A private copy of the properties for the caller or
null
. These properties must not contain the "service.bundleLocation" property. The value of this property may be obtained from thegetBundleLocation()
method. - Throws:
IllegalStateException
- If this configuration has been deleted.
-
getProcessedProperties
Return the processed properties of thisConfiguration
object.The
Dictionary
object returned is a private copy for the caller and may be changed without influencing the stored configuration. The keys in the returned dictionary are case insensitive and are always of typeString
.Before the properties are returned they are processed by all the registered
ConfigurationPlugin
s handling this configuration.If called just after the configuration is created and before update has been called, this method returns
null
.- Parameters:
reference
- The reference to the Managed Service or Managed Service Factory to pass to the registeredConfigurationPlugin
s handling this configuration. Must not benull
.- Returns:
- A private copy of the processed properties for the caller or
null
. These properties must not contain the "service.bundleLocation" property. The value of this property may be obtained from thegetBundleLocation()
method. - Throws:
IllegalStateException
- If this configuration has been deleted.- Since:
- 1.6
-
update
Update the properties of thisConfiguration
object.Stores the properties in persistent storage after adding or overwriting the following properties:
- "service.pid" : is set to be the PID of this configuration.
- "service.factoryPid" : if this is a factory configuration it is set to the factory PID else it is not set.
String
.If the corresponding Managed Service/Managed Service Factory is registered, its updated method must be called asynchronously. Else, this callback is delayed until aforementioned registration occurs.
Also notifies all Configuration Listeners with a
ConfigurationEvent.CM_UPDATED
event.- Parameters:
properties
- the new set of properties for this configuration- Throws:
ReadOnlyConfigurationException
- If the configuration isread only
.IOException
- if update cannot be made persistentIllegalArgumentException
- if theDictionary
object contains invalid configuration types or contains case variants of the same key name.IllegalStateException
- If this configuration has been deleted.
-
delete
Delete thisConfiguration
object.Removes this configuration object from the persistent store. Notify asynchronously the corresponding Managed Service or Managed Service Factory. A
ManagedService
object is notified by a call to itsupdated
method with anull
properties argument. AManagedServiceFactory
object is notified by a call to itsdeleted
method.Also notifies all Configuration Listeners with a
ConfigurationEvent.CM_DELETED
event.- Throws:
ReadOnlyConfigurationException
- If the configuration isread only
.IOException
- If delete fails.IllegalStateException
- If this configuration has been deleted.
-
getFactoryPid
String getFactoryPid()For a factory configuration return the PID of the corresponding Managed Service Factory, else returnnull
.- Returns:
- factory PID or
null
- Throws:
IllegalStateException
- If this configuration has been deleted.
-
update
Update theConfiguration
object with the current properties. Initiate theupdated
callback to the Managed Service or Managed Service Factory with the current properties asynchronously.This is the only way for a bundle that uses a Configuration Plugin service to initiate a callback. For example, when that bundle detects a change that requires an update of the Managed Service or Managed Service Factory via its
ConfigurationPlugin
object.- Throws:
IOException
- if update cannot access the properties in persistent storageIllegalStateException
- If this configuration has been deleted.- See Also:
-
updateIfDifferent
Update the properties of thisConfiguration
object if the provided properties are different than the currently stored set. Properties are compared as follows.- Scalars are compared using
equals
- Arrays are compared using
Arrays.equals
- Collections are compared using
equals
update(Dictionary)
method.- Parameters:
properties
- The new set of properties for this configuration.- Returns:
- If the properties are different and the configuration is updated
true
is returned. If the properties are the same,false
is returned. - Throws:
ReadOnlyConfigurationException
- If the configuration isread only
.IOException
- If update cannot be made persistent.IllegalArgumentException
- If theDictionary
object contains invalid configuration types or contains case variants of the same key name.IllegalStateException
- If this configuration has been deleted.- Since:
- 1.6
- Scalars are compared using
-
setBundleLocation
Bind thisConfiguration
object to the specified location. If the location parameter isnull
then theConfiguration
object will not be bound to a location/region. It will be set to the bundle's location before the first time a Managed Service/Managed Service Factory receives thisConfiguration
object via the updated method and before any plugins are called. The bundle location or region will be set persistently.If the location starts with
?
then all targets registered with the given PID must be updated.If the location is changed then existing targets must be informed. If they can no longer see this configuration, the configuration must be deleted or updated with
null
. If this configuration becomes visible then they must be updated with this configuration.Also notifies all Configuration Listeners with a
ConfigurationEvent.CM_LOCATION_CHANGED
event.- Parameters:
location
- a location, region, ornull
- Throws:
IllegalStateException
- If this configuration has been deleted.SecurityException
- when the required permissions are not available- "Required Permissions"
- ConfigurationPermission[this.location,CONFIGURE] if
this.location is not
null
, ConfigurationPermission[location,CONFIGURE] if location is notnull
, ConfigurationPermission["*",CONFIGURE] if this.location isnull
or if location isnull
-
getBundleLocation
String getBundleLocation()Get the bundle location. Returns the bundle location or region to which this configuration is bound, ornull
if it is not yet bound to a bundle location or region. If the location starts with?
then the configuration is delivered to all targets and not restricted to a single bundle.- Returns:
- location to which this configuration is bound, or
null
. - Throws:
IllegalStateException
- If this configuration has been deleted.SecurityException
- when the required permissions are not available- "Required Permissions"
- ConfigurationPermission[this.location,CONFIGURE] if
this.location is not
null
, ConfigurationPermission["*",CONFIGURE] if this.location isnull
-
getChangeCount
long getChangeCount()Get the change count. Each Configuration must maintain a change counter that is incremented with a positive value every time the configuration is updated and its properties are stored. The counter must be incremented before the targets are updated and events are sent out.- Returns:
- A monotonically increasing value reflecting changes in this Configuration.
- Throws:
IllegalStateException
- If this configuration has been deleted.- Since:
- 1.5
-
addAttributes
Add attributes to the configuration.- Parameters:
attrs
- The attributes to add.- Throws:
IOException
- If the new state cannot be persisted.IllegalStateException
- If this configuration has been deleted.SecurityException
- when the required permissions are not available- Since:
- 1.6
- "Required Permissions"
- ConfigurationPermission[this.location,ATTRIBUTE] if
this.location is not
null
, ConfigurationPermission["*",ATTRIBUTE] if this.location isnull
-
getAttributes
Set<Configuration.ConfigurationAttribute> getAttributes()Get the attributes of this configuration.- Returns:
- The set of attributes.
- Throws:
IllegalStateException
- If this configuration has been deleted.- Since:
- 1.6
-
removeAttributes
Remove attributes from this configuration.- Parameters:
attrs
- The attributes to remove.- Throws:
IOException
- If the new state cannot be persisted.IllegalStateException
- If this configuration has been deleted.SecurityException
- when the required permissions are not available- Since:
- 1.6
- "Required Permissions"
- ConfigurationPermission[this.location,ATTRIBUTE] if
this.location is not
null
, ConfigurationPermission["*",ATTRIBUTE] if this.location isnull
-
equals
Equality is defined to have equal PIDs Two Configuration objects are equal when their PIDs are equal. -
hashCode
int hashCode()Hash code is based on PID. The hash code for two Configuration objects must be the same when the Configuration PID's are the same.
-