Merge PR 1493 [TRAFODION-2821] Trafodion core code base needs to be thread safe 
diff --git a/core/sql/arkcmp/CmpContext.cpp b/core/sql/arkcmp/CmpContext.cpp
index a915081..4599508 100644
--- a/core/sql/arkcmp/CmpContext.cpp
+++ b/core/sql/arkcmp/CmpContext.cpp
@@ -569,7 +569,7 @@
 
       if (!result && diags)
         *diags << DgSqlCode(-1214)
-               << DgString0(GetCliGlobals()->getJniErrorStrPtr())
+               << DgString0(GetCliGlobals()->getJniErrorStr())
                << DgString1(hiveSQL);
     }
 
diff --git a/core/sql/cli/Context.h b/core/sql/cli/Context.h
index 66ddc5b..a432ec9 100644
--- a/core/sql/cli/Context.h
+++ b/core/sql/cli/Context.h
@@ -630,18 +630,6 @@
     xactAborted = udrXactAborted_;
   }
 
-  inline void setJniErrorStr(NAString errorStr)
-  {  jniErrorStr_ = errorStr; }
-
-  inline void setJniErrorStr(const char *errorStr)
-  {  jniErrorStr_ = errorStr; }
-
-  inline NAString getJniErrorStr()
-  { return jniErrorStr_; }
-
-  inline const char* getJniErrorStrPtr()
-  { return (const char*)jniErrorStr_.data(); }
-
   inline CLISemaphore *getSemaphore()
   { 
      return cliSemaphore_;
diff --git a/core/sql/cli/Globals.cpp b/core/sql/cli/Globals.cpp
index fb09008..3eb4502 100644
--- a/core/sql/cli/Globals.cpp
+++ b/core/sql/cli/Globals.cpp
@@ -921,26 +921,6 @@
                                   xactAborted);
 }
 
-void CliGlobals::setJniErrorStr(NAString errorStr)
-{
-   currContext()->setJniErrorStr(errorStr);
-}
-
-void CliGlobals::setJniErrorStr(const char *errorStr)
-{
-   currContext()->setJniErrorStr(errorStr);
-}
-
-NAString CliGlobals::getJniErrorStr()
-{
-  return currContext()->getJniErrorStr();
-}
-
-const char* CliGlobals::getJniErrorStrPtr()
-{
-  return currContext()->getJniErrorStrPtr();
-}
-
 void CliGlobals::updateTransMode(TransMode *transMode)
 {
   currContext()->getTransaction()->getTransMode()->
diff --git a/core/sql/cli/Globals.h b/core/sql/cli/Globals.h
index b8e04ea..4275c7b 100644
--- a/core/sql/cli/Globals.h
+++ b/core/sql/cli/Globals.h
@@ -70,6 +70,8 @@
 #include "ComExeTrace.h"
 #include "ComRtUtils.h"
 #include "ComSmallDefs.h"
+#include "JavaObjectInterface.h"
+
 class ContextCli;
 class Statement;  
 class ComDiagsArea; 
@@ -238,10 +240,9 @@
   inline void setUncProcess() { isUncProcess_ = TRUE; }
   inline NABoolean isUncProcess() {return isUncProcess_;}
   NAHeap *getCurrContextHeap();
-  void setJniErrorStr(NAString errorStr); 
-  void setJniErrorStr(const char *errorStr); 
-  NAString getJniErrorStr();
-  const char* getJniErrorStrPtr();
+  void setJniErrorStr(NAString errorStr) { setSqlJniErrorStr(errorStr);  }
+  void setJniErrorStr(const char *errorStr)  { setSqlJniErrorStr(errorStr); }
+  const char* getJniErrorStr() { return getSqlJniErrorStr(); }
   void updateTransMode(TransMode *transMode);
 
 
diff --git a/core/sql/executor/ExExeUtilLoad.cpp b/core/sql/executor/ExExeUtilLoad.cpp
index 97c185c..702dd12 100644
--- a/core/sql/executor/ExExeUtilLoad.cpp
+++ b/core/sql/executor/ExExeUtilLoad.cpp
@@ -1259,7 +1259,7 @@
                           &cliError, NULL,
                           " ",
                           getHbaseErrStr(retcode),
-                          (char *)currContext->getJniErrorStr().data());
+                          (char *)GetCliGlobals()->getJniErrorStr());
         step_ = LOAD_END_ERROR_;
         break;
       }
@@ -1962,7 +1962,7 @@
   ComDiagsArea * diagsArea = NULL;
   char* errorMsg = HdfsClient::getErrorText((HDFS_Client_RetCode)hdfsClientRetCode);
   ExRaiseSqlError(getHeap(), &diagsArea, (ExeErrorCode)(8447), NULL,
-                  NULL, NULL, NULL, errorMsg, (char *)GetCliGlobals()->currContext()->getJniErrorStr().data());
+                  NULL, NULL, NULL, errorMsg, (char *)GetCliGlobals()->getJniErrorStr());
   ex_queue_entry *pentry_up = qparent_.up->getTailEntry();
   pentry_up->setDiagsArea(diagsArea);
 }
diff --git a/core/sql/executor/ExFastTransport.cpp b/core/sql/executor/ExFastTransport.cpp
index d2cbd47..7849746 100644
--- a/core/sql/executor/ExFastTransport.cpp
+++ b/core/sql/executor/ExFastTransport.cpp
@@ -1277,7 +1277,7 @@
                   (ExeErrorCode)(8447),
                   NULL, NULL, NULL, NULL,
                   errorMsg,
-                (char *)currContext->getJniErrorStr().data());
+                (char *)GetCliGlobals()->getJniErrorStr());
   //ex_queue_entry *pentry_down = qParent_.down->getHeadEntry();
   //pentry_down->setDiagsArea(diagsArea);
   updateWorkATPDiagsArea(diagsArea);
@@ -1294,7 +1294,7 @@
                   (ExeErrorCode)(8447),
                   NULL, NULL, NULL, NULL,
                   errorMsg,
-                  (char *)currContext->getJniErrorStr().data());
+                  (char *)GetCliGlobals()->getJniErrorStr());
   updateWorkATPDiagsArea(diagsArea);
 }
 
diff --git a/core/sql/executor/ExHbaseAccess.cpp b/core/sql/executor/ExHbaseAccess.cpp
index 8af9308..13146a6 100644
--- a/core/sql/executor/ExHbaseAccess.cpp
+++ b/core/sql/executor/ExHbaseAccess.cpp
@@ -722,7 +722,7 @@
 		      (str ? (char*)str : (char*)" "),
 		      getHbaseErrStr(retcode),
                       (str2 ? (char*)str2 : 
-                      (char *)currContext->getJniErrorStr().data())); 
+                      (char *)GetCliGlobals()->getJniErrorStr())); 
       pentry_down->setDiagsArea(diagsArea);
       return -1;
     }
@@ -752,7 +752,7 @@
 		      (str ? (char*)str : (char*)" "),
 		      getHbaseErrStr(retcode),
                       (str2 ? (char*)str2 : 
-                      (char *)currContext->getJniErrorStr().data())); 
+                      (char *)GetCliGlobals()->getJniErrorStr())); 
       pentry_down->setDiagsArea(diagsArea);
       return -1;
     }
@@ -3295,7 +3295,7 @@
      loggingErrorDiags_ = ComDiagsArea::allocate(heap);
      *loggingErrorDiags_ << DgSqlCode(EXE_ERROR_WHILE_LOGGING)
                  << DgString0(loggingFileName_)
-                 << DgString1((char *)GetCliGlobals()->currContext()->getJniErrorStr().data());
+                 << DgString1((char *)GetCliGlobals()->getJniErrorStr());
   }
   return;
 }
diff --git a/core/sql/executor/ExHdfsScan.cpp b/core/sql/executor/ExHdfsScan.cpp
index a56cb06..a9ab2d2 100644
--- a/core/sql/executor/ExHdfsScan.cpp
+++ b/core/sql/executor/ExHdfsScan.cpp
@@ -570,7 +570,7 @@
                             hdfsStats_, hdfsScanRetCode);
              if (hdfsScanRetCode != HDFS_SCAN_OK) {
                 setupError(EXE_ERROR_HDFS_SCAN, hdfsScanRetCode, "SETUP_HDFS_SCAN", 
-                              currContext->getJniErrorStr(), NULL);              
+                              GetCliGlobals()->getJniErrorStr(), NULL);              
                 step_ = HANDLE_ERROR_AND_DONE;
                 break;
              } 
@@ -594,7 +594,7 @@
              }
              else if (hdfsScanRetCode != HDFS_SCAN_OK) {
                 setupError(EXE_ERROR_HDFS_SCAN, hdfsScanRetCode, "SETUP_HDFS_SCAN", 
-                              currContext->getJniErrorStr(), NULL);              
+                              GetCliGlobals()->getJniErrorStr(), NULL);              
                 step_ = HANDLE_ERROR_AND_DONE;
                 break;
              } 
@@ -670,7 +670,7 @@
              hdfsScanRetCode = hdfsScan_->stop();
              if (hdfsScanRetCode != HDFS_SCAN_OK) {
                 setupError(EXE_ERROR_HDFS_SCAN, hdfsScanRetCode, "HdfsScan::stop", 
-                              currContext->getJniErrorStr(), NULL);              
+                              GetCliGlobals()->getJniErrorStr(), NULL);              
                 step_ = HANDLE_ERROR_AND_DONE;
              }    
              step_ = DONE;
@@ -2193,7 +2193,7 @@
      loggingErrorDiags_ = ComDiagsArea::allocate(heap);
      *loggingErrorDiags_ << DgSqlCode(EXE_ERROR_WHILE_LOGGING)
                  << DgString0(loggingFileName_)
-                 << DgString1((char *)GetCliGlobals()->currContext()->getJniErrorStr().data());
+                 << DgString1((char *)GetCliGlobals()->getJniErrorStr());
   }
 }
 
diff --git a/core/sql/executor/HBaseClient_JNI.cpp b/core/sql/executor/HBaseClient_JNI.cpp
index 8d12821..88c3431 100644
--- a/core/sql/executor/HBaseClient_JNI.cpp
+++ b/core/sql/executor/HBaseClient_JNI.cpp
@@ -336,9 +336,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::initConnection()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::initConnection()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_INIT_EXCEPTION;
   }
@@ -393,9 +391,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::getHTableClient()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::getHTableClient()");
     NADELETE(htc, HTableClient_JNI, heap);
     jenv_->PopLocalFrame(NULL);
     return NULL;
@@ -403,10 +399,9 @@
 
   if (j_htc == NULL) 
   {
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::getHTableClient()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::getHTableClient()");
     NADELETE(htc, HTableClient_JNI, heap);
     jenv_->PopLocalFrame(NULL);
-    return NULL;
   }
   htc->setJavaObject(j_htc);
   if (htc->init() != HTC_OK)
