blob: 9330d2f274497ad52f11732edb9a7e0620927ac3 [file] [log] [blame]
package org.apache.kandula.participant.ba;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.kandula.Constants;
import org.apache.kandula.Status;
import org.apache.kandula.context.AbstractContext;
import org.apache.kandula.context.impl.ParticipantContext;
import org.apache.kandula.faults.AbstractKandulaException;
import org.apache.kandula.faults.InvalidStateException;
import org.apache.kandula.storage.StorageUtils;
import org.apache.kandula.wsba.BACoordinatorCompletionParticipantServiceStub;
import org.apache.kandula.wsba.BAParticipantCompletionCoordinatorServiceStub;
public class BAParticipantTransactionCoordinator {
private static final Log log = LogFactory.getLog(BAParticipantTransactionCoordinator.class);
public void complete(ParticipantContext context) throws AbstractKandulaException {
BAParticipantTransactionSentCoordinator sentCoordinator;
switch (context.getStatus()) {
case (Status.BAParticipantStatus.STATUS_ACTIVE):
KandulaBusinessActivityResource resource = (KandulaBusinessActivityResource) context
.getResource();
context.setStatus(Status.BAParticipantStatus.STATUS_COMPLETING);
resource.complete();
sentCoordinator = new BAParticipantTransactionSentCoordinator();
sentCoordinator.completed(context);
break;
case (Status.BAParticipantStatus.STATUS_COMPLETED):
sentCoordinator = new BAParticipantTransactionSentCoordinator();
sentCoordinator.completed(context);
break;
case (Status.BAParticipantStatus.STATUS_WORK_DONE):
context.setStatus(Status.BAParticipantStatus.STATUS_COMPLETING);
sentCoordinator = new BAParticipantTransactionSentCoordinator();
sentCoordinator.completed(context);
break;
case (Status.BAParticipantStatus.STATUS_CANCELLING):
case (Status.BAParticipantStatus.STATUS_COMPLETING):
case (Status.BAParticipantStatus.STATUS_CLOSING):
case (Status.BAParticipantStatus.STATUS_COMPENSATING):
case (Status.BAParticipantStatus.STATUS_FAULTING_COMPENSATING):
case (Status.BAParticipantStatus.STATUS_ENDED):
break;
case (Status.BAParticipantStatus.STATUS_FAULTING_ACTIVE):
case (Status.BAParticipantStatus.STATUS_FAULTING_COMPLETED):
// TODO resend fault
// try{
// CCPStub = new BACoordinatorCompletionParticipantServiceStub();
// Failed failed= new Failed();
// CCPStub.FailedOperation(failed);
// context.setStatus(Status.BAParticipantStatus.STATUS_FAULTING_ACTIVE_COMPLETED);
// }catch(Exception e){
//
// }
break;
case (Status.BAParticipantStatus.STATUS_EXITING):
sentCoordinator = new BAParticipantTransactionSentCoordinator();
sentCoordinator.exit(context);
break;
}
}
public void close(ParticipantContext context) throws AbstractKandulaException {
switch (context.getStatus()) {
case (Status.BAParticipantStatus.STATUS_ACTIVE):
case (Status.BAParticipantStatus.STATUS_CANCELLING):
case (Status.BAParticipantStatus.STATUS_COMPLETING):
case (Status.BAParticipantStatus.STATUS_COMPENSATING):
case (Status.BAParticipantStatus.STATUS_FAULTING_ACTIVE):
case (Status.BAParticipantStatus.STATUS_FAULTING_COMPLETED):
case (Status.BAParticipantStatus.STATUS_FAULTING_COMPENSATING):
case (Status.BAParticipantStatus.STATUS_EXITING):
log.fatal("WS_BA : " + context.getCoordinationContext().getActivityID()
+ " : completeOperation :" + context.getID() + " : " + " Coordinator is in"
+ context.getStatus() + " (invalid) state");
throw new InvalidStateException();
case (Status.BAParticipantStatus.STATUS_COMPLETED):
KandulaBusinessActivityResource resource = (KandulaBusinessActivityResource) context
.getResource();
context.setStatus(Status.BAParticipantStatus.STATUS_CLOSING);
resource.close();
BAParticipantTransactionSentCoordinator sentCoordinator = new BAParticipantTransactionSentCoordinator();
sentCoordinator.closed(context);
break;
case (Status.BAParticipantStatus.STATUS_ENDED):
BAParticipantTransactionSentCoordinator sentCoordinator1 = new BAParticipantTransactionSentCoordinator();
sentCoordinator1.closed(context);
break;
case (Status.BAParticipantStatus.STATUS_CLOSING):
break;
}
}
public void cancel(ParticipantContext context) throws AbstractKandulaException {
BAParticipantTransactionSentCoordinator coordinator;
switch (context.getStatus()) {
case (Status.BAParticipantStatus.STATUS_CANCELLING):
case (Status.BAParticipantStatus.STATUS_CLOSING):
case (Status.BAParticipantStatus.STATUS_COMPENSATING):
case (Status.BAParticipantStatus.STATUS_FAULTING_COMPENSATING):
break;
case (Status.BAParticipantStatus.STATUS_ACTIVE):
case (Status.BAParticipantStatus.STATUS_COMPLETING):
case (Status.BAParticipantStatus.STATUS_WORK_DONE):
KandulaBusinessActivityResource resource = (KandulaBusinessActivityResource) context
.getResource();
context.setStatus(Status.BAParticipantStatus.STATUS_CANCELLING);
resource.cancel();
BAParticipantTransactionSentCoordinator sentCoordinator = new BAParticipantTransactionSentCoordinator();
sentCoordinator.canceled(context);
break;
case (Status.BAParticipantStatus.STATUS_COMPLETED):
coordinator = new BAParticipantTransactionSentCoordinator();
coordinator.completed(context);
break;
case (Status.BAParticipantStatus.STATUS_FAULTING_ACTIVE):
case (Status.BAParticipantStatus.STATUS_FAULTING_COMPLETED):
// resend fault
break;
case (Status.BAParticipantStatus.STATUS_EXITING):
coordinator = new BAParticipantTransactionSentCoordinator();
coordinator.exit(context);
break;
case (Status.BAParticipantStatus.STATUS_ENDED):
coordinator = new BAParticipantTransactionSentCoordinator();
coordinator.canceled(context);
break;
}
}
public void exited(ParticipantContext context) throws AbstractKandulaException {
BACoordinatorCompletionParticipantServiceStub CCPStub;
switch (context.getStatus()) {
case (Status.BAParticipantStatus.STATUS_ACTIVE):
case (Status.BAParticipantStatus.STATUS_CANCELLING):
case (Status.BAParticipantStatus.STATUS_COMPLETING):
case (Status.BAParticipantStatus.STATUS_COMPLETED):
case (Status.BAParticipantStatus.STATUS_CLOSING):
case (Status.BAParticipantStatus.STATUS_COMPENSATING):
case (Status.BAParticipantStatus.STATUS_FAULTING_ACTIVE):
case (Status.BAParticipantStatus.STATUS_FAULTING_COMPLETED):
case (Status.BAParticipantStatus.STATUS_FAULTING_COMPENSATING):
log.fatal("WS_BA : " + context.getCoordinationContext().getActivityID() + " : exited :"
+ context.getID() + " : " + " Coordinator is in" + context.getStatus()
+ " (invalid) state");
throw new InvalidStateException();
case (Status.BAParticipantStatus.STATUS_EXITING):
case (Status.BAParticipantStatus.STATUS_ENDED):
context.setStatus(Status.BAParticipantStatus.STATUS_ENDED);
StorageUtils.forgetContext(context.getID());
break;
}
}
public void compensate(ParticipantContext context) throws AbstractKandulaException {
BAParticipantTransactionSentCoordinator sentCoordinator;
switch (context.getStatus()) {
case (Status.BAParticipantStatus.STATUS_ACTIVE):
case (Status.BAParticipantStatus.STATUS_CANCELLING):
case (Status.BAParticipantStatus.STATUS_COMPLETING):
case (Status.BAParticipantStatus.STATUS_CLOSING):
case (Status.BAParticipantStatus.STATUS_FAULTING_ACTIVE):
case (Status.BAParticipantStatus.STATUS_FAULTING_COMPLETED):
case (Status.BAParticipantStatus.STATUS_EXITING):
throw new InvalidStateException();
case (Status.BAParticipantStatus.STATUS_COMPLETED):
KandulaBusinessActivityResource resource = (KandulaBusinessActivityResource) context
.getResource();
context.setStatus(Status.BAParticipantStatus.STATUS_COMPENSATING);
resource.compensate();
sentCoordinator = new BAParticipantTransactionSentCoordinator();
sentCoordinator.compensated(context);
case (Status.BAParticipantStatus.STATUS_COMPENSATING):
break;
case (Status.BAParticipantStatus.STATUS_FAULTING_COMPENSATING):
//resend fault
break;
case (Status.BAParticipantStatus.STATUS_ENDED):
sentCoordinator = new BAParticipantTransactionSentCoordinator();
sentCoordinator.compensated(context);
break;
}
}
public void Faulted(ParticipantContext context) throws AbstractKandulaException {
BACoordinatorCompletionParticipantServiceStub CCPStub;
switch (context.getStatus()) {
case (Status.BAParticipantStatus.STATUS_ACTIVE):
case (Status.BAParticipantStatus.STATUS_CANCELLING):
case (Status.BAParticipantStatus.STATUS_COMPLETING):
case (Status.BAParticipantStatus.STATUS_COMPLETED):
case (Status.BAParticipantStatus.STATUS_CLOSING):
case (Status.BAParticipantStatus.STATUS_COMPENSATING):
case (Status.BAParticipantStatus.STATUS_EXITING):
log.fatal("WS_BA : " + context.getCoordinationContext().getActivityID()
+ " : Faulted :" + context.getID() + " : " + " Coordinator is in"
+ context.getStatus() + " (invalid) state");
throw new InvalidStateException();
case (Status.BAParticipantStatus.STATUS_FAULTING_ACTIVE):
case (Status.BAParticipantStatus.STATUS_FAULTING_COMPLETED):
case (Status.BAParticipantStatus.STATUS_FAULTING_COMPENSATING):
context.setStatus(Status.BAParticipantStatus.STATUS_ENDED);
StorageUtils.forgetContext(context.getID());
break;
case (Status.BAParticipantStatus.STATUS_ENDED):
break;
}
}
}