[ 
https://issues.apache.org/jira/browse/FELIX-1114?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Clement Escoffier updated FELIX-1114:
-------------------------------------


Hi,

How do you know that the class is no more loaded ? 
In fact, except if you use the online manipulator, annotations are processed 
offline. So, this does not impact the classloading. 

I might be related to the "lazzy-policy" of the feature. If a reconfiguration 
occurs and no pojo object is already created, it waits until a pojo object is 
created to call the updated method. To force the creation of a pojo object, 
declare your component as immediate (@Component(immediate=true)). 

You can also use "arch". arch is a simple Felix command (it also exists for 
Equinox) that introspects current iPOJO instances and dump their state 
[http://felix.apache.org/site/ipojo-arch-command.html]. If you can get the 
architecture/state of the instance using the @Updated, it could definitely help 
to debug it.

> 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
>            Assignee: Clement Escoffier
>             Fix For: iPOJO-1.4.0
>
>   Original Estimate: 0h
>  Remaining Estimate: 0h
>
> 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.

Reply via email to