[Mulgara-svn] r124 - in branches/xafix-impl: . src/jar/resolver/java/org/mulgara/resolver

andrae at mulgara.org andrae at mulgara.org
Wed Nov 1 23:52:21 UTC 2006


Author: andrae
Date: 2006-11-01 17:52:20 -0600 (Wed, 01 Nov 2006)
New Revision: 124

Modified:
   branches/xafix-impl/log4j-conf.xml
   branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/DatabaseSession.java
   branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/MulgaraTransactionManager.java
   branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/TransactionalAnswer.java
Log:
Fixed NullPointerExceptions where I forgot I was setting transaction to Null at
the end-of-transaction/close.



Modified: branches/xafix-impl/log4j-conf.xml
===================================================================
--- branches/xafix-impl/log4j-conf.xml	2006-11-01 06:42:45 UTC (rev 123)
+++ branches/xafix-impl/log4j-conf.xml	2006-11-01 23:52:20 UTC (rev 124)
@@ -51,13 +51,14 @@
   </appender>
 
   <!-- (Insert category elements here) -->
+  <!--
   <category name="org.mulgara.resolver.MulgaraTransaction">
     <priority value="debug"/>
   </category>
   <category name="org.mulgara.resolver.TransactionalAnswer">
     <priority value="debug"/>
   </category>
-
+-->
   <!-- Default is to log messages of "warn" priority to the logfile appender -->
   <root>
     <priority value="warn"/>

Modified: branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/DatabaseSession.java
===================================================================
--- branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/DatabaseSession.java	2006-11-01 06:42:45 UTC (rev 123)
+++ branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/DatabaseSession.java	2006-11-01 23:52:20 UTC (rev 124)
@@ -671,6 +671,8 @@
 
 
   public void setAutoCommit(boolean autoCommit) throws QueryException {
+    logger.warn("Entering setAutoCommit");
+    try {
     if (logger.isInfoEnabled()) {
       logger.info("setAutoCommit(" + autoCommit + ") called with autoCommit = " + this.autoCommit);
     }
@@ -684,7 +686,7 @@
         endTransactionalBlock("Extended transaction failed");
       }
     } else if (this.autoCommit && !autoCommit) { // Turning autoCommit off
-      if (this.transaction.isSuspended()) {
+      if (transaction != null && transaction.isSuspended()) {
         resumeTransactionalBlock();
         endPreviousQueryTransaction();
       }
@@ -704,6 +706,13 @@
         logger.info("Invalid call to setAutoCommit(" + autoCommit + ") called with autoCommit = " + this.autoCommit);
       }
     }