@@ -434,9 +429,7 @@
       tsRecentJMFromJNI = JavaMethods_[JM_REL_HTC].jm_full_name;
       jenv_->CallVoidMethod(javaObj_, JavaMethods_[JM_REL_HTC].methodID, j_htc);
       if (jenv_->ExceptionCheck()) {
-         getExceptionDetails();
-         logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-         logError(CAT_SQL_HBASE, "HBaseClient_JNI::releaseHTableClient()", getLastError());
+         getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::releaseHTableClient()");
          jenv_->PopLocalFrame(NULL);
          return HBC_ERROR_REL_HTC_EXCEPTION;
       }
@@ -465,15 +458,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::getHBulkLoadClient()", getLastError());
-    jenv_->PopLocalFrame(NULL);
-    return NULL;
-  }
-  if (j_hblc == NULL)
-  {
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::getHBulkLoadClient()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::getHBulkLoadClient()");
     jenv_->PopLocalFrame(NULL);
     return NULL;
   }
@@ -505,9 +490,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::releaseHBulkLOadClient()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::releaseHBulkLoadClient()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_REL_HBLC_EXCEPTION;
   }
@@ -535,9 +518,7 @@
   jobjectArray j_fams = convertToStringObjectArray(colFamilies);
   if (j_fams == NULL)
   {
-     getExceptionDetails();
-     logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-     logError(CAT_SQL_HBASE, "HBaseClient_JNI::create()", getLastError());
+     GetCliGlobals()->setJniErrorStr(getErrorText(HBC_ERROR_CREATE_PARAM));
      jenv_->PopLocalFrame(NULL);
      return HBC_ERROR_CREATE_PARAM;
   }
@@ -549,9 +530,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::create()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::create()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_CREATE_EXCEPTION;
   }
@@ -592,9 +571,7 @@
                    HBASE_MAX_OPTIONS);
   if (j_opts == NULL)
   {
-     getExceptionDetails();
-     logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-     logError(CAT_SQL_HBASE, "HBaseClient_JNI::create()", getLastError());
+     getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::create()");
      jenv_->PopLocalFrame(NULL);
      return HBC_ERROR_CREATE_PARAM;
   }
@@ -605,9 +582,7 @@
      j_keys = convertToByteArrayObjectArray(splitValues, numSplits, keyLength);
      if (j_keys == NULL)
      {
-        getExceptionDetails();
-        logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-        logError(CAT_SQL_HBASE, "HBaseClient_JNI::create()", getLastError());
+        getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::create()");
         jenv_->PopLocalFrame(NULL);
         return HBC_ERROR_CREATE_PARAM;
      }
@@ -623,9 +598,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::create()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::create()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_CREATE_EXCEPTION;
   }
@@ -660,11 +633,9 @@
   }
   jobjectArray j_opts = convertToStringObjectArray(createOptionsArray, 
                    HBASE_MAX_OPTIONS);
-  if (j_opts == NULL)
+  if (jenv_->ExceptionCheck())
   {
-     getExceptionDetails();
-     logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-     logError(CAT_SQL_HBASE, "HBaseClient_JNI::alter()", getLastError());
+     getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::alter()");
      jenv_->PopLocalFrame(NULL);
      return HBC_ERROR_ALTER_PARAM;
   }
@@ -677,9 +648,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::alter()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::alter()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_ALTER_EXCEPTION;
   }
@@ -933,9 +902,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails(jenv_);
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::drop()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::drop()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_DROP_EXCEPTION;
   }
@@ -967,9 +934,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails(jenv_);
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::drop()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::truncate()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_TRUNCATE_EXCEPTION;
   }
@@ -999,9 +964,7 @@
 
   if (jenv->ExceptionCheck())
   {
-    getExceptionDetails(jenv);
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::drop()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::drop()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_DROP_EXCEPTION;
   }
@@ -1043,9 +1006,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails(jenv_);
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::dropAll()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::dropAll()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_DROP_EXCEPTION;
   }
@@ -1078,9 +1039,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails(jenv_);
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::listAll()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::listAll()");
     jenv_->PopLocalFrame(NULL);
     return NULL;
   }
@@ -1112,9 +1071,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails(jenv_);
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::getRegionStatsEntries()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::getRegionStatsEntries()");
     jenv_->PopLocalFrame(NULL);
     return 0;
   }
@@ -1151,9 +1108,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails(jenv_);
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::getRegionStats()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::getRegionStats()");
     jenv_->PopLocalFrame(NULL);
     return NULL;
   }
@@ -1209,9 +1164,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails(jenv_);
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::copy()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::copy()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_DROP_EXCEPTION;
   }
@@ -1251,9 +1204,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::exists()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::exists()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_EXISTS_EXCEPTION;
   }
@@ -1303,9 +1254,7 @@
     j_actionCodes = convertToStringObjectArray(actions);
     if (j_actionCodes == NULL)
     {
-       getExceptionDetails();
-       logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-       logError(CAT_SQL_HBASE, "HBaseClient_JNI::grant()", getLastError());
+       getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::grant()");
        jenv_->PopLocalFrame(NULL);
        return HBC_ERROR_GRANT_PARAM;
     }
@@ -1316,9 +1265,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::grant()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::grant()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_GRANT_EXCEPTION;
   }
@@ -1381,9 +1328,7 @@
   breadCrumb = 4;
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::estimateRowCount()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::estimateRowCount()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_ROWCOUNT_EST_EXCEPTION;
   }
@@ -1418,10 +1363,7 @@
   jstring jresult = (jstring)jenv_->CallObjectMethod(javaObj_, JavaMethods_[JM_GET_LATEST_SNP].methodID,js_tblName);
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::getLatestSnapshot()", 
-             getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::getLatestSnapshot()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_GET_LATEST_SNP_EXCEPTION;
   }
@@ -1457,9 +1399,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::cleanSnpTmpLocation()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::cleanupSnpTmpLocation()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_CLEAN_SNP_TMP_LOC_EXCEPTION;
   }
@@ -1485,10 +1425,7 @@
   jboolean jresult = jenv_->CallBooleanMethod(javaObj_, JavaMethods_[JM_SET_ARC_PERMS].methodID,js_tbl);
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::setArchivePermissions()",
-             getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::setArchivePermissions()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_SET_ARC_PERMS_EXCEPTION;
   }
@@ -1509,10 +1446,7 @@
   
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::getBlockCacheFraction()", 
-             getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::getBlockCacheFraction()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_GET_CACHE_FRAC_EXCEPTION;
   }
@@ -1649,9 +1583,7 @@
   }
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBulkLoadClient_JNI::initHFileParams() => before calling Java.", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBulkLoadClient_JNI::initHFileParams()");
     jenv_->PopLocalFrame(NULL);
     return HBLC_ERROR_CREATE_HFILE_EXCEPTION;
   }
@@ -1664,9 +1596,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBulkLoadClient_JNI::initHFileParams()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBulkLoadClient_JNI::initHFileParams()");
     jenv_->PopLocalFrame(NULL);
     return HBLC_ERROR_CREATE_HFILE_EXCEPTION;
   }
@@ -1718,9 +1648,7 @@
   }
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBulkLoadClient_JNI::addToHFile()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBulkLoadClient_JNI::addToHFile()");
     jenv_->PopLocalFrame(NULL);
     return HBLC_ERROR_ADD_TO_HFILE_EXCEPTION;
   }
@@ -1747,9 +1675,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBulkLoadClient_JNI::closeHFile()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBulkLoadClient_JNI::closeHFile()");
     jenv_->PopLocalFrame(NULL);
     return HBLC_ERROR_CLOSE_HFILE_EXCEPTION;
   }
@@ -1791,15 +1717,6 @@
      return HBLC_ERROR_DO_BULKLOAD_PARAM;
    }
 
-  if (jenv_->ExceptionCheck())
-  {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBulkLoadClient_JNI::doBulkLoad() => before calling Java.", getLastError());
-    jenv_->PopLocalFrame(NULL);
-    return HBLC_ERROR_DO_BULKLOAD_EXCEPTION;
-  }
-
   jboolean j_quasiSecure = quasiSecure;
 
   jboolean j_snapshot = snapshot;
@@ -1808,9 +1725,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBulkLoadClient_JNI::doBulkLoad()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBulkLoadClient_JNI::doBulkLoad()");
     jenv_->PopLocalFrame(NULL);
     return HBLC_ERROR_DO_BULKLOAD_EXCEPTION;
   }
@@ -1834,29 +1749,18 @@
      return HBLC_ERROR_INIT_PARAM;
 
   jstring js_location = jenv_->NewStringUTF(location.c_str());
-   if (js_location == NULL)
-   {
+  if (js_location == NULL)
+  {
      GetCliGlobals()->setJniErrorStr(getErrorText(HBLC_ERROR_BULKLOAD_CLEANUP_PARAM));
      jenv_->PopLocalFrame(NULL);
      return HBLC_ERROR_BULKLOAD_CLEANUP_PARAM;
-   }
-
-
-  if (jenv_->ExceptionCheck())
-  {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBulkLoadClient_JNI::bulkLoadCleanup() => before calling Java.", getLastError());
-    jenv_->PopLocalFrame(NULL);
-    return HBLC_ERROR_BULKLOAD_CLEANUP_PARAM;
   }
+
   tsRecentJMFromJNI = JavaMethods_[JM_BULK_LOAD_CLEANUP].jm_full_name;
   jboolean jresult = jenv_->CallBooleanMethod(javaObj_, JavaMethods_[JM_BULK_LOAD_CLEANUP].methodID, js_location);
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBulkLoadClient_JNI::bulkLoadCleanup()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBulkLoadClient_JNI::bulkLoadCleanup()");
     jenv_->PopLocalFrame(NULL);
     return HBLC_ERROR_BULKLOAD_CLEANUP_PARAM;
   }
@@ -1912,9 +1816,7 @@
    count = jcount;
    if (jenv_->ExceptionCheck())
    {
-     getExceptionDetails();
-     logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-     logError(CAT_SQL_HBASE, "HBaseClient_JNI::incrCounter()", getLastError());
+     getExceptionDetails(__FILE__, __LINE__, "HBulkLoadClient_JNI::incrCounter()");
      jenv_->PopLocalFrame(NULL);
      return HBC_ERROR_INCR_COUNTER_EXCEPTION;
    }
@@ -1947,9 +1849,7 @@
 
    if (jenv_->ExceptionCheck())
    {
-     getExceptionDetails();
-     logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-     logError(CAT_SQL_HBASE, "HBaseClient_JNI::createCounterTable()", getLastError());
+     getExceptionDetails(__FILE__, __LINE__, "HBulkLoadClient_JNI::createCounterTable()");
      jenv_->PopLocalFrame(NULL);
      return HBC_ERROR_CREATE_COUNTER_EXCEPTION;
    }
@@ -2004,9 +1904,7 @@
     j_actionCodes = convertToStringObjectArray(actions);
     if (j_actionCodes == NULL)
     {
-       getExceptionDetails();
-       logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-       logError(CAT_SQL_HBASE, "HBaseClient_JNI::revoke()", getLastError());
+       getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::revoke()");
        jenv_->PopLocalFrame(NULL);
        return HBC_ERROR_REVOKE_PARAM;
     }
