T2-1135 use weak references to the facades to avoid facade memory leak. 

git-svn-id: 
http://taverna.googlecode.com/svn/taverna/engine/net.sf.taverna.t2.activities/trunk/dependency-activity@9653
 bf327186-88b3-11dd-a302-d386e5130c1c


Project: 
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/commit/73a68072
Tree: 
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/tree/73a68072
Diff: 
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/diff/73a68072

Branch: refs/heads/master
Commit: 73a6807242ea3d9b9208dc6168f337ce25a10b12
Parents: 8b4e5bc
Author: [email protected] 
<[email protected]@bf327186-88b3-11dd-a302-d386e5130c1c>
Authored: Mon Feb 1 16:03:40 2010 +0000
Committer: [email protected] 
<[email protected]@bf327186-88b3-11dd-a302-d386e5130c1c>
Committed: Mon Feb 1 16:03:40 2010 +0000

----------------------------------------------------------------------
 .../AbstractAsynchronousDependencyActivity.java     | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/73a68072/src/main/java/net/sf/taverna/t2/activities/dependencyactivity/AbstractAsynchronousDependencyActivity.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/net/sf/taverna/t2/activities/dependencyactivity/AbstractAsynchronousDependencyActivity.java
 
b/src/main/java/net/sf/taverna/t2/activities/dependencyactivity/AbstractAsynchronousDependencyActivity.java
index 1e75e13..37a9503 100644
--- 
a/src/main/java/net/sf/taverna/t2/activities/dependencyactivity/AbstractAsynchronousDependencyActivity.java
+++ 
b/src/main/java/net/sf/taverna/t2/activities/dependencyactivity/AbstractAsynchronousDependencyActivity.java
@@ -22,6 +22,7 @@ package net.sf.taverna.t2.activities.dependencyactivity;
 
 import java.io.File;
 import java.io.FilenameFilter;
+import java.lang.ref.WeakReference;
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.util.Arrays;
@@ -29,8 +30,6 @@ import java.util.HashSet;
 import java.util.Set;
 import java.util.WeakHashMap;
 
-import org.apache.log4j.Logger;
-
 import net.sf.taverna.raven.appconfig.ApplicationRuntime;
 import net.sf.taverna.raven.prelauncher.BootstrapClassLoader;
 import net.sf.taverna.raven.prelauncher.PreLauncher;
@@ -45,6 +44,8 @@ import 
net.sf.taverna.t2.workflowmodel.processor.activity.Activity;
 import net.sf.taverna.t2.workflowmodel.processor.activity.NestedDataflow;
 import net.sf.taverna.t2.workflowmodel.utils.Tools;
 
+import org.apache.log4j.Logger;
+
 /**
  * A parent abstract class for activities that require dependency management, 
such as
  * API Consumer and Beanshell. Defines dependencies on local JAR files 
@@ -239,10 +240,15 @@ public abstract class 
AbstractAsynchronousDependencyActivity<ConfigType> extends
 
                ClassLoaderSharing classLoaderSharing = 
configurationBean.getClassLoaderSharing();
                // Get the WorkflowInstanceFacade which contains the current 
workflow
-               WorkflowInstanceFacade wfFacade = 
WorkflowInstanceFacade.workflowRunFacades.get(workflowRunID);
+               WeakReference<WorkflowInstanceFacade> wfFacadeRef = 
WorkflowInstanceFacade.workflowRunFacades.get(workflowRunID);
+               WorkflowInstanceFacade wfFacade = null;         
+               if (wfFacadeRef != null) {
+                       wfFacade = wfFacadeRef.get();
+               }
                Dataflow wf = null;
-               if (wfFacade != null)
-                       wf = 
WorkflowInstanceFacade.workflowRunFacades.get(workflowRunID).getDataflow();
+               if (wfFacade != null) {
+                       wf = wfFacade.getDataflow();
+               }
 
                // Files of dependencies for all activities in the workflow 
that share the classloading policy
                HashSet<File> dependencies = new HashSet<File>();

Reply via email to