refs bug 362924 - upgraded apache dependencies and added cleanup code
diff --git a/bundles/org.eclipse.rap.rwt.supplemental.fileupload/META-INF/MANIFEST.MF b/bundles/org.eclipse.rap.rwt.supplemental.fileupload/META-INF/MANIFEST.MF
index 9943e68..b0ec8cf 100644
--- a/bundles/org.eclipse.rap.rwt.supplemental.fileupload/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.rap.rwt.supplemental.fileupload/META-INF/MANIFEST.MF
@@ -5,8 +5,8 @@
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Bundle-Name: %Bundle-Name
 Bundle-Vendor: %Bundle-Vendor
-Require-Bundle: org.apache.commons.fileupload;bundle-version="1.2.0",
- org.apache.commons.io;bundle-version="1.3.2",
+Require-Bundle: org.apache.commons.fileupload;bundle-version="1.2.2",
+ org.apache.commons.io;bundle-version="2.0.1",
  org.eclipse.rap.rwt;bundle-version="1.5.0"
 Import-Package: javax.servlet;version="[2.3.0,4.0.0)",
  javax.servlet.http;version="[2.3.0,4.0.0)"
diff --git a/bundles/org.eclipse.rap.rwt.supplemental.fileupload/src/org/eclipse/rap/rwt/supplemental/fileupload/internal/FileUploadHandlerStore.java b/bundles/org.eclipse.rap.rwt.supplemental.fileupload/src/org/eclipse/rap/rwt/supplemental/fileupload/internal/FileUploadHandlerStore.java
index 6949861..594da3f 100644
--- a/bundles/org.eclipse.rap.rwt.supplemental.fileupload/src/org/eclipse/rap/rwt/supplemental/fileupload/internal/FileUploadHandlerStore.java
+++ b/bundles/org.eclipse.rap.rwt.supplemental.fileupload/src/org/eclipse/rap/rwt/supplemental/fileupload/internal/FileUploadHandlerStore.java
@@ -13,13 +13,18 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.commons.io.FileCleaningTracker;
 import org.eclipse.rap.rwt.supplemental.fileupload.FileUploadHandler;
 import org.eclipse.rwt.RWT;
+import org.eclipse.rwt.service.SessionStoreEvent;
+import org.eclipse.rwt.service.SessionStoreListener;
 
 
 public final class FileUploadHandlerStore {
 
   private static final String ATTR_NAME = FileUploadHandlerStore.class.getName() + ".instance";
+  private static final String CLEANING_TRACKER_ATTR_NAME = FileCleaningTracker.class.getName() + ".fileupload";  
+
   private static final Object LOCK = new Object();
   private final Map< String, FileUploadHandler > handlers;
   private final Object lock;
@@ -36,7 +41,7 @@
       result = ( FileUploadHandlerStore )RWT.getApplicationStore().getAttribute( ATTR_NAME );
       if( result == null ) {
         result = new FileUploadHandlerStore();
-        RWT.getApplicationStore().setAttribute( ATTR_NAME, result );
+        RWT.getApplicationStore().setAttribute( ATTR_NAME, result );        
       }
     }
     return result;
@@ -78,4 +83,24 @@
       }
     }
   }
+  
+  public static FileCleaningTracker getCleaningTracker() {    
+      FileCleaningTracker cleaningTracker = ( FileCleaningTracker )RWT.getSessionStore().getAttribute( CLEANING_TRACKER_ATTR_NAME );
+      if ( cleaningTracker == null ) {        
+        // Create cleaning tracker for current session and register session listener that will destroy it 
+        cleaningTracker = new FileCleaningTracker();
+        RWT.getSessionStore().setAttribute( CLEANING_TRACKER_ATTR_NAME, cleaningTracker );
+        RWT.getSessionStore().addSessionStoreListener( new FileUploadCleanupHandler() );
+      }
+      return cleaningTracker;
+  }
+  
+  private static class FileUploadCleanupHandler implements SessionStoreListener {
+    public void beforeDestroy( SessionStoreEvent event ) {
+      // Destroy the 
+      FileCleaningTracker cleaningTracker = ( FileCleaningTracker ) RWT.getSessionStore().getAttribute( CLEANING_TRACKER_ATTR_NAME );
+      RWT.getSessionStore().removeAttribute( CLEANING_TRACKER_ATTR_NAME );
+      cleaningTracker.exitWhenFinished();
+    }
+  }
 }
diff --git a/bundles/org.eclipse.rap.rwt.supplemental.fileupload/src/org/eclipse/rap/rwt/supplemental/fileupload/internal/FileUploadProcessor.java b/bundles/org.eclipse.rap.rwt.supplemental.fileupload/src/org/eclipse/rap/rwt/supplemental/fileupload/internal/FileUploadProcessor.java
index 4ca80b2..cb311ee 100644
--- a/bundles/org.eclipse.rap.rwt.supplemental.fileupload/src/org/eclipse/rap/rwt/supplemental/fileupload/internal/FileUploadProcessor.java
+++ b/bundles/org.eclipse.rap.rwt.supplemental.fileupload/src/org/eclipse/rap/rwt/supplemental/fileupload/internal/FileUploadProcessor.java
@@ -89,7 +89,8 @@
   }
 
   private ServletFileUpload createUpload() {
-    DiskFileItemFactory factory = new DiskFileItemFactory();
+    DiskFileItemFactory factory = new DiskFileItemFactory();      
+    factory.setFileCleaningTracker( FileUploadHandlerStore.getCleaningTracker() );
     ServletFileUpload result = new ServletFileUpload( factory );
     long maxFileSize = getMaxFileSize();
     result.setFileSizeMax( maxFileSize );
diff --git a/tests/org.eclipse.rap.rwt.supplemental.fileupload.test/META-INF/MANIFEST.MF b/tests/org.eclipse.rap.rwt.supplemental.fileupload.test/META-INF/MANIFEST.MF
index 684ab13..59bc05a 100644
--- a/tests/org.eclipse.rap.rwt.supplemental.fileupload.test/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.rap.rwt.supplemental.fileupload.test/META-INF/MANIFEST.MF
@@ -8,9 +8,9 @@
 Bundle-Vendor: %Bundle-Vendor
 Import-Package: javax.servlet;version="[2.5.0,4.0.0)",
  javax.servlet.http;version="[2.5.0,4.0.0)",
- org.apache.commons.fileupload;version="1.2.0",
- org.apache.commons.fileupload.disk;version="1.2.0",
- org.apache.commons.fileupload.servlet;version="1.2.0",
+ org.apache.commons.fileupload;version="1.2.2",
+ org.apache.commons.fileupload.disk;version="1.2.2",
+ org.apache.commons.fileupload.servlet;version="1.2.2",
  org.eclipse.rap.rwt.testfixture
 Require-Bundle: org.junit,
  org.eclipse.rap.rwt;bundle-version="1.5.0"