[
https://issues.apache.org/jira/browse/SLING-4806?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14588080#comment-14588080
]
Konrad Windszus commented on SLING-4806:
----------------------------------------
I tried with the attached patch but that does not work.
Obviously even with the {{DynamicClassLoaderManagerFactory}} there is only one
(!) {{ServiceReference}}. OSGi manages only the lifecycle of one service
reference, therefore it seems to be impossible to unregister individual service
objects, previously returned by the {{DynamicClassLoaderManagerFactory}}. Only
the whole service reference can be unregistered, leading to invalidating all
connected {{DynamicClassLoaderManagers}}.
[~cziegeler] Is there any other possibility to achieve a more fine-grained
restart of the DynamicClassLoaderManager?
> Only invalidate those DynamicClassLoaderManagers which are becoming invalid
> ---------------------------------------------------------------------------
>
> Key: SLING-4806
> URL: https://issues.apache.org/jira/browse/SLING-4806
> Project: Sling
> Issue Type: Improvement
> Components: Commons
> Affects Versions: Commons ClassLoader 1.3.2
> Reporter: Konrad Windszus
>
> Currently all {{DynamicClassLoaderManagers}} become invalid if
> # a new bundle has been started which provides packages which have been
> previously unresolvable by any of the {{DynamicClassLoader}}s or if
> # a bundle is no longer active which used to provide at least one class being
> loaded through one of the {{DynamicClassLoader}}s.
> In that case the {{DynamicClassLoaderManagerFactory}} is first unregistered
> and then reregistered
> (https://github.com/apache/sling/blob/trunk/bundles/commons/classloader/src/main/java/org/apache/sling/commons/classloader/impl/Activator.java#L134)
> The whole refresh logic is IMHO only necessary because the JRE caches all
> classes being requested through a classloader.
> The invalidation could be improved by only reregistering those
> {{DynamicClassLoaderManagers}} which have been used to
> # load a class which was not available in the past but may be now available
> (due to a new bundle)
> # load a class which was provided through a bundle which is now no longer
> being available
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)