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") ;