/** * Extends the current transaction. * * @param otherType type of the other transaction */ public void extend(Type otherType) { if (this.type == otherType) { long extensions = extendsCount.incrementAndGet(); logger.debug("Thread {}: Transaction extended: {}", Thread.currentThread().getId(), extensions); } else { throw new TransactionException("Incompatible transaction type specified: must be '" + this.type + "'"); } }
@Test public void shouldNotBeAbleToExtendAReadTransactionWithAReadWriteInnerTransaction() { try ( Transaction tx1 = session.beginTransaction(Transaction.Type.READ_ONLY); Transaction tx2 = session.beginTransaction(Transaction.Type.READ_WRITE)) { fail("Should not have allowed transaction extension of different type"); } catch (TransactionException tme) { assertThat(tme.getLocalizedMessage()) .isEqualTo("Incompatible transaction type specified: must be 'READ_ONLY'"); } }
@Test public void shouldNotBeAbleToExtendAReadWriteTransactionWithAReadOnlyInnerTransaction() { try ( Transaction tx1 = session.beginTransaction(Transaction.Type.READ_WRITE); Transaction tx2 = session.beginTransaction(Transaction.Type.READ_ONLY)) { fail("Should not have allowed transaction extension of different type"); } catch (TransactionException tme) { assertThat(tme.getLocalizedMessage()) .isEqualTo("Incompatible transaction type specified: must be 'READ_WRITE'"); } }
public void commit() { long extensions = extendsCount.get(); logger.debug("Thread {}: Commit transaction extent: {}", Thread.currentThread().getId(), extensions); if (extensions == 0) { if (canCommit()) { if (transactionManager != null) { transactionManager.commit(this); status = Status.COMMITTED; logger.debug("Thread {}: Committed", Thread.currentThread().getId()); } } else { throw new TransactionException("Transaction cannot commit"); } } else { if (status == Status.ROLLBACK_PENDING) { throw new TransactionException("Transaction cannot commit: rollback pending"); } else { logger.debug("Thread {}: Commit deferred", Thread.currentThread().getId()); status = Status.COMMIT_PENDING; } } }
@Override public void commit() { try { if (transactionManager.canCommit()) { HttpPost request = new HttpPost(url + "/commit"); request.setHeader(new BasicHeader(HTTP.CONTENT_TYPE, "application/json;charset=UTF-8")); request.setHeader(new BasicHeader("X-WRITE", driver.readOnly() ? "0" : "1")); driver.executeHttpRequest(request); } } catch (Exception e) { throw new TransactionException(e.getLocalizedMessage(), e); } finally { super.commit(); // must always be done to keep extension depth correct } }
@Override public void rollback() { try { if (transactionManager.canRollback()) { HttpDelete request = new HttpDelete(url); driver.executeHttpRequest(request); } } catch (Exception e) { throw new TransactionException(e.getLocalizedMessage()); } finally { super.rollback(); } }
@Override public void commit() { try { if (transactionManager.canCommit()) { HttpPost request = new HttpPost(url + "/commit"); request.setHeader(new BasicHeader(HTTP.CONTENT_TYPE,"application/json;charset=UTF-8")); driver.executeHttpRequest(request); } else { if (transactionManager.isExtended(transactionManager.getCurrentTransaction())) { throw new TransactionException("Transaction is marked for rollback"); } } } catch (Exception e) { throw new TransactionException(e.getLocalizedMessage()); } finally { super.commit(); } }
@Override public void rollback() { try { if (transactionManager.canRollback()) { logger.debug("rolling back native transaction: {}", nativeTransaction ); nativeTransaction.failure(); nativeTransaction.close(); } } catch (Exception e) { throw new TransactionException(e.getLocalizedMessage()); } finally { super.rollback(); } }
@Override public void rollback() { try { if (transactionManager.canRollback()) { LOGGER.debug("rolling back native transaction: {}", nativeTransaction); if (transactionIsOpen()) { nativeTransaction.failure(); nativeTransaction.close(); } else { LOGGER.warn("Transaction is already closed"); } } } catch (Exception e) { throw new TransactionException(e.getLocalizedMessage(), e); } finally { super.rollback(); } }
@Override public void commit() { try { if (transactionManager.canCommit()) { logger.debug("Committing native transaction: {}", nativeTransaction); nativeTransaction.success(); nativeTransaction.close(); } else { if (transactionManager.isExtended(transactionManager.getCurrentTransaction())) { throw new TransactionException("Transaction is marked for rollback"); } } } catch (Exception e) { throw new TransactionException(e.getLocalizedMessage()); } finally { super.commit(); } }
@Override public void rollback() { try { if (transactionManager.canRollback()) { LOGGER.debug("rolling back native transaction: {}", nativeTransaction); if (transactionIsOpen()) { nativeTransaction.failure(); nativeTransaction.close(); } else { LOGGER.warn("Transaction is already closed"); } } } catch (Exception e) { throw new TransactionException(e.getLocalizedMessage(), e); } finally { super.rollback(); } }
@Override public void commit() { try { if (transactionManager.canCommit()) { LOGGER.debug("Committing native transaction: {}", nativeTransaction); if (transactionIsOpen()) { nativeTransaction.success(); nativeTransaction.close(); } else { throw new IllegalStateException("This transaction has already been completed."); } } } catch (Exception e) { throw new TransactionException(e.getLocalizedMessage(), e); } finally { super.commit(); } }
@Override public void commit() { try { if (transactionManager.canCommit()) { LOGGER.debug("Committing native transaction: {}", nativeTransaction); if (transactionIsOpen()) { nativeTransaction.success(); nativeTransaction.close(); } else { throw new IllegalStateException("This transaction has already been completed."); } } } catch (Exception e) { throw new TransactionException(e.getLocalizedMessage(), e); } finally { super.commit(); } }
@Override public void rollback() { try { if (transactionManager.canRollback()) { LOGGER.debug("Rolling back native transaction: {}", nativeTransaction); if (nativeTransaction.isOpen()) { nativeTransaction.failure(); nativeTransaction.close(); } else { LOGGER.warn("Transaction is already closed"); } closeNativeSessionIfPossible(); } } catch (Exception e) { closeNativeSessionIfPossible(); throw new TransactionException(e.getLocalizedMessage(), e); } finally { super.rollback(); } }
@Override public void rollback() { try { if (transactionManager.canRollback()) { LOGGER.debug("Rolling back native transaction: {}", nativeTransaction); if (nativeTransaction.isOpen()) { nativeTransaction.failure(); nativeTransaction.close(); } else { LOGGER.warn("Transaction is already closed"); } closeNativeSessionIfPossible(); } } catch (Exception e) { closeNativeSessionIfPossible(); throw new TransactionException(e.getLocalizedMessage(), e); } finally { super.rollback(); } }
@Override public void commit() { final boolean canCommit = transactionManager.canCommit(); try { if (canCommit) { LOGGER.debug("Committing native transaction: {}", nativeTransaction); if (nativeTransaction.isOpen()) { nativeTransaction.success(); nativeTransaction.close(); nativeSession.close(); } else { throw new IllegalStateException("Transaction is already closed"); } } } catch (ClientException ce) { closeNativeSessionIfPossible(); if (ce.code().startsWith(NEO_CLIENT_ERROR_SECURITY)) { throw new ConnectionException("Security Error: " + ce.code() + ", " + ce.getMessage(), ce); } throw new CypherException(ce.code(), ce.getMessage(), ce); } catch (Exception e) { closeNativeSessionIfPossible(); throw new TransactionException(e.getLocalizedMessage(), e); } finally { super.commit(); if (canCommit) { transactionManager.bookmark(nativeSession.lastBookmark()); } } }
@Override public void commit() { final boolean canCommit = transactionManager.canCommit(); try { if (canCommit) { LOGGER.debug("Committing native transaction: {}", nativeTransaction); if (nativeTransaction.isOpen()) { nativeTransaction.success(); nativeTransaction.close(); nativeSession.close(); } else { throw new IllegalStateException("Transaction is already closed"); } } } catch (ClientException ce) { closeNativeSessionIfPossible(); if (ce.code().startsWith(NEO_CLIENT_ERROR_SECURITY)) { throw new ConnectionException("Security Error: " + ce.code() + ", " + ce.getMessage(), ce); } throw new CypherException(ce.code(), ce.getMessage(), ce); } catch (Exception e) { closeNativeSessionIfPossible(); throw new TransactionException(e.getLocalizedMessage(), e); } finally { super.commit(); if (canCommit) { transactionManager.bookmark(nativeSession.lastBookmark()); } } }