You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2017/09/06 10:23:23 UTC

svn commit: r1807461 - in /sling/trunk/bundles/commons/classloader/src: main/java/org/apache/sling/commons/classloader/impl/PackageAdminClassLoader.java test/java/org/apache/sling/commons/classloader/impl/BundeChangesTest.java

Author: cziegeler
Date: Wed Sep  6 10:23:23 2017
New Revision: 1807461

URL: http://svn.apache.org/viewvc?rev=1807461&view=rev
Log:
SLING-7109 : Classloader not updated when bundle is updating

Modified:
    sling/trunk/bundles/commons/classloader/src/main/java/org/apache/sling/commons/classloader/impl/PackageAdminClassLoader.java
    sling/trunk/bundles/commons/classloader/src/test/java/org/apache/sling/commons/classloader/impl/BundeChangesTest.java

Modified: sling/trunk/bundles/commons/classloader/src/main/java/org/apache/sling/commons/classloader/impl/PackageAdminClassLoader.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/commons/classloader/src/main/java/org/apache/sling/commons/classloader/impl/PackageAdminClassLoader.java?rev=1807461&r1=1807460&r2=1807461&view=diff
==============================================================================
--- sling/trunk/bundles/commons/classloader/src/main/java/org/apache/sling/commons/classloader/impl/PackageAdminClassLoader.java (original)
+++ sling/trunk/bundles/commons/classloader/src/main/java/org/apache/sling/commons/classloader/impl/PackageAdminClassLoader.java Wed Sep  6 10:23:23 2017
@@ -50,7 +50,7 @@ class PackageAdminClassLoader extends Cl
     private final DynamicClassLoaderManagerFactory factory;
 
     /** A cache for resolved classes. */
-    private Map<String, Class<?>> classCache = new ConcurrentHashMap<String, Class<?>>();
+    private Map<String, Class<?>> classCache = new ConcurrentHashMap<>();
 
     /** Negative class cache. */
     private Set<String> negativeClassCache = Collections.synchronizedSet(new HashSet<String>());
@@ -58,7 +58,7 @@ class PackageAdminClassLoader extends Cl
     private Map<String, Bundle> packageProviders = new ConcurrentHashMap<>();
 
     /** A cache for resolved urls. */
-    private Map<String, URL> urlCache = new ConcurrentHashMap<String, URL>();
+    private Map<String, URL> urlCache = new ConcurrentHashMap<>();
 
     public PackageAdminClassLoader(final PackageAdmin pckAdmin,
             final ClassLoader parent,
@@ -157,6 +157,7 @@ class PackageAdminClassLoader extends Cl
                     e = bundle.getResources(name);
                     if (e != null) {
                         packageProviders.put(packageName, bundle);
+                        this.factory.addUsedBundle(bundle);
                         LOGGER.debug("Marking bundle {}:{} as the provider for API package {}.", bundle.getSymbolicName(), bundle
                                 .getVersion().toString(), packageName);
                         return e;
@@ -192,6 +193,7 @@ class PackageAdminClassLoader extends Cl
                     url = bundle.getResource(name);
                     if (url != null) {
                         urlCache.put(name, url);
+                        this.factory.addUsedBundle(bundle);
                         packageProviders.put(packageName, bundle);
                         LOGGER.debug("Marking bundle {}:{} as the provider for API package {}.", bundle.getSymbolicName(), bundle
                                 .getVersion().toString(), packageName);

Modified: sling/trunk/bundles/commons/classloader/src/test/java/org/apache/sling/commons/classloader/impl/BundeChangesTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/commons/classloader/src/test/java/org/apache/sling/commons/classloader/impl/BundeChangesTest.java?rev=1807461&r1=1807460&r2=1807461&view=diff
==============================================================================
--- sling/trunk/bundles/commons/classloader/src/test/java/org/apache/sling/commons/classloader/impl/BundeChangesTest.java (original)
+++ sling/trunk/bundles/commons/classloader/src/test/java/org/apache/sling/commons/classloader/impl/BundeChangesTest.java Wed Sep  6 10:23:23 2017
@@ -79,14 +79,16 @@ public class BundeChangesTest {
 
         // at this point the bundle is not used, so nothing should happen on update:
 
-        // step one: stop bundle
+        // step one: stop bundle and unresolve
         listener.bundleChanged(new BundleEvent(BundleEvent.STOPPING, bundle));
         listener.bundleChanged(new BundleEvent(BundleEvent.STOPPED, bundle));
+        listener.bundleChanged(new BundleEvent(BundleEvent.UNRESOLVED, bundle));
         assertFalse(registerCalled.get());
         assertFalse(unregisterCalled.get());
 
-        // step two: update bundle
+        // step two: update bundle and resolved
         listener.bundleChanged(new BundleEvent(BundleEvent.UPDATED, bundle));
+        listener.bundleChanged(new BundleEvent(BundleEvent.RESOLVED, bundle));
         assertFalse(registerCalled.get());
         assertFalse(unregisterCalled.get());
 
@@ -104,13 +106,21 @@ public class BundeChangesTest {
         // and update
         listener.bundleChanged(new BundleEvent(BundleEvent.STOPPING, bundle));
         listener.bundleChanged(new BundleEvent(BundleEvent.STOPPED, bundle));
-        assertFalse(registerCalled.get());
-        assertFalse(unregisterCalled.get());
+        listener.bundleChanged(new BundleEvent(BundleEvent.UNRESOLVED, bundle));
+        assertTrue(registerCalled.get());
+        assertTrue(unregisterCalled.get());
+
+        registerCalled.set(false);
+        unregisterCalled.set(false);
 
         // step two: update bundle
         listener.bundleChanged(new BundleEvent(BundleEvent.UPDATED, bundle));
-        assertFalse(registerCalled.get());
-        assertFalse(unregisterCalled.get());
+        listener.bundleChanged(new BundleEvent(BundleEvent.RESOLVED, bundle));
+        assertTrue(registerCalled.get());
+        assertTrue(unregisterCalled.get());
+
+        registerCalled.set(false);
+        unregisterCalled.set(false);
 
         // step three: start bundle
         listener.bundleChanged(new BundleEvent(BundleEvent.STARTING, bundle));