[
https://issues.apache.org/jira/browse/FELIX-4238?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13777417#comment-13777417
]
Felix Meschberger commented on FELIX-4238:
------------------------------------------
I am not sure, whether I understand your problem -- or your solution.
getTrackingCount() is increased whenever something happens to tracked services:
a service is added or removed or modified. So this number is ever increasing
with service events from tracked service types.
Consequently whenever a service disappears and re-appears the internal list of
persistence managers -- CachingPersistenceManagerProxy[] - is recreated thus
flushing all cached data and thus reloading on next access.
While this accounts for changes to persistence managers, I suspect (and hope)
persistence managers will only come and go or change rarely, so the overhead of
reading configuration multiple times might be neglectable.
> Unnecessary re-initialization of PersistenceManagers in configadmin
> -------------------------------------------------------------------
>
> Key: FELIX-4238
> URL: https://issues.apache.org/jira/browse/FELIX-4238
> Project: Felix
> Issue Type: Bug
> Components: Configuration Admin
> Affects Versions: configadmin-1.6.0
> Environment: MacOSX 10.8.5, Java 1.6.0_51, org.eclipse.osgi 3.9.0
> Reporter: Matthias
> Priority: Minor
> Labels: patch
> Original Estimate: 0.5h
> Remaining Estimate: 0.5h
>
> Brief description: If the PersistenceManager is replaced during runtime (e.g.
> after registering, unregistering and registering again), the
> ConfigurationManager always re-initializes its list of PersistenceManagers.
> Thus, no caching is possible and configurations are loaded unnecessarily.
> Details: In the ConfigurationManager line 818 getTrackingCount() on the
> service tracker for PersistenceManagers is called. If the number returned is
> different to the number of currently known PersistenceManagers, then the list
> of PersistenceManagers is re-initialized. This works fine as long as the list
> of PersistenceManager increases. But if a PersistenceManager is unregistered,
> getTrackingCount() returns an increased number but the number of known
> PersistenceManagers is decreased. Thus, the if-condition in line 819 is
> always true, which causes a re-initialization of the list of known
> PersistenceManagers.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira