You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2011/12/29 19:21:10 UTC

svn commit: r1225611 - in /incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets: HttpAction.java SPARQL_REST_RW.java SPARQL_Update.java SPARQL_Upload.java

Author: andy
Date: Thu Dec 29 18:21:10 2011
New Revision: 1225611

URL: http://svn.apache.org/viewvc?rev=1225611&view=rev
Log:
Transaction lifecycle for all actions.

Modified:
    incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/HttpAction.java
    incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/SPARQL_REST_RW.java
    incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/SPARQL_Update.java
    incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/SPARQL_Upload.java

Modified: incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/HttpAction.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/HttpAction.java?rev=1225611&r1=1225610&r2=1225611&view=diff
==============================================================================
--- incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/HttpAction.java (original)
+++ incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/HttpAction.java Thu Dec 29 18:21:10 2011
@@ -25,14 +25,20 @@ import java.util.Map ;
 import javax.servlet.http.HttpServletRequest ;
 import javax.servlet.http.HttpServletResponse ;
 
+import org.openjena.atlas.logging.Log ;
+
+import com.hp.hpl.jena.query.ReadWrite ;
 import com.hp.hpl.jena.shared.Lock ;
 import com.hp.hpl.jena.sparql.SystemARQ ;
 import com.hp.hpl.jena.sparql.core.DatasetGraph ;
+import com.hp.hpl.jena.sparql.core.Transactional ;
+import com.hp.hpl.jena.tdb.migrate.DatasetGraphWithLock ;
 
 class HttpAction
 {
     final long id ;
     private final DatasetGraph dsg ;
+    private final Transactional transactional ;
     private DatasetGraph activeDSG ;
     final Lock lock ;
     final HttpServletRequest request;
@@ -60,45 +66,113 @@ class HttpAction
         this.id = id ;
         this.dsg = dsg ;
         this.lock = ( dsg != null ) ? dsg.getLock() : null ;
+        if ( dsg instanceof Transactional )
+            transactional = (Transactional)dsg ;
+        else
+        {
+            DatasetGraphWithLock dsglock = new DatasetGraphWithLock(dsg) ; 
+            transactional = dsglock ;
+            dsg = dsglock ;
+        }
         this.request = request ;
         this.response = response ;
         this.verbose = verbose ;
     }
     
-    public final void beginRead()
+    public void beginRead()
     {
-        enter(dsg, lock, Lock.READ) ;
-        getConcurrencyPolicy(lock).startRead() ;
+        transactional.begin(ReadWrite.READ) ;
         activeDSG = dsg ;
     }
 
-    public final void endRead()
+    public void endRead()
     {
-        getConcurrencyPolicy(lock).finishRead() ;
-        leave(dsg, lock, Lock.READ) ;
+        transactional.end() ;
         activeDSG = null ;
     }
 
-    public final void beginWrite()
+    public void beginWrite()
     {
-        enter(dsg, lock, Lock.WRITE) ;
-        getConcurrencyPolicy(lock).startUpdate() ;
+        transactional.begin(ReadWrite.WRITE) ;
         activeDSG = dsg ;
     }
 
-    public final void endWrite()
+    public void commit()
+    {
+        transactional.commit() ;
+        activeDSG = null ;
+    }
+
+    public void abort()
     {
-        sync() ;
-        getConcurrencyPolicy(lock).finishUpdate() ;
-        leave(dsg, lock, Lock.WRITE) ;
+        transactional.abort() ;
         activeDSG = null ;
     }
 
+    public void endWrite()
+    {
+        if (transactional.isInTransaction())
+        {
+            Log.warn(this, "Transaction still active in endWriter - aborted") ;
+            transactional.abort() ;
+        }
+        activeDSG = null ;
+    }
+
+//    public boolean isInTransaction()
+//    { return transactional.isInTransaction() ; }
+
+//    public final void beginRead()
+//    {
+//        transactional.begin(ReadWrite.READ) ;
+//        
+//        enter(dsg, lock, Lock.READ) ;               // ????
+//        getConcurrencyPolicy(lock).startRead() ;    // ????
+//        activeDSG = dsg ;
+//    }
+//
+//    public final void endRead()
+//    {
+//        transactional.end() ;
+//        leave(dsg, lock, Lock.READ) ;               // ????
+//        getConcurrencyPolicy(lock).finishRead() ;   // ????
+//        activeDSG = null ;
+//    }
+//
+//    public final void beginWrite()
+//    {
+//        if ( transactional != null )
+//            transactional.begin(ReadWrite.WRITE) ;
+//        else
+//        {
+//            enter(dsg, lock, Lock.WRITE) ;
+//            getConcurrencyPolicy(lock).startUpdate() ;
+//        }
+//        activeDSG = dsg ;
+//    }
+//
+//    public final void endWrite()
+//    {
+//        if ( transactional != null )
+//        {
+//            //XXX Wrong - what about abort?
+//            transactional.commit() ;
+//        }
+//        else
+//        {
+//            sync() ;
+//            getConcurrencyPolicy(lock).finishUpdate() ;
+//            leave(dsg, lock, Lock.WRITE) ;
+//        }
+//        activeDSG = null ;
+//    }
+
     public final DatasetGraph getActiveDSG()
     {
         return activeDSG ;
     }
     