@@ -2017,9 +1915,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::revoke()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::revoke()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_REVOKE_EXCEPTION;
   }
@@ -2082,9 +1978,7 @@
   if (!cols.isEmpty()) {
      j_cols = convertToByteArrayObjectArray(cols);
      if (j_cols == NULL) {
-        getExceptionDetails();
-        logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-        logError(CAT_SQL_HBASE, "HBaseClient_JNI::startGet()", getLastError());
+        getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::startGet()");
         NADELETE(htc, HTableClient_JNI, heap);
         jenv_->PopLocalFrame(NULL);
         return NULL;
@@ -2111,9 +2005,7 @@
   }
 
   if (jenv_->ExceptionCheck()) {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseCient_JNI::startGet()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::startGet()");
     jenv_->PopLocalFrame(NULL);
     releaseHTableClient(htc);
     return NULL;
@@ -2160,9 +2052,7 @@
   if (!cols.isEmpty()) {
      j_cols = convertToByteArrayObjectArray(cols);
      if (j_cols == NULL) {
-        getExceptionDetails();
-        logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-        logError(CAT_SQL_HBASE, "HBaseClient_JNI::startGets()", getLastError());
+        getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::startGets()");
         NADELETE(htc, HTableClient_JNI, heap);
         jenv_->PopLocalFrame(NULL);
         return NULL;
@@ -2177,9 +2067,7 @@
   if (rowIDs != NULL) {
      j_rows = convertToByteArrayObjectArray(*rowIDs);
      if (j_rows == NULL) {
-        getExceptionDetails();
-        logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-        logError(CAT_SQL_HBASE, "HBaseClient_JNI::startGets()", getLastError());
+        getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::startGets()");
         NADELETE(htc, HTableClient_JNI, heap);
         jenv_->PopLocalFrame(NULL);
         return NULL;
@@ -2224,9 +2112,7 @@
   }
 
   if (jenv_->ExceptionCheck()) {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseCient_JNI::startGets()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::startGets()");
     jenv_->PopLocalFrame(NULL);
     releaseHTableClient(htc);
     return NULL;
@@ -2280,9 +2166,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::getRegionsNodeName()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::getRegionsNodeName()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_GET_HBTI_EXCEPTION;
   }
@@ -2324,9 +2208,7 @@
                                               js_tblName, jHtabInfo);
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::getHbaseTableInfo()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::getHbaseTableInfo()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_GET_HBTI_EXCEPTION;
   }
@@ -2413,9 +2295,7 @@
          hbs->incMaxHbaseIOTime(hbs->getHbaseTimer().stop());
   }
   if (jenv_->ExceptionCheck()) {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::insertRow()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::insertRow()");
     jenv_->PopLocalFrame(NULL);
     if (htc != NULL)
         NADELETE(htc, HTableClient_JNI, heap);
@@ -2503,9 +2383,7 @@
          hbs->incMaxHbaseIOTime(hbs->getHbaseTimer().stop());
   }
   if (jenv_->ExceptionCheck()) {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::insertRows()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::insertRows()");
     jenv_->PopLocalFrame(NULL);
     if (htc != NULL)
         NADELETE(htc, HTableClient_JNI, heap);
@@ -2618,9 +2496,7 @@
          hbs->incMaxHbaseIOTime(hbs->getHbaseTimer().stop());
   }
   if (jenv_->ExceptionCheck()) {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::checkAndUpdateRow()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::cheakAndUpdateRow()");
     if (htc != NULL)
         NADELETE(htc, HTableClient_JNI, heap);
     jenv_->PopLocalFrame(NULL);
@@ -2691,9 +2567,7 @@
   if (cols != NULL && !cols->isEmpty()) {
      j_cols = convertToByteArrayObjectArray(*cols);
      if (j_cols == NULL) {
-        getExceptionDetails();
-        logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-        logError(CAT_SQL_HBASE, "HBaseClient_JNI::deleteRow()", getLastError());
+        getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::deleteRow()");
         if (htc != NULL)
            NADELETE(htc, HTableClient_JNI, heap);
         jenv_->PopLocalFrame(NULL);
@@ -2719,9 +2593,7 @@
          hbs->incMaxHbaseIOTime(hbs->getHbaseTimer().stop());
   }
   if (jenv_->ExceptionCheck()) {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::deleteRow()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::deleteRow()");
     jenv_->PopLocalFrame(NULL);
     if (htc != NULL)
         NADELETE(htc, HTableClient_JNI, heap);
@@ -2804,9 +2676,7 @@
          hbs->incMaxHbaseIOTime(hbs->getHbaseTimer().stop());
   }
   if (jenv_->ExceptionCheck()) {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::deleteRows()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::deleteRows()");
     jenv_->PopLocalFrame(NULL);
     if (htc != NULL)
         NADELETE(htc, HTableClient_JNI, heap);
@@ -2908,9 +2778,7 @@
          hbs->incMaxHbaseIOTime(hbs->getHbaseTimer().stop());
   }
   if (jenv_->ExceptionCheck()) {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::checkAndDeleteRow()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::checkAndDeleteRow()");
     jenv_->PopLocalFrame(NULL);
     if (htc != NULL)
         NADELETE(htc, HTableClient_JNI, heap);
@@ -2959,8 +2827,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::getKeys()");
     jenv_->PopLocalFrame(NULL);
     return NULL;
   }
@@ -2999,9 +2866,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::createSnapshot()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::createSnapshot()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_CREATE_SNAPSHOT_EXCEPTION;
   }
@@ -3037,9 +2902,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::verifySnapshot()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::verifySnapshot()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_VERIFY_SNAPSHOT_EXCEPTION;
   }
@@ -3070,9 +2933,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::deleteSnapshot()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::deleteSnapshot()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_DELETE_SNAPSHOT_EXCEPTION;
   }
@@ -3187,8 +3048,6 @@
       return (HTC_RetCode)JavaObjectInterface::init(className, javaClass_, JavaMethods_, (Int32)JM_LAST, javaMethodsInitialized_);
     }
     JavaMethods_ = new JavaMethodInit[JM_LAST];
-    JavaMethods_[JM_GET_ERROR  ].jm_name      = "getLastError";
-    JavaMethods_[JM_GET_ERROR  ].jm_signature = "()Ljava/lang/String;";
     JavaMethods_[JM_SCAN_OPEN  ].jm_name      = "startScan";
     JavaMethods_[JM_SCAN_OPEN  ].jm_signature = "(J[B[B[Ljava/lang/Object;JZZI[Ljava/lang/Object;[Ljava/lang/Object;[Ljava/lang/Object;FFZZILjava/lang/String;Ljava/lang/String;II)Z";
     JavaMethods_[JM_DELETE     ].jm_name      = "deleteRow";
@@ -3219,14 +3078,6 @@
 //////////////////////////////////////////////////////////////////////////////
 // 
 //////////////////////////////////////////////////////////////////////////////
-NAString HTableClient_JNI::getLastJavaError()
-{
-  return JavaObjectInterface::getLastJavaError(JavaMethods_[JM_GET_ERROR].methodID);
-}
-
-//////////////////////////////////////////////////////////////////////////////
-// 
-//////////////////////////////////////////////////////////////////////////////
 HTC_RetCode HTableClient_JNI::startScan(Int64 transID, const Text& startRowID, 
    const Text& stopRowID, const LIST(HbaseStr) & cols, Int64 timestamp, 
    bool cacheBlocks, bool smallScanner, Lng32 numCacheRows, NABoolean preFetch,
@@ -3273,9 +3124,7 @@
     j_cols = convertToByteArrayObjectArray(cols);
     if (j_cols == NULL)
     {
-       getExceptionDetails();
-       logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-       logError(CAT_SQL_HBASE, "HTableClient_JNI::startScan()", getLastError());
+       getExceptionDetails(__FILE__, __LINE__, "HTableClient_JNI::startScan()");
        jenv_->PopLocalFrame(NULL);
        return HTC_ERROR_SCANOPEN_PARAM;
     }
@@ -3300,9 +3149,7 @@
     j_colnamestofilter = convertToByteArrayObjectArray(*inColNamesToFilter);
     if (j_colnamestofilter == NULL)
     {
-       getExceptionDetails();
-       logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-       logError(CAT_SQL_HBASE, "HTableClient_JNI::startScan()", getLastError());
+       getExceptionDetails(__FILE__, __LINE__, "HTableClient_JNI::startScan()");
        jenv_->PopLocalFrame(NULL);
        return HTC_ERROR_SCANOPEN_PARAM;
     }
@@ -3314,9 +3161,7 @@
      j_compareoplist = convertToByteArrayObjectArray(*inCompareOpList);
      if (j_compareoplist == NULL)
      {
-        getExceptionDetails();
-        logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-        logError(CAT_SQL_HBASE, "HTableClient_JNI::startScan()", getLastError());
+        getExceptionDetails(__FILE__, __LINE__, "HTableClient_JNI::startScan()");
         jenv_->PopLocalFrame(NULL);
         return HTC_ERROR_SCANOPEN_PARAM;
      }
@@ -3328,9 +3173,7 @@
      j_colvaluestocompare = convertToByteArrayObjectArray(*inColValuesToCompare);
      if (j_colvaluestocompare == NULL)
      {
-        getExceptionDetails();
-        logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-        logError(CAT_SQL_HBASE, "HTableClient_JNI::startScan()", getLastError());
+        getExceptionDetails(__FILE__, __LINE__, "HTableClient_JNI::startScan()");
         jenv_->PopLocalFrame(NULL);
         return HTC_ERROR_SCANOPEN_PARAM;
      }
@@ -3379,9 +3222,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HTableClient_JNI::scanOpen()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HTableClient_JNI::scanOpen()");
     jenv_->PopLocalFrame(NULL);
     return HTC_ERROR_SCANOPEN_EXCEPTION;
   }
@@ -3420,9 +3261,7 @@
      j_cols = convertToByteArrayObjectArray(*cols);
      if (j_cols == NULL)
      {
-        getExceptionDetails();
-        logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-        logError(CAT_SQL_HBASE, "HTableClient_JNI::deleteRow()", getLastError());
+        getExceptionDetails(__FILE__, __LINE__, "HTableClient_JNI::deleteROw()");
         jenv_->PopLocalFrame(NULL);
         return HTC_ERROR_DELETEROW_PARAM;
      }
@@ -3444,9 +3283,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HTableClient_JNI::deleteRow()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HTableClient_JNI::deleteROw()");
     jenv_->PopLocalFrame(NULL);
     return HTC_ERROR_DELETEROW_EXCEPTION;
   }
@@ -3481,9 +3318,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HTableClient_JNI::setWriteBufferSize()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HTableClient_JNI::setWriteBufferSize()");
     jenv_->PopLocalFrame(NULL);
     return HTC_ERROR_WRITEBUFFERSIZE_EXCEPTION;
   }
@@ -3514,9 +3349,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HTableClient_JNI::setWriteToWAL()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HTableClient_JNI::setWriteToWAL)");
     jenv_->PopLocalFrame(NULL);
     return HTC_ERROR_WRITETOWAL_EXCEPTION;
   }
