The OSGi Service Platform Service Compendium specification defines a
number of additional services that may be supported by OSGi
implementations. Spring Dynamic Modules supports an additional
"compendium" namespace that provides support for some of these services.
By convention, the prefix osgix
is used for this
namespace.
<?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns="http://www.springframework.org/schema/osgi" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:osgix="http://www.springframework.org/schema/osgi-compendium" xmlns:beans="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd http://www.springframework.org/schema/osgi-compendium http://www.springframework.org/schema/osgi-compendium/spring-osgi-compendium.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- use the OSGi namespace elements directly --> <service id="simpleServiceOsgi" ref="simpleService" interface="org.xyz.MyService" /> <!-- qualify compendium namespace elements --> <osgix:property-placeholder persistent-id="com.xyz.myapp"/> </beans:beans>
At present this namespace provides support for the Configuration Admin service. Support for other compendium services may be added in future releases.
Spring Dynamic Modules provides support for sourcing bean
property values from the OSGi Configuration Administration service.
This support is enabled via the
property-placeholder
element. The property
placeholder element provides for replacement of delimited string
values (placeholders) in bean property expressions with values sourced
from the configuration administration service. The required
persistent-id
attribute specifies the persistent
identifier to be used as the key for the configuration dictionary. The
default delimiter for placeholder strings is "${...}".
Given the declarations:
<osgix:property-placeholder persistent-id="com.xyz.myapp"/> <bean id="someBean" class="AClass"> <property name="timeout" value="${timeout}"/> </bean>
Then the timeout
property of
someBean
will be set using the value of the
timeout
entry in the configuration dictionary
registered under the com.xyz.myapp
persistent
id.
The placeholder strings are evaluated at the time that the bean
is instantiated. Changes to the properties made via Configuration
Admin subsequent to the creation of the bean do
not result in re-injection of property values.
See the managed-service
and
managed-service-reference
elements documented in
appendix B if you require this level of integration. The
placeholder-prefix
and
placeholder-suffix
attributes can be used to change
the delimiter strings used for placeholder values.
It is possible to specify a default set of property values to be
used in the event that the configuration dictionary does not contain
an entry for a given key. The defaults-ref
attribute can be used to refer to a named bean of
Properties
or Map
type. Instead
of referring to an external bean, the
default-properties
nested element may be used to
define an inline set of properties.
<osgix:property-placeholder persistent-id="com.xyz.myapp"> <default-properties> <property name="productCategory" value="E792"/> <property name="businessUnit" value="811"/> </default-properties> </osgix:property-placeholder>
The persistent-id
attribute must refer to the
persistent-id of an OSGi ManagedService
, it is a
configuration error to specify a factory persistent id referring to a
ManagedServiceFactory
.
Support for directly accessing configuration objects and their associated dictionaries, and for instantiating beans directly from configuration objects is on the Spring Dynamic Modules road map. See Appendix F, Roadmap for more information.