Author: cziegeler
Date: Mon Sep 13 14:43:47 2010
New Revision: 996561
URL: http://svn.apache.org/viewvc?rev=996561&view=rev
Log:
SLING-1737 : Add state management for resources
Modified:
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/EntityResourceList.java
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerImpl.java
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerTask.java
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/config/AbstractConfigTask.java
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/config/ConfigInstallTask.java
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/config/ConfigRemoveTask.java
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/config/ConfigTaskCreator.java
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleInstallTask.java
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleRemoveTask.java
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleStartTask.java
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleTaskCreator.java
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleUpdateTask.java
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/ChangeStateTask.java
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/SystemBundleUpdateTask.java
sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/TaskOrderingTest.java
sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/tasks/BundleTaskCreatorTest.java
Modified:
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/EntityResourceList.java
URL:
http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/EntityResourceList.java?rev=996561&r1=996560&r2=996561&view=diff
==============================================================================
---
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/EntityResourceList.java
(original)
+++
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/EntityResourceList.java
Mon Sep 13 14:43:47 2010
@@ -45,8 +45,49 @@ public class EntityResourceList implemen
return resources.isEmpty();
}
- public RegisteredResource getFirst() {
- return resources.first();
+ /**
+ * Return the first resource if it either needs to be installed or
uninstalled.
+ */
+ public RegisteredResource getActiveResource() {
+ if ( !resources.isEmpty() ) {
+ final RegisteredResource r = resources.first();
+ if ( r.getState() == RegisteredResource.State.INSTALL
+ || r.getState() == RegisteredResource.State.UNINSTALL ) {
+ return r;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Set the finish state for the resource.
+ * If this resource has been uninstalled, check the next in the list if it
needs to
+ * be reactivated.
+ */
+ public void setFinishState(final RegisteredResource.State state) {
+ final RegisteredResource toActivate = getActiveResource();
+ if ( toActivate != null
+ && toActivate.getState() == RegisteredResource.State.UNINSTALL
+ && this.resources.size() > 1 ) {
+
+ // to get the second item in the set we have to use an iterator!
+ final Iterator<RegisteredResource> i = this.resources.iterator();
+ i.next(); // skip first
+ final RegisteredResource second = i.next();
+ if ( state == RegisteredResource.State.UNINSTALLED ) {
+ // first resource got uninstalled, go back to second
+ if (second.getState() == RegisteredResource.State.IGNORED ||
second.getState() == RegisteredResource.State.INSTALLED) {
+ LOGGER.debug("Reactivating for next cycle: {}", second);
+ second.setState(RegisteredResource.State.INSTALL);
+ }
+ } else {
+ // don't install as the first did not get uninstalled
+ if ( second.getState() == RegisteredResource.State.INSTALL ) {
+ second.setState(RegisteredResource.State.IGNORED);
+ }
+ }
+ }
+ toActivate.setState(state);
}
public Collection<RegisteredResource> getResources() {
Modified:
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerImpl.java
URL:
http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerImpl.java?rev=996561&r1=996560&r2=996561&view=diff
==============================================================================
---
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerImpl.java
(original)
+++
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerImpl.java
Mon Sep 13 14:43:47 2010
@@ -138,6 +138,7 @@ public class OsgiInstallerImpl
public void run() {
this.init();
while (active) {
+ this.mergeNewResources();
final boolean tasksToDo = this.hasOpenTasks();
final SortedSet<OsgiInstallerTask> tasks = this.computeTasks();
@@ -347,45 +348,8 @@ public class OsgiInstallerImpl
}
urlsToRemove.clear();
- // if we have changes we have to process the resources per entity
to update states
if ( changed ) {
printResources("Merged");
- for(final String entityId :
this.persistentList.getEntityIds()) {
- final EntityResourceList group =
this.persistentList.getEntityResourceList(entityId);
- if ( !group.isEmpty() ) {
-
- // The first resource in each group defines what
should be done within this group.
- // This is based on the state of the first resource:
- // INSTALL : Install this resource and ignore all
others in the group
- // UNINSTALL : Uninstall this resource and set the
next resource in the group to INSTALL
- // if it has either state IGNORE or
INSTALLED
- // INSTALLED : Nothing to do
- // IGNORED : Nothing to do
- // UNINSTALLED : This can't happen - but we do nothing
in this case anyway
-
- final Iterator<RegisteredResource> i =
group.getResources().iterator();
- final RegisteredResource first = i.next();
-
- RegisteredResource toActivate = null;
- switch ( first.getState() ) {
- case UNINSTALL : toActivate = first;
- break;
- case INSTALL : toActivate = first;
- break;
- }
- if ( toActivate != null ) {
- logger.debug("Activating {}", toActivate);
- if ( toActivate.getState() ==
RegisteredResource.State.UNINSTALL && i.hasNext() ) {
- final RegisteredResource r = i.next();;
- if (r.getState() ==
RegisteredResource.State.IGNORED || r.getState() ==
RegisteredResource.State.INSTALLED) {
- logger.debug("Reactivating for next cycle
{}", r);
-
r.setState(RegisteredResource.State.INSTALL);
- }
- }
- }
- }
- }
- printResources("Prepared");
// persist list
this.persistentList.save();
}
@@ -396,13 +360,8 @@ public class OsgiInstallerImpl
// check if there is something to do
for(final String entityId : this.persistentList.getEntityIds()) {
final EntityResourceList group =
this.persistentList.getEntityResourceList(entityId);
- if ( !group.isEmpty() ) {
- final RegisteredResource first = group.getFirst();
-
- if ( first != null &&
- (first.getState() == RegisteredResource.State.UNINSTALL
|| first.getState() == RegisteredResource.State.INSTALL) ) {
- return true;
- }
+ if ( group.getActiveResource() != null ) {
+ return true;
}
}
return false;
@@ -448,12 +407,9 @@ public class OsgiInstallerImpl
// Walk the list of entities, and create appropriate OSGi tasks for
each group
for(final String entityId : this.persistentList.getEntityIds()) {
final EntityResourceList group =
this.persistentList.getEntityResourceList(entityId);
- if ( !group.isEmpty() ) {
-
- // Check the first resource in each group
- final Iterator<RegisteredResource> i =
group.getResources().iterator();
- final RegisteredResource first = i.next();
-
+ // Check the first resource in each group
+ final RegisteredResource first = group.getActiveResource();
+ if ( first != null ) {
RegisteredResource toActivate = null;
switch ( first.getState() ) {
case UNINSTALL : toActivate = first;
@@ -465,9 +421,9 @@ public class OsgiInstallerImpl
final String rt = toActivate.getType();
final OsgiInstallerTask task;
if ( InstallableResource.TYPE_BUNDLE.equals(rt) ) {
- task = bundleTaskCreator.createTask(toActivate);
+ task = bundleTaskCreator.createTask(group);
} else if ( InstallableResource.TYPE_CONFIG.equals(rt) ) {
- task = configTaskCreator.createTask(toActivate);
+ task = configTaskCreator.createTask(group);
} else {
task = null;
}
Modified:
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerTask.java
URL:
http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerTask.java?rev=996561&r1=996560&r2=996561&view=diff
==============================================================================
---
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerTask.java
(original)
+++
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerTask.java
Mon Sep 13 14:43:47 2010
@@ -27,19 +27,29 @@ import org.slf4j.LoggerFactory;
*/
public abstract class OsgiInstallerTask implements
Comparable<OsgiInstallerTask> {
- private final RegisteredResource resource;
+ private final EntityResourceList entityResourceList;
private final Logger logger = LoggerFactory.getLogger(this.getClass());
- public OsgiInstallerTask(final RegisteredResource r) {
- this.resource = r;
+ public OsgiInstallerTask(final EntityResourceList erl) {
+ this.entityResourceList = erl;
}
/**
* Return the corresponding resource - depending on the task this might be
null.
*/
public RegisteredResource getResource() {
- return this.resource;
+ if ( this.entityResourceList != null ) {
+ return this.entityResourceList.getActiveResource();
+ }
+ return null;
+ }
+
+ /**
+ * Return the corresponding resource - depending on the task this might be
null.
+ */
+ public EntityResourceList getEntityResourceList() {
+ return this.entityResourceList;
}
public Logger getLogger() {
@@ -56,9 +66,13 @@ public abstract class OsgiInstallerTask
return getSortKey().compareTo(o.getSortKey());
}
+ public void setFinishedState(final RegisteredResource.State state) {
+ this.entityResourceList.setFinishState(state);
+ }
+
@Override
public String toString() {
- return getClass().getSimpleName() + ": " + resource;
+ return getClass().getSimpleName() + ": " + this.getResource();
}
@Override
Modified:
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/config/AbstractConfigTask.java
URL:
http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/config/AbstractConfigTask.java?rev=996561&r1=996560&r2=996561&view=diff
==============================================================================
---
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/config/AbstractConfigTask.java
(original)
+++
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/config/AbstractConfigTask.java
Mon Sep 13 14:43:47 2010
@@ -24,8 +24,8 @@ import java.util.Enumeration;
import java.util.HashSet;
import java.util.Set;
+import org.apache.sling.osgi.installer.impl.EntityResourceList;
import org.apache.sling.osgi.installer.impl.OsgiInstallerTask;
-import org.apache.sling.osgi.installer.impl.RegisteredResource;
import org.osgi.framework.Constants;
import org.osgi.framework.InvalidSyntaxException;
import org.osgi.service.cm.Configuration;
@@ -48,11 +48,11 @@ abstract class AbstractConfigTask extend
/** Tracker for the configuration admin. */
private final ServiceTracker configAdminServiceTracker;
- AbstractConfigTask(final RegisteredResource r, final ServiceTracker
configAdminServiceTracker) {
+ AbstractConfigTask(final EntityResourceList r, final ServiceTracker
configAdminServiceTracker) {
super(r);
this.configAdminServiceTracker = configAdminServiceTracker;
- this.configPid = (String)r.getAttributes().get(Constants.SERVICE_PID);
- this.factoryPid =
(String)r.getAttributes().get(ConfigurationAdmin.SERVICE_FACTORYPID);
+ this.configPid =
(String)getResource().getAttributes().get(Constants.SERVICE_PID);
+ this.factoryPid =
(String)getResource().getAttributes().get(ConfigurationAdmin.SERVICE_FACTORYPID);
}
/**
Modified:
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/config/ConfigInstallTask.java
URL:
http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/config/ConfigInstallTask.java?rev=996561&r1=996560&r2=996561&view=diff
==============================================================================
---
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/config/ConfigInstallTask.java
(original)
+++
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/config/ConfigInstallTask.java
Mon Sep 13 14:43:47 2010
@@ -18,6 +18,7 @@
*/
package org.apache.sling.osgi.installer.impl.config;
+import org.apache.sling.osgi.installer.impl.EntityResourceList;
import org.apache.sling.osgi.installer.impl.OsgiInstallerContext;
import org.apache.sling.osgi.installer.impl.RegisteredResource;
import org.osgi.service.cm.Configuration;
@@ -31,7 +32,7 @@ public class ConfigInstallTask extends A
private static final String CONFIG_INSTALL_ORDER = "20-";
- public ConfigInstallTask(final RegisteredResource r, final ServiceTracker
configAdminServiceTracker) {
+ public ConfigInstallTask(final EntityResourceList r, final ServiceTracker
configAdminServiceTracker) {
super(r, configAdminServiceTracker);
}
@@ -71,12 +72,12 @@ public class ConfigInstallTask extends A
}
config.update(getResource().getDictionary());
ctx.log("Installed configuration {} from resource {}",
config.getPid(), getResource());
-
this.getResource().setState(RegisteredResource.State.INSTALLED);
+ this.setFinishedState(RegisteredResource.State.INSTALLED);
this.getLogger().debug("Configuration " + config.getPid()
+ " " + (created ? "created" : "updated")
+ " from " + getResource());
} else {
- this.getResource().setState(RegisteredResource.State.IGNORED);
+ this.setFinishedState(RegisteredResource.State.IGNORED);
}
} catch (Exception e) {
this.getLogger().debug("Exception during installation of config "
+ this.getResource() + " : " + e.getMessage() + ". Retrying later.", e);
Modified:
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/config/ConfigRemoveTask.java
URL:
http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/config/ConfigRemoveTask.java?rev=996561&r1=996560&r2=996561&view=diff
==============================================================================
---
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/config/ConfigRemoveTask.java
(original)
+++
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/config/ConfigRemoveTask.java
Mon Sep 13 14:43:47 2010
@@ -18,6 +18,7 @@
*/
package org.apache.sling.osgi.installer.impl.config;
+import org.apache.sling.osgi.installer.impl.EntityResourceList;
import org.apache.sling.osgi.installer.impl.OsgiInstallerContext;
import org.apache.sling.osgi.installer.impl.RegisteredResource;
import org.osgi.service.cm.Configuration;
@@ -29,7 +30,7 @@ public class ConfigRemoveTask extends Ab
private static final String CONFIG_REMOVE_ORDER = "10-";
- public ConfigRemoveTask(final RegisteredResource r,
+ public ConfigRemoveTask(final EntityResourceList r,
final ServiceTracker configAdminServiceTracker) {
super(r, configAdminServiceTracker);
}
@@ -54,19 +55,19 @@ public class ConfigRemoveTask extends Ab
final Configuration cfg = getConfiguration(ca, false);
if (cfg == null) {
this.getLogger().debug("Cannot delete config , pid={} not
found, ignored ({})", getCompositePid(), getResource());
- this.getResource().setState(RegisteredResource.State.IGNORED);
+ this.setFinishedState(RegisteredResource.State.IGNORED);
} else {
if (
cfg.getProperties().get(ConfigTaskCreator.CONFIG_PATH_KEY) == null ) {
this.getLogger().debug("Configuration has not been
installed by this resource. Not removing!");
-
this.getResource().setState(RegisteredResource.State.IGNORED);
+ this.setFinishedState(RegisteredResource.State.IGNORED);
} else if ( !isSameData(cfg.getProperties(),
this.getResource().getDictionary()) ) {
this.getLogger().debug("Configuration has changed after is
has been installed. Not removing!");
-
this.getResource().setState(RegisteredResource.State.IGNORED);
+ this.setFinishedState(RegisteredResource.State.IGNORED);
} else {
this.getLogger().debug("Deleting config {} ({})",
getCompositePid(), getResource());
cfg.delete();
ctx.log("Deleted configuration {} from resource {}",
getCompositePid(), getResource());
-
this.getResource().setState(RegisteredResource.State.UNINSTALLED);
+
this.setFinishedState(RegisteredResource.State.UNINSTALLED);
}
}
} catch (Exception e) {
Modified:
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/config/ConfigTaskCreator.java
URL:
http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/config/ConfigTaskCreator.java?rev=996561&r1=996560&r2=996561&view=diff
==============================================================================
---
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/config/ConfigTaskCreator.java
(original)
+++
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/config/ConfigTaskCreator.java
Mon Sep 13 14:43:47 2010
@@ -18,6 +18,7 @@
*/
package org.apache.sling.osgi.installer.impl.config;
+import org.apache.sling.osgi.installer.impl.EntityResourceList;
import org.apache.sling.osgi.installer.impl.OsgiInstallerTask;
import org.apache.sling.osgi.installer.impl.RegisteredResource;
import org.osgi.framework.BundleContext;
@@ -57,13 +58,13 @@ public class ConfigTaskCreator {
/**
* Create a task to install or uninstall a configuration.
*/
- public OsgiInstallerTask createTask(final RegisteredResource
toActivate) {
+ public OsgiInstallerTask createTask(final EntityResourceList
toActivate) {
// if there is no config admin, just return
if ( this.configAdminServiceTracker.getService() == null ) {
return null;
}
final OsgiInstallerTask result;
- if (toActivate.getState() ==
RegisteredResource.State.UNINSTALL) {
+ if (toActivate.getActiveResource().getState() ==
RegisteredResource.State.UNINSTALL) {
result = new ConfigRemoveTask(toActivate,
this.configAdminServiceTracker);
} else {
result = new ConfigInstallTask(toActivate,
this.configAdminServiceTracker);
Modified:
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleInstallTask.java
URL:
http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleInstallTask.java?rev=996561&r1=996560&r2=996561&view=diff
==============================================================================
---
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleInstallTask.java
(original)
+++
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleInstallTask.java
Mon Sep 13 14:43:47 2010
@@ -19,9 +19,9 @@
package org.apache.sling.osgi.installer.impl.tasks;
import org.apache.sling.osgi.installer.InstallableResource;
+import org.apache.sling.osgi.installer.impl.EntityResourceList;
import org.apache.sling.osgi.installer.impl.OsgiInstallerContext;
import org.apache.sling.osgi.installer.impl.OsgiInstallerTask;
-import org.apache.sling.osgi.installer.impl.RegisteredResource;
import org.osgi.framework.Bundle;
import org.osgi.service.startlevel.StartLevel;
@@ -33,7 +33,7 @@ public class BundleInstallTask extends O
private final BundleTaskCreator creator;
- public BundleInstallTask(final RegisteredResource r,
+ public BundleInstallTask(final EntityResourceList r,
final BundleTaskCreator creator) {
super(r);
this.creator = creator;
@@ -70,7 +70,7 @@ public class BundleInstallTask extends O
// mark this resource as installed and to be started
this.getResource().getAttributes().put(BundleTaskCreator.ATTR_START, "true");
- ctx.addTaskToCurrentCycle(new BundleStartTask(getResource(),
b.getBundleId(), this.creator));
+ ctx.addTaskToCurrentCycle(new
BundleStartTask(getEntityResourceList(), b.getBundleId(), this.creator));
} catch (Exception ex) {
// if something goes wrong we simply try it again
this.getLogger().debug("Exception during install of bundle " +
this.getResource() + " : " + ex.getMessage() + ". Retrying later.", ex);
Modified:
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleRemoveTask.java
URL:
http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleRemoveTask.java?rev=996561&r1=996560&r2=996561&view=diff
==============================================================================
---
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleRemoveTask.java
(original)
+++
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleRemoveTask.java
Mon Sep 13 14:43:47 2010
@@ -18,6 +18,7 @@
*/
package org.apache.sling.osgi.installer.impl.tasks;
+import org.apache.sling.osgi.installer.impl.EntityResourceList;
import org.apache.sling.osgi.installer.impl.OsgiInstallerContext;
import org.apache.sling.osgi.installer.impl.OsgiInstallerTask;
import org.apache.sling.osgi.installer.impl.RegisteredResource;
@@ -35,7 +36,7 @@ public class BundleRemoveTask extends Os
private final BundleTaskCreator creator;
- public BundleRemoveTask(final RegisteredResource r,
+ public BundleRemoveTask(final EntityResourceList r,
final BundleTaskCreator creator) {
super(r);
this.creator = creator;
@@ -49,7 +50,7 @@ public class BundleRemoveTask extends Os
final Bundle b = this.creator.getMatchingBundle(symbolicName);
if (b == null) {
// nothing to do, so just stop
- this.getResource().setState(RegisteredResource.State.UNINSTALLED);
+ this.setFinishedState(RegisteredResource.State.UNINSTALLED);
return;
}
final int state = b.getState();
@@ -59,7 +60,7 @@ public class BundleRemoveTask extends Os
}
b.uninstall();
ctx.log("Uninstalled bundle {} from resource {}", b,
getResource());
- this.getResource().setState(RegisteredResource.State.UNINSTALLED);
+ this.setFinishedState(RegisteredResource.State.UNINSTALLED);
ctx.addTaskToCurrentCycle(new
SynchronousRefreshPackagesTask(this.creator));
} catch (final BundleException be) {
this.getLogger().debug("Exception during removal of bundle " +
this.getResource() + " : " + be.getMessage() + ". Retrying later.", be);
Modified:
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleStartTask.java
URL:
http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleStartTask.java?rev=996561&r1=996560&r2=996561&view=diff
==============================================================================
---
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleStartTask.java
(original)
+++
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleStartTask.java
Mon Sep 13 14:43:47 2010
@@ -20,6 +20,7 @@ package org.apache.sling.osgi.installer.
import java.text.DecimalFormat;
+import org.apache.sling.osgi.installer.impl.EntityResourceList;
import org.apache.sling.osgi.installer.impl.OsgiInstallerContext;
import org.apache.sling.osgi.installer.impl.OsgiInstallerImpl;
import org.apache.sling.osgi.installer.impl.OsgiInstallerTask;
@@ -43,7 +44,7 @@ public class BundleStartTask extends Osg
private final BundleTaskCreator creator;
- public BundleStartTask(final RegisteredResource r, final long bundleId,
final BundleTaskCreator btc) {
+ public BundleStartTask(final EntityResourceList r, final long bundleId,
final BundleTaskCreator btc) {
super(r);
this.bundleId = bundleId;
this.creator = btc;
@@ -68,7 +69,7 @@ public class BundleStartTask extends Osg
if (bundleId == 0) {
this.getLogger().debug("Bundle 0 is the framework bundle, ignoring
request to start it");
if ( this.getResource() != null ) {
-
this.getResource().setState(RegisteredResource.State.INSTALLED);
+ this.setFinishedState(RegisteredResource.State.INSTALLED);
}
return;
}
@@ -93,7 +94,7 @@ public class BundleStartTask extends Osg
if (b.getState() == Bundle.ACTIVE) {
this.getLogger().debug("Bundle already started, no action taken:
{}/{}", bundleId, b.getSymbolicName());
if ( this.getResource() != null ) {
-
this.getResource().setState(RegisteredResource.State.INSTALLED);
+ this.setFinishedState(RegisteredResource.State.INSTALLED);
}
return;
}
@@ -101,7 +102,7 @@ public class BundleStartTask extends Osg
try {
b.start();
if ( this.getResource() != null ) {
-
this.getResource().setState(RegisteredResource.State.INSTALLED);
+ this.setFinishedState(RegisteredResource.State.INSTALLED);
}
this.getLogger().info("Bundle started (retry count={}, bundle
ID={}) : {}",
new Object[] {retryCount, bundleId, b.getSymbolicName()});
Modified:
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleTaskCreator.java
URL:
http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleTaskCreator.java?rev=996561&r1=996560&r2=996561&view=diff
==============================================================================
---
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleTaskCreator.java
(original)
+++
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleTaskCreator.java
Mon Sep 13 14:43:47 2010
@@ -18,6 +18,7 @@
*/
package org.apache.sling.osgi.installer.impl.tasks;
+import org.apache.sling.osgi.installer.impl.EntityResourceList;
import org.apache.sling.osgi.installer.impl.OsgiInstallerTask;
import org.apache.sling.osgi.installer.impl.RegisteredResource;
import org.osgi.framework.Bundle;
@@ -115,7 +116,8 @@ public class BundleTaskCreator {
/**
* Create a bundle task - install, update or remove
*/
- public OsgiInstallerTask createTask(final RegisteredResource
toActivate) {
+ public OsgiInstallerTask createTask(final EntityResourceList
resourceList) {
+ final RegisteredResource toActivate =
resourceList.getActiveResource();
final OsgiInstallerTask result;
final String symbolicName =
(String)toActivate.getAttributes().get(Constants.BUNDLE_SYMBOLICNAME);
@@ -126,10 +128,10 @@ public class BundleTaskCreator {
// Remove corresponding bundle if present and if we
installed it
if (info != null
&& info.version.equals(new
Version((String)toActivate.getAttributes().get(Constants.BUNDLE_VERSION))) ) {
- result = new BundleRemoveTask(toActivate, this);
+ result = new BundleRemoveTask(resourceList, this);
} else {
logger.info("Bundle {} was not installed by this module,
not removed", symbolicName);
- result = new ChangeStateTask(toActivate,
RegisteredResource.State.UNINSTALLED);
+ result = new ChangeStateTask(resourceList,
RegisteredResource.State.UNINSTALLED);
}
// Install
@@ -137,9 +139,9 @@ public class BundleTaskCreator {
// check if we should start the bundle as we installed it
in the previous run
if (info == null) {
// bundle is not installed yet: install
- result = new BundleInstallTask(toActivate, this);
+ result = new BundleInstallTask(resourceList, this);
} else if ( toActivate.getAttributes().get(ATTR_START) !=
null ) {
- result = new BundleStartTask(toActivate, info.id, this);
+ result = new BundleStartTask(resourceList, info.id, this);
} else {
boolean doUpdate = false;
@@ -159,13 +161,13 @@ public class BundleTaskCreator {
logger.debug("Scheduling update of {}", toActivate);
if (
Constants.SYSTEM_BUNDLE_SYMBOLICNAME.equals(symbolicName) ) {
- result = new SystemBundleUpdateTask(toActivate, this);
+ result = new SystemBundleUpdateTask(resourceList,
this);
} else {
- result = new BundleUpdateTask(toActivate, this);
+ result = new BundleUpdateTask(resourceList, this);
}
} else {
logger.debug("Nothing to install for {}, same version {}
already installed.", toActivate, newVersion);
- result = new ChangeStateTask(toActivate,
RegisteredResource.State.IGNORED);
+ result = new ChangeStateTask(resourceList,
RegisteredResource.State.IGNORED);
}
}
}
Modified:
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleUpdateTask.java
URL:
http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleUpdateTask.java?rev=996561&r1=996560&r2=996561&view=diff
==============================================================================
---
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleUpdateTask.java
(original)
+++
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleUpdateTask.java
Mon Sep 13 14:43:47 2010
@@ -18,6 +18,7 @@
*/
package org.apache.sling.osgi.installer.impl.tasks;
+import org.apache.sling.osgi.installer.impl.EntityResourceList;
import org.apache.sling.osgi.installer.impl.OsgiInstallerContext;
import org.apache.sling.osgi.installer.impl.OsgiInstallerTask;
import org.apache.sling.osgi.installer.impl.RegisteredResource;
@@ -37,7 +38,7 @@ public class BundleUpdateTask extends Os
private final BundleTaskCreator creator;
- public BundleUpdateTask(final RegisteredResource r,
+ public BundleUpdateTask(final EntityResourceList r,
final BundleTaskCreator creator) {
super(r);
this.creator = creator;
@@ -51,7 +52,7 @@ public class BundleUpdateTask extends Os
final Bundle b = this.creator.getMatchingBundle(symbolicName);
if (b == null) {
this.getLogger().debug("Bundle to update ({}) not found",
symbolicName);
- this.getResource().setState(RegisteredResource.State.IGNORED);
+ this.setFinishedState(RegisteredResource.State.IGNORED);
return;
}
@@ -64,7 +65,7 @@ public class BundleUpdateTask extends Os
if (currentVersion.equals(newVersion) && !snapshot) {
// TODO : Isn't this already checked in the task creator?
this.getLogger().debug("Same version is already installed, and not
a snapshot, ignoring update: {}", getResource());
- this.getResource().setState(RegisteredResource.State.INSTALLED);
+ this.setFinishedState(RegisteredResource.State.INSTALLED);
return;
}
@@ -79,16 +80,16 @@ public class BundleUpdateTask extends Os
if (reactivate) {
this.getResource().getAttributes().put(BundleTaskCreator.ATTR_START, "true");
- ctx.addTaskToCurrentCycle(new BundleStartTask(getResource(),
b.getBundleId(), this.creator));
+ ctx.addTaskToCurrentCycle(new
BundleStartTask(this.getEntityResourceList(), b.getBundleId(), this.creator));
} else {
-
this.getResource().setState(RegisteredResource.State.INSTALLED);
+ this.setFinishedState(RegisteredResource.State.INSTALLED);
}
ctx.addTaskToCurrentCycle(new
SynchronousRefreshPackagesTask(this.creator));
this.getLogger().debug("Bundle updated: {}/{}", b.getBundleId(),
b.getSymbolicName());
} catch (Exception e) {
if ( !canRetry ) {
this.getLogger().warn("Removing failing tasks - unable to
retry: " + this, e);
- this.getResource().setState(RegisteredResource.State.IGNORED);
+ this.setFinishedState(RegisteredResource.State.IGNORED);
}
}
}
Modified:
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/ChangeStateTask.java
URL:
http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/ChangeStateTask.java?rev=996561&r1=996560&r2=996561&view=diff
==============================================================================
---
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/ChangeStateTask.java
(original)
+++
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/ChangeStateTask.java
Mon Sep 13 14:43:47 2010
@@ -18,6 +18,7 @@
*/
package org.apache.sling.osgi.installer.impl.tasks;
+import org.apache.sling.osgi.installer.impl.EntityResourceList;
import org.apache.sling.osgi.installer.impl.OsgiInstallerContext;
import org.apache.sling.osgi.installer.impl.OsgiInstallerTask;
import org.apache.sling.osgi.installer.impl.RegisteredResource;
@@ -31,8 +32,8 @@ public class ChangeStateTask extends Osg
private final RegisteredResource.State state;
- public ChangeStateTask(final RegisteredResource r,
- final RegisteredResource.State s) {
+ public ChangeStateTask(final EntityResourceList r,
+ final RegisteredResource.State s) {
super(r);
this.state = s;
}
@@ -41,7 +42,7 @@ public class ChangeStateTask extends Osg
* @see
org.apache.sling.osgi.installer.impl.OsgiInstallerTask#execute(org.apache.sling.osgi.installer.impl.OsgiInstallerContext)
*/
public void execute(final OsgiInstallerContext ctx) {
- this.getResource().setState(this.state);
+ this.setFinishedState(this.state);
}
@Override
Modified:
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/SystemBundleUpdateTask.java
URL:
http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/SystemBundleUpdateTask.java?rev=996561&r1=996560&r2=996561&view=diff
==============================================================================
---
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/SystemBundleUpdateTask.java
(original)
+++
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/SystemBundleUpdateTask.java
Mon Sep 13 14:43:47 2010
@@ -21,9 +21,9 @@ package org.apache.sling.osgi.installer.
import java.io.IOException;
import java.io.InputStream;
+import org.apache.sling.osgi.installer.impl.EntityResourceList;
import org.apache.sling.osgi.installer.impl.OsgiInstallerContext;
import org.apache.sling.osgi.installer.impl.OsgiInstallerTask;
-import org.apache.sling.osgi.installer.impl.RegisteredResource;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleException;
import org.osgi.framework.Constants;
@@ -37,7 +37,7 @@ public class SystemBundleUpdateTask exte
private final BundleTaskCreator creator;
- public SystemBundleUpdateTask(final RegisteredResource r,
+ public SystemBundleUpdateTask(final EntityResourceList r,
final BundleTaskCreator creator) {
super(r);
this.creator = creator;
Modified:
sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/TaskOrderingTest.java
URL:
http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/TaskOrderingTest.java?rev=996561&r1=996560&r2=996561&view=diff
==============================================================================
---
sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/TaskOrderingTest.java
(original)
+++
sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/TaskOrderingTest.java
Mon Sep 13 14:43:47 2010
@@ -48,10 +48,12 @@ public class TaskOrderingTest {
taskSet = new TreeSet<OsgiInstallerTask>();
}
- private static RegisteredResource getRegisteredResource(String url)
throws IOException {
- return RegisteredResourceImpl.create(null,
+ private static EntityResourceList getRegisteredResource(String url)
throws IOException {
+ final EntityResourceList erl = new EntityResourceList();
+ erl.addOrUpdate(RegisteredResourceImpl.create(null,
new InstallableResource(url, null, new
Hashtable<String, Object>(), null, null, null),
- "test");
+ "test"));
+ return erl;
}
private void assertOrder(int testId, Collection<OsgiInstallerTask>
actual, OsgiInstallerTask [] expected) {
Modified:
sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/tasks/BundleTaskCreatorTest.java
URL:
http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/tasks/BundleTaskCreatorTest.java?rev=996561&r1=996560&r2=996561&view=diff
==============================================================================
---
sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/tasks/BundleTaskCreatorTest.java
(original)
+++
sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/tasks/BundleTaskCreatorTest.java
Mon Sep 13 14:43:47 2010
@@ -26,6 +26,7 @@ import java.util.Iterator;
import java.util.SortedSet;
import java.util.TreeSet;
+import org.apache.sling.osgi.installer.impl.EntityResourceList;
import org.apache.sling.osgi.installer.impl.MockBundleResource;
import org.apache.sling.osgi.installer.impl.OsgiInstallerTask;
import org.apache.sling.osgi.installer.impl.RegisteredResource;
@@ -42,7 +43,9 @@ public class BundleTaskCreatorTest {
}
final SortedSet<OsgiInstallerTask> tasks = new
TreeSet<OsgiInstallerTask>();
for(final RegisteredResource r : sortedResources) {
- tasks.add(btc.createTask(r));
+ final EntityResourceList erl = new EntityResourceList();
+ erl.addOrUpdate(r);
+ tasks.add(btc.createTask(erl));
}
return tasks;
}