+    } catch (QueryException eq) {
+      logger.error("Threw exception in autoCommit:", eq);
+      throw eq;
+    } catch (Exception e) {
+      logger.error("Threw RuntimeException in ac:", e);
+      throw new QueryException("setAutoCommit failed:", e);
+    }
   }
 
   public void commit() throws QueryException {
@@ -900,7 +909,9 @@
    */
   public void resumeTransactionalBlock() throws QueryException {
     logger.info("Resume Transactional Block");
-    if (!transaction.isSuspended()) {
+    if (transaction == null) {
+      throw new IllegalStateException("Attempt to resume without starting transaction");
+    } else if (!transaction.isSuspended()) {
       throw new IllegalStateException("Attempt to resume unsuspended transaction");
     } else if (inFailedTransaction == true) {
       throw new IllegalStateException("Transaction already failed, set autocommit true to reset");
@@ -922,8 +933,11 @@
    */
   public void suspendTransactionalBlock() throws Throwable {
     logger.info("Suspend Transactional Block");
-    if (transaction.isSuspended()) {
+    if (transaction == null) {
       throw new IllegalStateException(
+          "Attempt to suspend unstarted transaction");
+    } else if (transaction.isSuspended()) {
+      throw new IllegalStateException(
           "Attempt to suspend unresumed transaction.");
     }
     if (logger.isInfoEnabled()) {
@@ -1268,7 +1282,7 @@
   }
 
   boolean ensureTransactionResumed() throws QueryException {
-    if (this.transaction.isSuspended()) {
+    if (transaction != null && transaction.isSuspended()) {
       resumeTransactionalBlock();
       return true;
     } else {

Modified: branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/MulgaraTransactionManager.java
===================================================================
--- branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/MulgaraTransactionManager.java	2006-11-01 06:42:45 UTC (rev 123)
+++ branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/MulgaraTransactionManager.java	2006-11-01 23:52:20 UTC (rev 124)
@@ -110,7 +110,13 @@
     }
 
 //    FIXME: Need to finish 1-N DS-OC and provide this method - should really be newOperationContext.
-    return new MulgaraTransaction(this, session.getOperationContext());
+    try {
+      return new MulgaraTransaction(this, session.getOperationContext());
+    } catch (MulgaraTransactionException em) {
+      throw em;
+    } catch (Exception e) {
+      throw new MulgaraTransactionException("Error creating transaction", e);
+    }
   }
 
 

Modified: branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/TransactionalAnswer.java
===================================================================
--- branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/TransactionalAnswer.java	2006-11-01 06:42:45 UTC (rev 123)
+++ branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/TransactionalAnswer.java	2006-11-01 23:52:20 UTC (rev 124)
@@ -61,6 +61,12 @@
     try {
       report("Creating Answer");
 
+      if (transaction == null) {
+        throw new IllegalArgumentException("Transaction null in TransactionalAnswer");
+      } else if (answer == null) {
+        throw new IllegalArgumentException("Answer null in TransactionalAnswer");
+      }
+
       this.answer = answer;
       this.transaction = transaction;
       transaction.reference();
@@ -72,6 +78,7 @@
   }
 
   public Object getObject(final int column) throws TuplesException {
+    notClosed();
     return transaction.execute(new AnswerOperation() {
         public void execute() throws TuplesException {
           returnObject(answer.getObject(column));
@@ -80,6 +87,7 @@
   }
 
   public Object getObject(final String columnName) throws TuplesException {
+    notClosed();
     return transaction.execute(new AnswerOperation() {
         public void execute() throws TuplesException {
           returnObject(answer.getObject(columnName));
@@ -88,6 +96,7 @@
   }
 
   public void beforeFirst() throws TuplesException {
+    notClosed();
     transaction.execute(new AnswerOperation() {
         public void execute() throws TuplesException {
           answer.beforeFirst();
@@ -97,6 +106,7 @@
 
   public void close() throws TuplesException {
     report("Closing Answer");
+    notClosed();
     try {
       transaction.execute(new AnswerOperation() {
           public void execute() throws TuplesException {
@@ -117,6 +127,7 @@
   }
 
   public int getColumnIndex(final Variable column) throws TuplesException {
+    notClosed();
     return transaction.execute(new AnswerOperation() {
         public void execute() throws TuplesException {
           returnInt(answer.getColumnIndex(column));
@@ -125,6 +136,7 @@
   }
 
   public int getNumberOfVariables() {
+    notClosed();
     try {
       return transaction.execute(new AnswerOperation() {
           public void execute() {
@@ -137,6 +149,7 @@
   }
 
   public Variable[] getVariables() {
+    notClosed();
     try {
       return (Variable[])(transaction.execute(new AnswerOperation() {
           public void execute() {
@@ -149,6 +162,7 @@
   }
 
   public boolean isUnconstrained() throws TuplesException {
+    notClosed();
     return transaction.execute(new AnswerOperation() {
         public void execute() throws TuplesException {
           returnBoolean(answer.isUnconstrained());
@@ -157,6 +171,7 @@
   }
 
   public long getRowCount() throws TuplesException {
+    notClosed();
     return transaction.execute(new AnswerOperation() {
         public void execute() throws TuplesException {
           returnLong(answer.getRowCount());
@@ -165,6 +180,7 @@
   }
 
   public long getRowUpperBound() throws TuplesException {
+    notClosed();
     return transaction.execute(new AnswerOperation() {
         public void execute() throws TuplesException {
           returnLong(answer.getRowUpperBound());
@@ -173,6 +189,7 @@
   }
 
   public int getRowCardinality() throws TuplesException {
+    notClosed();
     return transaction.execute(new AnswerOperation() {
         public void execute() throws TuplesException {
           returnInt(answer.getRowCardinality());
@@ -181,6 +198,7 @@
   }
 
   public boolean next() throws TuplesException {
+    notClosed();
     return transaction.execute(new AnswerOperation() {
         public void execute() throws TuplesException {
           returnBoolean(answer.next());
@@ -222,4 +240,12 @@
       close();
     }
   }
+
+  private void notClosed() throws IllegalStateException {
+    if (transaction == null) {
+      throw new IllegalStateException("TransactionalAnswer closed");
+    } else if (answer == null) {
+      throw new IllegalStateException("TransactionAnswer not closed, but Answer null");
+    }
+  }
 }




More information about the Mulgara-svn mailing list