Fixed TestPGETaskInstance test failure due to null FM Url at XMLHelper.fillIn()


Project: http://git-wip-us.apache.org/repos/asf/oodt/repo
Commit: http://git-wip-us.apache.org/repos/asf/oodt/commit/ec25440d
Tree: http://git-wip-us.apache.org/repos/asf/oodt/tree/ec25440d
Diff: http://git-wip-us.apache.org/repos/asf/oodt/diff/ec25440d

Branch: refs/heads/OODT-978
Commit: ec25440d97f260ade41101351a8516191076493d
Parents: 2d19275
Author: Imesha Sudasingha <imesha.sudasin...@gmail.com>
Authored: Fri May 18 13:19:35 2018 +0530
Committer: Imesha Sudasingha <imesha.sudasin...@gmail.com>
Committed: Fri May 18 13:19:35 2018 +0530

----------------------------------------------------------------------
 .../apache/oodt/cas/pge/PGETaskInstance.java    |  74 +++++++++-----
 .../org/apache/oodt/cas/pge/util/XmlHelper.java |  24 +++--
 .../oodt/cas/pge/TestPGETaskInstance.java       | 100 ++++++++++---------
 .../system/AvroRpcWorkflowManagerClient.java    |  39 +++++---
 .../workflow/system/WorkflowManagerClient.java  |   4 +-
 .../system/XmlRpcWorkflowManagerClient.java     |   4 +
 6 files changed, 145 insertions(+), 100 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/oodt/blob/ec25440d/pge/src/main/java/org/apache/oodt/cas/pge/PGETaskInstance.java
----------------------------------------------------------------------
diff --git a/pge/src/main/java/org/apache/oodt/cas/pge/PGETaskInstance.java 
b/pge/src/main/java/org/apache/oodt/cas/pge/PGETaskInstance.java
index 4f36890..2e266e7 100644
--- a/pge/src/main/java/org/apache/oodt/cas/pge/PGETaskInstance.java
+++ b/pge/src/main/java/org/apache/oodt/cas/pge/PGETaskInstance.java
@@ -16,6 +16,9 @@
  */
 package org.apache.oodt.cas.pge;
 
+import com.google.common.base.Splitter;
+import com.google.common.base.Strings;
+import com.google.common.collect.Lists;
 import org.apache.commons.lang.Validate;
 import org.apache.oodt.cas.crawl.AutoDetectProductCrawler;
 import org.apache.oodt.cas.crawl.ProductCrawler;
@@ -54,12 +57,6 @@ import 
org.apache.oodt.cas.workflow.system.rpc.RpcCommunicationFactory;
 import org.apache.oodt.cas.workflow.util.ScriptFile;
 import org.apache.oodt.commons.exceptions.CommonsException;
 import org.apache.oodt.commons.exec.ExecUtils;
-import org.apache.xmlrpc.XmlRpcException;
-
-import com.google.common.base.Splitter;
-import com.google.common.base.Strings;
-import com.google.common.collect.Lists;
-
 import org.springframework.context.support.FileSystemXmlApplicationContext;
 
 import java.io.File;
@@ -80,8 +77,14 @@ import java.util.logging.SimpleFormatter;
 import java.util.regex.Pattern;
 
 import static org.apache.oodt.cas.pge.metadata.PgeTaskMetKeys.*;