@@ -3552,9 +3385,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HTableClient_JNI::getHTableName()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HTableClient_JNI::getHTableName()");
     jenv_->PopLocalFrame(NULL);
     return NULL;
   }
@@ -3654,9 +3485,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HTableClient_JNI::coProcAggr()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HTableClient_JNI::coProcAggr()");
     jenv_->PopLocalFrame(NULL);
     return HTC_ERROR_COPROC_AGGR_EXCEPTION;
   }
@@ -3704,6 +3533,8 @@
  ,"Java exception in getAllSchemas()."
  ,"Preparing parameters for getAllTables()."
  ,"Java exception in getAllTables()."
+ ,"Preparing parameters for executeHiveSQL()."
+ ,"Java exception in executeHiveSQL()."
 };
 
 
@@ -3781,8 +3612,6 @@
     
     JavaMethods_[JM_CTOR       ].jm_name      = "<init>";
     JavaMethods_[JM_CTOR       ].jm_signature = "()V";
-    JavaMethods_[JM_GET_ERROR  ].jm_name      = "getLastError";
-    JavaMethods_[JM_GET_ERROR  ].jm_signature = "()Ljava/lang/String;";
     JavaMethods_[JM_INIT       ].jm_name      = "init";
     JavaMethods_[JM_INIT       ].jm_signature = "(Ljava/lang/String;)Z";
     JavaMethods_[JM_CLOSE      ].jm_name      = "close";
@@ -3810,14 +3639,6 @@
 //////////////////////////////////////////////////////////////////////////////
 // 
 //////////////////////////////////////////////////////////////////////////////
-NAString HiveClient_JNI::getLastJavaError()
-{
-  return JavaObjectInterface::getLastJavaError(JavaMethods_[JM_GET_ERROR].methodID);
-}
-
-//////////////////////////////////////////////////////////////////////////////
-// 
-//////////////////////////////////////////////////////////////////////////////
 HVC_RetCode HiveClient_JNI::initConnection(const char* metastoreURI)
 {
   QRLogger::log(CAT_SQL_HBASE, LL_DEBUG, "HiveClient_JNI::initConnection(%s) called.", metastoreURI);
@@ -3839,9 +3660,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HiveClient_JNI::initConnection()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HiveClient_JNI::initConnection()");
     jenv_->PopLocalFrame(NULL);
     return HVC_ERROR_INIT_EXCEPTION;
   }
@@ -3873,9 +3692,7 @@
   jboolean jresult = jenv_->CallBooleanMethod(javaObj_, JavaMethods_[JM_CLOSE].methodID);
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HiveClient_JNI::close()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HiveClient_JNI::close()");
     jenv_->PopLocalFrame(NULL);
     return HVC_ERROR_CLOSE_EXCEPTION;
   }
@@ -3921,9 +3738,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HiveClient_JNI::exists()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HiveClient_JNI::exists()");
     jenv_->PopLocalFrame(NULL);
     return HVC_ERROR_EXISTS_EXCEPTION;
   }
@@ -3970,9 +3785,7 @@
                                             js_schName, js_tabName);
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HiveClient_JNI::getHiveTableStr()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HiveClient_JNI::getHiveTableStr()");
     jenv_->PopLocalFrame(NULL);
     return HVC_ERROR_GET_HVT_EXCEPTION;
   }
@@ -4031,9 +3844,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HiveClient_JNI::getRedefTime()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HiveClient_JNI::getRedefTime()");
     jenv_->PopLocalFrame(NULL);
     return HVC_ERROR_GET_REDEFTIME_EXCEPTION;
   }
@@ -4066,9 +3877,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HiveClient_JNI::getAllSchemas()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HiveClient_JNI::getAllSchemas()");
     jenv_->PopLocalFrame(NULL);
     return HVC_ERROR_GET_ALLSCH_EXCEPTION;
   }
@@ -4099,7 +3908,7 @@
   {
     GetCliGlobals()->setJniErrorStr(getErrorText(HVC_ERROR_GET_ALLTBL_PARAM));
     jenv_->PopLocalFrame(NULL);
-    return HVC_ERROR_GET_ALLTBL_PARAM;
+    return HVC_ERROR_EXECUTE_HIVE_SQL_PARAM;
   }
   
   tsRecentJMFromJNI = JavaMethods_[JM_EXEC_HIVE_SQL].jm_full_name;
@@ -4107,11 +3916,9 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HiveClient_JNI::executeHiveSQL()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HiveClient_JNI::executeHiveSQL()");
     jenv_->PopLocalFrame(NULL);
-    return HVC_ERROR_GET_ALLSCH_EXCEPTION;
+    return HVC_ERROR_EXECUTE_HIVE_SQL_EXCEPTION;
   }
 
   QRLogger::log(CAT_SQL_HBASE, LL_DEBUG, 
@@ -4143,25 +3950,20 @@
     (jarray)jenv_->CallObjectMethod(javaObj_, JavaMethods_[JM_GET_ATL].methodID, 
                             js_schName);
 
-  if (j_tblNames == NULL) 
-    {
-      getExceptionDetails();
-
-      logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-      logError(CAT_SQL_HBASE, "HiveClient_JNI::getAllTables()", getLastError());
-      jenv_->PopLocalFrame(NULL);
-      return HVC_ERROR_EXISTS_EXCEPTION;
-    }
-
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HiveClient_JNI::getAllTables()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HiveClient_JNI::getAllTables()");
     jenv_->PopLocalFrame(NULL);
     return HVC_ERROR_GET_ALLTBL_EXCEPTION;
   }
 