+    // External, additional lock.
     private void enter(DatasetGraph dsg, Lock lock, boolean readLock)
     {
         if ( lock == null && dsg == null )

Modified: incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/SPARQL_REST_RW.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/SPARQL_REST_RW.java?rev=1225611&r1=1225610&r2=1225611&view=diff
==============================================================================
--- incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/SPARQL_REST_RW.java (original)
+++ incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/SPARQL_REST_RW.java Thu Dec 29 18:21:10 2011
@@ -22,7 +22,7 @@ import org.openjena.fuseki.HttpNames ;
 
 import com.hp.hpl.jena.sparql.core.DatasetGraph ;
 
-/** The WRITE operations added to the READ oeprations */
+/** The WRITE operations added to the READ operations */
 public class SPARQL_REST_RW extends SPARQL_REST_R
 {
     public SPARQL_REST_RW(boolean verbose)
@@ -46,9 +46,15 @@ public class SPARQL_REST_RW extends SPAR
         try {
             boolean existedBefore = action.getTarget().exists() ; 
             if ( ! existedBefore)
+            {
+                // commit, not abort, because locking "transactions" don't support abort. 
+                action.commit() ;
                 errorNotFound("No such graph: "+action.getTarget().name) ;
+            }
             deleteGraph(action) ;
-        } finally { action.endWrite() ; }
+            action.commit() ;
+        }
+        finally { action.endWrite() ; }
         SPARQL_ServletBase.successNoContent(action) ;
     }
 
@@ -63,6 +69,7 @@ public class SPARQL_REST_RW extends SPAR
             if ( existedBefore )
                 clearGraph(action.getTarget()) ;
             addDataInto(body.getDefaultGraph(), action) ;
+            action.commit() ;
         } finally { action.endWrite() ; }
         // Differentiate: 201 Created or 204 No Content 
         if ( existedBefore )
@@ -80,6 +87,7 @@ public class SPARQL_REST_RW extends SPAR
         try {
             existedBefore = action.getTarget().exists() ; 
             addDataInto(body.getDefaultGraph(), action) ;
+            action.commit() ;
         } finally { action.endWrite() ; }
         if ( existedBefore )
             SPARQL_ServletBase.successNoContent(action) ;

Modified: incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/SPARQL_Update.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/SPARQL_Update.java?rev=1225611&r1=1225610&r2=1225611&view=diff
==============================================================================
--- incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/SPARQL_Update.java (original)
+++ incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/SPARQL_Update.java Thu Dec 29 18:21:10 2011
@@ -239,9 +239,9 @@ public class SPARQL_Update extends SPARQ
         action.beginWrite() ;
         try {
             UpdateAction.execute(updateRequest, action.getActiveDSG()) ;
-            // Sync done by endWrite.
+            action.commit() ;
         }
-        catch ( UpdateException ex) { errorBadRequest(ex.getMessage()) ; }
+        catch ( UpdateException ex) { action.abort() ; errorBadRequest(ex.getMessage()) ; }
         finally { action.endWrite() ; }
     }
 }

Modified: incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/SPARQL_Upload.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/SPARQL_Upload.java?rev=1225611&r1=1225610&r2=1225611&view=diff
==============================================================================
--- incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/SPARQL_Upload.java (original)
+++ incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/SPARQL_Upload.java Thu Dec 29 18:21:10 2011
@@ -197,6 +197,7 @@ public class SPARQL_Upload extends SPARQ
                     dsg.getDefaultGraph().getBulkUpdateHandler().add(graphTmp) ;
                 else
                     dsg.getGraph(gn).getBulkUpdateHandler().add(graphTmp) ;
+                action.commit() ;
             } finally { action.endWrite() ; }
                     
             response.setContentType("text/plain") ;