[ https://issues.apache.org/jira/browse/SLING-9210?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17061036#comment-17061036 ]
Konrad Windszus edited comment on SLING-9210 at 3/17/20, 4:28 PM: ------------------------------------------------------------------ I prefer determinism over non-determinism for several reasons, first and foremost for bug tracking reasons. I agree that picking the highest version may be wrong, but it is then at least consistently wrong for everyone having the same bundles installled! How does OSGi behave in case no specific import range is given for a bundle? Which version is picked preferably? As OSGi (non dynamic) bundle wiring may run into the same situation I guess there is somewhere a standard defined which bundle is used out of several matching candidates. Let us use the same mechanism within the dynamic class loader. Update: Isn't this the order being used by Felix: https://github.com/apache/felix-dev/blob/2e56c35922262965e5b656809e5690938ecb76f1/framework/src/main/java/org/apache/felix/framework/resolver/CandidateComparator.java#L30? Also Felix returns the highest version for https://github.com/apache/felix-dev/blob/2e56c35922262965e5b656809e5690938ecb76f1/framework/src/main/java/org/apache/felix/framework/PackageAdminImpl.java#L129 was (Author: kwin): I prefer determinism over non-determinism for several reasons, first and foremost for bug tracking reasons. I agree that picking the highest version may be wrong, but it is then at least consistently wrong for everyone having the same bundles installled! How does OSGi behave in case no specific import range is given for a bundle? Which version is picked preferably? As OSGi (non dynamic) bundle wiring may run into the same situation I guess there is somewhere a standard defined which bundle is used out of several matching candidates. Let us use the same mechanism within the dynamic class loader. Update: Isn't this the order being used by Felix: https://github.com/apache/felix-dev/blob/2e56c35922262965e5b656809e5690938ecb76f1/framework/src/main/java/org/apache/felix/framework/resolver/CandidateComparator.java#L30? > Make DynamicClassloader behave deterministically in case several bundles > export the same package > ------------------------------------------------------------------------------------------------ > > Key: SLING-9210 > URL: https://issues.apache.org/jira/browse/SLING-9210 > Project: Sling > Issue Type: Improvement > Affects Versions: Commons ClassLoader 1.4.4 > Reporter: Konrad Windszus > Priority: Major > Fix For: Commons ClassLoader 1.4.6 > > > Currently in case several bundles export the same package (in different > versions) the first one is being picked in > https://github.com/apache/sling-org-apache-sling-commons-classloader/blob/dedb69a9fb0f8cb2ebf3050560311739b9f00ce4/src/main/java/org/apache/sling/commons/classloader/impl/PackageAdminClassLoader.java#L156, > but it is not described which one is the first one in > https://osgi.org/javadoc/r6/core/org/osgi/service/packageadmin/PackageAdmin.html#getExportedPackages(org.osgi.framework.Bundle). > Given that now it is possible to install the same bundle in multiple version > (SLING-9172 and FELIX-6232) a better, more predictable logic should be chosen. > I propose to always pick the highest exported version. -- This message was sent by Atlassian Jira (v8.3.4#803005)