+  if (j_tblNames == NULL) 	
+  {	
+     GetCliGlobals()->setJniErrorStr(getErrorText(HVC_ERROR_EXISTS_EXCEPTION));
+     jenv_->PopLocalFrame(NULL);	
+     return HVC_ERROR_EXISTS_EXCEPTION;	
+  }
+
   int numTables = convertStringObjectArrayToList(heap_, j_tblNames,
                    tblNames);           
   if (numTables == 0) {
@@ -4520,17 +4322,13 @@
     kvBufferObj = jenv_->GetObjectArrayElement(jKvFamArray_, idx);
     if (jenv_->ExceptionCheck())
     {
-      getExceptionDetails();
-      logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-      logError(CAT_SQL_HBASE, "HTableClient_JNI::prepareForNextCell()", getLastError());
+      getExceptionDetails(__FILE__, __LINE__, "HTableClient_JNI::prepareForNextCell()");
       return HTC_PREPARE_FOR_NEXTCELL_EXCEPTION;
     }
     jba_kvFamArray_ = (jbyteArray)jenv_->NewGlobalRef(kvBufferObj);
     if (jenv_->ExceptionCheck())
     {
-      getExceptionDetails();
-      logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-      logError(CAT_SQL_HBASE, "HTableClient_JNI::prepareForNextCell()", getLastError());
+      getExceptionDetails(__FILE__, __LINE__, "HTableClient_JNI::prepareForNextCell()");
       return HTC_PREPARE_FOR_NEXTCELL_EXCEPTION;
     }
     jenv_->DeleteLocalRef(kvBufferObj);
@@ -4543,17 +4341,13 @@
     kvBufferObj = jenv_->GetObjectArrayElement(jKvQualArray_, idx);
     if (jenv_->ExceptionCheck())
     {
-      getExceptionDetails();
-      logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-      logError(CAT_SQL_HBASE, "HTableClient_JNI::prepareForNextCell()", getLastError());
+      getExceptionDetails(__FILE__, __LINE__, "HTableClient_JNI::prepareForNextCell()");
       return HTC_PREPARE_FOR_NEXTCELL_EXCEPTION;
     }
     jba_kvQualArray_ = (jbyteArray)jenv_->NewGlobalRef(kvBufferObj);
     if (jenv_->ExceptionCheck())
     {
-      getExceptionDetails();
-      logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-      logError(CAT_SQL_HBASE, "HTableClient_JNI::prepareForNextCell()", getLastError());
+      getExceptionDetails(__FILE__, __LINE__, "HTableClient_JNI::prepareForNextCell()");
       return HTC_PREPARE_FOR_NEXTCELL_EXCEPTION;
     }
     jenv_->DeleteLocalRef(kvBufferObj);
@@ -4566,17 +4360,13 @@
     kvBufferObj = jenv_->GetObjectArrayElement(jKvBuffer_, idx);
     if (jenv_->ExceptionCheck())
     {
-      getExceptionDetails();
-      logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-      logError(CAT_SQL_HBASE, "HTableClient_JNI::prepareForNextCell()", getLastError());
+      getExceptionDetails(__FILE__, __LINE__, "HTableClient_JNI::prepareForNextCell()");
       return HTC_PREPARE_FOR_NEXTCELL_EXCEPTION;
     }
     jba_kvBuffer_ = (jbyteArray)jenv_->NewGlobalRef(kvBufferObj);
     if (jenv_->ExceptionCheck())
     {
-      getExceptionDetails();
-      logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-      logError(CAT_SQL_HBASE, "HTableClient_JNI::prepareForNextCell()", getLastError());
+      getExceptionDetails(__FILE__, __LINE__, "HTableClient_JNI::prepareForNextCell()");
       return HTC_PREPARE_FOR_NEXTCELL_EXCEPTION;
     }
     jenv_->DeleteLocalRef(kvBufferObj);
@@ -4744,9 +4534,7 @@
        jba_rowID_ = (jbyteArray)jenv_->NewGlobalRef(rowIDObj);
        if (jenv_->ExceptionCheck())
        {
-          getExceptionDetails();
-          logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-          logError(CAT_SQL_HBASE, "HTableClient_JNI::getRowID()", getLastError());
+          getExceptionDetails(__FILE__, __LINE__, "HTableClient_JNI::getRowID()");
           return HTC_GET_ROWID_EXCEPTION;
        }
        jenv_->DeleteLocalRef(rowIDObj);
@@ -4780,21 +4568,12 @@
 
    if (jenv_->ExceptionCheck())
    {
-      getExceptionDetails();
-      logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-      logError(CAT_SQL_HBASE, "HTableClient_JNI::fetchRows()", getLastError());
+      getExceptionDetails(__FILE__, __LINE__, "HTableClient_JNI::fetchRows()");
       jenv_->PopLocalFrame(NULL);
       return HTC_ERROR_FETCHROWS_EXCEPTION;
    }
 
    numRowsReturned_ = jRowsReturned;
-   if (numRowsReturned_ == -1)
-   {
-      logError(CAT_SQL_HBASE, "HTableClient_JNI::fetchRows()", getLastJavaError());
-      jenv_->PopLocalFrame(NULL);
-      return HTC_ERROR_FETCHROWS_EXCEPTION;
-   }
-   else
    if (numRowsReturned_ == 0) {
       jenv_->PopLocalFrame(NULL);
       return HTC_DONE;
@@ -4879,7 +4658,6 @@
   HTC_RetCode retcode;
 
   if (initJNIEnv() != JOI_OK) {
-     getExceptionDetails();
      if (hbs_)
         hbs_->incMaxHbaseIOTime(hbs_->getHbaseTimer().stop());
      return HTC_ERROR_COMPLETEASYNCOPERATION_EXCEPTION;
@@ -4887,9 +4665,7 @@
   jint jtimeout = timeout;
   jbooleanArray jresultArray =  jenv_->NewBooleanArray(resultArrayLen);
   if (jenv_->ExceptionCheck()) {
-      getExceptionDetails();
-      logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-      logError(CAT_SQL_HBASE, "HTableClient_JNI::completeAsyncOperation()", getLastError());
+      getExceptionDetails(__FILE__, __LINE__, "HTableClient_JNI::completeAsyncOperation()");
       jenv_->PopLocalFrame(NULL);
       if (hbs_)
          hbs_->incMaxHbaseIOTime(hbs_->getHbaseTimer().stop());
@@ -4899,9 +4675,7 @@
   jboolean jresult = jenv_->CallBooleanMethod(javaObj_, JavaMethods_[JM_COMPLETE_PUT].methodID,
                                jtimeout, jresultArray);
   if (jenv_->ExceptionCheck()) {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HTableClient_JNI::completeAsyncOperation()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HTableClient_JNI::completeAsyncOperation()");
     jenv_->PopLocalFrame(NULL);
     if (hbs_)
        hbs_->incMaxHbaseIOTime(hbs_->getHbaseTimer().stop());
diff --git a/core/sql/executor/HBaseClient_JNI.h b/core/sql/executor/HBaseClient_JNI.h
index 3177a7a..01b0edc 100644
--- a/core/sql/executor/HBaseClient_JNI.h
+++ b/core/sql/executor/HBaseClient_JNI.h
@@ -282,11 +282,8 @@
   }
 
 private:
-  NAString getLastJavaError();
-
   enum JAVA_METHODS {
-    JM_GET_ERROR
-   ,JM_SCAN_OPEN 
+    JM_SCAN_OPEN 
    ,JM_DELETE    
    ,JM_COPROC_AGGR
    ,JM_GET_NAME
@@ -546,9 +543,6 @@
   NAArray<HbaseStr>* getKeys(Int32 funcIndex, NAHeap *heap, const char *tableName, bool useTRex);
 
 private:
-  NAString  getLastJavaError();
-
-private:  
   enum JAVA_METHODS {
     JM_CTOR = 0
    ,JM_INIT
@@ -631,6 +625,8 @@
  ,HVC_ERROR_GET_ALLSCH_EXCEPTION
  ,HVC_ERROR_GET_ALLTBL_PARAM
  ,HVC_ERROR_GET_ALLTBL_EXCEPTION
+ ,HVC_ERROR_EXECUTE_HIVE_SQL_PARAM
+ ,HVC_ERROR_EXECUTE_HIVE_SQL_EXCEPTION
  ,HVC_LAST
 } HVC_RetCode;
 
@@ -676,13 +672,9 @@
   , isConnected_(FALSE)
   {}
 
-private:
-  NAString getLastJavaError();
-
 private:  
   enum JAVA_METHODS {
     JM_CTOR = 0
-   ,JM_GET_ERROR 
    ,JM_INIT
    ,JM_CLOSE
    ,JM_EXISTS     
@@ -761,9 +753,6 @@
 
 
 private:
-  NAString getLastJavaError();
-
-
   enum JAVA_METHODS {
     JM_CTOR = 0
    ,JM_INIT_HFILE_PARAMS
diff --git a/core/sql/executor/HdfsClient_JNI.cpp b/core/sql/executor/HdfsClient_JNI.cpp
index d5eb4ec..eed9e7d 100644
--- a/core/sql/executor/HdfsClient_JNI.cpp
+++ b/core/sql/executor/HdfsClient_JNI.cpp
@@ -208,9 +208,7 @@
    }
 
    if (jenv_->ExceptionCheck()) {
-      getExceptionDetails();
-      logError(CAT_SQL_HDFS, __FILE__, __LINE__);
-      logError(CAT_SQL_HDFS, "HdfsScan::setScanRanges()", getLastError());
+      getExceptionDetails(__FILE__, __LINE__, "HdfsScan::setScanRanges()");
       jenv_->PopLocalFrame(NULL);
       return HDFS_SCAN_ERROR_SET_SCAN_RANGES_EXCEPTION;
    }
@@ -260,9 +258,7 @@
    }
 
    if (jenv_->ExceptionCheck()) {
-      getExceptionDetails();
-      logError(CAT_SQL_HDFS, __FILE__, __LINE__);
-      logError(CAT_SQL_HDFS, "HdfsScan::setScanRanges()", getLastError());
+      getExceptionDetails(__FILE__, __LINE__, "HdfsScan::setScanRanges()");
       jenv_->PopLocalFrame(NULL);
       return HDFS_SCAN_ERROR_TRAF_HDFS_READ_EXCEPTION;
    }
@@ -292,9 +288,7 @@
    }
 
    if (jenv_->ExceptionCheck()) {
-      getExceptionDetails();
-      logError(CAT_SQL_HDFS, __FILE__, __LINE__);
-      logError(CAT_SQL_HDFS, "HdfsScan::stop()", getLastError());
+      getExceptionDetails(__FILE__, __LINE__, "HdfsScan::stop()");
       jenv_->PopLocalFrame(NULL);
       return HDFS_SCAN_ERROR_STOP_EXCEPTION;
    }
@@ -513,9 +507,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HDFS, __FILE__, __LINE__);
-    logError(CAT_SQL_HDFS, "HdfsClient::hdfsCreate()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HdfsClient::hdfsCreate()");
     jenv_->PopLocalFrame(NULL);
     return HDFS_CLIENT_ERROR_HDFS_CREATE_EXCEPTION;
   }
@@ -557,9 +549,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HDFS, __FILE__, __LINE__);
-    logError(CAT_SQL_HDFS, "HdfsClient::hdfsOpen()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HdfsClient::hdfsOpen()");
     jenv_->PopLocalFrame(NULL);
     return HDFS_CLIENT_ERROR_HDFS_OPEN_EXCEPTION;
   }
@@ -608,9 +598,7 @@
   }
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HDFS, __FILE__, __LINE__);
-    logError(CAT_SQL_HDFS, "HdfsClient::hdfsWrite()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HdfsClient::hdfsWrite()");
     jenv_->PopLocalFrame(NULL);
     hdfsClientRetcode = HDFS_CLIENT_ERROR_HDFS_WRITE_EXCEPTION;
     return 0;
@@ -650,9 +638,7 @@
   }
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HDFS, __FILE__, __LINE__);
-    logError(CAT_SQL_HDFS, "HdfsClient::hdfsRead()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HdfsClient::hdfsRead()");
     jenv_->PopLocalFrame(NULL);
     hdfsClientRetcode = HDFS_CLIENT_ERROR_HDFS_READ_EXCEPTION;
     return 0;
@@ -681,9 +667,7 @@
   }
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HDFS, __FILE__, __LINE__);
-    logError(CAT_SQL_HDFS, "HdfsClient::hdfsClose()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HdfsClient::hdfsClose()");
     jenv_->PopLocalFrame(NULL);
     return HDFS_CLIENT_ERROR_HDFS_CLOSE_EXCEPTION;
   }
@@ -719,9 +703,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HDFS, __FILE__, __LINE__);
-    logError(CAT_SQL_HDFS, "HdfsClient::hdfsCleanUnloadPath()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HdfsClient::hdfsCleanUnloadPath()");
     jenv_->PopLocalFrame(NULL);
     return HDFS_CLIENT_ERROR_HDFS_CLEANUP_EXCEPTION;
   }
@@ -760,9 +742,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HDFS, __FILE__, __LINE__);
-    logError(CAT_SQL_HDFS, "HdfsClient::hdfsMergeFiles()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HdfsClient::hdfsMergeFiles()");
     jenv_->PopLocalFrame(NULL);
     return HDFS_CLIENT_ERROR_HDFS_MERGE_FILES_EXCEPTION;
   }
@@ -799,9 +779,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HDFS, __FILE__, __LINE__);
-    logError(CAT_SQL_HDFS, "HdfsClient::hdfsDeletePath()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HdfsClient::hdfsDeletePath()");
     jenv_->PopLocalFrame(NULL);
     return HDFS_CLIENT_ERROR_HDFS_DELETE_PATH_EXCEPTION;
   }
@@ -836,9 +814,7 @@
           js_pathStr, jniObj);
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HDFS, __FILE__, __LINE__);
-    logError(CAT_SQL_HDFS, "HdfsClient::hdfsListDirectory()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HdfsClient::hdfsListDirectory()");
     jenv_->PopLocalFrame(NULL);
     return HDFS_CLIENT_ERROR_HDFS_LIST_DIR_EXCEPTION;
   } 
@@ -868,9 +844,7 @@
   exist = jresult;
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HDFS, __FILE__, __LINE__);
-    logError(CAT_SQL_HDFS, "HdfsClient::hdfsExists()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HdfsClient::hdfsExists()");
     jenv_->PopLocalFrame(NULL);
     return HDFS_CLIENT_ERROR_HDFS_EXISTS_EXCEPTION;
   } 
@@ -901,9 +875,7 @@
   jenv_->DeleteLocalRef(js_tableDirPaths);
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails(jenv_);
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HDFSClientI::getHiveTableMaxModificationTs()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HdfsClient::getHiveTableMaxModificationTS()");
     jenv_->PopLocalFrame(NULL);
     return HDFS_CLIENT_ERROR_HIVE_TBL_MAX_MODIFICATION_TS_EXCEPTION;
   }
@@ -929,9 +901,7 @@
                               JavaMethods_[JM_GET_FS_DEFAULT_NAME].methodID);
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails(jenv_);
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HDFSClient_JNI::getFsDefaultName()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HdfsClient::getFsDefaultName()");
     jenv_->PopLocalFrame(NULL);
     return HDFS_CLIENT_ERROR_GET_FS_DEFAULT_NAME_EXCEPTION;
   }
@@ -969,9 +939,7 @@
                               JavaMethods_[JM_HDFS_CREATE_DIRECTORY].methodID, js_dirName);
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails(jenv_);
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HDFSClient_JNI::hdfsCreateDirectory()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HdfsClient::hdfsCreateDirectory()");
     jenv_->PopLocalFrame(NULL);
     return HDFS_CLIENT_ERROR_CREATE_DIRECTORY_EXCEPTION;
   }
diff --git a/core/sql/executor/JavaObjectInterface.cpp b/core/sql/executor/JavaObjectInterface.cpp
index 2260715..22b9003 100644
--- a/core/sql/executor/JavaObjectInterface.cpp
+++ b/core/sql/executor/JavaObjectInterface.cpp
@@ -46,6 +46,7 @@
 
 __thread JNIEnv* jenv_ = NULL;
 __thread NAString *tsRecentJMFromJNI = NULL;
+__thread NAString *tsSqlJniErrorStr = NULL;
 jclass JavaObjectInterface::gThrowableClass = NULL;
 jclass JavaObjectInterface::gStackTraceClass = NULL;
 jmethodID JavaObjectInterface::gGetStackTraceMethodID = NULL;
