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 2011/01/13 18:18:58 UTC

svn commit: r1058673 - in /sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl: DefaultTransformer.java tasks/BundleStartTask.java tasks/BundleUpdateTask.java tasks/SynchronousRefreshPackagesTask.java

Author: cziegeler
Date: Thu Jan 13 17:18:57 2011
New Revision: 1058673

URL: http://svn.apache.org/viewvc?rev=1058673&view=rev
Log:
SLING-1810 : Support for lazy activated bundles

Modified:
    sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/DefaultTransformer.java
    sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/tasks/BundleStartTask.java
    sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/tasks/BundleUpdateTask.java
    sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/tasks/SynchronousRefreshPackagesTask.java

Modified: sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/DefaultTransformer.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/DefaultTransformer.java?rev=1058673&r1=1058672&r2=1058673&view=diff
==============================================================================
--- sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/DefaultTransformer.java (original)
+++ sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/DefaultTransformer.java Thu Jan 13 17:18:57 2011
@@ -90,6 +90,12 @@ public class DefaultTransformer
                         attr.put(Constants.BUNDLE_SYMBOLICNAME, sn);
                         attr.put(Constants.BUNDLE_VERSION, v.toString());
 
+                        // check for activation policy
+                        final String actPolicy = m.getMainAttributes().getValue(Constants.BUNDLE_ACTIVATIONPOLICY);
+                        if ( Constants.ACTIVATION_LAZY.equals(actPolicy) ) {
+                            attr.put(Constants.BUNDLE_ACTIVATIONPOLICY, actPolicy);
+                        }
+
                         final TransformationResult tr = new TransformationResult();
                         tr.setId(sn);
                         tr.setResourceType(InstallableResource.TYPE_BUNDLE);

Modified: sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/tasks/BundleStartTask.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/tasks/BundleStartTask.java?rev=1058673&r1=1058672&r2=1058673&view=diff
==============================================================================
--- sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/tasks/BundleStartTask.java (original)
+++ sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/tasks/BundleStartTask.java Thu Jan 13 17:18:57 2011
@@ -28,6 +28,7 @@ import org.apache.sling.installer.api.ta
 import org.apache.sling.installer.core.impl.OsgiInstallerImpl;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleException;
+import org.osgi.framework.Constants;
 
 /** Start a bundle given its bundle ID
  *  Restarts if the bundle does not start on the first try,
@@ -71,6 +72,27 @@ public class BundleStartTask extends Ins
 	}
 
 	/**
+	 * Check if the bundle is active.
+	 * This is true if the bundle has the active state or of the bundle
+	 * is in the starting state and has the lazy activation policy.
+	 */
+	public static boolean isBundleActive(final Bundle b) {
+	    if ( b.getState() == Bundle.ACTIVE ) {
+	        return true;
+	    }
+	    if ( b.getState() == Bundle.STARTING && isLazyActivatian(b) ) {
+	        return true;
+	    }
+        return false;
+	}
+	/**
+	 * Check if the bundle has the lazy activation policy
+	 */
+	private static boolean isLazyActivatian(final Bundle b) {
+        return Constants.ACTIVATION_LAZY.equals(b.getHeaders().get(Constants.BUNDLE_ACTIVATIONPOLICY));
+	}
+
+	/**
 	 * @see org.apache.sling.installer.api.tasks.InstallTask#execute(org.apache.sling.installer.api.tasks.InstallationContext)
 	 */
 	public void execute(final InstallationContext ctx) {
@@ -100,7 +122,7 @@ public class BundleStartTask extends Ins
 			return;
 		}
 
-        if (b.getState() == Bundle.ACTIVE) {
+        if (isBundleActive(b) ) {
             this.getLogger().debug("Bundle already started, no action taken: {}/{}", bundleId, b.getSymbolicName());
             if ( this.getResource() != null ) {
                 this.setFinishedState(ResourceState.INSTALLED);
@@ -115,7 +137,7 @@ public class BundleStartTask extends Ins
             }
             this.getLogger().info("Bundle started (retry count={}, bundle ID={}) : {}",
                     new Object[] {retryCount, bundleId, b.getSymbolicName()});
-        } catch(BundleException e) {
+        } catch (final BundleException e) {
             this.getLogger().info("Could not start bundle (retry count={}, bundle ID={}) : {}. Reason: {}. Will retry.",
                     new Object[] {retryCount, bundleId, b.getSymbolicName(), e});
 

Modified: sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/tasks/BundleUpdateTask.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/tasks/BundleUpdateTask.java?rev=1058673&r1=1058672&r2=1058673&view=diff
==============================================================================
--- sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/tasks/BundleUpdateTask.java (original)
+++ sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/tasks/BundleUpdateTask.java Thu Jan 13 17:18:57 2011
@@ -72,7 +72,7 @@ public class BundleUpdateTask extends In
     	try {
             // If the bundle is active before the update - restart it once updated, but
             // in sequence, not right now
-            final boolean reactivate = (b.getState() == Bundle.ACTIVE);
+            final boolean reactivate = BundleStartTask.isBundleActive(b);
             b.stop();
 
             b.update(getResource().getInputStream());

Modified: sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/tasks/SynchronousRefreshPackagesTask.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/tasks/SynchronousRefreshPackagesTask.java?rev=1058673&r1=1058672&r2=1058673&view=diff
==============================================================================
--- sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/tasks/SynchronousRefreshPackagesTask.java (original)
+++ sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/tasks/SynchronousRefreshPackagesTask.java Thu Jan 13 17:18:57 2011
@@ -82,9 +82,9 @@ public class SynchronousRefreshPackagesT
         // Refreshing packages might cause some bundles to be stopped,
         // make sure all currently active ones are restarted after
         // this task executes
-    	for(Bundle b : this.bundleTaskCreator.getBundleContext().getBundles()) {
-    		if(b.getState() == Bundle.ACTIVE) {
-    			final InstallTask t = new BundleStartTask(null, b.getBundleId(), this.bundleTaskCreator);
+    	for(final Bundle b : this.bundleTaskCreator.getBundleContext().getBundles()) {
+    	    if ( BundleStartTask.isBundleActive(b) ) {
+    	        final InstallTask t = new BundleStartTask(null, b.getBundleId(), this.bundleTaskCreator);
     			ctx.addTaskToCurrentCycle(t);
     			this.getLogger().debug("Added {} to restart bundle if needed after refreshing packages", t);
     		}