in src/org/apache/kandula/participant/at/ParticipantTransactionCoordinator.java [28:71]
public void prepare(AbstractContext context)
throws AbstractKandulaException {
CoordinatorPortTypeRawXMLStub stub;
ParticipantContext atContext = (ParticipantContext) context;
atContext.lock();
switch (context.getStatus()) {
case (Status.CoordinatorStatus.STATUS_NONE):
atContext.unlock();
stub = new CoordinatorPortTypeRawXMLStub(atContext
.getCoordinationEPR());
stub.abortedOperation();
break;
case (Status.CoordinatorStatus.STATUS_PREPARING):
case (Status.CoordinatorStatus.STATUS_PREPARED):
case (Status.CoordinatorStatus.STATUS_COMMITTING):
// Ignore the message
atContext.unlock();
break;
case (Status.CoordinatorStatus.STATUS_PREPARED_SUCCESS):
atContext.unlock();
stub = new CoordinatorPortTypeRawXMLStub(atContext
.getCoordinationEPR());
stub.preparedOperation();
break;
case (Status.CoordinatorStatus.STATUS_ACTIVE):
atContext.setStatus(Status.CoordinatorStatus.STATUS_PREPARING);
atContext.unlock();
KandulaAtomicResource resource = (KandulaAtomicResource)atContext.getResource();
Vote vote = resource.prepare();
stub = new CoordinatorPortTypeRawXMLStub(atContext
.getCoordinationEPR());
if (vote == Vote.ABORT) {
stub.abortedOperation();
} else if (vote == Vote.PREPARED) {
stub.preparedOperation();
} else if (vote == Vote.READ_ONLY) {
stub.readOnlyOperation();
}
break;
default:
context.unlock();
throw new InvalidStateException();
}
}