private <V> V executeInTransaction(Callable<V> executor) throws BagriException, XQException { if (autoCommit || txId == TX_NO) { txId = getTxManager().beginTransaction(); } try { V result = executor.call(); if (autoCommit && txId != TX_NO) { getTxManager().commitTransaction(txId); txId = TX_NO; } return result; } catch (Throwable ex) { if (txId != TX_NO) { getTxManager().rollbackTransaction(txId); txId = TX_NO; } if (ex instanceof XQException) { throw (XQException) ex; } if (ex instanceof BagriException) { throw (BagriException) ex; } throw new BagriException(ex, BagriException.ecTransaction); } }
protected void removeDocumentsTest() throws Exception { if (getTxManagement().isInTransaction()) { getTxManagement().finishCurrentTransaction(true); } long txId = getTxManagement().beginTransaction(); Properties props = getDocumentProperties(); for (String uri: uris) { getDocManagement().removeDocument(uri, props); } uris.clear(); getTxManagement().commitTransaction(txId); }
@ManagedAttribute(description="Returns transaction timeoit in miliseconds. 0 means no timeout") public long getTransactionTimeout() { return txMgr.getTransactionTimeout(); }
public void storeCustomerTest() throws Exception { long txId = 0; try { txId = getTxManagement().beginTransaction(); } catch (BagriException ex) { if (ex.getErrorCode() != BagriException.ecTransNoNested) { throw ex; } } uris.add(createDocumentTest(sampleRoot + getFileName("custacc.xml")).getUri()); if (txId > 0) { getTxManagement().commitTransaction(txId); } }
@Override public Boolean call() throws Exception { txMgr.commitTransaction(txId); return true; }
@Override public Long call() throws Exception { ((SchemaRepositoryImpl) repo).setClientId(clientId); return txMgr.beginTransaction(txIsolation); }
@Override public Boolean call() throws Exception { txMgr.rollbackTransaction(txId); return true; }
@GET @Produces(MediaType.TEXT_PLAIN) @ApiOperation(value = "getTxState: return transaction state of the current user session") public boolean getTxState() { TransactionManagement txMgr = getTxManager(); try { return txMgr.isInTransaction(); } catch (Exception ex) { logger.error("getTxState.error", ex); throw new WebApplicationException(ex, Status.INTERNAL_SERVER_ERROR); } }
public void storeOrderTest() throws Exception { long txId = 0; try { txId = getTxManagement().beginTransaction(); } catch (BagriException ex) { if (ex.getErrorCode() != BagriException.ecTransNoNested) { throw ex; } } uris.add(createDocumentTest(sampleRoot + getFileName("order123.xml")).getUri()); uris.add(createDocumentTest(sampleRoot + getFileName("order654.xml")).getUri()); if (txId > 0) { getTxManagement().commitTransaction(txId); } }
@PUT @Path("/{txId}") @Produces(MediaType.TEXT_PLAIN) @ApiOperation(value = "putTx: commits the specified user Transaction") public Response putTx(@PathParam("txId") long txId) { TransactionManagement txMgr = getTxManager(); try { txMgr.commitTransaction(txId); return Response.ok().build(); } catch (Exception ex) { logger.error("putTx.error", ex); throw new WebApplicationException(ex, Status.INTERNAL_SERVER_ERROR); } }
@POST @Produces(MediaType.TEXT_PLAIN) @ApiOperation(value = "postTx: starts a new user Transaction in the current session") public Response postTx(String isolation) { TransactionManagement txMgr = getTxManager(); try { long txId = txMgr.beginTransaction(TransactionIsolation.valueOf(isolation)); return Response.created(UriBuilder.fromPath("/tx/" + txId).build()).entity(txId).build(); } catch (Exception ex) { logger.error("postTx.error", ex); throw new WebApplicationException(ex, Status.INTERNAL_SERVER_ERROR); } }
@DELETE @Path("/{txId}") @Produces(MediaType.TEXT_PLAIN) @ApiOperation(value = "deleteTx: rolls back the specified user Transaction") public Response deleteTx(@PathParam("txId") long txId) { TransactionManagement txMgr = getTxManager(); try { txMgr.rollbackTransaction(txId); return Response.ok().build(); } catch (Exception ex) { logger.error("deleteTx.error", ex); throw new WebApplicationException(ex, Status.INTERNAL_SERVER_ERROR); } }
public void storeSecurityTest() throws Exception { long txId = 0; try { txId = getTxManagement().beginTransaction(); } catch (BagriException ex) { if (ex.getErrorCode() != BagriException.ecTransNoNested) { throw ex; } } uris.add(createDocumentTest(sampleRoot + getFileName("security1500.xml")).getUri()); uris.add(createDocumentTest(sampleRoot + getFileName("security5621.xml")).getUri()); uris.add(createDocumentTest(sampleRoot + getFileName("security9012.xml")).getUri()); uris.add(createDocumentTest(sampleRoot + getFileName("security29674.xml")).getUri()); if (txId > 0) { getTxManagement().commitTransaction(txId); } }
protected void closeTransaction() throws XQException { if (transactional) { if (autoCommit) { try { getTxManager().commitTransaction(txId); } catch (BagriException ex) { throw getXQException(ex); } txId = TX_NO; } else { // ?? } } }
@ManagedOperation(description="Starts new transaction") @ManagedOperationParameters({ @ManagedOperationParameter(name = "txIsolation", description = "Tx isolation level")}) public long beginTransaction(String txIsolation) { try { if (txIsolation == null || txIsolation.length() == 0) { return txMgr.beginTransaction(); } return txMgr.beginTransaction(TransactionIsolation.valueOf(txIsolation)); } catch (BagriException ex) { logger.error("beginTransaction.error: " + ex.getMessage(), ex); } return 0; }
@Override public Sequence call(XPathContext context, Sequence[] arguments) throws XPathException { long txId = (Long) SequenceTool.convertToJava(arguments[0].head()); try { txMgr.rollbackTransaction(txId); return null; } catch (BagriException ex) { throw new XPathException(ex); } } };
@Test public void createSecurityTest() throws Exception { long txId = getTxManagement().beginTransaction(); String uri = getFileName("security1500.xml"); DocumentAccessor doc = createDocumentTest(sampleRoot + uri); assertNotNull(doc); uris.add(doc.getUri()); assertEquals(txId, doc.getTxStart()); assertEquals(0L, doc.getTxFinish()); assertEquals(uri, doc.getUri()); getTxManagement().commitTransaction(txId); }
@Override public Sequence call(XPathContext context, Sequence[] arguments) throws XPathException { long txId = (Long) SequenceTool.convertToJava(arguments[0].head()); try { txMgr.commitTransaction(txId); return null; } catch (BagriException ex) { throw new XPathException(ex); } } };
@Override public Sequence call(XPathContext context, Sequence[] arguments) throws XPathException { long txId; try { if (arguments.length > 0) { txId = txMgr.beginTransaction(TransactionIsolation.valueOf(arguments[0].head().getStringValue())); } else { txId = txMgr.beginTransaction(); } return new Int64Value(txId); } catch (BagriException ex) { throw new XPathException(ex); } } };
@ManagedOperation(description="Rollback in-flight transaction") @ManagedOperationParameters({ @ManagedOperationParameter(name = "txId", description = "Tx identifier")}) public boolean rollbackTransaction(long txId) { try { txMgr.rollbackTransaction(txId); return true; } catch (BagriException ex) { logger.error("rollbackTransaction.error: " + ex.getMessage(), ex); } return false; }