} catch (XAException ex) { logger.error("Error occurred while resuming an compensable transaction!", ex); throw new SystemException(ex.getMessage());
public void compensableRecoverySuspend() throws NotSupportedException, SystemException { CompensableManager compensableManager = this.beanFactory.getCompensableManager(); CompensableTransaction compensable = compensableManager.getCompensableTransactionQuietly(); if (compensable == null) { throw new IllegalStateException(); } TransactionContext transactionContext = compensable.getTransactionContext(); if (transactionContext.isCoordinator() == false) { throw new IllegalStateException(); } TransactionParticipant compensableCoordinator = this.beanFactory.getCompensableNativeParticipant(); TransactionContext compensableContext = compensable.getTransactionContext(); try { compensableCoordinator.end(compensableContext, XAResource.TMSUCCESS); } catch (XAException ex) { logger.error("Error occurred while suspending an compensable transaction!", ex); throw new SystemException(ex.getMessage()); } }
ExceptionSupplier<ImportResult<?>, SystemException> readTransaction(final DataInput input) throws IOException { final int type = input.readUnsignedByte(); if (type == 0) { return null; } else if (type == 1) { // remote user transaction final int id = input.readInt(); final int timeout = PackedInteger.readPackedInteger(input); return () -> new ImportResult<Transaction>(transactionServer.getOrBeginTransaction(id, timeout), SubordinateTransactionControl.EMPTY, false); } else if (type == 2) { final int fmt = PackedInteger.readPackedInteger(input); final byte[] gtid = new byte[input.readUnsignedByte()]; input.readFully(gtid); final byte[] bq = new byte[input.readUnsignedByte()]; input.readFully(bq); final int timeout = PackedInteger.readPackedInteger(input); return () -> { try { return transactionServer.getTransactionService().getTransactionContext().findOrImportTransaction(new SimpleXid(fmt, gtid, bq), timeout); } catch (XAException e) { throw new SystemException(e.getMessage()); } }; } else { throw Logs.REMOTING.invalidTransactionType(type); } }
} catch (XAException ex) { logger.error("Error occurred while beginning an compensable transaction!", ex); throw new SystemException(ex.getMessage());
/** * Converts a JMSException from the server to an XAException. if the * JMSException contained a linked XAException that is returned instead. * * @param e JMSException to convert * @return XAException wrapping original exception or its message */ private XAException toXAException(JMSException e) { if (e.getCause() != null && e.getCause() instanceof XAException) { XAException original = (XAException)e.getCause(); XAException xae = new XAException(original.getMessage()); xae.errorCode = original.errorCode; if (xae.errorCode == XA_OK) { // detail not unmarshalled see: org.apache.activemq.openwire.v1.BaseDataStreamMarshaller.createThrowable xae.errorCode = parseFromMessageOr(original.getMessage(), XAException.XAER_RMERR); } xae.initCause(original); return xae; } XAException xae = new XAException(e.getMessage()); xae.errorCode = XAException.XAER_RMFAIL; xae.initCause(e); return xae; }
} catch (XAException ex) { logger.error("Error occurred while beginning an compensable transaction!", ex); throw new SystemException(ex.getMessage());
return transactionServer.getTransactionService().getTransactionContext().findOrImportTransaction(((XidTransactionID) transactionId).getXid(), 0); } catch (XAException e) { throw new SystemException(e.getMessage());
public TransactionXid compensableBegin() throws NotSupportedException, SystemException { RemoteCoordinator compensableCoordinator = (RemoteCoordinator) this.beanFactory.getCompensableNativeParticipant(); CompensableManager tompensableManager = this.beanFactory.getCompensableManager(); XidFactory compensableXidFactory = this.beanFactory.getCompensableXidFactory(); CompensableTransactionImpl compensable = (CompensableTransactionImpl) tompensableManager .getCompensableTransactionQuietly(); if (compensable != null) { throw new NotSupportedException(); } TransactionXid compensableXid = compensableXidFactory.createGlobalXid(); TransactionContext compensableContext = new TransactionContext(); compensableContext.setCoordinator(true); compensableContext.setPropagated(true); compensableContext.setCompensable(true); compensableContext.setStatefully(this.statefully); compensableContext.setXid(compensableXid); compensableContext.setPropagatedBy(compensableCoordinator.getIdentifier()); compensable = new CompensableTransactionImpl(compensableContext); compensable.setBeanFactory(this.beanFactory); try { compensableCoordinator.start(compensableContext, XAResource.TMNOFLAGS); } catch (XAException ex) { logger.error("Error occurred while beginning an compensable transaction!", ex); throw new SystemException(ex.getMessage()); } return compensableXid; }
/** * {@inheritDoc} */ @Override public void rollback() throws ResourceException { try { resource.end(xid, XAResource.TMFAIL); resource.rollback(xid); } catch (XAException e) { throw new ResourceException(e.getMessage()); } }
/** * {@inheritDoc} */ @Override public void rollback() throws ResourceException { try { resource.end(xid, XAResource.TMFAIL); resource.rollback(xid); } catch (XAException e) { throw new ResourceException(e.getMessage()); } }
/** * {@inheritDoc} */ @Override public void commit() throws ResourceException { try { resource.end(xid, XAResource.TMSUCCESS); resource.commit(xid, true); } catch (XAException e) { throw new ResourceException(e.getMessage()); } }
/** * {@inheritDoc} */ @Override public void begin() throws ResourceException { try { this.xid = new XidImpl(intToByteArray(globalCounter.getAndIncrement())); resource.start(xid, XAResource.TMNOFLAGS); } catch (XAException e) { throw new ResourceException(e.getMessage()); } }
/** * @see org.apache.jackrabbit.webdav.jcr.transaction.TxLockManagerImpl.Transaction#rollback(TransactionResource) */ public void rollback(TransactionResource resource) throws DavException { XAResource xaRes = getXAResource(resource); try { xaRes.rollback(xid); removeLocalTxReferences(resource); } catch (XAException e) { throw new DavException(DavServletResponse.SC_FORBIDDEN, e.getMessage()); } }
/** * @see org.apache.jackrabbit.webdav.jcr.transaction.TxLockManagerImpl.Transaction#commit(TransactionResource) */ public void commit(TransactionResource resource) throws DavException { XAResource xaRes = getXAResource(resource); try { xaRes.commit(xid, false); removeLocalTxReferences(resource); } catch (XAException e) { throw new DavException(DavServletResponse.SC_FORBIDDEN, e.getMessage()); } }
/** * @see org.apache.jackrabbit.webdav.jcr.transaction.TxLockManagerImpl.Transaction#start(TransactionResource) */ public void start(TransactionResource resource) throws DavException { XAResource xaRes = getXAResource(resource); try { xaRes.setTransactionTimeout((int) getLock().getTimeout() / 1000); xaRes.start(xid, XAResource.TMNOFLAGS); } catch (XAException e) { throw new DavException(DavServletResponse.SC_FORBIDDEN, e.getMessage()); } }
@Override public void beforeDelivery(Method method) throws NoSuchMethodException, ResourceException { super.beforeDelivery(method); try { xaResource.start(xid, XAResource.TMNOFLAGS); } catch (XAException e) { throw new ResourceException(e.getMessage(), e); } }
@Override public void afterDelivery() throws ResourceException { try { xaResource.end(xid, XAResource.TMSUCCESS); } catch (XAException e) { throw new ResourceException(e.getMessage(), e); } super.afterDelivery(); }
public boolean enlistResource(XAResource xaResource) throws RollbackException, IllegalStateException, SystemException { enlistedResources.add(new WrappedXaResource(xaResource)); try { xaResource.start(xid, 0); } catch (XAException e) { log.error("Got an exception", e); throw new SystemException(e.getMessage()); } return true; }
private boolean runXaResourceCommitTx() throws HeuristicMixedException { Collection<XAResource> resources = getEnlistedResources(); for (XAResource res : resources) { try { res.commit(xid, false);//todo we only support one phase commit for now, change this!!! } catch (XAException e) { log.warn("exception while committing",e); throw new HeuristicMixedException(e.getMessage()); } } return true; }
private boolean runXaResourceCommitTx() throws HeuristicMixedException { Collection<XAResource> resources = getEnlistedResources(); for (XAResource res : resources) { try { res.commit(xid, false);//todo we only support one phase commit for now, change this!!! } catch (XAException e) { log.warn("exception while committing",e); throw new HeuristicMixedException(e.getMessage()); } } return true; }