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>();