-import static org.apache.oodt.cas.pge.metadata.PgeTaskStatus.*;
-import static org.apache.oodt.cas.pge.util.GenericPgeObjectFactory.*;
+import static org.apache.oodt.cas.pge.metadata.PgeTaskStatus.CONF_FILE_BUILD;
+import static org.apache.oodt.cas.pge.metadata.PgeTaskStatus.CRAWLING;
+import static org.apache.oodt.cas.pge.metadata.PgeTaskStatus.RUNNING_PGE;
+import static org.apache.oodt.cas.pge.metadata.PgeTaskStatus.STAGING_INPUT;
+import static 
org.apache.oodt.cas.pge.util.GenericPgeObjectFactory.createConfigFilePropertyAdder;
+import static 
org.apache.oodt.cas.pge.util.GenericPgeObjectFactory.createFileStager;
+import static 
org.apache.oodt.cas.pge.util.GenericPgeObjectFactory.createPgeConfigBuilder;
+import static 
org.apache.oodt.cas.pge.util.GenericPgeObjectFactory.createSciPgeConfigFileWriter;
 
 
 /**
@@ -94,24 +97,21 @@ import static 
org.apache.oodt.cas.pge.util.GenericPgeObjectFactory.*;
 public class PGETaskInstance implements WorkflowTaskInstance {
 
    protected Logger logger = Logger.getLogger(PGETaskInstance.class.getName());
-   protected WorkflowManagerClient wm;
-   protected String workflowInstId;
+   private WorkflowManagerClient wmClient;
+   private String workflowInstId;
    protected PgeMetadata pgeMetadata;
    protected PgeConfig pgeConfig;
 
    protected PGETaskInstance() {}
 
    @Override
-   public void run(Metadata metadata, WorkflowTaskConfiguration config)
-         throws WorkflowTaskInstanceException {
+   public void run(Metadata metadata, WorkflowTaskConfiguration config) throws 
WorkflowTaskInstanceException {
       try {
          // Initialize CAS-PGE.
          pgeMetadata = createPgeMetadata(metadata, config);
          pgeConfig = createPgeConfig();
          runPropertyAdders();
-         wm = createWorkflowManagerClient();
-         workflowInstId = getWorkflowInstanceId();
-         logger = createLogger(); // use workflow ID specific logger from now 
on 
+         logger = createLogger(); // use workflow ID specific logger from now 
on
 
          // Write out PgeMetadata.
          dumpMetadataIfRequested();
@@ -128,7 +128,9 @@ public class PGETaskInstance implements 
WorkflowTaskInstance {
          runPge();
 
          // Ingest products.
-         runIngestCrawler(createProductCrawler());
+         ProductCrawler productCrawler = createProductCrawler();
+         runIngestCrawler(productCrawler);
+         productCrawler.shutdown();
 
          // Commit dynamic metadata.
          updateDynamicMetadata();
@@ -141,7 +143,7 @@ public class PGETaskInstance implements 
WorkflowTaskInstance {
 
    protected void updateStatus(String status) throws Exception {
       logger.info("Updating status to workflow as [" + status + "]");
-      if (!wm.updateWorkflowInstanceStatus(workflowInstId, status)) {
+      if 
(!getWorkflowManagerClient().updateWorkflowInstanceStatus(workflowInstId, 
status)) {
          throw new PGEException(
                "Failed to update workflow status : client returned false");
       }
@@ -250,12 +252,15 @@ public class PGETaskInstance implements 
WorkflowTaskInstance {
             pgeConfig.getPropertyAdderCustomArgs());
    }
 
-   protected WorkflowManagerClient createWorkflowManagerClient()
-       throws MalformedURLException {
-      String url = pgeMetadata.getMetadata(WORKFLOW_MANAGER_URL);
-      logger.info("Creating WorkflowManager client for url [" + url + "]");
-      Validate.notNull(url, "Must specify " + WORKFLOW_MANAGER_URL);
-      return RpcCommunicationFactory.createClient(new URL(url));
+   protected WorkflowManagerClient getWorkflowManagerClient() throws 
MalformedURLException {
+      if (this.wmClient == null) {
+         String url = pgeMetadata.getMetadata(WORKFLOW_MANAGER_URL);
+         logger.info("Creating WorkflowManager client for url [" + url + "]");
+         Validate.notNull(url, "Must specify " + WORKFLOW_MANAGER_URL);
+         this.wmClient = RpcCommunicationFactory.createClient(new URL(url));
+      }
+
+      return this.wmClient;
    }
 
    protected String getWorkflowInstanceId() {
@@ -586,7 +591,26 @@ public class PGETaskInstance implements 
WorkflowTaskInstance {
 
    protected void updateDynamicMetadata() throws Exception {
       pgeMetadata.commitMarkedDynamicMetadataKeys();
-      wm.updateMetadataForWorkflow(workflowInstId,
-            pgeMetadata.asMetadata(PgeMetadata.Type.DYNAMIC));
+      getWorkflowManagerClient()
+              .updateMetadataForWorkflow(workflowInstId, 
pgeMetadata.asMetadata(PgeMetadata.Type.DYNAMIC));
+   }
+
+   public String getWorkflowInstId() {
+      return workflowInstId;
+   }
+
+   public void setWorkflowInstId(String workflowInstId) {
+      this.workflowInstId = workflowInstId;
+   }
+
+   public void setWmClient(WorkflowManagerClient wmClient) {
+      this.wmClient = wmClient;
+   }
+
+   @Override
+   public void finalize() throws IOException {
+      if (wmClient != null) {
+         wmClient.close();
+      }
    }
 }

http://git-wip-us.apache.org/repos/asf/oodt/blob/ec25440d/pge/src/main/java/org/apache/oodt/cas/pge/util/XmlHelper.java
----------------------------------------------------------------------
diff --git a/pge/src/main/java/org/apache/oodt/cas/pge/util/XmlHelper.java 
b/pge/src/main/java/org/apache/oodt/cas/pge/util/XmlHelper.java
index 9f01d99..a373af0 100644
--- a/pge/src/main/java/org/apache/oodt/cas/pge/util/XmlHelper.java
+++ b/pge/src/main/java/org/apache/oodt/cas/pge/util/XmlHelper.java
@@ -37,6 +37,7 @@ import org.w3c.dom.NodeList;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
+import java.io.IOException;
 import java.net.URL;
 import java.util.Arrays;
 import java.util.List;
@@ -438,21 +439,26 @@ public class XmlHelper {
                return fillIn(value, inputMetadata, true);
        }
 
-       public static String fillIn(String value, Metadata inputMetadata,
-                       boolean envReplaceRecur) throws PGEException {
-               try (FileManagerClient 
fmClient=RpcCommunicationFactory.createClient(
-                               new 
URL(inputMetadata.getMetadata(QUERY_FILE_MANAGER_URL.getName())))){
-                       while ((value = PathUtils
-                                       .doDynamicReplacement(value, 
inputMetadata)).contains("[")
-                                       && envReplaceRecur) {
+       public static String fillIn(String value, Metadata inputMetadata, 
boolean envReplaceRecur) throws PGEException {
+               FileManagerClient fmClient=null;
+               try {
+                       while ((value = PathUtils.doDynamicReplacement(value, 
inputMetadata)).contains("[") && envReplaceRecur) {
                        }
-                       if (value.toUpperCase().matches(
-                                       
"^\\s*SQL\\s*\\(.*\\)\\s*\\{.*\\}\\s*$")) {
+
+                       if 
(value.toUpperCase().matches("^\\s*SQL\\s*\\(.*\\)\\s*\\{.*\\}\\s*$")) {
+                               fmClient = RpcCommunicationFactory
+                                               .createClient(new 
URL(inputMetadata.getMetadata(QUERY_FILE_MANAGER_URL.getName())));
                                value = 
QueryUtils.getQueryResultsAsString(fmClient.complexQuery(SqlParser.parseSqlQueryMethod(value)));
                        }
                        return value;
                } catch (Exception e) {
                        throw new PGEException("Failed to parse value: " + 
value, e);
+               } finally {
+                       if (fmClient != null) {
+                               try {
+                                       fmClient.close();
+                               } catch (IOException ignored) { }
+                       }
                }
        }
 }

http://git-wip-us.apache.org/repos/asf/oodt/blob/ec25440d/pge/src/test/java/org/apache/oodt/cas/pge/TestPGETaskInstance.java
----------------------------------------------------------------------
diff --git a/pge/src/test/java/org/apache/oodt/cas/pge/TestPGETaskInstance.java 
b/pge/src/test/java/org/apache/oodt/cas/pge/TestPGETaskInstance.java
index c888290..db60792 100644
--- a/pge/src/test/java/org/apache/oodt/cas/pge/TestPGETaskInstance.java
+++ b/pge/src/test/java/org/apache/oodt/cas/pge/TestPGETaskInstance.java
@@ -18,6 +18,9 @@ package org.apache.oodt.cas.pge;
 
 //OODT static imports
 
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
 import org.apache.commons.io.FileUtils;
 import org.apache.oodt.cas.crawl.AutoDetectProductCrawler;
 import org.apache.oodt.cas.crawl.ProductCrawler;
@@ -35,13 +38,8 @@ import org.apache.oodt.cas.pge.metadata.PgeTaskStatus;
 import org.apache.oodt.cas.pge.writers.MockDynamicConfigFileWriter;
 import org.apache.oodt.cas.workflow.metadata.CoreMetKeys;
 import org.apache.oodt.cas.workflow.structs.WorkflowTaskConfiguration;
-
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-
+import org.apache.oodt.cas.workflow.system.AvroRpcWorkflowManagerClient;
 import org.apache.oodt.cas.workflow.system.WorkflowManagerClient;
-import org.apache.oodt.cas.workflow.system.XmlRpcWorkflowManagerClient;
 import org.junit.After;
 import org.junit.Test;
 import org.w3c.dom.Document;
@@ -50,10 +48,13 @@ import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 import org.xml.sax.InputSource;
 
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
 import java.io.File;
 import java.io.FileFilter;
 import java.io.FileInputStream;
 import java.io.StringReader;
+import java.net.URL;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
@@ -64,14 +65,18 @@ import java.util.logging.Handler;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
 import static org.apache.oodt.cas.pge.metadata.PgeTaskMetKeys.*;
 import static org.apache.oodt.cas.pge.metadata.PgeTaskStatus.CRAWLING;
-import static org.easymock.EasyMock.*;
-import static org.junit.Assert.*;
-import static org.junit.Assume.*;
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.verify;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import static org.junit.Assume.assumeTrue;
 //JDK imports
 //JUnit imports
 //Apache imports
@@ -219,25 +224,24 @@ public class TestPGETaskInstance {
       assertEquals(Level.SEVERE.getLocalizedName() + ": pge2 message1", 
messages.get(1));
    }
 
-  @Test
+   @Test
    public void testUpdateStatus() throws Exception {
       final Map<String, String> args = Maps.newHashMap();
-      PGETaskInstance pgeTask = createTestInstance();
-      pgeTask.wm = new XmlRpcWorkflowManagerClient(null) {
-         @Override
-         public boolean updateWorkflowInstanceStatus(String instanceId,
-               String status) {
-            args.put("InstanceId", instanceId);
-            args.put("Status", status);
-            return true;
-         }
-      };
-      String instanceId = "Test ID";
-      String status = PgeTaskStatus.CRAWLING.getWorkflowStatusName();
-      pgeTask.workflowInstId = instanceId;
-      pgeTask.updateStatus(status);
-      assertEquals(instanceId, args.get("InstanceId"));
-      assertEquals(status, args.get("Status"));
+       PGETaskInstance pgeTask = createTestInstance();
+       pgeTask.setWmClient(new AvroRpcWorkflowManagerClient(new 
URL("http://localhost:9001";)) {
+           @Override
+           public boolean updateWorkflowInstanceStatus(String instanceId, 
String status) {
+               args.put("InstanceId", instanceId);
+               args.put("Status", status);
+               return true;
+           }
+       });
+       String instanceId = "Test ID";
+       String status = PgeTaskStatus.CRAWLING.getWorkflowStatusName();
+       pgeTask.setWorkflowInstId(instanceId);
+       pgeTask.updateStatus(status);
+       assertEquals(instanceId, args.get("InstanceId"));
+       assertEquals(status, args.get("Status"));
    }
 
   @Test
@@ -271,11 +275,8 @@ public class TestPGETaskInstance {
   @Test
    public void testCreateWorkflowManagerClient() throws Exception {
       PGETaskInstance pgeTask = createTestInstance();
-      pgeTask.pgeMetadata.replaceMetadata(WORKFLOW_MANAGER_URL,
-            "http://localhost:8888";);
-      WorkflowManagerClient wmClient =
-         pgeTask.createWorkflowManagerClient();
-      assertNotNull(wmClient);
+      pgeTask.pgeMetadata.replaceMetadata(WORKFLOW_MANAGER_URL, 
"http://localhost:8888";);
+      assertNotNull(pgeTask.getWorkflowManagerClient());
    }
 
   @Test
@@ -462,12 +463,13 @@ public class TestPGETaskInstance {
       pgeTask.pgeConfig.addOuputDirAndExpressions(new OutputDir("/tmp/dir1", 
true));
       pgeTask.pgeConfig.addOuputDirAndExpressions(new OutputDir("/tmp/dir2", 
true));
       pgeTask.pgeMetadata.replaceMetadata(ATTEMPT_INGEST_ALL, 
Boolean.toString(true));
-      pgeTask.workflowInstId = "WorkflowInstanceId";
+      pgeTask.setWorkflowInstId("WorkflowInstanceId");
 
-      pgeTask.wm = createMock(WorkflowManagerClient.class);
-      expect(pgeTask.wm.updateWorkflowInstanceStatus(pgeTask.workflowInstId,
-            CRAWLING.getWorkflowStatusName())).andReturn(true);
-      replay(pgeTask.wm);
+      pgeTask.setWmClient(createMock(WorkflowManagerClient.class));
+      expect(pgeTask.getWorkflowManagerClient()
+              .updateWorkflowInstanceStatus(pgeTask.getWorkflowInstId(), 
CRAWLING.getWorkflowStatusName())
+      ).andReturn(true);
+      replay(pgeTask.getWorkflowManagerClient());
 
       AutoDetectProductCrawler pc = createMock(AutoDetectProductCrawler.class);
       pc.crawl(new File("/tmp/dir1"));
@@ -477,14 +479,14 @@ public class TestPGETaskInstance {
 
       pgeTask.runIngestCrawler(pc);
 
-      verify(pgeTask.wm);
+      verify(pgeTask.getWorkflowManagerClient());
       verify(pc);
 
       // Case: UpdateStatus Fail
-      pgeTask.wm = createMock(WorkflowManagerClient.class);
-      expect(pgeTask.wm.updateWorkflowInstanceStatus(pgeTask.workflowInstId,
+      pgeTask.setWmClient(createMock(WorkflowManagerClient.class));
+      
expect(pgeTask.getWorkflowManagerClient().updateWorkflowInstanceStatus(pgeTask.getWorkflowInstId(),
             CRAWLING.getWorkflowStatusName())).andReturn(false);
-      replay(pgeTask.wm);
+      replay(pgeTask.getWorkflowManagerClient());
 
       pc = createMock(AutoDetectProductCrawler.class);
       replay(pc);
@@ -494,14 +496,14 @@ public class TestPGETaskInstance {
          fail("Should have thrown");
       } catch (Exception e) { /* expect throw */ }
 