@@ -53,6 +54,27 @@
 jmethodID JavaObjectInterface::gStackFrameToStringMethodID = NULL;
 jmethodID JavaObjectInterface::gGetCauseMethodID = NULL;
 
+void setSqlJniErrorStr(NAString &errorMsg)
+{
+  if (tsSqlJniErrorStr != NULL)
+     delete tsSqlJniErrorStr;
+  tsSqlJniErrorStr = new NAString(errorMsg); 
+}
+
+void setSqlJniErrorStr(const char *errorMsg)
+{
+  if (tsSqlJniErrorStr != NULL)
+     delete tsSqlJniErrorStr;
+  tsSqlJniErrorStr = new NAString(errorMsg); 
+}
+
+const char *getSqlJniErrorStr()
+{
+   if (tsSqlJniErrorStr == NULL)
+      return "";
+   else
+      return tsSqlJniErrorStr->data();
+}
   
 static const char* const joiErrorEnumStr[] = 
 {
@@ -451,8 +473,9 @@
        lJavaClass = jenv_->FindClass(className); 
        if (jenv_->ExceptionCheck()) 
        {
-          getExceptionDetails();
-          QRLogger::log(CAT_SQL_HDFS_JNI_TOP, LL_ERROR, "Exception in FindClass(%s).", className);
+          char errMsg[200];
+          snprintf(errMsg, sizeof(errMsg), "Exception in FindClass(%s)", className);
+          getExceptionDetails(__FILE__, __LINE__, errMsg);
           return JOI_ERROR_FINDCLASS;
        }
        if (lJavaClass == 0) 
@@ -476,13 +499,12 @@
                                                      JavaMethods[i].jm_signature);
         if (JavaMethods[i].methodID == 0 || jenv_->ExceptionCheck())
         { 
-          getExceptionDetails();
+          getExceptionDetails(__FILE__, __LINE__, "GetMethodId()");
           JavaMethods[i].methodID = jenv_->GetStaticMethodID(javaClass, 
                                                      JavaMethods[i].jm_name, 
                                                      JavaMethods[i].jm_signature);
           if (JavaMethods[i].methodID == 0 || jenv_->ExceptionCheck()) {
-             getExceptionDetails();
-             QRLogger::log(CAT_SQL_HDFS_JNI_TOP, LL_ERROR, "Error in GetMethod(%s).", JavaMethods[i].jm_name);
+             getExceptionDetails(__FILE__, __LINE__, "GetMethodId()");
              return JOI_ERROR_GETMETHOD;
           }
         }      
@@ -496,8 +518,9 @@
       jobject jObj = jenv_->NewObject(javaClass, JavaMethods[0].methodID);
       if (jObj == 0 || jenv_->ExceptionCheck())
       { 
-        getExceptionDetails();
-        QRLogger::log(CAT_SQL_HDFS_JNI_TOP, LL_ERROR, "Error in NewObject() for class %s.", className);
+        char errMsg[200];
+        snprintf(errMsg, sizeof(errMsg), "Error in NewObject() for class %s.", className);
+        getExceptionDetails(__FILE__, __LINE__, errMsg);
         return JOI_ERROR_NEWOBJ;
       }
       javaObj_ = jenv_->NewGlobalRef(jObj);
@@ -542,50 +565,46 @@
   QRLogger::log(cat, LL_ERROR, "Java exception in file %s, line %d.", file, line);
 }
 
-NABoolean  JavaObjectInterface::getExceptionDetails(JNIEnv *jenv)
+NABoolean  JavaObjectInterface::getExceptionDetails(const char *fileName, int lineNo,
+                       const char *methodName)  
 {
-   if (jenv == NULL)
-       jenv = jenv_;
+   JNIEnv *jenv = jenv_;
    CliGlobals *cliGlobals = GetCliGlobals();
-   NAString error_msg(cliGlobals->currContext()->exHeap());
-   if (jenv == NULL)
-   {
-      error_msg = "Internal Error - Unable to obtain jenv";
-      cli_globals->setJniErrorStr(error_msg);
-      return FALSE;
-   } 
+   NAString error_msg;
    if (gThrowableClass == NULL)
    {
       jenv->ExceptionDescribe();
       error_msg = "Internal Error - Unable to find Throwable class";
-      cli_globals->setJniErrorStr(error_msg);
+      setSqlJniErrorStr(error_msg); 
       return FALSE; 
    }
    jthrowable a_exception = jenv->ExceptionOccurred();
    if (a_exception == NULL)
    {
        error_msg = "No java exception was thrown";
-       cli_globals->setJniErrorStr(error_msg);
+       setSqlJniErrorStr(error_msg); 
        return FALSE;
    }
-   appendExceptionMessages(jenv, a_exception, error_msg);
-   cli_globals->setJniErrorStr(error_msg);
+   appendExceptionMessages(a_exception, error_msg);
+   setSqlJniErrorStr(error_msg); 
+   logError(CAT_SQL_EXE, fileName, lineNo); 
+   logError(CAT_SQL_EXE, methodName, error_msg); 
    jenv->ExceptionClear();
    return TRUE;
 }
 
-void JavaObjectInterface::appendExceptionMessages(JNIEnv *jenv, jthrowable a_exception, NAString &error_msg)
+void JavaObjectInterface::appendExceptionMessages(jthrowable a_exception, NAString &error_msg)
 {
     jstring msg_obj =
-       (jstring) jenv->CallObjectMethod(a_exception,
+       (jstring) jenv_->CallObjectMethod(a_exception,
                                          gThrowableToStringMethodID);
     const char *msg_str;
     if (msg_obj != NULL)
     {
-       msg_str = jenv->GetStringUTFChars(msg_obj, 0);
+       msg_str = jenv_->GetStringUTFChars(msg_obj, 0);
        error_msg += msg_str;
-       jenv->ReleaseStringUTFChars(msg_obj, msg_str);
-       jenv->DeleteLocalRef(msg_obj);
+       jenv_->ReleaseStringUTFChars(msg_obj, msg_str);
+       jenv_->DeleteLocalRef(msg_obj);
     }
     else
        msg_str = "Exception is thrown, but tostring is null";
@@ -593,57 +612,37 @@
 
     // Get the stack trace
     jobjectArray frames =
-        (jobjectArray) jenv->CallObjectMethod(
+        (jobjectArray) jenv_->CallObjectMethod(
                                         a_exception,
                                         gGetStackTraceMethodID);
     if (frames == NULL)
        return;
-    jsize frames_length = jenv->GetArrayLength(frames);
+    jsize frames_length = jenv_->GetArrayLength(frames);
 
     jsize i = 0;
     for (i = 0; i < frames_length; i++)
     {
-       jobject frame = jenv->GetObjectArrayElement(frames, i);
-       msg_obj = (jstring) jenv->CallObjectMethod(frame,
+       jobject frame = jenv_->GetObjectArrayElement(frames, i);
+       msg_obj = (jstring) jenv_->CallObjectMethod(frame,
                                             gStackFrameToStringMethodID);
        if (msg_obj != NULL)
        {
-          msg_str = jenv->GetStringUTFChars(msg_obj, 0);
+          msg_str = jenv_->GetStringUTFChars(msg_obj, 0);
           error_msg += "\n";
           error_msg += msg_str;
-          jenv->ReleaseStringUTFChars(msg_obj, msg_str);
-          jenv->DeleteLocalRef(msg_obj);
-          jenv->DeleteLocalRef(frame);
+          jenv_->ReleaseStringUTFChars(msg_obj, msg_str);
+          jenv_->DeleteLocalRef(msg_obj);
+          jenv_->DeleteLocalRef(frame);
        }
     }
-    jthrowable j_cause = (jthrowable)jenv->CallObjectMethod(a_exception, gGetCauseMethodID);
+    jthrowable j_cause = (jthrowable)jenv_->CallObjectMethod(a_exception, gGetCauseMethodID);
     if (j_cause != NULL) {
        error_msg += " Caused by \n";
-       appendExceptionMessages(jenv, j_cause, error_msg);
+       appendExceptionMessages(j_cause, error_msg);
     }
-    jenv->DeleteLocalRef(a_exception);
+    jenv_->DeleteLocalRef(a_exception);
 } 
 
-NAString JavaObjectInterface::getLastError()
-{
-  return cli_globals->getJniErrorStr();
-}
-
-NAString JavaObjectInterface::getLastJavaError(jmethodID methodID)
-{
-  if (javaObj_ == NULL)
-    return "";
-  jstring j_error = (jstring)jenv_->CallObjectMethod(javaObj_,
-               methodID);
-  if (j_error == NULL)
-      return "";
-  const char *error_str = jenv_->GetStringUTFChars(j_error, NULL);
-  cli_globals->setJniErrorStr(error_str);
-  jenv_->ReleaseStringUTFChars(j_error, error_str);
-  return cli_globals->getJniErrorStr();
-}
-
-
 JOI_RetCode JavaObjectInterface::initJNIEnv()
 {
   JOI_RetCode retcode;
diff --git a/core/sql/executor/JavaObjectInterface.h b/core/sql/executor/JavaObjectInterface.h
index d07b6f0..f6da8ec 100644
--- a/core/sql/executor/JavaObjectInterface.h
+++ b/core/sql/executor/JavaObjectInterface.h
@@ -31,6 +31,7 @@
 #include <sys/syscall.h>
 #include "jni.h"
 #include "Platform.h"
+#include "NAString.h"
 
 class LmJavaOptions;
 
@@ -40,7 +41,11 @@
 
 extern __thread JNIEnv *jenv_;
 extern __thread NAString *tsRecentJMFromJNI;
+extern __thread NAString *tsSqlJniErrorStr;
 
+void setSqlJniErrorStr(NAString &errorMsg);
+void setSqlJniErrorStr(const char *errorMsg);
+const char *getSqlJniErrorStr();
 
 // This structure defines the information needed for each java method used.
 struct JavaMethodInit {
@@ -74,8 +79,6 @@
   : public ExGod
 #endif
 {
-public:
-  NAString getLastJavaError(jmethodID methodID);
 protected:
 
   // Default constructor - for creating a new JVM		
@@ -119,7 +122,8 @@
   // Get the error description.
   static char* getErrorText(JOI_RetCode errEnum);
  
-  static NAString getLastError();
+  static const char *getLastError() 
+    { return getSqlJniErrorStr(); }
 
   // Write the description of a Java error to the log file.
   static void logError(std::string &cat, const char* methodName, const char *result);
@@ -143,11 +147,10 @@
   {
     return isInitialized_;
   }
-  // Pass in jenv if the thread where the object is created is different than
-  // the thread where exception occurred
-  static NABoolean getExceptionDetails(JNIEnv *jenv = NULL);  
+  static NABoolean getExceptionDetails(const char *fileName, int lineNo,
+                       const char *methodName);  
 
-  static void appendExceptionMessages(JNIEnv *jenv, jthrowable a_exception, NAString &error_msg);
+  static void appendExceptionMessages(jthrowable a_exception, NAString &error_msg);
   
   NAHeap *getHeap() { return heap_; }
 protected:
diff --git a/core/sql/executor/OrcFileReader.cpp b/core/sql/executor/OrcFileReader.cpp
index 988704d..bc7ee9d 100644
--- a/core/sql/executor/OrcFileReader.cpp
+++ b/core/sql/executor/OrcFileReader.cpp
@@ -166,8 +166,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HDFS_ORC_FILE_READER, "OrcFileReader::open()", jresult);
+    getExceptionDetails(__FILE__, __LINE__, "OrcFileReader::open()");
     jenv_->PopLocalFrame(NULL);
     return OFR_ERROR_OPEN_EXCEPTION;
   }
@@ -191,9 +190,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HDFS_ORC_FILE_READER, __FILE__, __LINE__);
-    logError(CAT_SQL_HDFS_ORC_FILE_READER, "OrcFileReader::getPosition()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "OrcFileReader::getPosition()");
     jenv_->PopLocalFrame(NULL);
     return OFR_ERROR_GETPOS_EXCEPTION;
   }
@@ -230,8 +227,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HDFS_ORC_FILE_READER, __FILE__, __LINE__);
+    getExceptionDetails(__FILE__, __LINE__, "OrcFileReader::seeknSync()");
     jenv_->PopLocalFrame(NULL);
     return OFR_ERROR_SYNC_EXCEPTION;
   }
@@ -270,8 +266,7 @@
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HDFS_ORC_FILE_READER, __FILE__, __LINE__);
+    getExceptionDetails(__FILE__, __LINE__, "OrcFileReader::isEOF()");
     jenv_->PopLocalFrame(NULL);
     return OFR_ERROR_ISEOF_EXCEPTION;
   }
