Author: marrs
Date: Wed Jan 12 16:43:42 2011
New Revision: 1058225
URL: http://svn.apache.org/viewvc?rev=1058225&view=rev
Log:
FELIX-2776 Fixed a concurrent modification exception, and the order in which
individual commands were executed.
Modified:
felix/trunk/deploymentadmin/service/src/main/java/org/apache/felix/deploymentadmin/DeploymentAdminImpl.java
felix/trunk/deploymentadmin/service/src/main/java/org/apache/felix/deploymentadmin/spi/Command.java
Modified:
felix/trunk/deploymentadmin/service/src/main/java/org/apache/felix/deploymentadmin/DeploymentAdminImpl.java
URL:
http://svn.apache.org/viewvc/felix/trunk/deploymentadmin/service/src/main/java/org/apache/felix/deploymentadmin/DeploymentAdminImpl.java?rev=1058225&r1=1058224&r2=1058225&view=diff
==============================================================================
---
felix/trunk/deploymentadmin/service/src/main/java/org/apache/felix/deploymentadmin/DeploymentAdminImpl.java
(original)
+++
felix/trunk/deploymentadmin/service/src/main/java/org/apache/felix/deploymentadmin/DeploymentAdminImpl.java
Wed Jan 12 16:43:42 2011
@@ -162,12 +162,13 @@ public class DeploymentAdminImpl impleme
throw new DeploymentException(DeploymentException.CODE_TIMEOUT,
"Thread interrupted");
}
- JarInputStream jarInput = null;
File tempPackage = null;
- File tempIndex = null;
- File tempContents = null;
-
+ StreamDeploymentPackage source = null;
+ boolean succeeded = false;
try {
+ JarInputStream jarInput = null;
+ File tempIndex = null;
+ File tempContents = null;
try {
File tempDir = m_context.getDataFile(TEMP_DIR);
tempDir.mkdirs();
@@ -190,16 +191,9 @@ public class DeploymentAdminImpl impleme
m_log.log(LogService.LOG_ERROR, "Stream does not contain a
valid Jar", e);
throw new
DeploymentException(DeploymentException.CODE_NOT_A_JAR, "Stream does not
contain a valid Jar", e);
}
- }
- finally {
- m_semaphore.release();
- }
-
- StreamDeploymentPackage source = new StreamDeploymentPackage(jarInput,
m_context);
- sendStartedEvent(source.getName());
-
- boolean succeeded = false;
- try {
+ source = new StreamDeploymentPackage(jarInput, m_context);
+ sendStartedEvent(source.getName());
+
AbstractDeploymentPackage target = (AbstractDeploymentPackage)
getDeploymentPackage(source.getName());
boolean newPackage = (target == null);
if (newPackage) {
@@ -256,8 +250,12 @@ public class DeploymentAdminImpl impleme
return fileDeploymentPackage;
}
finally {
- delete(tempPackage);
- sendCompleteEvent(source.getName(), succeeded);
+ if (tempPackage != null) {
+ delete(tempPackage);
+ }
+ if (source != null) {
+ sendCompleteEvent(source.getName(), succeeded);
+ }
m_semaphore.release();
}
}
Modified:
felix/trunk/deploymentadmin/service/src/main/java/org/apache/felix/deploymentadmin/spi/Command.java
URL:
http://svn.apache.org/viewvc/felix/trunk/deploymentadmin/service/src/main/java/org/apache/felix/deploymentadmin/spi/Command.java?rev=1058225&r1=1058224&r2=1058225&view=diff
==============================================================================
---
felix/trunk/deploymentadmin/service/src/main/java/org/apache/felix/deploymentadmin/spi/Command.java
(original)
+++
felix/trunk/deploymentadmin/service/src/main/java/org/apache/felix/deploymentadmin/spi/Command.java
Wed Jan 12 16:43:42 2011
@@ -61,8 +61,8 @@ public abstract class Command {
* Commits all changes the command may have defined when it was executed
by calling the <code>execute()</code> method.
*/
protected void commit() {
- for (ListIterator i = m_commit.listIterator(m_commit.size());
i.hasPrevious();) {
- Runnable runnable = (Runnable) i.previous();
+ for (ListIterator i = m_commit.listIterator(); i.hasNext();) {
+ Runnable runnable = (Runnable) i.next();
runnable.run();
}
cleanUp();