Optimized the use of HyracksConnection

git-svn-id: https://asterixdb.googlecode.com/svn/trunk/asterix@32 eaa15691-b419-025a-1212-ee371bd00084
diff --git a/asterix-app/src/main/java/edu/uci/ics/asterix/api/aqlj/server/APIClientThread.java b/asterix-app/src/main/java/edu/uci/ics/asterix/api/aqlj/server/APIClientThread.java
index 50ed4d1..50dbbeb 100644
--- a/asterix-app/src/main/java/edu/uci/ics/asterix/api/aqlj/server/APIClientThread.java
+++ b/asterix-app/src/main/java/edu/uci/ics/asterix/api/aqlj/server/APIClientThread.java
@@ -46,6 +46,7 @@
 import edu.uci.ics.hyracks.algebricks.core.api.exceptions.AlgebricksException;
 import edu.uci.ics.hyracks.algebricks.core.utils.Pair;
 import edu.uci.ics.hyracks.api.application.ICCApplicationContext;
+import edu.uci.ics.hyracks.api.client.IHyracksClientConnection;
 import edu.uci.ics.hyracks.api.job.JobSpecification;
 
 /**
@@ -61,6 +62,7 @@
 
     private static final int RESULT_BUF_SIZE = 8192;
 
+    private final IHyracksClientConnection hcc;
     private final ICCApplicationContext appContext;
     private final AQLJStream clientStream;
     private final String outputFilePath;
@@ -72,7 +74,9 @@
     private int nodeDataServerPort;
     private String dataverse;
 
-    public APIClientThread(Socket clientSocket, ICCApplicationContext appCtx) throws IOException {
+    public APIClientThread(IHyracksClientConnection hcc, Socket clientSocket, ICCApplicationContext appCtx)
+            throws IOException {
+        this.hcc = hcc;
         clientStream = new AQLJStream(clientSocket);
         this.appContext = appCtx;
 
@@ -230,15 +234,14 @@
             if (q != null) {
                 String dataverse = APIFramework.compileDdlStatements(q, out, pc, DisplayFormat.TEXT);
                 Job[] dmlJobs = APIFramework.compileDmlStatements(dataverse, q, out, pc, DisplayFormat.TEXT);
-                APIFramework.executeJobArray(dmlJobs, pc.getPort(), out, DisplayFormat.TEXT);
+                APIFramework.executeJobArray(hcc, dmlJobs, out, DisplayFormat.TEXT);
             }
 
             Pair<AqlCompiledMetadataDeclarations, JobSpecification> metadataAndSpec = APIFramework.compileQuery(
                     dataverse, q, parser.getVarCounter(), null, metadata, pc, out, DisplayFormat.TEXT, null);
             JobSpecification spec = metadataAndSpec.second;
             metadata = metadataAndSpec.first;
-            APIFramework.executeJobArray(new JobSpecification[] { spec },
-                    AsterixHyracksIntegrationUtil.DEFAULT_HYRACKS_CC_CLIENT_PORT, out, DisplayFormat.TEXT);
+            APIFramework.executeJobArray(hcc, new JobSpecification[] { spec }, out, DisplayFormat.TEXT);
         } catch (ParseException e) {
             e.printStackTrace();
             throw new AQLJException(e);
diff --git a/asterix-app/src/main/java/edu/uci/ics/asterix/api/aqlj/server/APIClientThreadFactory.java b/asterix-app/src/main/java/edu/uci/ics/asterix/api/aqlj/server/APIClientThreadFactory.java
index 36f049c..682d774 100644
--- a/asterix-app/src/main/java/edu/uci/ics/asterix/api/aqlj/server/APIClientThreadFactory.java
+++ b/asterix-app/src/main/java/edu/uci/ics/asterix/api/aqlj/server/APIClientThreadFactory.java
@@ -18,6 +18,8 @@
 import java.net.Socket;
 
 import edu.uci.ics.hyracks.api.application.ICCApplicationContext;
+import edu.uci.ics.hyracks.api.client.HyracksConnection;
+import edu.uci.ics.hyracks.api.client.IHyracksClientConnection;
 
 /**
  * This class is a factory for client handler threads of type {@link APIClientThread} and is used in conjunction with {@link ThreadedServer}.
@@ -27,12 +29,16 @@
 public class APIClientThreadFactory implements IClientThreadFactory {
     private final ICCApplicationContext appContext;
 
-    public APIClientThreadFactory(ICCApplicationContext appContext) {
+    private IHyracksClientConnection hcc;
+
+    public APIClientThreadFactory(ICCApplicationContext appContext) throws Exception {
         this.appContext = appContext;
+        hcc = new HyracksConnection("localhost", appContext.getCCContext().getClusterControllerInfo()
+                .getClientNetPort());
     }
 
     @Override
     public Thread createThread(Socket socket) throws IOException {
-        return new APIClientThread(socket, appContext);
+        return new APIClientThread(hcc, socket, appContext);
     }
 }
diff --git a/asterix-app/src/main/java/edu/uci/ics/asterix/api/common/APIFramework.java b/asterix-app/src/main/java/edu/uci/ics/asterix/api/common/APIFramework.java
index e060146..6157775 100644
--- a/asterix-app/src/main/java/edu/uci/ics/asterix/api/common/APIFramework.java
+++ b/asterix-app/src/main/java/edu/uci/ics/asterix/api/common/APIFramework.java
@@ -548,10 +548,8 @@
         return new Pair<AqlCompiledMetadataDeclarations, JobSpecification>(metadataDecls, spec);
     }
 
-    public static void executeJobArray(JobSpecification[] specs, int port, PrintWriter out, DisplayFormat pdf)
+    public static void executeJobArray(IHyracksClientConnection hcc, JobSpecification[] specs, PrintWriter out, DisplayFormat pdf)
             throws Exception {
-        IHyracksClientConnection hcc = new HyracksConnection("localhost", port);
-
         for (int i = 0; i < specs.length; i++) {
             specs[i].setMaxReattempts(0);
             JobId jobId = hcc.createJob(GlobalConfig.HYRACKS_APP_NAME, specs[i]);
@@ -565,9 +563,8 @@
 
     }
 
-    public static void executeJobArray(Job[] jobs, int port, PrintWriter out, DisplayFormat pdf) throws Exception {
-        IHyracksClientConnection hcc = new HyracksConnection("localhost", port);
-
+    public static void executeJobArray(IHyracksClientConnection hcc, Job[] jobs, PrintWriter out, DisplayFormat pdf)
+            throws Exception {
         for (int i = 0; i < jobs.length; i++) {
             jobs[i].getJobSpec().setMaxReattempts(0);
             JobId jobId = hcc.createJob(GlobalConfig.HYRACKS_APP_NAME, jobs[i].getJobSpec());
diff --git a/asterix-app/src/main/java/edu/uci/ics/asterix/api/common/AsterixHyracksIntegrationUtil.java b/asterix-app/src/main/java/edu/uci/ics/asterix/api/common/AsterixHyracksIntegrationUtil.java
index 4e9f3ef..5f4c189 100644
--- a/asterix-app/src/main/java/edu/uci/ics/asterix/api/common/AsterixHyracksIntegrationUtil.java
+++ b/asterix-app/src/main/java/edu/uci/ics/asterix/api/common/AsterixHyracksIntegrationUtil.java
@@ -31,8 +31,8 @@
 
     public static void init() throws Exception {
         CCConfig ccConfig = new CCConfig();
-        ccConfig.clusterNetIpAddress="127.0.0.1";
-        ccConfig.clientNetIpAddress="127.0.0.1";
+        ccConfig.clusterNetIpAddress = "127.0.0.1";
+        ccConfig.clientNetIpAddress = "127.0.0.1";
         ccConfig.clientNetPort = DEFAULT_HYRACKS_CC_CLIENT_PORT;
         ccConfig.clusterNetPort = DEFAULT_HYRACKS_CC_CLUSTER_PORT;
         ccConfig.defaultMaxJobAttempts = 0;
@@ -43,7 +43,7 @@
         NCConfig ncConfig1 = new NCConfig();
         ncConfig1.ccHost = "localhost";
         ncConfig1.ccPort = DEFAULT_HYRACKS_CC_CLUSTER_PORT;
-        ncConfig1.clusterNetIPAddress="127.0.0.1";
+        ncConfig1.clusterNetIPAddress = "127.0.0.1";
         ncConfig1.dataIPAddress = "127.0.0.1";
         ncConfig1.nodeId = NC1_ID;
         ncConfig1.frameSize = FRAME_SIZE;
@@ -53,7 +53,7 @@
         NCConfig ncConfig2 = new NCConfig();
         ncConfig2.ccHost = "localhost";
         ncConfig2.ccPort = DEFAULT_HYRACKS_CC_CLUSTER_PORT;
-        ncConfig2.clusterNetIPAddress="127.0.0.1";
+        ncConfig2.clusterNetIPAddress = "127.0.0.1";
         ncConfig2.dataIPAddress = "127.0.0.1";
         ncConfig2.nodeId = NC2_ID;
         ncConfig2.frameSize = FRAME_SIZE;
@@ -65,6 +65,10 @@
 
     }
 
+    public static IHyracksClientConnection getHyracksClientConnection() {
+        return hcc;
+    }
+
     public static void destroyApp() throws Exception {
         hcc.destroyApplication(GlobalConfig.HYRACKS_APP_NAME);
     }
diff --git a/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/APIServlet.java b/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/APIServlet.java
index b74f8a7..1e807a2 100644
--- a/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/APIServlet.java
+++ b/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/APIServlet.java
@@ -7,6 +7,7 @@
 import java.io.PrintWriter;
 import java.io.StringReader;
 
+import javax.servlet.ServletContext;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -22,11 +23,15 @@
 import edu.uci.ics.asterix.metadata.MetadataManager;
 import edu.uci.ics.asterix.metadata.declared.AqlCompiledMetadataDeclarations;
 import edu.uci.ics.hyracks.algebricks.core.utils.Pair;
+import edu.uci.ics.hyracks.api.client.HyracksConnection;
+import edu.uci.ics.hyracks.api.client.IHyracksClientConnection;
 import edu.uci.ics.hyracks.api.job.JobSpecification;
 
 public class APIServlet extends HttpServlet {
     private static final long serialVersionUID = 1L;
 
+    private static final String HYRACKS_CONNECTION_ATTR = "edu.uci.ics.asterix.HYRACKS_CONNECTION";
+
     @Override
     public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
         String query = request.getParameter("query");
@@ -42,7 +47,16 @@
         response.setContentType("text/html");
         out.println("<H1>Input statements:</H1>");
         printInHtml(out, query);
+        ServletContext context = getServletContext();
+        IHyracksClientConnection hcc;
         try {
+            synchronized (context) {
+                hcc = (IHyracksClientConnection) context.getAttribute(HYRACKS_CONNECTION_ATTR);
+                if (hcc == null) {
+                    hcc = new HyracksConnection("localhost", port);
+                    context.setAttribute(HYRACKS_CONNECTION_ATTR, hcc);
+                }
+            }
             AQLParser parser = new AQLParser(new StringReader(query));
             Query q = (Query) parser.Statement();
             SessionConfig pc = new SessionConfig(port, true, isSet(printExprParam), isSet(printRewrittenExprParam),
@@ -50,10 +64,10 @@
             pc.setGenerateJobSpec(true);
 
             MetadataManager.INSTANCE.init();
-            String  dataverseName = null;
+            String dataverseName = null;
 
             if (q != null) {
-                dataverseName = postDmlStatement(q, out, pc);
+                dataverseName = postDmlStatement(hcc, q, out, pc);
             }
 
             if (q.isDummyQuery()) {
@@ -66,7 +80,7 @@
             GlobalConfig.ASTERIX_LOGGER.info(spec.toJSON().toString(1));
             AqlCompiledMetadataDeclarations metadata = metadataAndSpec.first;
             long startTime = System.currentTimeMillis();
-            APIFramework.executeJobArray(new JobSpecification[] { spec }, port, out, DisplayFormat.HTML);
+            APIFramework.executeJobArray(hcc, new JobSpecification[] { spec }, out, DisplayFormat.HTML);
             long endTime = System.currentTimeMillis();
             double duration = (endTime - startTime) / 1000.00;
             out.println("<H1>Result:</H1>");
@@ -119,13 +133,14 @@
         out.println(form);
     }
 
-    private String postDmlStatement(Query dummyQ, PrintWriter out, SessionConfig pc) throws Exception {
+    private String postDmlStatement(IHyracksClientConnection hcc, Query dummyQ, PrintWriter out, SessionConfig pc)
+            throws Exception {
 
         String dataverseName = APIFramework.compileDdlStatements(dummyQ, out, pc, DisplayFormat.TEXT);
         Job[] dmlJobSpecs = APIFramework.compileDmlStatements(dataverseName, dummyQ, out, pc, DisplayFormat.HTML);
 
         long startTime = System.currentTimeMillis();
-        APIFramework.executeJobArray(dmlJobSpecs, pc.getPort(), out, DisplayFormat.HTML);
+        APIFramework.executeJobArray(hcc, dmlJobSpecs, out, DisplayFormat.HTML);
         long endTime = System.currentTimeMillis();
         double duration = (endTime - startTime) / 1000.00;
         out.println("<PRE>Duration of all jobs: " + duration + "</PRE>");
diff --git a/asterix-app/src/main/java/edu/uci/ics/asterix/api/java/AsterixJavaClient.java b/asterix-app/src/main/java/edu/uci/ics/asterix/api/java/AsterixJavaClient.java
index 0f5059a..78c5a8d 100644
--- a/asterix-app/src/main/java/edu/uci/ics/asterix/api/java/AsterixJavaClient.java
+++ b/asterix-app/src/main/java/edu/uci/ics/asterix/api/java/AsterixJavaClient.java
@@ -20,24 +20,25 @@
 import edu.uci.ics.asterix.transaction.management.exception.ACIDException;
 import edu.uci.ics.hyracks.algebricks.core.api.exceptions.AlgebricksException;
 import edu.uci.ics.hyracks.algebricks.core.utils.Pair;
+import edu.uci.ics.hyracks.api.client.IHyracksClientConnection;
 import edu.uci.ics.hyracks.api.job.JobSpecification;
 
 public class AsterixJavaClient {
-
+    private IHyracksClientConnection hcc;
     private Reader queryText;
     private PrintWriter writer;
 
     private Job[] dmlJobs;
     private JobSpecification queryJobSpec;
 
-    public AsterixJavaClient(Reader queryText, PrintWriter writer) {
+    public AsterixJavaClient(IHyracksClientConnection hcc, Reader queryText, PrintWriter writer) {
+        this.hcc = hcc;
         this.queryText = queryText;
         this.writer = writer;
     }
 
-    public AsterixJavaClient(Reader queryText) {
-        this.queryText = queryText;
-        this.writer = new PrintWriter(System.out, true);
+    public AsterixJavaClient(IHyracksClientConnection hcc, Reader queryText) {
+        this(hcc, queryText, new PrintWriter(System.out, true));
     }
 
     public void compile() throws Exception {
@@ -62,13 +63,13 @@
         }
         MetadataManager.INSTANCE.init();
 
-        SessionConfig pc = new SessionConfig(AsterixHyracksIntegrationUtil.DEFAULT_HYRACKS_CC_CLIENT_PORT, optimize, false,
-                printRewrittenExpressions, printLogicalPlan, printOptimizedPlan, printPhysicalOpsOnly, printJob);
+        SessionConfig pc = new SessionConfig(AsterixHyracksIntegrationUtil.DEFAULT_HYRACKS_CC_CLIENT_PORT, optimize,
+                false, printRewrittenExpressions, printLogicalPlan, printOptimizedPlan, printPhysicalOpsOnly, printJob);
         pc.setGenerateJobSpec(generateBinaryRuntime);
 
         String dataverseName = null;
         if (q != null) {
-            dataverseName =  APIFramework.compileDdlStatements(q, writer, pc, DisplayFormat.TEXT);
+            dataverseName = APIFramework.compileDdlStatements(q, writer, pc, DisplayFormat.TEXT);
             dmlJobs = APIFramework.compileDmlStatements(dataverseName, q, writer, pc, DisplayFormat.TEXT);
         }
 
@@ -76,20 +77,20 @@
             return;
         }
 
-        Pair<AqlCompiledMetadataDeclarations, JobSpecification> metadataAndSpec = APIFramework.compileQuery(dataverseName, q,
-                parser.getVarCounter(), null, null, pc, writer, DisplayFormat.TEXT, null);
+        Pair<AqlCompiledMetadataDeclarations, JobSpecification> metadataAndSpec = APIFramework.compileQuery(
+                dataverseName, q, parser.getVarCounter(), null, null, pc, writer, DisplayFormat.TEXT, null);
         if (metadataAndSpec != null) {
             queryJobSpec = metadataAndSpec.second;
         }
         writer.flush();
     }
 
-    public void execute(int port) throws Exception {
+    public void execute() throws Exception {
         if (dmlJobs != null) {
-            APIFramework.executeJobArray(dmlJobs, port, writer, DisplayFormat.TEXT);
+            APIFramework.executeJobArray(hcc, dmlJobs, writer, DisplayFormat.TEXT);
         }
         if (queryJobSpec != null) {
-            APIFramework.executeJobArray(new JobSpecification[] { queryJobSpec }, port, writer, DisplayFormat.TEXT);
+            APIFramework.executeJobArray(hcc, new JobSpecification[] { queryJobSpec }, writer, DisplayFormat.TEXT);
         }
     }
 
diff --git a/asterix-app/src/main/java/edu/uci/ics/asterix/drivers/AsterixClientDriver.java b/asterix-app/src/main/java/edu/uci/ics/asterix/drivers/AsterixClientDriver.java
index db04380..1a61059 100644
--- a/asterix-app/src/main/java/edu/uci/ics/asterix/drivers/AsterixClientDriver.java
+++ b/asterix-app/src/main/java/edu/uci/ics/asterix/drivers/AsterixClientDriver.java
@@ -6,6 +6,8 @@
 
 import edu.uci.ics.asterix.api.common.AsterixClientConfig;
 import edu.uci.ics.asterix.api.java.AsterixJavaClient;
+import edu.uci.ics.hyracks.api.client.HyracksConnection;
+import edu.uci.ics.hyracks.api.client.IHyracksClientConnection;
 
 public class AsterixClientDriver {
 
@@ -29,17 +31,18 @@
             return;
         }
         boolean exec = new Boolean(acc.execute);
-        AsterixJavaClient q = compileQuery(acc.getArguments().get(0), new Boolean(acc.optimize), new Boolean(
+        IHyracksClientConnection hcc = exec ? new HyracksConnection("localhost", acc.hyracksPort) : null;
+        AsterixJavaClient q = compileQuery(hcc, acc.getArguments().get(0), new Boolean(acc.optimize), new Boolean(
                 acc.onlyPhysical), exec || new Boolean(acc.hyracksJob));
         if (exec) {
-            q.execute(acc.hyracksPort);
+            q.execute();
         }
     }
 
-    private static AsterixJavaClient compileQuery(String filename, boolean optimize, boolean onlyPhysical,
-            boolean createBinaryRuntime) throws Exception {
+    private static AsterixJavaClient compileQuery(IHyracksClientConnection hcc, String filename, boolean optimize,
+            boolean onlyPhysical, boolean createBinaryRuntime) throws Exception {
         FileReader reader = new FileReader(filename);
-        AsterixJavaClient q = new AsterixJavaClient(reader);
+        AsterixJavaClient q = new AsterixJavaClient(hcc, reader);
         q.compile(optimize, true, true, true, onlyPhysical, createBinaryRuntime, createBinaryRuntime);
         return q;
     }
diff --git a/asterix-app/src/test/java/edu/uci/ics/asterix/test/aql/TestsUtils.java b/asterix-app/src/test/java/edu/uci/ics/asterix/test/aql/TestsUtils.java
index 754ccd0..ae29617 100644
--- a/asterix-app/src/test/java/edu/uci/ics/asterix/test/aql/TestsUtils.java
+++ b/asterix-app/src/test/java/edu/uci/ics/asterix/test/aql/TestsUtils.java
@@ -20,13 +20,13 @@
 import edu.uci.ics.asterix.api.aqlj.client.IAQLJConnection;
 import edu.uci.ics.asterix.api.aqlj.client.IAQLJResult;
 import edu.uci.ics.asterix.api.aqlj.common.AQLJException;
-import edu.uci.ics.asterix.api.common.AsterixHyracksIntegrationUtil;
 import edu.uci.ics.asterix.api.java.AsterixJavaClient;
 import edu.uci.ics.asterix.common.exceptions.AsterixException;
 import edu.uci.ics.asterix.om.base.IAObject;
 import edu.uci.ics.asterix.om.types.ARecordType;
 import edu.uci.ics.asterix.om.types.AbstractCollectionType;
 import edu.uci.ics.asterix.om.types.IAType;
+import edu.uci.ics.hyracks.api.client.IHyracksClientConnection;
 
 public class TestsUtils {
 
@@ -46,16 +46,16 @@
         return path.delete();
     }
 
-    public static void runScriptAndCompareWithResult(File scriptFile, PrintWriter print, File expectedFile,
-            File actualFile) throws Exception {
+    public static void runScriptAndCompareWithResult(IHyracksClientConnection hcc, File scriptFile, PrintWriter print,
+            File expectedFile, File actualFile) throws Exception {
         Reader query = new BufferedReader(new FileReader(scriptFile));
-        AsterixJavaClient asterix = new AsterixJavaClient(query, print);
+        AsterixJavaClient asterix = new AsterixJavaClient(hcc, query, print);
         try {
             asterix.compile(true, false, false, false, false, true, false);
         } catch (AsterixException e) {
             throw new Exception("Compile ERROR for " + scriptFile + ": " + e.getMessage(), e);
         }
-        asterix.execute(AsterixHyracksIntegrationUtil.DEFAULT_HYRACKS_CC_CLIENT_PORT);
+        asterix.execute();
         query.close();
         BufferedReader readerExpected = new BufferedReader(new FileReader(expectedFile));
         BufferedReader readerActual = new BufferedReader(new FileReader(actualFile));
diff --git a/asterix-app/src/test/java/edu/uci/ics/asterix/test/dml/DmlTest.java b/asterix-app/src/test/java/edu/uci/ics/asterix/test/dml/DmlTest.java
index 201b497..6864ec3 100644
--- a/asterix-app/src/test/java/edu/uci/ics/asterix/test/dml/DmlTest.java
+++ b/asterix-app/src/test/java/edu/uci/ics/asterix/test/dml/DmlTest.java
@@ -6,8 +6,6 @@
 import java.io.PrintWriter;
 import java.io.Reader;
 
-import org.junit.Test;
-
 import edu.uci.ics.asterix.api.common.AsterixHyracksIntegrationUtil;
 import edu.uci.ics.asterix.api.java.AsterixJavaClient;
 import edu.uci.ics.asterix.common.exceptions.AsterixException;
@@ -37,13 +35,14 @@
 
         AsterixHyracksIntegrationUtil.init();
         Reader loadReader = new BufferedReader(new FileReader(LOAD_FOR_ENLIST_FILE));
-        AsterixJavaClient asterixLoad = new AsterixJavaClient(loadReader, ERR);
+        AsterixJavaClient asterixLoad = new AsterixJavaClient(
+                AsterixHyracksIntegrationUtil.getHyracksClientConnection(), loadReader, ERR);
         try {
             asterixLoad.compile(true, false, false, false, false, true, false);
         } catch (AsterixException e) {
             throw new Exception("Compile ERROR for " + LOAD_FOR_ENLIST_FILE + ": " + e.getMessage(), e);
         }
-        asterixLoad.execute(AsterixHyracksIntegrationUtil.DEFAULT_HYRACKS_CC_CLIENT_PORT);
+        asterixLoad.execute();
         AsterixHyracksIntegrationUtil.destroyApp();
 
         AsterixHyracksIntegrationUtil.createApp();
@@ -51,7 +50,8 @@
         String resultFileName = TestsUtils.aqlExtToResExt(enlistFile.getName());
         File expectedFile = new File(PATH_EXPECTED + SEPARATOR + resultFileName);
         File actualFile = new File(PATH_ACTUAL + SEPARATOR + resultFileName);
-        TestsUtils.runScriptAndCompareWithResult(enlistFile, ERR, expectedFile, actualFile);
+        TestsUtils.runScriptAndCompareWithResult(AsterixHyracksIntegrationUtil.getHyracksClientConnection(),
+                enlistFile, ERR, expectedFile, actualFile);
 
         AsterixHyracksIntegrationUtil.deinit();
         for (String d : ASTERIX_DATA_DIRS) {
diff --git a/asterix-app/src/test/java/edu/uci/ics/asterix/test/metadata/MetadataTest.java b/asterix-app/src/test/java/edu/uci/ics/asterix/test/metadata/MetadataTest.java
index 46a068c..416734f 100644
--- a/asterix-app/src/test/java/edu/uci/ics/asterix/test/metadata/MetadataTest.java
+++ b/asterix-app/src/test/java/edu/uci/ics/asterix/test/metadata/MetadataTest.java
@@ -145,7 +145,8 @@
     @Test
     public void test() throws Exception {
         Reader query = new BufferedReader(new FileReader(queryFile));
-        AsterixJavaClient asterix = new AsterixJavaClient(query, ERR);
+        AsterixJavaClient asterix = new AsterixJavaClient(AsterixHyracksIntegrationUtil.getHyracksClientConnection(),
+                query, ERR);
         try {
             LOGGER.info("Query is: " + queryFile);
             asterix.compile(true, false, false, false, false, true, false);
@@ -153,7 +154,7 @@
         } catch (AsterixException e) {
             throw new Exception("Compile ERROR for " + queryFile + ": " + e.getMessage(), e);
         }
-        asterix.execute(AsterixHyracksIntegrationUtil.DEFAULT_HYRACKS_CC_CLIENT_PORT);
+        asterix.execute();
         query.close();
 
         if (actualFile.exists()) {
diff --git a/asterix-app/src/test/java/edu/uci/ics/asterix/test/metadata/MetadataTransactionsTest.java b/asterix-app/src/test/java/edu/uci/ics/asterix/test/metadata/MetadataTransactionsTest.java
index 22cb378..5fc3599 100644
--- a/asterix-app/src/test/java/edu/uci/ics/asterix/test/metadata/MetadataTransactionsTest.java
+++ b/asterix-app/src/test/java/edu/uci/ics/asterix/test/metadata/MetadataTransactionsTest.java
@@ -81,13 +81,14 @@
         String actualFileName = (String) queryTuple[2];
         try {
             Reader query = new BufferedReader(new FileReader(queryFileName));
-            AsterixJavaClient asterix = new AsterixJavaClient(query, ERR);
+            AsterixJavaClient asterix = new AsterixJavaClient(
+                    AsterixHyracksIntegrationUtil.getHyracksClientConnection(), query, ERR);
             LOGGER.info("Query is: " + queryFileName);
             asterix.compile(true, false, false, false, false, executeQuery, false);
             // We don't want to execute a query if we expect only DDL
             // modifications.
             if (executeQuery) {
-                asterix.execute(AsterixHyracksIntegrationUtil.DEFAULT_HYRACKS_CC_CLIENT_PORT);
+                asterix.execute();
             }
             query.close();
         } catch (Exception e) {
diff --git a/asterix-app/src/test/java/edu/uci/ics/asterix/test/optimizer/OptimizerTest.java b/asterix-app/src/test/java/edu/uci/ics/asterix/test/optimizer/OptimizerTest.java
index 6ca8aef..5d0071e 100644
--- a/asterix-app/src/test/java/edu/uci/ics/asterix/test/optimizer/OptimizerTest.java
+++ b/asterix-app/src/test/java/edu/uci/ics/asterix/test/optimizer/OptimizerTest.java
@@ -123,7 +123,7 @@
 
             Reader query = new BufferedReader(new FileReader(queryFile));
             PrintWriter plan = new PrintWriter(actualFile);
-            AsterixJavaClient asterix = new AsterixJavaClient(query, plan);
+            AsterixJavaClient asterix = new AsterixJavaClient(null, query, plan);
             try {
                 asterix.compile(true, false, false, false, true, true, false);
             } catch (AsterixException e) {
diff --git a/asterix-app/src/test/java/edu/uci/ics/asterix/test/runtime/RuntimeTest.java b/asterix-app/src/test/java/edu/uci/ics/asterix/test/runtime/RuntimeTest.java
index e101e2b..0aa755c 100644
--- a/asterix-app/src/test/java/edu/uci/ics/asterix/test/runtime/RuntimeTest.java
+++ b/asterix-app/src/test/java/edu/uci/ics/asterix/test/runtime/RuntimeTest.java
@@ -44,6 +44,7 @@
     private static final String[] ASTERIX_DATA_DIRS = new String[] { "nc1data", "nc2data" };
 
     private static final Logger LOGGER = Logger.getLogger(RuntimeTest.class.getName());
+
     // private static NCBootstrapImpl _bootstrap = new NCBootstrapImpl();
 
     private static ArrayList<String> readFile(String fileName) {
@@ -83,12 +84,10 @@
         lsn.deleteOnExit();
 
         AsterixHyracksIntegrationUtil.init();
-        // _bootstrap.start();
     }
 
     @AfterClass
     public static void tearDown() throws Exception {
-        // _bootstrap.stop();
         AsterixHyracksIntegrationUtil.deinit();
         File outdir = new File(PATH_ACTUAL);
         File[] files = outdir.listFiles();
@@ -151,7 +150,8 @@
             }
             Assume.assumeTrue(!TestHelper.isInPrefixList(ignore, queryFileShort));
             LOGGER.severe("RUNNING TEST: " + queryFile + " \n");
-            TestsUtils.runScriptAndCompareWithResult(queryFile, ERR, expectedFile, actualFile);
+            TestsUtils.runScriptAndCompareWithResult(AsterixHyracksIntegrationUtil.getHyracksClientConnection(),
+                    queryFile, ERR, expectedFile, actualFile);
         } catch (Exception e) {
             if (!(e instanceof AssumptionViolatedException)) {
                 LOGGER.severe("Test \"" + queryFile.getPath() + "\" FAILED!");