@@ -318,9 +313,7 @@
 	jobject jresult = (jobject)jenv_->CallObjectMethod(javaObj_, JavaMethods_[JM_FETCHROW2].methodID);
     if (jenv_->ExceptionCheck()) 
     {
-      getExceptionDetails();
-      logError(CAT_SQL_HDFS_ORC_FILE_READER, __FILE__, __LINE__);
-      logError(CAT_SQL_HDFS_ORC_FILE_READER, "OrcFileReader::fetchNextRow()", getLastError());
+      getExceptionDetails(__FILE__, __LINE__, "OrcFileReader::fetchNextRow()");
       jenv_->PopLocalFrame(NULL);
       return OFR_ERROR_FETCHROW_EXCEPTION;
     }
@@ -399,8 +392,7 @@
 
   if (jenv_->ExceptionCheck()) 
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HDFS_ORC_FILE_READER, __FILE__, __LINE__);
+    getExceptionDetails(__FILE__, __LINE__, "OrcFileReader::close()");
     jenv_->PopLocalFrame(NULL);
     return OFR_ERROR_CLOSE_EXCEPTION;
   }
@@ -432,8 +424,7 @@
   
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HDFS_ORC_FILE_READER, __FILE__, __LINE__);
+    getExceptionDetails(__FILE__, __LINE__, "OrcFileReader::getRowCount()");
     jenv_->PopLocalFrame(NULL);
     return OFR_ERROR_GETNUMROWS_EXCEPTION;
   }
diff --git a/core/sql/executor/SequenceFileReader.cpp b/core/sql/executor/SequenceFileReader.cpp
index 8feb1d5..07bab86 100644
--- a/core/sql/executor/SequenceFileReader.cpp
+++ b/core/sql/executor/SequenceFileReader.cpp
@@ -189,6 +189,13 @@
   tsRecentJMFromJNI = JavaMethods_[JM_OPEN].jm_full_name;
   jstring jresult = (jstring)jenv_->CallObjectMethod(javaObj_, JavaMethods_[JM_OPEN].methodID, js_path);
 
+  if (jenv_->ExceptionCheck())
+  {
+    getExceptionDetails(__FILE__, __LINE__, "SequenceFileReader::open()");
+    jenv_->PopLocalFrame(NULL);
+    return SFR_ERROR_OPEN_EXCEPTION;
+  }
+
   if (jresult != NULL)
   {
     logError(CAT_SQL_HDFS_SEQ_FILE_READER, "SequenceFileReader::open()", jresult);
@@ -213,6 +220,13 @@
   tsRecentJMFromJNI = JavaMethods_[JM_GETPOS].jm_full_name;
   Int64 result = jenv_->CallLongMethod(javaObj_, JavaMethods_[JM_GETPOS].methodID);
 
+  if (jenv_->ExceptionCheck())
+  {
+    getExceptionDetails(__FILE__, __LINE__, "SequenceFileReader::getPosition()");
+    jenv_->PopLocalFrame(NULL);
+    return SFR_ERROR_GETPOS_EXCEPTION;
+  }
+
   if (result == -1) 
   {
     logError(CAT_SQL_HDFS_SEQ_FILE_READER, "SequenceFileReader::getPosition()", getLastError());
@@ -233,12 +247,19 @@
   QRLogger::log(CAT_SQL_HDFS_SEQ_FILE_READER, LL_DEBUG, "SequenceFileReader::seeknSync(%ld) called.", pos);
 
   if (initJNIEnv() != JOI_OK)
-     return SFR_ERROR_GETPOS_EXCEPTION;
+     return SFR_ERROR_SYNC_EXCEPTION;
 
   // String seeknSync(long);
   tsRecentJMFromJNI = JavaMethods_[JM_SYNC].jm_full_name;
   jstring jresult = (jstring)jenv_->CallObjectMethod(javaObj_, JavaMethods_[JM_SYNC].methodID, pos);
 
+  if (jenv_->ExceptionCheck())
+  {
+    getExceptionDetails(__FILE__, __LINE__, "SequenceFileReader::seeknSync()");
+    jenv_->PopLocalFrame(NULL);
+    return SFR_ERROR_SYNC_EXCEPTION;
+  }
+
   if (jresult != NULL)
   {
     logError(CAT_SQL_HDFS_SEQ_FILE_READER, "SequenceFileReader::seeknSync()", jresult);
@@ -263,6 +284,13 @@
   tsRecentJMFromJNI = JavaMethods_[JM_ISEOF].jm_full_name;
   bool result = jenv_->CallBooleanMethod(javaObj_, JavaMethods_[JM_ISEOF].methodID);
 
+  if (jenv_->ExceptionCheck())
+  {
+    getExceptionDetails(__FILE__, __LINE__, "SequenceFileReader::seeknSync()");
+    jenv_->PopLocalFrame(NULL);
+    return SFR_ERROR_ISEOF_EXCEPTION;
+  }
+
   jenv_->PopLocalFrame(NULL);
   isEOF = result;
   return SFR_OK;
@@ -279,6 +307,12 @@
   // java.lang.String fetchNextRow(long stopOffset);
   tsRecentJMFromJNI = JavaMethods_[JM_FETCHROW2].jm_full_name;
   jstring jresult = (jstring)jenv_->CallObjectMethod(javaObj_, JavaMethods_[JM_FETCHROW2].methodID, stopOffset);
+  if (jenv_->ExceptionCheck())
+  {
+    getExceptionDetails(__FILE__, __LINE__, "SequenceFileReader::fetchNextRow()");
+    jenv_->PopLocalFrame(NULL);
+    return SFR_ERROR_FETCHROW_EXCEPTION;
+  }
   if (jresult==NULL && getLastError()) 
   {
     logError(CAT_SQL_HDFS_SEQ_FILE_READER, "SequenceFileReader::fetchNextRow()", getLastError());
@@ -312,6 +346,12 @@
   // String close();
   tsRecentJMFromJNI = JavaMethods_[JM_CLOSE].jm_full_name;
   jstring jresult = (jstring)jenv_->CallObjectMethod(javaObj_, JavaMethods_[JM_CLOSE].methodID);
+  if (jenv_->ExceptionCheck())
+  {
+    getExceptionDetails(__FILE__, __LINE__, "SequenceFileReader::close()");
+    jenv_->PopLocalFrame(NULL);
+    return SFR_ERROR_CLOSE_EXCEPTION;
+  }
 
   if (jresult!=NULL) 
   {
@@ -466,6 +506,13 @@
   tsRecentJMFromJNI = JavaMethods_[JM_OPEN].jm_full_name;
   jstring jresult = (jstring)jenv_->CallObjectMethod(javaObj_, JavaMethods_[JM_OPEN].methodID, js_path, compression);
 
+  if (jenv_->ExceptionCheck())
+  {
+    getExceptionDetails(__FILE__, __LINE__, "SequenceFileWriter::open()");
+    jenv_->PopLocalFrame(NULL);
+    return SFW_ERROR_OPEN_EXCEPTION;
+  }
+
   if (jresult != NULL)
   {
     logError(CAT_SQL_HDFS_SEQ_FILE_WRITER, "SequenceFileWriter::open()", jresult);
@@ -495,6 +542,12 @@
   // String write(java.lang.String);
   tsRecentJMFromJNI = JavaMethods_[JM_WRITE].jm_full_name;
   jstring jresult = (jstring)jenv_->CallObjectMethod(javaObj_, JavaMethods_[JM_WRITE].methodID, js_data);
+  if (jenv_->ExceptionCheck())
+  {
+    getExceptionDetails(__FILE__, __LINE__, "SequenceFileWriter::write()");
+    jenv_->PopLocalFrame(NULL);
+    return SFW_ERROR_WRITE_EXCEPTION;
+  }
 
   if (jresult != NULL)
   {
@@ -551,6 +604,12 @@
   // String close();
   tsRecentJMFromJNI = JavaMethods_[JM_CLOSE].jm_full_name;
   jstring jresult = (jstring)jenv_->CallObjectMethod(javaObj_, JavaMethods_[JM_CLOSE].methodID);
+  if (jenv_->ExceptionCheck())
+  {
+    getExceptionDetails(__FILE__, __LINE__, "SequenceFileWriter::close()");
+    jenv_->PopLocalFrame(NULL);
+    return SFW_ERROR_CLOSE_EXCEPTION;
+  }
 
   if (jresult != NULL)
   {
diff --git a/core/sql/executor/ex_root.cpp b/core/sql/executor/ex_root.cpp
index 38654b3..594174d 100644
--- a/core/sql/executor/ex_root.cpp
+++ b/core/sql/executor/ex_root.cpp
@@ -997,7 +997,7 @@
     ExRaiseSqlWarning(getHeap(), &newDiags, (ExeErrorCode) (8448), NULL,
         &intParam1, &cliError, NULL, (str ? (char*) str : (char*) " "),
         getHbaseErrStr(retcode),
-        (str2 ? (char*) str2 : (char *) currContext->getJniErrorStr().data()));
+        (str2 ? (char*) str2 : (char *) GetCliGlobals()->getJniErrorStr()));
     diagsArea->mergeAfter(*newDiags);
   }
   ex_assert( 0, "invalid return code value");
diff --git a/core/sql/executor/hiveHook.cpp b/core/sql/executor/hiveHook.cpp
index 11003f9..d734287 100644
--- a/core/sql/executor/hiveHook.cpp
+++ b/core/sql/executor/hiveHook.cpp
@@ -212,7 +212,7 @@
       if (client_)
         errCodeStr_ = client_->getErrorText((HVC_RetCode)errCode_);
       errMethodName_ = errMethodName;
-      errDetail_ = GetCliGlobals()->getJniErrorStrPtr();
+      errDetail_ = GetCliGlobals()->getJniErrorStr();
       return FALSE;
     }
   return TRUE;
diff --git a/core/sql/optimizer/NATable.cpp b/core/sql/optimizer/NATable.cpp
index cb0cc39..ed11edb 100644
--- a/core/sql/optimizer/NATable.cpp
+++ b/core/sql/optimizer/NATable.cpp
@@ -7878,7 +7878,7 @@
         << DgString0((char*)"ExpHbaseInterface::init()")
         << DgString1(getHbaseErrStr(-retcode))
         << DgInt0(-retcode)
-        << DgString2((char*)GetCliGlobals()->getJniErrorStr().data());
+        << DgString2((char*)GetCliGlobals()->getJniErrorStr());
       delete ehi;
       return NULL;
     }
diff --git a/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp b/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp
index 0dc36e5..6fc1863 100644
--- a/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp
+++ b/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp
@@ -1146,7 +1146,7 @@
                           << DgString0((char*)"ExpHbaseInterface::init()")
                           << DgString1(getHbaseErrStr(-retcode))
                           << DgInt0(-retcode)
-                          << DgString2((char*)GetCliGlobals()->getJniErrorStr().data());
+                          << DgString2((char*)GetCliGlobals()->getJniErrorStr());
       }
 
       deallocEHI(ehi); 
@@ -1425,7 +1425,7 @@
         *hbaseErrNum = retcode;
 
       if (hbaseErrStr)
-        *hbaseErrStr = (char*)GetCliGlobals()->getJniErrorStr().data();
+        *hbaseErrStr = (char*)GetCliGlobals()->getJniErrorStr();
 
       retcode = -1398;
       goto label_return;
@@ -1500,7 +1500,7 @@
         *hbaseErrNum = retcode;
 
       if (hbaseErrStr)
-        *hbaseErrStr = (char*)GetCliGlobals()->getJniErrorStr().data();
+        *hbaseErrStr = (char*)GetCliGlobals()->getJniErrorStr();
 
       retcode = -1398;
       goto label_return;
@@ -2557,7 +2557,7 @@
                           << DgString0((char*)"ExpHbaseInterface::exists()")
                           << DgString1(getHbaseErrStr(-retcode))
                           << DgInt0(-retcode)
-                          << DgString2((char*)GetCliGlobals()->getJniErrorStr().data());
+                          << DgString2((char*)GetCliGlobals()->getJniErrorStr());
       
       return -1;
     }
@@ -2615,7 +2615,7 @@
                           << DgString0((char*)"ExpHbaseInterface::create()")
                           << DgString1(getHbaseErrStr(-retcode))
                           << DgInt0(-retcode)
-                          << DgString2((char*)GetCliGlobals()->getJniErrorStr().data());
+                          << DgString2((char*)GetCliGlobals()->getJniErrorStr());
       
       return -1;
     }
@@ -2695,7 +2695,7 @@
                               << DgString0((char*)"ExpHbaseInterface::alter()")
                               << DgString1(getHbaseErrStr(-retcode))
                               << DgInt0(-retcode)
-                              << DgString2((char*)GetCliGlobals()->getJniErrorStr().data());
+                              << DgString2((char*)GetCliGlobals()->getJniErrorStr());
           retcode = -1;
         } // if
     } // else
