use of com.arjuna.ats.txoj.Lock in project narayana by jbosstm.
the class AITCounterImpl01 method increase.
public void increase(Control ctrl) throws InvocationException {
try {
com.arjuna.ats.jts.ExplicitInterposition interposition = new com.arjuna.ats.jts.ExplicitInterposition();
interposition.registerTransaction(ctrl);
AtomicTransaction atomicTransaction = new AtomicTransaction();
try {
atomicTransaction.begin();
if (setlock(new Lock(LockMode.WRITE), 0) == LockResult.GRANTED) {
_value++;
atomicTransaction.commit(true);
} else {
atomicTransaction.rollback();
throw new InvocationException();
}
} catch (InvocationException invocationException) {
interposition.unregisterTransaction();
throw invocationException;
} catch (Exception exception) {
System.err.println("AITCounterImpl01.increase: " + exception);
if (atomicTransaction.get_status() == Status.StatusActive) {
atomicTransaction.rollback();
}
interposition.unregisterTransaction();
throw new InvocationException();
} catch (Error error) {
System.err.println("AITCounterImpl01.increase: " + error);
if (atomicTransaction.get_status() == Status.StatusActive) {
atomicTransaction.rollback();
}
interposition.unregisterTransaction();
throw new InvocationException();
}
interposition.unregisterTransaction();
} catch (InvocationException invocationException) {
throw invocationException;
} catch (Exception exception) {
System.err.println("AITCounterImpl01.increase: " + exception);
throw new InvocationException();
}
}
use of com.arjuna.ats.txoj.Lock in project narayana by jbosstm.
the class AITPingPongImpl01 method bad_hit.
public void bad_hit(int count, int bad_count, PingPong ponger, PingPong pinger, Control ctrl) throws InvocationException {
try {
com.arjuna.ats.jts.ExplicitInterposition interposition = new com.arjuna.ats.jts.ExplicitInterposition();
interposition.registerTransaction(ctrl);
AtomicTransaction atomicTransaction = new AtomicTransaction();
try {
atomicTransaction.begin();
if (count != 0) {
ponger.bad_hit(count - 1, bad_count - 1, pinger, ponger, OTS.current().get_control());
if (bad_count != 0) {
atomicTransaction.commit(true);
} else {
atomicTransaction.rollback();
}
} else if (setlock(new Lock(LockMode.WRITE), 0) == LockResult.GRANTED) {
_value++;
if (bad_count != 0) {
atomicTransaction.commit(true);
} else {
atomicTransaction.rollback();
}
} else {
System.err.println("AITPingPongImpl01.bad_hit: failed to get lock");
atomicTransaction.rollback();
throw new InvocationException();
}
} catch (InvocationException invocationException) {
interposition.unregisterTransaction();
throw invocationException;
} catch (Exception exception) {
System.err.println("AITPingPongImpl01.bad_hit: " + exception);
if (atomicTransaction.get_status() == Status.StatusActive) {
atomicTransaction.rollback();
}
interposition.unregisterTransaction();
throw new InvocationException();
} catch (Error error) {
System.err.println("AITPingPongImpl01.bad_hit: " + error);
if (atomicTransaction.get_status() == Status.StatusActive) {
atomicTransaction.rollback();
}
interposition.unregisterTransaction();
throw new InvocationException();
}
interposition.unregisterTransaction();
} catch (InvocationException invocationException) {
throw invocationException;
} catch (Exception exception) {
System.err.println("AITPingPongImpl01.bad_hit: " + exception);
throw new InvocationException();
} catch (Error error) {
System.err.println("AITPingPongImpl01.bad_hit: " + error);
throw new InvocationException();
}
}
use of com.arjuna.ats.txoj.Lock in project narayana by jbosstm.
the class LockFriend method getLink.
public static final Lock getLink(Lock inst) {
try {
Method m = Lock.class.getDeclaredMethod("getLink", (Class[]) null);
m.setAccessible(true);
Lock l = (Lock) m.invoke(inst, (Object[]) null);
m.setAccessible(false);
return l;
} catch (final Throwable ex) {
txojLogger.i18NLogger.warn_lmf1(ex);
return null;
}
}
use of com.arjuna.ats.txoj.Lock in project narayana by jbosstm.
the class RecoverableObject method set.
public boolean set(int value) {
AtomicAction A = new AtomicAction();
A.begin();
if (setlock(new Lock(LockMode.WRITE)) == LockResult.GRANTED) {
state = value;
if (A.commit() == ActionStatus.COMMITTED)
return true;
else
return false;
}
A.abort();
return false;
}
use of com.arjuna.ats.txoj.Lock in project narayana by jbosstm.
the class LockList method insert.
/*
* Insert a new Lock. This returns TRUE if the insertion occurred, false
* otherwise. Insertion fails if a matching lock already exists in the list.
*/
public final boolean insert(Lock newlock) {
LockListIterator next = new LockListIterator(this);
Lock current = null;
while ((current = next.iterate()) != null) {
if (current.equals(newlock)) {
return false;
}
}
push(newlock);
return true;
}
Aggregations