protected void finishReadTxn() { lock.leaveCriticalSection(); } protected void finishWriteTxn() { lock.leaveCriticalSection(); }
protected void finishWriteTxn() { lock.leaveCriticalSection(); }
protected void finishReadTxn() { lock.leaveCriticalSection(); } protected void finishWriteTxn() { lock.leaveCriticalSection(); }
protected void finishWriteTxn() { lock.leaveCriticalSection(); }
/** Called transaction ending code at most once per transaction. */ private void finishTransaction() { isInTransaction.remove(); transactionType.remove(); transactionMode.remove(); version.remove(); transactionLock.leaveCriticalSection(); }
protected void endOnce() { if ( isInTransaction() ) { lock.leaveCriticalSection() ; txnMode.set(null); txnType.set(null); inTransaction.set(false); txnMode.remove(); txnType.remove(); inTransaction.remove(); } }
@Override public void leaveCriticalSection() { this.getModelLock().leaveCriticalSection() ; }
@Override public void leaveCriticalSection() { this.getModelLock().leaveCriticalSection() ; }
@Override public void writerAborts(Transaction txn) { txn.getBaseDataset().getLock().leaveCriticalSection() ; writerAbortsWorker(txn) ; } }
@Override public void readerFinishes(Transaction txn) { txn.getBaseDataset().getLock().leaveCriticalSection() ; readerFinishesWorker(txn) ; }
@Override public void writerCommits(Transaction txn) { txn.getBaseDataset().getLock().leaveCriticalSection() ; writerCommitsWorker(txn) ; }
@Override public WonMessage process(final WonMessage message) throws WonMessageProcessingException { Dataset dataset = message.getCompleteDataset(); StringBuilder errorMessage = new StringBuilder("Message is not valid, failed at check "); boolean valid = false; try { dataset.getLock().enterCriticalSection(true); valid = validator.validate(dataset, errorMessage); } finally { dataset.getLock().leaveCriticalSection(); } if (!valid) { logger.info(errorMessage.toString() + "\n Offending message:\n" + RdfUtils.writeDatasetToString(dataset, Lang .TRIG)); throw new WonMessageNotWellFormedException(errorMessage.toString()); } return message; }
private Model construct(Dataset dataset, String namespace, String graphURI, Resource property) { dataset.getLock().enterCriticalSection(Lock.READ); try { StringBuilder buff = new StringBuilder(); buff.append("PREFIX afn: <http://jena.apache.org/ARQ/function#> \n") .append("CONSTRUCT { \n").append(" ?res <").append(property.getURI()).append("> ?o } WHERE { \n"); if (graphURI != null) { buff.append(" GRAPH ").append(graphURI).append(" { \n"); } buff.append(" ?res <").append(property.getURI()).append("> ?o \n"); buff.append(getNamespaceFilter(namespace)); if (graphURI != null) { buff.append(" } \n"); } buff.append("}"); Query constructProp = QueryFactory.create(buff.toString()); QueryExecution qe = QueryExecutionFactory.create(constructProp, dataset); try { return qe.execConstruct(); } finally { qe.close(); } } finally { dataset.getLock().leaveCriticalSection(); } }
private void _promote(boolean readCommited) { // Outside lock. if ( ! readCommited && version.get() != generation.get() ) { // This tests for any commited writers since this transaction started. // This does not catch the case of a currently active writer // that has not gone to commit or abort yet. // The final test is after we obtain the transactionLock. throw new JenaTransactionException("Dataset changed - can't promote") ; } // Blocking on other writers. transactionLock.enterCriticalSection(Lock.WRITE); // Check again now we are inside the lock. if ( ! readCommited && version.get() != generation.get() ) { // Can't promote - release the lock. transactionLock.leaveCriticalSection(); throw new JenaTransactionException("Concurrent writer changed the dataset : can't promote") ; } // We have the lock and we have promoted! transactionMode(WRITE); _begin(transactionType(), ReadWrite.WRITE) ; }
@Override public void transactionPromotes(Transaction txnOld, Transaction txnNew) { // Switch locks. txnOld.getBaseDataset().getLock().leaveCriticalSection() ; txnNew.getBaseDataset().getLock().enterCriticalSection(Lock.READ) ; }
/** Package access to allow for unit testing. */ void processChanges(String editorUri, Model writeModel, Model toBeAdded, Model toBeRetracted) throws Exception { Lock lock = null; log.debug("Model to be retracted is"); StringWriter sw = new StringWriter(); toBeRetracted.write(sw, "N3"); log.debug(sw.toString()); try { lock = writeModel.getLock(); lock.enterCriticalSection(Lock.WRITE); if( writeModel instanceof OntModel){ ((OntModel)writeModel).getBaseModel().notifyEvent(new EditEvent(editorUri, true)); } writeModel.add(toBeAdded); writeModel.remove(toBeRetracted); } catch (Throwable t) { throw new Exception("Error while modifying model \n" + t.getMessage()); } finally { if( writeModel instanceof OntModel){ ((OntModel)writeModel).getBaseModel().notifyEvent(new EditEvent(editorUri, false)); } lock.leaveCriticalSection(); } }
public static void applyChangesToWriteModel( AdditionsAndRetractions changes, Model queryModel, Model writeModel, String editorUri) { //side effect: modify the write model with the changes Lock lock = null; try{ lock = writeModel.getLock(); lock.enterCriticalSection(Lock.WRITE); if( writeModel instanceof OntModel){ ((OntModel)writeModel).getBaseModel().notifyEvent(new EditEvent(editorUri,true)); } writeModel.add( changes.getAdditions() ); writeModel.remove( changes.getRetractions() ); }catch(Throwable t){ log.error("error adding edit change n3required model to in memory model \n"+ t.getMessage() ); }finally{ if( writeModel instanceof OntModel){ ((OntModel)writeModel).getBaseModel().notifyEvent(new EditEvent(editorUri,false)); } lock.leaveCriticalSection(); } }
protected void applyChangeSetToModel(ChangeSet changeSet, Dataset dataset) { for (ModelChange modelChange: changeSet.getModelChanges()) { dataset.getLock().enterCriticalSection(Lock.WRITE); try { Model model = (modelChange.getGraphURI() == null) ? dataset.getDefaultModel() : dataset.getNamedModel(modelChange.getGraphURI()); operateOnModel(model, modelChange, dataset); } finally { dataset.getLock().leaveCriticalSection(); } } }
@Override int getClassGroupInstanceCount(VClassGroup vcg){ int count = 0; try { String queryText = "SELECT COUNT( DISTINCT ?instance ) WHERE { \n" + " ?class <"+VitroVocabulary.IN_CLASSGROUP+"> <"+vcg.getURI() +"> .\n" + " ?instance a ?class . \n" + "} \n" ; Query countQuery = QueryFactory.create(queryText, Syntax.syntaxARQ); DatasetWrapper w = getDatasetWrapper(); Dataset dataset = w.getDataset(); dataset.getLock().enterCriticalSection(Lock.READ); try { QueryExecution qe = QueryExecutionFactory.create(countQuery, dataset); ResultSet rs = qe.execSelect(); count = Integer.parseInt(((Literal) rs.nextSolution().get(".1")).getLexicalForm()); } finally { dataset.getLock().leaveCriticalSection(); w.close(); } }catch(Exception ex){ log.error("error in getClassGroupInstanceCount()", ex); } return count; }
dataset.getLock().leaveCriticalSection(); w.close();