Author: bdelacretaz
Date: Thu Jul  9 14:37:10 2009
New Revision: 792562

URL: http://svn.apache.org/viewvc?rev=792562&view=rev
Log:
SLING-1039 - OsgiControllerImpl created too many BundleStartTasks

Modified:
    
sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/OsgiControllerImpl.java
    
sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/tasks/SynchronousRefreshPackagesTask.java

Modified: 
sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/OsgiControllerImpl.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/OsgiControllerImpl.java?rev=792562&r1=792561&r2=792562&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/OsgiControllerImpl.java
 (original)
+++ 
sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/OsgiControllerImpl.java
 Thu Jul  9 14:37:10 2009
@@ -31,9 +31,7 @@
 import org.apache.sling.osgi.installer.OsgiControllerServices;
 import org.apache.sling.osgi.installer.ResourceOverrideRules;
 import org.apache.sling.osgi.installer.impl.tasks.BundleInstallRemoveTask;
-import org.apache.sling.osgi.installer.impl.tasks.BundleStartTask;
 import org.apache.sling.osgi.installer.impl.tasks.ConfigInstallRemoveTask;
-import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
 import org.osgi.service.cm.ConfigurationAdmin;
@@ -152,20 +150,9 @@
        }
        
         synchronized (tasks) {
-               // Add start bundle tasks for all active bundles
-               // so that they are restarted once we're done
-               for(Bundle b : bundleContext.getBundles()) {
-                       if(b.getState() == Bundle.ACTIVE) {
-                               final OsgiControllerTask t = new 
BundleStartTask(b.getBundleId()); 
-                               tasks.add(t);
-                       if(getLogService() != null) {
-                        getLogService().log(LogService.LOG_DEBUG, "Added " + 
t); 
-                       }
-                       }
-               }
-
                if(getLogService() != null) {
-                getLogService().log(LogService.LOG_INFO, "Executing " + 
tasks.size() + " queued tasks");
+                getLogService().log(LogService.LOG_INFO, "Executing " + 
tasks.size() 
+                               + " queued tasks (more might be created during 
execution cycle)");
                }
             final long start = System.currentTimeMillis();
             

Modified: 
sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/tasks/SynchronousRefreshPackagesTask.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/tasks/SynchronousRefreshPackagesTask.java?rev=792562&r1=792561&r2=792562&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/tasks/SynchronousRefreshPackagesTask.java
 (original)
+++ 
sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/tasks/SynchronousRefreshPackagesTask.java
 Thu Jul  9 14:37:10 2009
@@ -21,6 +21,7 @@
 import org.apache.sling.osgi.installer.OsgiControllerServices;
 import org.apache.sling.osgi.installer.impl.OsgiControllerTask;
 import org.apache.sling.osgi.installer.impl.OsgiControllerTaskContext;
+import org.osgi.framework.Bundle;
 import org.osgi.framework.FrameworkEvent;
 import org.osgi.framework.FrameworkListener;
 import org.osgi.service.log.LogService;
@@ -67,6 +68,20 @@
         final long timeout = System.currentTimeMillis() + 
MAX_REFRESH_PACKAGES_WAIT_SECONDS * 1000L;
         ocs = ctx.getOsgiControllerServices();
 
+        // Refreshing packages might cause some bundles to be stopped,
+        // make sure all currently active ones are restarted after
+        // this task executes
+       for(Bundle b : ctx.getBundleContext().getBundles()) {
+               if(b.getState() == Bundle.ACTIVE) {
+                       final OsgiControllerTask t = new 
BundleStartTask(b.getBundleId());
+                       ctx.addTaskToCurrentCycle(t);
+               if(ctx.getOsgiControllerServices().getLogService() != null) {
+                       
ctx.getOsgiControllerServices().getLogService().log(LogService.LOG_DEBUG, 
+                                       "Added " + t + " to restart bundle if 
needed after refreshing packages"); 
+               }
+               }
+       }
+
         // It seems like (at least with Felix 1.0.4) we won't get a 
FrameworkEvent.PACKAGES_REFRESHED
         // if one happened very recently and there's nothing to refresh
         ctx.getPackageAdmin().refreshPackages(null);


Reply via email to