[
https://issues.apache.org/jira/browse/FELIX-1114?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12704909#action_12704909
]
Clement Escoffier commented on FELIX-1114:
------------------------------------------
Hi,
There is not such method right now. But for the time being you can inject your
properties inside a Dictionary or a Map. The setter method of this property
will be called when a reconfiguration occurs.
However this solution does not work with the configuration admin as config
admin's configuration does not support map/dictionary properties.
I agree that such kind of method can be useful. But a couple of questions need
to be answered before:
1) What kind of argument do you need in the updated method ? It will makes
sense to push all the properties like:
@Updated
public void updatedConfiguration(Dictionary properties)
{
// put changed configuration in use
}
2) Should this method be called at each configuration and reconfiguration (so,
both at the beginning and at each reconfiguration) ?
IMHO, such method must not create a POJO object if none exist, so it means that
the method will be called after every configuration/reconfiguration only if a
pojo object exist or wait for an object creation (and then be called ).
Clement
> callback after configuration change needed
> ------------------------------------------
>
> Key: FELIX-1114
> URL: https://issues.apache.org/jira/browse/FELIX-1114
> Project: Felix
> Issue Type: Improvement
> Components: iPOJO
> Affects Versions: iPOJO-1.2.0
> Reporter: Ron Koerner
>
> It often occurs that a configuration/property change requires some work to be
> done. If only a single property is affected method injection can be used.
> If multiple properties are changed and these changes are kind of an atomic
> transaction, there is no (sensible) way to tell the service to use the new
> values.
> Imagine a service listening on a port and writing the output to a file. The
> service has the two string properties "port" and "file". When the service is
> validated, it opens a listening port and a writable file according to the
> properties. Now imagine it is either dangerous to have a port input written
> to the wrong file or opening ports and files is very costly or there is
> already an object doing the work for us but it needs to be constructed with
> port number and filename and cannot be changed at runtime. Therefore we
> cannot use method injection like
> @Property(name="port")
> public void setPort(String port)
> {
> incomingSocket.close();
> incomingSocket=new IncomingSocket(port);
> }
> because that is costly and leaves the possibility to have things written to
> the wrong file.
> Therefore something like
> @Updated
> public void updatedConfiguration()
> {
> // put changed configuration in use
> }
> is needed. The method annotated with @Updated (or specified in XML) is to
> called after all the configuration changes are done.
> Right now, the only way is to stop and start the service since only one
> ManagedService per PID is recognized by ConfigurationAdmin.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.