-      verify(pgeTask.wm);
+      verify(pgeTask.getWorkflowManagerClient());
       verify(pc);
 
       // Case: UpdateStatus Success, VerifyIngest Fail
-      pgeTask.wm = createMock(WorkflowManagerClient.class);
-      expect(pgeTask.wm.updateWorkflowInstanceStatus(pgeTask.workflowInstId,
+      pgeTask.setWmClient(createMock(WorkflowManagerClient.class));
+      
expect(pgeTask.getWorkflowManagerClient().updateWorkflowInstanceStatus(pgeTask.getWorkflowInstId(),
             CRAWLING.getWorkflowStatusName())).andReturn(true);
-      replay(pgeTask.wm);
+      replay(pgeTask.getWorkflowManagerClient());
 
       pc = createMock(AutoDetectProductCrawler.class);
       pc.crawl(new File("/tmp/dir1"));
@@ -529,7 +531,7 @@ public class TestPGETaskInstance {
          fail("Should have thrown");
       } catch (Exception e) { /* expect throw */ }
 
-      verify(pgeTask.wm);
+      verify(pgeTask.getWorkflowManagerClient());
       verify(pc);
    }
 
@@ -634,7 +636,7 @@ public class TestPGETaskInstance {
    private PGETaskInstance createTestInstance(String workflowInstId)
          throws Exception {
       PGETaskInstance pgeTask = new PGETaskInstance();
-      pgeTask.workflowInstId = workflowInstId;
+       pgeTask.setWorkflowInstId(workflowInstId);
       pgeTask.pgeMetadata = new PgeMetadata();
       pgeTask.pgeMetadata.replaceMetadata(NAME, "TestPGE");
       pgeTask.pgeConfig = new PgeConfig();

http://git-wip-us.apache.org/repos/asf/oodt/blob/ec25440d/workflow/src/main/java/org/apache/oodt/cas/workflow/system/AvroRpcWorkflowManagerClient.java
----------------------------------------------------------------------
diff --git 
a/workflow/src/main/java/org/apache/oodt/cas/workflow/system/AvroRpcWorkflowManagerClient.java
 
b/workflow/src/main/java/org/apache/oodt/cas/workflow/system/AvroRpcWorkflowManagerClient.java
index adc0bba..337c520 100644
--- 
a/workflow/src/main/java/org/apache/oodt/cas/workflow/system/AvroRpcWorkflowManagerClient.java
+++ 
b/workflow/src/main/java/org/apache/oodt/cas/workflow/system/AvroRpcWorkflowManagerClient.java
@@ -20,13 +20,12 @@ package org.apache.oodt.cas.workflow.system;
 import org.apache.avro.ipc.NettyTransceiver;
 import org.apache.avro.ipc.Transceiver;
 import org.apache.avro.ipc.specific.SpecificRequestor;
-import org.apache.oodt.cas.cli.CmdLineUtility;
 import org.apache.oodt.cas.metadata.Metadata;
-import org.apache.oodt.cas.workflow.structs.WorkflowInstancePage;
-import org.apache.oodt.cas.workflow.structs.WorkflowInstance;
 import org.apache.oodt.cas.workflow.structs.Workflow;
-import org.apache.oodt.cas.workflow.structs.WorkflowTask;
 import org.apache.oodt.cas.workflow.structs.WorkflowCondition;
+import org.apache.oodt.cas.workflow.structs.WorkflowInstance;
+import org.apache.oodt.cas.workflow.structs.WorkflowInstancePage;
+import org.apache.oodt.cas.workflow.structs.WorkflowTask;
 import org.apache.oodt.cas.workflow.util.AvroTypeFactory;
 
 import java.io.IOException;
@@ -45,26 +44,20 @@ import java.util.logging.Logger;
  */
 public class AvroRpcWorkflowManagerClient implements WorkflowManagerClient {
 
-    private static Logger LOG = Logger
-            .getLogger(AvroRpcWorkflowManagerClient.class.getName());
-
-    Transceiver client;
-
-    org.apache.oodt.cas.workflow.struct.avrotypes.WorkflowManager proxy;
-
-    URL workflowManagerUrl;
+    private static Logger LOG = 
Logger.getLogger(AvroRpcWorkflowManagerClient.class.getName());
 
+    private Transceiver client;
+    private org.apache.oodt.cas.workflow.struct.avrotypes.WorkflowManager 
proxy;
+    private URL workflowManagerUrl;
 
     public AvroRpcWorkflowManagerClient(URL url){
         workflowManagerUrl = url;
         try {
             client = new NettyTransceiver(new 
InetSocketAddress(url.getHost(),url.getPort()));
-        proxy = 
SpecificRequestor.getClient(org.apache.oodt.cas.workflow.struct.avrotypes.WorkflowManager.class,
 client);
-
+            proxy = 
SpecificRequestor.getClient(org.apache.oodt.cas.workflow.struct.avrotypes.WorkflowManager.class,
 client);
         } catch (IOException e) {
-            e.printStackTrace();
+            LOG.severe(String.format("Error occurred when creating client: 
%s", e.getMessage()));
         }
-
     }
 
     @Override
@@ -251,4 +244,18 @@ public class AvroRpcWorkflowManagerClient implements 
WorkflowManagerClient {
         }
 
     }
+
+    @Override
+    public void close() throws IOException {
+        if (client != null) {
+            client.close();
+            client = null;
+            LOG.info("Closed workflow manager client: " + 
workflowManagerUrl.toString());
+        }
+    }
+
+    @Override
+    public void finalize() throws IOException {
+        close();
+    }
 }

http://git-wip-us.apache.org/repos/asf/oodt/blob/ec25440d/workflow/src/main/java/org/apache/oodt/cas/workflow/system/WorkflowManagerClient.java
----------------------------------------------------------------------
diff --git 
a/workflow/src/main/java/org/apache/oodt/cas/workflow/system/WorkflowManagerClient.java
 
b/workflow/src/main/java/org/apache/oodt/cas/workflow/system/WorkflowManagerClient.java
index 9d821bc..ed0cfd1 100644
--- 
a/workflow/src/main/java/org/apache/oodt/cas/workflow/system/WorkflowManagerClient.java
+++ 
b/workflow/src/main/java/org/apache/oodt/cas/workflow/system/WorkflowManagerClient.java
@@ -24,6 +24,7 @@ import org.apache.oodt.cas.workflow.structs.Workflow;
 import org.apache.oodt.cas.workflow.structs.WorkflowTask;
 import org.apache.oodt.cas.workflow.structs.WorkflowCondition;
 
+import java.io.Closeable;
 import java.net.URL;
 import java.util.List;
 import java.util.Vector;
@@ -36,10 +37,11 @@ import java.util.Vector;
  * Base interface for client RPC implementation.
  * </p>
  */
-public interface WorkflowManagerClient {
+public interface WorkflowManagerClient extends Closeable {
 
     boolean refreshRepository()
             throws Exception;
+
     String executeDynamicWorkflow(List<String> taskIds, Metadata metadata)
             throws Exception;
 

http://git-wip-us.apache.org/repos/asf/oodt/blob/ec25440d/workflow/src/main/java/org/apache/oodt/cas/workflow/system/XmlRpcWorkflowManagerClient.java
----------------------------------------------------------------------
diff --git 
a/workflow/src/main/java/org/apache/oodt/cas/workflow/system/XmlRpcWorkflowManagerClient.java
 
b/workflow/src/main/java/org/apache/oodt/cas/workflow/system/XmlRpcWorkflowManagerClient.java
index 9c29cc4..f9bc6e6 100644
--- 
a/workflow/src/main/java/org/apache/oodt/cas/workflow/system/XmlRpcWorkflowManagerClient.java
+++ 
b/workflow/src/main/java/org/apache/oodt/cas/workflow/system/XmlRpcWorkflowManagerClient.java
@@ -534,4 +534,8 @@ public class XmlRpcWorkflowManagerClient implements 
WorkflowManagerClient {
         client = new XmlRpcClient(workflowManagerUrl);
     }
 
+    @Override
+    public void close() throws IOException {
+
+    }
 }

Reply via email to