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));