@@ -2723,7 +2723,7 @@
                               << DgString0((char*)"ExpHbaseInterface::drop()")
                               << DgString1(getHbaseErrStr(-retcode))
                               << DgInt0(-retcode)
-                              << DgString2((char*)GetCliGlobals()->getJniErrorStr().data());
+                              << DgString2((char*)GetCliGlobals()->getJniErrorStr());
           
           return -1;
         }
@@ -2735,7 +2735,7 @@
                           << DgString0((char*)"ExpHbaseInterface::exists()")
                           << DgString1(getHbaseErrStr(-retcode))
                           << DgInt0(-retcode)
-                          << DgString2((char*)GetCliGlobals()->getJniErrorStr().data());
+                          << DgString2((char*)GetCliGlobals()->getJniErrorStr());
       
       return -1;
     }
@@ -2758,7 +2758,7 @@
                               << DgString0((char*)"ExpHbaseInterface::copy()")
                               << DgString1(getHbaseErrStr(-retcode))
                               << DgInt0(-retcode)
-                              << DgString2((char*)GetCliGlobals()->getJniErrorStr().data());
+                              << DgString2((char*)GetCliGlobals()->getJniErrorStr());
           
           return -1;
         }
@@ -2770,7 +2770,7 @@
                           << DgString0((char*)"ExpHbaseInterface::copy()")
                           << DgString1(getHbaseErrStr(-retcode))
                           << DgInt0(-retcode)
-                          << DgString2((char*)GetCliGlobals()->getJniErrorStr().data());
+                          << DgString2((char*)GetCliGlobals()->getJniErrorStr());
       
       return -1;
     }
@@ -8127,7 +8127,7 @@
                           << DgString0((char*)"ExpHbaseInterface::dropAll()")
                           << DgString1(getHbaseErrStr(-retcode))
                           << DgInt0(-retcode)
-                          << DgString2((char*)GetCliGlobals()->getJniErrorStr().data());
+                          << DgString2((char*)GetCliGlobals()->getJniErrorStr());
 
       return retcode;
     }
@@ -8638,7 +8638,7 @@
                           << DgString0((char*)"ExpHbaseInterface::truncate()")
                           << DgString1(getHbaseErrStr(-retcode))
                           << DgInt0(-retcode)
-                          << DgString2((char*)GetCliGlobals()->getJniErrorStr().data());
+                          << DgString2((char*)GetCliGlobals()->getJniErrorStr());
 
       processReturn();
       return -1;
diff --git a/core/sql/sqlcomp/CmpSeabaseDDLtable.cpp b/core/sql/sqlcomp/CmpSeabaseDDLtable.cpp
index b16f777..0794d5d 100644
--- a/core/sql/sqlcomp/CmpSeabaseDDLtable.cpp
+++ b/core/sql/sqlcomp/CmpSeabaseDDLtable.cpp
@@ -4820,7 +4820,7 @@
                           << DgString0((char*)"ExpHbaseInterface::copy()")
                           << DgString1(getHbaseErrStr(-retcode))
                           << DgInt0(-retcode)
-                          << DgString2((char*)GetCliGlobals()->getJniErrorStr().data());
+                          << DgString2((char*)GetCliGlobals()->getJniErrorStr());
       
       processReturn();
       
@@ -6264,7 +6264,7 @@
                             << DgString0((char*)"ExpHbaseInterface::deleteColumns()")
                             << DgString1(getHbaseErrStr(-cliRC))
                             << DgInt0(-cliRC)
-                            << DgString2((char*)GetCliGlobals()->getJniErrorStr().data());
+                            << DgString2((char*)GetCliGlobals()->getJniErrorStr());
         
         goto label_error;
       }
@@ -10152,7 +10152,7 @@
                                   DgString0((char*)"ExpHbaseInterface::revoke()"))
                               << DgString1(getHbaseErrStr(-retcode))
                               << DgInt0(-retcode)
-                              << DgString2((char*)GetCliGlobals()->getJniErrorStr().data());
+                              << DgString2((char*)GetCliGlobals()->getJniErrorStr());
 
           deallocEHI(ehi);
 
@@ -10169,7 +10169,7 @@
                           << DgString0((char*)"ExpHbaseInterface::close()")
                           << DgString1(getHbaseErrStr(-retcode))
                           << DgInt0(-retcode)
-                          << DgString2((char*)GetCliGlobals()->getJniErrorStr().data());
+                          << DgString2((char*)GetCliGlobals()->getJniErrorStr());
 
       deallocEHI(ehi);
 
@@ -12592,7 +12592,7 @@
             << DgString0((char*)"ExpHbaseInterface::getLatestSnapshot()")
             << DgString1(getHbaseErrStr(-retcode))
             << DgInt0(-retcode)
-            << DgString2((char*)GetCliGlobals()->getJniErrorStr().data());
+            << DgString2((char*)GetCliGlobals()->getJniErrorStr());
           delete ehi;
         }
     }
diff --git a/core/sql/src/main/java/org/trafodion/sql/HTableClient.java b/core/sql/src/main/java/org/trafodion/sql/HTableClient.java
index 7dae2b8..c228c36 100644
--- a/core/sql/src/main/java/org/trafodion/sql/HTableClient.java
+++ b/core/sql/src/main/java/org/trafodion/sql/HTableClient.java
@@ -114,7 +114,6 @@
 	private ResultScanner scanner = null;
         private ScanHelper scanHelper = null;
 	Result[] getResultSet = null;
-	String lastError;
         RMInterface table = null;
         private boolean writeToWAL = false;
 	int numRowsCached = 1;
@@ -352,16 +351,6 @@
 	    return true;
 	}
 
-	public String getLastError() {
-		String ret = lastError;
-		lastError = null;
-		return ret;
-	}
-
-	void setLastError(String err) {
-		lastError = err;
-	}
-
 	String getTableName() {
 		return tableName;
 	}
@@ -1188,10 +1177,7 @@
 		else
 		{
 			if (scanner == null) {
-				String err = "  fetchRows() called before scanOpen().";
-				logger.error(err);
-				setLastError(err);
-				return -1;
+                                throw new IOException("HTableClient.FetchRows() called before scanOpen().");
 			}
 			Result[] result = null;
 			if (preFetch)
diff --git a/core/sql/src/main/java/org/trafodion/sql/HiveClient.java b/core/sql/src/main/java/org/trafodion/sql/HiveClient.java
index 13ee51d..6657aed 100644
--- a/core/sql/src/main/java/org/trafodion/sql/HiveClient.java
+++ b/core/sql/src/main/java/org/trafodion/sql/HiveClient.java
@@ -167,9 +167,8 @@
     }
 
     public Object[] getAllTables(String schName) 
-        throws MetaException, Exception {
-        //System.out.println("schName = " + schName);
-
+        throws MetaException, TException {
+        try {
         Database db = hmsClient.getDatabase(schName);
         if (db == null)
             return null;
@@ -179,6 +178,9 @@
            return tableList.toArray();
         else
            return null;
+        } catch (NoSuchObjectException e) {
+          return null;
+        }
     }
 
     // Because Hive changed the name of the class containing internal constants changed
diff --git a/core/sql/ustat/hs_cli.cpp b/core/sql/ustat/hs_cli.cpp
index e4d4761..298e9cf 100644
--- a/core/sql/ustat/hs_cli.cpp
+++ b/core/sql/ustat/hs_cli.cpp
@@ -503,7 +503,7 @@
 // Obtain any JNI diagnostic text stored in the CLI
 const char * HSFuncGetJniErrorStr()
 {
-  return GetCliGlobals()->currContext()->getJniErrorStrPtr();
+  return GetCliGlobals()->getJniErrorStr();
 }
 
 // -----------------------------------------------------------------------