use of javax.transaction.SystemException in project jersey by jersey.
the class TransactionManager method manage.
public static void manage(UserTransaction utx, Transactional t) {
try {
utx.begin();
if (t.joinTransaction) {
t.em.joinTransaction();
}
t.transact();
utx.commit();
} catch (Exception e) {
try {
utx.rollback();
} catch (SystemException se) {
throw new WebApplicationException(se);
}
throw new WebApplicationException(e);
}
}
use of javax.transaction.SystemException in project neo4j-mobile-android by neo4j-contrib.
the class IndexConnectionBroker method delistResourcesForTransaction.
void delistResourcesForTransaction() throws NotInTransactionException {
Transaction tx = this.getCurrentTransaction();
if (tx == null) {
throw new NotInTransactionException();
}
T con = txConnectionMap.get(tx);
if (con != null) {
try {
tx.delistResource(con.getXaResource(), XAResource.TMSUCCESS);
} catch (IllegalStateException e) {
throw new RuntimeException("Unable to delist lucene resource from tx", e);
} catch (SystemException e) {
throw new RuntimeException("Unable to delist lucene resource from tx", e);
}
}
}
use of javax.transaction.SystemException in project graphdb by neo4j-attic.
the class TransactionImpl method doCommit.
void doCommit() throws XAException, SystemException {
boolean onePhase = isOnePhase();
boolean readOnly = true;
if (!onePhase) {
// prepare
status = Status.STATUS_PREPARING;
LinkedList<Xid> preparedXids = new LinkedList<Xid>();
Iterator<ResourceElement> itr = resourceList.iterator();
while (itr.hasNext()) {
ResourceElement re = itr.next();
if (!preparedXids.contains(re.getXid())) {
preparedXids.add(re.getXid());
int vote = re.getResource().prepare(re.getXid());
if (vote == XAResource.XA_OK) {
readOnly = false;
} else if (vote == XAResource.XA_RDONLY) {
re.setStatus(RS_READONLY);
} else {
// rollback tx
status = Status.STATUS_MARKED_ROLLBACK;
return;
}
} else {
// set it to readonly, only need to commit once
re.setStatus(RS_READONLY);
}
}
status = Status.STATUS_PREPARED;
}
// commit
if (!onePhase && readOnly) {
status = Status.STATUS_COMMITTED;
return;
}
if (!onePhase) {
try {
txManager.getTxLog().markAsCommitting(getGlobalId());
} catch (IOException e) {
e.printStackTrace();
log.severe("Error writing transaction log");
txManager.setTmNotOk();
throw new SystemException("TM encountered a problem, " + " error writing transaction log," + e);
}
}
status = Status.STATUS_COMMITTING;
Iterator<ResourceElement> itr = resourceList.iterator();
while (itr.hasNext()) {
ResourceElement re = itr.next();
if (re.getStatus() != RS_READONLY) {
re.getResource().commit(re.getXid(), onePhase);
}
}
status = Status.STATUS_COMMITTED;
}
use of javax.transaction.SystemException in project graphdb by neo4j-attic.
the class TransactionImpl method enlistResource.
public synchronized boolean enlistResource(XAResource xaRes) throws RollbackException, IllegalStateException, SystemException {
if (xaRes == null) {
throw new IllegalArgumentException("Null xa resource");
}
if (status == Status.STATUS_ACTIVE || status == Status.STATUS_PREPARING) {
try {
if (resourceList.size() == 0) {
if (!globalStartRecordWritten) {
txManager.writeStartRecord(globalId);
globalStartRecordWritten = true;
}
//
byte[] branchId = txManager.getBranchId(xaRes);
Xid xid = new XidImpl(globalId, branchId);
resourceList.add(new ResourceElement(xid, xaRes));
xaRes.start(xid, XAResource.TMNOFLAGS);
try {
txManager.getTxLog().addBranch(globalId, branchId);
} catch (IOException e) {
e.printStackTrace();
log.severe("Error writing transaction log");
txManager.setTmNotOk();
throw new SystemException("TM encountered a problem, " + " error writing transaction log," + e);
}
return true;
}
Xid sameRmXid = null;
Iterator<ResourceElement> itr = resourceList.iterator();
while (itr.hasNext()) {
ResourceElement re = itr.next();
if (sameRmXid == null && re.getResource().isSameRM(xaRes)) {
sameRmXid = re.getXid();
}
if (xaRes == re.getResource()) {
if (re.getStatus() == RS_SUSPENDED) {
xaRes.start(re.getXid(), XAResource.TMRESUME);
} else {
// either enlisted or delisted
// is TMJOIN correct then?
xaRes.start(re.getXid(), XAResource.TMJOIN);
}
re.setStatus(RS_ENLISTED);
return true;
}
}
if (// should we join?
sameRmXid != null) {
resourceList.add(new ResourceElement(sameRmXid, xaRes));
xaRes.start(sameRmXid, XAResource.TMJOIN);
} else // new branch
{
// ResourceElement re = resourceList.getFirst();
byte[] branchId = txManager.getBranchId(xaRes);
Xid xid = new XidImpl(globalId, branchId);
resourceList.add(new ResourceElement(xid, xaRes));
xaRes.start(xid, XAResource.TMNOFLAGS);
try {
txManager.getTxLog().addBranch(globalId, branchId);
} catch (IOException e) {
e.printStackTrace();
log.severe("Error writing transaction log");
txManager.setTmNotOk();
throw new SystemException("TM encountered a problem, " + " error writing transaction log," + e);
}
}
return true;
} catch (XAException e) {
e.printStackTrace();
log.severe("Unable to enlist resource[" + xaRes + "]");
status = Status.STATUS_MARKED_ROLLBACK;
return false;
}
} else if (status == Status.STATUS_ROLLING_BACK || status == Status.STATUS_ROLLEDBACK || status == Status.STATUS_MARKED_ROLLBACK) {
throw new RollbackException("Tx status is: " + txManager.getTxStatusAsString(status));
}
throw new IllegalStateException("Tx status is: " + txManager.getTxStatusAsString(status));
}
use of javax.transaction.SystemException in project graphdb by neo4j-attic.
the class TxManager method rollbackCommit.
private void rollbackCommit(Thread thread, TransactionImpl tx) throws HeuristicMixedException, RollbackException, SystemException {
try {
tx.doRollback();
} catch (XAException e) {
e.printStackTrace();
log.severe("Unable to rollback marked transaction. " + "Some resources may be commited others not. " + "Neo4j kernel should be SHUTDOWN for " + "resource maintance and transaction recovery ---->");
setTmNotOk();
throw new HeuristicMixedException("Unable to rollback " + " ---> error code for rollback: " + e.errorCode);
}
tx.doAfterCompletion();
txThreadMap.remove(thread);
try {
if (tx.isGlobalStartRecordWritten()) {
getTxLog().txDone(tx.getGlobalId());
}
} catch (IOException e) {
e.printStackTrace();
log.severe("Error writing transaction log");
setTmNotOk();
throw new SystemException("TM encountered a problem, " + " error writing transaction log," + e);
}
tx.setStatus(Status.STATUS_NO_TRANSACTION);
throw new RollbackException("Failed to commit, transaction rolledback");
}
Aggregations