You are viewing a plain text version of this content. The canonical link for it is here.
Posted to kandula-dev@ws.apache.org by th...@apache.org on 2007/02/14 12:08:26 UTC

svn commit: r507487 [1/4] - in /webservices/kandula/trunk/java/src/org/apache/kandula: ./ ba/ context/ context/impl/ coordinator/ coordinator/at/ coordinator/ba/ initiator/ participant/ participant/at/ participant/ba/ storage/ utility/ wsat/twopc/ wsba...

Author: thilina
Date: Wed Feb 14 03:08:23 2007
New Revision: 507487

URL: http://svn.apache.org/viewvc?view=rev&rev=507487
Log:
Commiting the initial WS-BA implementation for Kandula2... 

Some contributions in this commit are from Bimalee, Thimali & Nisansala

Added:
    webservices/kandula/trunk/java/src/org/apache/kandula/ba/
    webservices/kandula/trunk/java/src/org/apache/kandula/ba/AtomicBusinessActivity.java
    webservices/kandula/trunk/java/src/org/apache/kandula/ba/BusinessActivity.java
    webservices/kandula/trunk/java/src/org/apache/kandula/ba/BusinessActivityCallBack.java
    webservices/kandula/trunk/java/src/org/apache/kandula/ba/MixedBusinessActivity.java
    webservices/kandula/trunk/java/src/org/apache/kandula/context/impl/BAActivityContext.java
    webservices/kandula/trunk/java/src/org/apache/kandula/context/impl/ParticipantContext.java
      - copied, changed from r501063, webservices/kandula/trunk/java/src/org/apache/kandula/context/impl/ATParticipantContext.java
    webservices/kandula/trunk/java/src/org/apache/kandula/coordinator/ba/BAParticipantInformation.java
    webservices/kandula/trunk/java/src/org/apache/kandula/participant/at/
    webservices/kandula/trunk/java/src/org/apache/kandula/participant/at/KandulaAtomicResource.java
    webservices/kandula/trunk/java/src/org/apache/kandula/participant/at/ParticipantTransactionCoordinator.java
      - copied, changed from r501063, webservices/kandula/trunk/java/src/org/apache/kandula/participant/ParticipantTransactionCoordinator.java
    webservices/kandula/trunk/java/src/org/apache/kandula/participant/at/Vote.java
      - copied, changed from r501063, webservices/kandula/trunk/java/src/org/apache/kandula/participant/Vote.java
    webservices/kandula/trunk/java/src/org/apache/kandula/participant/ba/
    webservices/kandula/trunk/java/src/org/apache/kandula/participant/ba/BAParticipantTransactionCoordinator.java
    webservices/kandula/trunk/java/src/org/apache/kandula/participant/ba/BAParticipantTransactionSentCoordinator.java
    webservices/kandula/trunk/java/src/org/apache/kandula/participant/ba/KandulaBusinessActivityResource.java
    webservices/kandula/trunk/java/src/org/apache/kandula/participant/ba/ParticipantOutFaultHandler.java
    webservices/kandula/trunk/java/src/org/apache/kandula/participant/ba/ParticipantOutHandler.java
    webservices/kandula/trunk/java/src/org/apache/kandula/wsba/
    webservices/kandula/trunk/java/src/org/apache/kandula/wsba/BACoordinatorCompletionCoordinatorServiceSkeleton.java
    webservices/kandula/trunk/java/src/org/apache/kandula/wsba/BACoordinatorCompletionParticipantServiceSkeleton.java
    webservices/kandula/trunk/java/src/org/apache/kandula/wsba/BAParticipantCompletionCoordinatorServiceSkeleton.java
    webservices/kandula/trunk/java/src/org/apache/kandula/wsba/BAParticipantCompletionParticipantServiceSkeleton.java
Removed:
    webservices/kandula/trunk/java/src/org/apache/kandula/context/impl/ATParticipantContext.java
    webservices/kandula/trunk/java/src/org/apache/kandula/participant/ParticipantTransactionCoordinator.java
    webservices/kandula/trunk/java/src/org/apache/kandula/participant/Vote.java
Modified:
    webservices/kandula/trunk/java/src/org/apache/kandula/Constants.java
    webservices/kandula/trunk/java/src/org/apache/kandula/Status.java
    webservices/kandula/trunk/java/src/org/apache/kandula/context/ContextFactory.java
    webservices/kandula/trunk/java/src/org/apache/kandula/context/CoordinationContext.java
    webservices/kandula/trunk/java/src/org/apache/kandula/context/impl/ADBCoordinationContext.java
    webservices/kandula/trunk/java/src/org/apache/kandula/context/impl/ATActivityContext.java
    webservices/kandula/trunk/java/src/org/apache/kandula/coordinator/Coordinator.java
    webservices/kandula/trunk/java/src/org/apache/kandula/coordinator/Registerable.java
    webservices/kandula/trunk/java/src/org/apache/kandula/coordinator/at/ATCoordinator.java
    webservices/kandula/trunk/java/src/org/apache/kandula/coordinator/at/ATSubCoordinator.java
    webservices/kandula/trunk/java/src/org/apache/kandula/coordinator/ba/BACoordinator.java
    webservices/kandula/trunk/java/src/org/apache/kandula/initiator/TransactionManager.java
    webservices/kandula/trunk/java/src/org/apache/kandula/initiator/TransactionOutHandler.java
    webservices/kandula/trunk/java/src/org/apache/kandula/participant/KandulaResource.java
    webservices/kandula/trunk/java/src/org/apache/kandula/participant/ParticipantUtility.java
    webservices/kandula/trunk/java/src/org/apache/kandula/participant/TransactionInHandler.java
    webservices/kandula/trunk/java/src/org/apache/kandula/storage/StorageUtils.java
    webservices/kandula/trunk/java/src/org/apache/kandula/utility/EndpointReferenceFactory.java
    webservices/kandula/trunk/java/src/org/apache/kandula/utility/KandulaConfiguration.java
    webservices/kandula/trunk/java/src/org/apache/kandula/wsat/twopc/CoordinatorPortTypeRawXMLSkeleton.java
    webservices/kandula/trunk/java/src/org/apache/kandula/wsat/twopc/ParticipantPortTypeRawXMLSkeleton.java
    webservices/kandula/trunk/java/src/org/apache/kandula/wscoor/ActivationServiceSkeleton.java
    webservices/kandula/trunk/java/src/org/apache/kandula/wscoor/RegistrationServiceSkeleton.java

Modified: webservices/kandula/trunk/java/src/org/apache/kandula/Constants.java
URL: http://svn.apache.org/viewvc/webservices/kandula/trunk/java/src/org/apache/kandula/Constants.java?view=diff&rev=507487&r1=507486&r2=507487
==============================================================================
--- webservices/kandula/trunk/java/src/org/apache/kandula/Constants.java (original)
+++ webservices/kandula/trunk/java/src/org/apache/kandula/Constants.java Wed Feb 14 03:08:23 2007
@@ -18,96 +18,106 @@
 
 import javax.xml.namespace.QName;
 
-public interface Constants {
+public class Constants {
 
 	// WS-Coordination URI's
 
-	static final String WS_COOR = "http://docs.oasis-open.org/ws-tx/wscoor/2006/06";
+	public static final String WS_COOR = "http://docs.oasis-open.org/ws-tx/wscoor/2006/06";
 
-	static final String WS_COOR_CREATE_COORDINATIONCONTEXT = WS_COOR+ "/CreateCoordinationContext";
+	public static final String WS_COOR_CREATE_COORDINATIONCONTEXT = WS_COOR+ "/CreateCoordinationContext";
 
-	static final String WS_COOR_CREATE_COORDINATIONCONTEXT_RESPONSE = WS_COOR+ "/CreateCoordinationContextResponse";
+	public static final String WS_COOR_CREATE_COORDINATIONCONTEXT_RESPONSE = WS_COOR+ "/CreateCoordinationContextResponse";
 
-	static final String WS_COOR_REGISTER = WS_COOR+ "/Register";
+	public static final String WS_COOR_REGISTER = WS_COOR+ "/Register";
 
-	static final String WS_COOR_REGISTER_RESPONSE = WS_COOR+ "/RegisterResponse";
+	public static final String WS_COOR_REGISTER_RESPONSE = WS_COOR+ "/RegisterResponse";
 
 	// WS-AT URI's
 
-	static final String WS_AT = "http://docs.oasis-open.org/ws-tx/wsat/2006/03";
+	public static final String WS_AT = "http://docs.oasis-open.org/ws-tx/wsat/2006/03";
 
-	static final String WS_AT_COMPLETION = WS_AT+ "/Completion";
+	public static final String WS_AT_COMPLETION = WS_AT+ "/Completion";
 
-	static final String WS_AT_COMMIT = WS_AT+ "/Commit";
+	public static final String WS_AT_COMMIT = WS_AT+ "/Commit";
 
-	static final String WS_AT_COMMITTED = WS_AT+ "/Committed";
+	public static final String WS_AT_COMMITTED = WS_AT+ "/Committed";
 
-	static final String WS_AT_ROLLBACK = WS_AT+ "/Rollback";
+	public static final String WS_AT_ROLLBACK = WS_AT+ "/Rollback";
 
-	static final String WS_AT_ABORTED = WS_AT+ "/Aborted";
+	public static final String WS_AT_ABORTED = WS_AT+ "/Aborted";
 
-	static final String WS_AT_DURABLE2PC = WS_AT+ "/Durable2PC";
+	public static final String WS_AT_DURABLE2PC = WS_AT+ "/Durable2PC";
 
-	static final String WS_AT_VOLATILE2PC = WS_AT+ "/Volatile2PC";
+	public static final String WS_AT_VOLATILE2PC = WS_AT+ "/Volatile2PC";
 
-	static final String WS_AT_PREPARE = WS_AT+ "/Prepare";
+	public static final String WS_AT_PREPARE = WS_AT+ "/Prepare";
 
-	static final String WS_AT_PREPARED = WS_AT+ "/Prepared";
+	public static final String WS_AT_PREPARED = WS_AT+ "/Prepared";
 
-	static final String WS_AT_REPLAY = WS_AT+ "/Replay";
+	public static final String WS_AT_REPLAY = WS_AT+ "/Replay";
 
-	static final String WS_AT_READONLY = WS_AT+ "/ReadOnly";
+	public static final String WS_AT_READONLY = WS_AT+ "/ReadOnly";
 
-	static final String SUB_VOLATILE_REGISTERED = "registered for volatile 2PC";
+	public static final String SUB_VOLATILE_REGISTERED = "registered for volatile 2PC";
 
-	static final String SUB_DURABLE_REGISTERED = "registered for durable 2PC";
+	public static final String SUB_DURABLE_REGISTERED = "registered for durable 2PC";
 
 	// WS-BA URI's
 
-	static final String WS_BA = "http://docs.oasis-open.org/ws-tx/wsba/2006/03";
+	public static final String WS_BA = "http://docs.oasis-open.org/ws-tx/wsba/2006/03";
 	
-	static final String WS_BA_ATOMIC = WS_BA+ "/AtomicOutcome";
+	public static final String WS_BA_ATOMIC = WS_BA+ "/AtomicOutcome";
 	
-	static final String WS_BA_MIXED = WS_BA+"/MixedOutcome";
+	public static final String WS_BA_MIXED = WS_BA+"/MixedOutcome";
 	
 	//bims
 	
-	static final String WS_BA_PC = WS_BA+ "/ParticipantCompletion";
+	public static final String WS_BA_PC = WS_BA+ "/ParticipantCompletion";
 
-	static final String WS_BA_CC = WS_BA+ "/CoordinatorCompletion";
+	public static final String WS_BA_CC = WS_BA+ "/CoordinatorCompletion";
 
 	// Kandula Specific
-	// Constants----------------------------------------------------------------------------------------------------
-	static String TRANSACTION_CONTEXT = "TransactionContext";
+	// Constants-------------------------------------------------------------
 	
-	static String KANDULA_URI = "http://ws.apache.org/kandula";
+	public static final  String KANDULA_URI = "http://ws.apache.org/kandula";
 
-	static String KANDULA_RESOURCE = "KandulaResource";
+	public static final  String KANDULA_RESOURCE = "KandulaResource";
 
-	static String KANDULA_PRE = "kand";
+	public static final  String KANDULA_PRE = "kand";
 
-	static String KANDULA_STORE = "KandulaStore";
+	public static final  String KANDULA_STORE = "KandulaStore";
 
 	// For the coordinator to identify seperate distributed
 	// activities(transactions)
 	// Common to all the parties participating in a single distributed tx.
-	static final QName TRANSACTION_ID_PARAMETER = new QName(KANDULA_URI,
+	public static final QName TRANSACTION_ID_PARAMETER = new QName(KANDULA_URI,
 			"TransactionID", KANDULA_PRE);
 
 	// Used by the Initiator Transaction Manager & participant TM to track the
 	// seperate transactions
-	static final QName REQUESTER_ID_PARAMETER = new QName(KANDULA_URI,
+	public static final QName REQUESTER_ID_PARAMETER = new QName(KANDULA_URI,
 			"RequesterID", KANDULA_PRE);
 
+
+	public static final QName PARTICIPANT_ID_PARAMETER = new QName(KANDULA_URI,
+			Configuration.PARTICIPANT_IDENTIFIER, KANDULA_PRE);
+	
 	// For the coordinator to identify each and every registered participant
 	// whithing a transaction
 	// This + Tx_ID will be unique for a participant
-	static final QName ENLISTMENT_ID_PARAMETER = new QName(KANDULA_URI,
+	public static final QName ENLISTMENT_ID_PARAMETER = new QName(KANDULA_URI,
 			"EnlistmentID", KANDULA_PRE);
 	//bims
 	//For the coordinator to identify seperate business
 	// activities
 	// Common to all the parties participating in a single distributed tx.
-	static final QName BA_ID_PARAMETER = new QName(KANDULA_URI,
+	public static final QName BA_ID_PARAMETER = new QName(KANDULA_URI,
 			"BusinessActivityID", KANDULA_PRE);
+	
+	public static interface Configuration {
+		
+		public static final String TRANSACTION_CONTEXT = "TransactionContext";
+
+		public static final  String PARTICIPANT_IDENTIFIER = "ParticipantID";
+	}
 }

Modified: webservices/kandula/trunk/java/src/org/apache/kandula/Status.java
URL: http://svn.apache.org/viewvc/webservices/kandula/trunk/java/src/org/apache/kandula/Status.java?view=diff&rev=507487&r1=507486&r2=507487
==============================================================================
--- webservices/kandula/trunk/java/src/org/apache/kandula/Status.java (original)
+++ webservices/kandula/trunk/java/src/org/apache/kandula/Status.java Wed Feb 14 03:08:23 2007
@@ -16,8 +16,8 @@
  */
 package org.apache.kandula;
 
-public abstract interface Status {
-	interface CoordinatorStatus {
+public class Status {
+	public static interface CoordinatorStatus {
 
 		static final int STATUS_ABORTING = 9;
 
@@ -42,7 +42,7 @@
 	}
 
 	// TODO remove the inner interfaces..
-	interface ParticipantStatus {
+	public static interface ParticipantStatus {
 
 		static final int STATUS_ABORTED = 22;
 
@@ -55,13 +55,13 @@
 		static final int STATUS_VOLATILE_PREPARING = 20;
 
 	}
-	interface BACoordinatorStatus {
+	public static interface BACoordinatorStatus {
 
 		static final int STATUS_CLOSING = 30;
 
 		static final int STATUS_COMPENSATING = 31;
 		
-		static final int STATUS_ACTIVE = 32;
+		static final int STATUS_ACTIVE = 0;
 		
 		static final int STATUS_CANCELLING = 33;
 		
@@ -81,18 +81,20 @@
 		
 		static final int STATUS_COMPLETING = 41;
 		
-		static final int STATUS_CANCELING_COMPLETING = 42;
+		static final int STATUS_CANCELLING_COMPLETING = 42;
 		
 		static final int STATUS_FAULTING_COMPLETED = 43;
+
+        static final int STATUS_FAULTING_COMPLETING = 44;
 	}
 	
-	interface BAParticipantStatus {
+	public static interface BAParticipantStatus {
 
-			static final int STATUS_CLOSING = 44;
+			static final int STATUS_CLOSING = 45;
 
-			static final int STATUS_COMPENSATING = 45;
+			static final int STATUS_COMPENSATING = 46;
 			
-			static final int STATUS_ACTIVE = 46;
+			static final int STATUS_ACTIVE = 0;
 			
 			static final int STATUS_CANCELLING = 47;
 			
@@ -100,7 +102,9 @@
 			
 			static final int STATUS_FAULTING_COMPENSATING = 49;
 			
-			static final int STATUS_FAULTING_ACTIVE_COMPLETED = 50;
+			static final int STATUS_FAULTING_ACTIVE = 150;
+			
+			static final int STATUS_FAULTING_COMPLETED = 151;
 			
 			static final int STATUS_EXITING = 51;
 			
@@ -111,5 +115,8 @@
 			static final int STATUS_COMPLETING = 55;
 			
 			static final int STATUS_FAULTING = 56;
+			
+			// Additional state to use within Kandula
+			static final int STATUS_WORK_DONE = 100;
 	}
 }

Added: webservices/kandula/trunk/java/src/org/apache/kandula/ba/AtomicBusinessActivity.java
URL: http://svn.apache.org/viewvc/webservices/kandula/trunk/java/src/org/apache/kandula/ba/AtomicBusinessActivity.java?view=auto&rev=507487
==============================================================================
--- webservices/kandula/trunk/java/src/org/apache/kandula/ba/AtomicBusinessActivity.java (added)
+++ webservices/kandula/trunk/java/src/org/apache/kandula/ba/AtomicBusinessActivity.java Wed Feb 14 03:08:23 2007
@@ -0,0 +1,29 @@
+package org.apache.kandula.ba;
+
+
+import org.apache.kandula.Constants;
+import org.apache.kandula.context.impl.BAActivityContext;
+import org.apache.kandula.coordinator.Coordinator;
+import org.apache.kandula.coordinator.ba.BACoordinator;
+import org.apache.kandula.faults.AbstractKandulaException;
+
+public class AtomicBusinessActivity extends BusinessActivity{
+	
+	public AtomicBusinessActivity(long expires ) throws AbstractKandulaException {
+		Coordinator coordinator = new Coordinator();
+		context = (BAActivityContext)coordinator.createCoordinationContext(Constants.WS_BA_ATOMIC,
+				expires);
+	}
+	
+	public void closeActivity() throws AbstractKandulaException
+	{
+		BACoordinator atomicBACoordinator = new BACoordinator();
+		atomicBACoordinator.closeAllOperation(context);
+	}
+	
+	public void compensateActivity() throws AbstractKandulaException
+	{
+		BACoordinator atomicBACoordinator = new BACoordinator();
+		atomicBACoordinator.compensateAllOperation(context);
+	}
+}

Added: webservices/kandula/trunk/java/src/org/apache/kandula/ba/BusinessActivity.java
URL: http://svn.apache.org/viewvc/webservices/kandula/trunk/java/src/org/apache/kandula/ba/BusinessActivity.java?view=auto&rev=507487
==============================================================================
--- webservices/kandula/trunk/java/src/org/apache/kandula/ba/BusinessActivity.java (added)
+++ webservices/kandula/trunk/java/src/org/apache/kandula/ba/BusinessActivity.java Wed Feb 14 03:08:23 2007
@@ -0,0 +1,79 @@
+package org.apache.kandula.ba;
+
+import java.util.Iterator;
+
+import org.apache.kandula.Status;
+import org.apache.kandula.context.impl.BAActivityContext;
+import org.apache.kandula.coordinator.ba.BACoordinator;
+import org.apache.kandula.coordinator.ba.BAParticipantInformation;
+import org.apache.kandula.faults.AbstractKandulaException;
+import org.apache.kandula.faults.KandulaGeneralException;
+
+public class BusinessActivity {
+
+	protected BAActivityContext context;
+
+	public void complete() throws AbstractKandulaException {
+		BACoordinator coordinator =  new BACoordinator();
+		coordinator.completeOperation(context);
+		while (context.getStatus()!=Status.BACoordinatorStatus.STATUS_ENDED){
+			try {
+				Thread.sleep(10);
+			} catch (InterruptedException e) {
+				throw new KandulaGeneralException(e);
+			}
+		}
+	}
+
+	public void cancelParticipant(String participantID) throws AbstractKandulaException {
+		BAParticipantInformation participantInformation;
+		participantInformation = context.getParticipant(participantID);
+		if (participantInformation==null)
+		{
+			//participant registration might be still on the wire.. So let's wait an retry..
+			try {
+				Thread.sleep(200);
+			} catch (InterruptedException e) {
+				throw new KandulaGeneralException(e);
+			}
+			participantInformation = context.getParticipant(participantID);
+			if (participantInformation==null)
+			{
+				throw new KandulaGeneralException("No registered participant found by the ID :"+participantID);
+			}	
+		}
+		BACoordinator coordinator =  new BACoordinator();
+		coordinator.cancelOperation(context,participantInformation);
+	}
+
+	public BAActivityContext getContext() {
+		return (BAActivityContext)context;
+	}
+
+	public BusinessActivityCallBack getCallBack() {
+		return context.getCallBack();
+	}
+
+	public void setCallBack(BusinessActivityCallBack callBack) {
+		callBack.setBusinessActivity(this);
+		this.context.setCallBack(callBack);
+	}
+
+	public int getStatus() {
+		return context.getStatus();
+	}
+
+	public Iterator getAllParticipants() {
+		return context.getAllParticipants();
+	}
+
+	public BAParticipantInformation getParticipant(String participantID) {
+		
+		return context.getParticipant(participantID);
+	}
+
+	public void addParticipantActivity(AtomicBusinessActivity businessActivity) {
+		//TODO
+	}
+
+}

Added: webservices/kandula/trunk/java/src/org/apache/kandula/ba/BusinessActivityCallBack.java
URL: http://svn.apache.org/viewvc/webservices/kandula/trunk/java/src/org/apache/kandula/ba/BusinessActivityCallBack.java?view=auto&rev=507487
==============================================================================
--- webservices/kandula/trunk/java/src/org/apache/kandula/ba/BusinessActivityCallBack.java (added)
+++ webservices/kandula/trunk/java/src/org/apache/kandula/ba/BusinessActivityCallBack.java Wed Feb 14 03:08:23 2007
@@ -0,0 +1,14 @@
+package org.apache.kandula.ba;
+
+import org.apache.kandula.context.impl.BAActivityContext;
+
+public abstract class BusinessActivityCallBack {
+	
+	protected BusinessActivity businessActivity;
+
+	public abstract void onComplete();
+	
+	protected void setBusinessActivity(BusinessActivity businessActivity){
+		this.businessActivity = businessActivity;
+	}
+}

Added: webservices/kandula/trunk/java/src/org/apache/kandula/ba/MixedBusinessActivity.java
URL: http://svn.apache.org/viewvc/webservices/kandula/trunk/java/src/org/apache/kandula/ba/MixedBusinessActivity.java?view=auto&rev=507487
==============================================================================
--- webservices/kandula/trunk/java/src/org/apache/kandula/ba/MixedBusinessActivity.java (added)
+++ webservices/kandula/trunk/java/src/org/apache/kandula/ba/MixedBusinessActivity.java Wed Feb 14 03:08:23 2007
@@ -0,0 +1,54 @@
+package org.apache.kandula.ba;
+
+import java.util.ArrayList;
+
+import org.apache.kandula.Constants;
+import org.apache.kandula.context.impl.BAActivityContext;
+import org.apache.kandula.coordinator.Coordinator;
+import org.apache.kandula.coordinator.ba.BACoordinator;
+import org.apache.kandula.coordinator.ba.BAParticipantInformation;
+import org.apache.kandula.faults.AbstractKandulaException;
+
+public class MixedBusinessActivity extends BusinessActivity {
+	
+	private ArrayList closeParticipantsList;
+	
+	private ArrayList compensateParticipantsList;
+
+	public MixedBusinessActivity(long expires ) throws AbstractKandulaException {
+		closeParticipantsList = new ArrayList();
+		compensateParticipantsList = new ArrayList();
+		Coordinator coordinator = new Coordinator();
+		context = (BAActivityContext)coordinator.createCoordinationContext(Constants.WS_BA_ATOMIC,
+				expires);
+	}
+	
+	public void addParticipantToCloseList(BAParticipantInformation participantInformation)
+	{
+		closeParticipantsList.add(participantInformation);
+	}
+	
+	public void addParticipantToCompensateList(BAParticipantInformation participantInformation)
+	{
+		if (participantInformation!=null)
+		compensateParticipantsList.add(participantInformation);
+	}
+	
+	public void addParticipantToCloseList(String participantID)
+	{
+		BAParticipantInformation participantInformation = context.getParticipant(participantID);
+		closeParticipantsList.add(participantInformation);
+	}
+	
+	public void addParticipantToCompensateList(String participantID)
+	{
+		BAParticipantInformation participantInformation = context.getParticipant(participantID);
+		compensateParticipantsList.add(participantInformation);
+	}
+	
+	public void finalizeActivity() throws AbstractKandulaException
+	{
+		BACoordinator coordinator =  new BACoordinator();
+		coordinator.finalizeMixedOutcomeActivity(context,closeParticipantsList,compensateParticipantsList);
+	}
+}

Modified: webservices/kandula/trunk/java/src/org/apache/kandula/context/ContextFactory.java
URL: http://svn.apache.org/viewvc/webservices/kandula/trunk/java/src/org/apache/kandula/context/ContextFactory.java?view=diff&rev=507487&r1=507486&r2=507487
==============================================================================
--- webservices/kandula/trunk/java/src/org/apache/kandula/context/ContextFactory.java (original)
+++ webservices/kandula/trunk/java/src/org/apache/kandula/context/ContextFactory.java Wed Feb 14 03:08:23 2007
@@ -16,7 +16,9 @@
  */
 package org.apache.kandula.context;
 
+import org.apache.kandula.Constants;
 import org.apache.kandula.context.impl.ATActivityContext;
+import org.apache.kandula.context.impl.BAActivityContext;
 import org.apache.kandula.faults.InvalidProtocolException;
 
 public class ContextFactory {
@@ -31,10 +33,10 @@
 		if (org.apache.kandula.Constants.WS_AT.equalsIgnoreCase(context
 				.getCoordinationType())) {
 			return new ATActivityContext(context);
-//		}else if(org.apache.kandula.Constants.WS_BA_ATOMIC.equalsIgnoreCase(context
-//				.getCoordinationType()))
-//		{
-//			return new BAActivityContext(context);
+		}else if(org.apache.kandula.Constants.WS_BA_ATOMIC.equalsIgnoreCase(context
+				.getCoordinationType()))
+		{
+			return new BAActivityContext(context);
 		} else {
 			throw new InvalidProtocolException("Unsupported Protocol Type");
 		}
@@ -44,10 +46,10 @@
 			throws InvalidProtocolException {
 		if (org.apache.kandula.Constants.WS_AT.equalsIgnoreCase(protocol)) {
 			return new ATActivityContext();
-//		}else if (org.apache.kandula.Constants.WS_BA_ATOMIC.equalsIgnoreCase(protocol)) {
-//			return new BAActivityContext(Constants.WS_BA_ATOMIC);
-//		}else if (org.apache.kandula.Constants.WS_BA_MIXED.equalsIgnoreCase(protocol)) {
-//			return new BAActivityContext(Constants.WS_BA_MIXED);
+		}else if (org.apache.kandula.Constants.WS_BA_ATOMIC.equalsIgnoreCase(protocol)) {
+			return new BAActivityContext(Constants.WS_BA_ATOMIC);
+		}else if (org.apache.kandula.Constants.WS_BA_MIXED.equalsIgnoreCase(protocol)) {
+			return new BAActivityContext(Constants.WS_BA_MIXED);
 		} 
 		else {
 			throw new InvalidProtocolException("Unsupported Protocol Type");

Modified: webservices/kandula/trunk/java/src/org/apache/kandula/context/CoordinationContext.java
URL: http://svn.apache.org/viewvc/webservices/kandula/trunk/java/src/org/apache/kandula/context/CoordinationContext.java?view=diff&rev=507487&r1=507486&r2=507487
==============================================================================
--- webservices/kandula/trunk/java/src/org/apache/kandula/context/CoordinationContext.java (original)
+++ webservices/kandula/trunk/java/src/org/apache/kandula/context/CoordinationContext.java Wed Feb 14 03:08:23 2007
@@ -38,10 +38,6 @@
 			return new ADBCoordinationContext(context_type3);
 		}
 
-		// public static CoordinationContext newInstance(Object contextType) {
-		// return new XmlBeansTypeCoordinationContext(contextType);
-		// }
-
 		private Factory() {
 		} // No instance of this class allowed
 	}

Modified: webservices/kandula/trunk/java/src/org/apache/kandula/context/impl/ADBCoordinationContext.java
URL: http://svn.apache.org/viewvc/webservices/kandula/trunk/java/src/org/apache/kandula/context/impl/ADBCoordinationContext.java?view=diff&rev=507487&r1=507486&r2=507487
==============================================================================
--- webservices/kandula/trunk/java/src/org/apache/kandula/context/impl/ADBCoordinationContext.java (original)
+++ webservices/kandula/trunk/java/src/org/apache/kandula/context/impl/ADBCoordinationContext.java Wed Feb 14 03:08:23 2007
@@ -41,7 +41,7 @@
 		return element.getText();
 	}
 	public Object getCoordinationContextType() {
-		return this;
+		return context_type3;
 	}
 	public String getCoordinationType() {
 		return context_type3.getCoordinationType().getPath();

Modified: webservices/kandula/trunk/java/src/org/apache/kandula/context/impl/ATActivityContext.java
URL: http://svn.apache.org/viewvc/webservices/kandula/trunk/java/src/org/apache/kandula/context/impl/ATActivityContext.java?view=diff&rev=507487&r1=507486&r2=507487
==============================================================================
--- webservices/kandula/trunk/java/src/org/apache/kandula/context/impl/ATActivityContext.java (original)
+++ webservices/kandula/trunk/java/src/org/apache/kandula/context/impl/ATActivityContext.java Wed Feb 14 03:08:23 2007
@@ -87,9 +87,10 @@
 	 * @throws AbstractKandulaException
 	 */
 	public EndpointReference addParticipant(EndpointReference participantEPR,
-			String protocol) throws AbstractKandulaException {
-		String enlistmentID = EndpointReferenceFactory
-				.getRandomStringOf18Characters();
+			String protocol,String enlistmentID) throws AbstractKandulaException {
+		 if (enlistmentID == null) {
+			enlistmentID = EndpointReferenceFactory.getRandomStringOf18Characters();
+		}
 		if (Constants.WS_AT_VOLATILE2PC.equals(protocol)) {
 			addVolatileParticipant(participantEPR, enlistmentID);
 			return EndpointReferenceFactory.getInstance()

Added: webservices/kandula/trunk/java/src/org/apache/kandula/context/impl/BAActivityContext.java
URL: http://svn.apache.org/viewvc/webservices/kandula/trunk/java/src/org/apache/kandula/context/impl/BAActivityContext.java?view=auto&rev=507487
==============================================================================
--- webservices/kandula/trunk/java/src/org/apache/kandula/context/impl/BAActivityContext.java (added)
+++ webservices/kandula/trunk/java/src/org/apache/kandula/context/impl/BAActivityContext.java Wed Feb 14 03:08:23 2007
@@ -0,0 +1,174 @@
+ package org.apache.kandula.context.impl;
+
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.LinkedList;
+
+import org.apache.axis2.addressing.EndpointReference;
+import org.apache.kandula.Constants;
+import org.apache.kandula.Status;
+import org.apache.kandula.ba.BusinessActivityCallBack;
+import org.apache.kandula.context.AbstractContext;
+import org.apache.kandula.context.CoordinationContext;
+import org.apache.kandula.coordinator.ba.BAParticipantInformation;
+import org.apache.kandula.faults.AbstractKandulaException;
+import org.apache.kandula.faults.AlreadyRegisteredException;
+import org.apache.kandula.faults.InvalidProtocolException;
+import org.apache.kandula.utility.EndpointReferenceFactory;
+
+public class BAActivityContext extends AbstractContext {
+
+	private String coordinationType;
+	private Hashtable participantCompletionParticipantsTable;
+	private Hashtable coordinatorCompletionParticipantsTable;
+	private int completingParticipantCount = 0;
+	private BusinessActivityCallBack callBack;
+
+	public BAActivityContext() {
+		}
+	
+	public BAActivityContext(String coorType) {
+		super(coorType);
+		this.coordinationType = coorType;
+		this.setStatus(Status.CoordinatorStatus.STATUS_ACTIVE);
+		participantCompletionParticipantsTable = new Hashtable();
+		coordinatorCompletionParticipantsTable = new Hashtable();
+	}
+	
+	public BAActivityContext(CoordinationContext context) {
+		this.setStatus(Status.CoordinatorStatus.STATUS_ACTIVE);
+		// TODO do we need the following
+		participantCompletionParticipantsTable = new Hashtable();
+		coordinatorCompletionParticipantsTable = new Hashtable();
+		setCoordinationContext(context);
+	}
+	
+	/**
+	 * @param participantEPR
+	 * @param protocol
+	 * @return Coordinator protocol service.
+	 * @throws AbstractKandulaException
+	 */
+	public EndpointReference addParticipant(EndpointReference participantEPR, String protocol,
+			String enlistmentID) throws AbstractKandulaException {
+		if (enlistmentID == null) {
+			enlistmentID = EndpointReferenceFactory.getRandomStringOf18Characters();
+		}
+		if (Constants.WS_BA_CC.equals(protocol)) {
+			addCoordinatorCompletionParticipants(participantEPR, enlistmentID);
+			if (this.coordinationType.equals(Constants.WS_BA_ATOMIC)) {
+				return EndpointReferenceFactory.getInstance().getAtomicOutcomeCCCoordinatorEndpoint(
+						activityID, enlistmentID);
+			} else if (this.coordinationType.equals(Constants.WS_BA_MIXED)) {
+				return EndpointReferenceFactory.getInstance().getMixedOutcomeCCCoordinatorEndpoint(
+						activityID, enlistmentID);
+			}
+		} else if (Constants.WS_BA_PC.equals(protocol)) {
+			addParticipantCompletionParticipants(participantEPR, enlistmentID);
+			incrementCompletingParticipantCount();
+			if (this.coordinationType.equals(Constants.WS_BA_ATOMIC)) {
+				return EndpointReferenceFactory.getInstance().getAtomicOutcomePCCoordinatorEndpoint(
+						activityID, enlistmentID);
+			} else if (this.coordinationType.equals(Constants.WS_BA_MIXED)) {
+				return EndpointReferenceFactory.getInstance().getMixedOutcomePCCoordinatorEndpoint(
+						activityID, enlistmentID);
+			}
+		} else {
+			throw new InvalidProtocolException();
+		}
+		return null;
+	}
+
+	public void removeParticipant(String enlistmentID) {
+		// TODO: what to do if the participant is not found
+		if (participantCompletionParticipantsTable.containsKey(enlistmentID)) {
+			participantCompletionParticipantsTable.remove(enlistmentID);
+		} else if (coordinatorCompletionParticipantsTable.containsKey(enlistmentID)) {
+			coordinatorCompletionParticipantsTable.remove(enlistmentID);
+		}
+	}
+
+	protected void addParticipantCompletionParticipants(EndpointReference participantEPR,
+			String enlistmentID) throws AlreadyRegisteredException {
+		if (participantCompletionParticipantsTable.contains(participantEPR)) {
+			throw new AlreadyRegisteredException();
+		}
+		BAParticipantInformation participant = new BAParticipantInformation(
+				participantEPR, Constants.WS_BA_PC, enlistmentID);
+		participantCompletionParticipantsTable.put(enlistmentID, participant);
+	}
+
+	protected void addCoordinatorCompletionParticipants(EndpointReference participantEPR,
+			String enlistmentID) throws AbstractKandulaException {
+		if (coordinatorCompletionParticipantsTable.contains(participantEPR))
+			throw new AlreadyRegisteredException();
+		BAParticipantInformation participant = new BAParticipantInformation(
+				participantEPR, Constants.WS_BA_CC, enlistmentID);
+		coordinatorCompletionParticipantsTable.put(enlistmentID, participant);
+	}
+
+	public int getcoordinatorCompletionParticipantsCount() {
+		return coordinatorCompletionParticipantsTable.size();
+	}
+
+	public int getparticipantCompletionParticipantCount() {
+		return participantCompletionParticipantsTable.size();
+	}
+
+	public Iterator getAllParticipants() {
+		LinkedList list = new LinkedList(participantCompletionParticipantsTable.values());
+		list.addAll(coordinatorCompletionParticipantsTable.values());
+		return list.iterator();
+	}
+
+	
+	public BAParticipantInformation getParticipant(String enlistmentId) {
+		if (participantCompletionParticipantsTable.containsKey(enlistmentId)) {
+			return (BAParticipantInformation) participantCompletionParticipantsTable
+					.get(enlistmentId);
+		} else if (coordinatorCompletionParticipantsTable.containsKey(enlistmentId)) {
+			return (BAParticipantInformation) coordinatorCompletionParticipantsTable
+					.get(enlistmentId);
+		} else {
+			return null;
+		}
+	}
+	public String getCoordinationType() {
+		return this.coordinationType;
+	}
+	public String getRegistrationProtocol() {
+		return null;
+	}
+	
+	public Hashtable getCoordinatorCompletionParticipants(){
+		return coordinatorCompletionParticipantsTable;
+	}
+
+	public Hashtable getparticipantCompletionParticipants() {
+		return participantCompletionParticipantsTable;
+	}
+	
+	public synchronized void incrementCompletingParticipantCount() {
+		completingParticipantCount++;
+	}
+
+	public synchronized void incrementCompletingParticipantCount(int number) {
+		completingParticipantCount+=number;
+	}
+	
+	public synchronized void decrementCompletingParticipantCount() {
+		completingParticipantCount--;
+	}
+	
+	public synchronized boolean hasMoreCompleting() {
+		return (completingParticipantCount > 0);
+	}
+
+	public BusinessActivityCallBack getCallBack() {
+		return callBack;
+	}
+
+	public void setCallBack(BusinessActivityCallBack callBack) {
+		this.callBack = callBack;
+	}
+}

Copied: webservices/kandula/trunk/java/src/org/apache/kandula/context/impl/ParticipantContext.java (from r501063, webservices/kandula/trunk/java/src/org/apache/kandula/context/impl/ATParticipantContext.java)
URL: http://svn.apache.org/viewvc/webservices/kandula/trunk/java/src/org/apache/kandula/context/impl/ParticipantContext.java?view=diff&rev=507487&p1=webservices/kandula/trunk/java/src/org/apache/kandula/context/impl/ATParticipantContext.java&r1=501063&p2=webservices/kandula/trunk/java/src/org/apache/kandula/context/impl/ParticipantContext.java&r2=507487
==============================================================================
--- webservices/kandula/trunk/java/src/org/apache/kandula/context/impl/ATParticipantContext.java (original)
+++ webservices/kandula/trunk/java/src/org/apache/kandula/context/impl/ParticipantContext.java Wed Feb 14 03:08:23 2007
@@ -20,15 +20,18 @@
 import org.apache.kandula.Constants;
 import org.apache.kandula.Status;
 import org.apache.kandula.context.AbstractContext;
+import org.apache.kandula.faults.KandulaGeneralException;
 import org.apache.kandula.participant.KandulaResource;
+import org.apache.kandula.participant.at.KandulaAtomicResource;
+import org.apache.kandula.participant.ba.KandulaBusinessActivityResource;
 import org.apache.kandula.utility.EndpointReferenceFactory;
 
-public class ATParticipantContext extends AbstractContext {
+public class ParticipantContext extends AbstractContext {
 	KandulaResource resource;
 	String ID;
 	EndpointReference coordinationEPR;
 
-	public ATParticipantContext() {
+	public ParticipantContext() {
 		this.setStatus(Status.CoordinatorStatus.STATUS_ACTIVE);
 		ID = EndpointReferenceFactory.getRandomStringOf18Characters();
 	}
@@ -60,9 +63,17 @@
 	/**
 	 * @param setting
 	 *            the transaction participant resource
+	 * @throws KandulaGeneralException 
 	 */
-	public void setResource(KandulaResource resource) {
-		this.resource = resource;
+	public void setResource(KandulaResource resource) throws KandulaGeneralException {
+		if (((this.getCoordinationContext().getCoordinationType().equals(Constants.WS_AT)) & (resource instanceof KandulaAtomicResource)) |((this.getCoordinationContext().getCoordinationType().equals(Constants.WS_BA_ATOMIC)) & (resource instanceof KandulaBusinessActivityResource)) )
+		{
+			resource.init(this);
+			this.resource = resource;
+		}else
+		{
+			throw new KandulaGeneralException("Invalid Resource");
+		}
 	}
 
 	public String getRegistrationProtocol() {
@@ -76,5 +87,4 @@
 	public void setID(String id) {
 		ID = id;
 	}
-
 }

Modified: webservices/kandula/trunk/java/src/org/apache/kandula/coordinator/Coordinator.java
URL: http://svn.apache.org/viewvc/webservices/kandula/trunk/java/src/org/apache/kandula/coordinator/Coordinator.java?view=diff&rev=507487&r1=507486&r2=507487
==============================================================================
--- webservices/kandula/trunk/java/src/org/apache/kandula/coordinator/Coordinator.java (original)
+++ webservices/kandula/trunk/java/src/org/apache/kandula/coordinator/Coordinator.java Wed Feb 14 03:08:23 2007
@@ -21,9 +21,12 @@
 import org.apache.kandula.context.ContextFactory;
 import org.apache.kandula.context.CoordinationContext;
 import org.apache.kandula.faults.AbstractKandulaException;
+import org.apache.kandula.storage.SimpleStore;
+import org.apache.kandula.storage.Store;
 
 public class Coordinator {
 
+	public static Store store= new SimpleStore();
 	public Coordinator() {
 		
 	}
@@ -41,6 +44,7 @@
 			CoordinationContext coorContext) throws AbstractKandulaException {
 		ContextFactory factory = ContextFactory.getInstance();
 		AbstractContext context = factory.createActivity(coorContext);
+		store.put(context.getCoordinationContext().getActivityID(),context);
 		return context;
 	}
 
@@ -59,6 +63,7 @@
 		ContextFactory factory = ContextFactory.getInstance();
 		AbstractContext context = factory.createActivity(coordinationType);
 		context.getCoordinationContext().setExpires(expires);
+		store.put(context.getCoordinationContext().getActivityID(),context);
 		return context;
 	}
 
@@ -74,10 +79,10 @@
 	 * @throws AbstractKandulaException
 	 */
 	public EndpointReference registerParticipant(AbstractContext context, String protocol,
-			EndpointReference participantEPR) throws AbstractKandulaException {
+			EndpointReference participantEPR, String participantID) throws AbstractKandulaException {
 		Registerable registerableCoordinator = Registerable.Factory
 				.newRegisterable(context.getCoordinationType());
 		return registerableCoordinator.register(context, protocol,
-				participantEPR);
+				participantEPR,participantID);
 	}
 }

Modified: webservices/kandula/trunk/java/src/org/apache/kandula/coordinator/Registerable.java
URL: http://svn.apache.org/viewvc/webservices/kandula/trunk/java/src/org/apache/kandula/coordinator/Registerable.java?view=diff&rev=507487&r1=507486&r2=507487
==============================================================================
--- webservices/kandula/trunk/java/src/org/apache/kandula/coordinator/Registerable.java (original)
+++ webservices/kandula/trunk/java/src/org/apache/kandula/coordinator/Registerable.java Wed Feb 14 03:08:23 2007
@@ -44,5 +44,5 @@
 	}
 
 	public EndpointReference register(AbstractContext context, String protocol,
-			EndpointReference participantEPR) throws AbstractKandulaException;
+			EndpointReference participantEPR, String enlistmentID) throws AbstractKandulaException;
 }

Modified: webservices/kandula/trunk/java/src/org/apache/kandula/coordinator/at/ATCoordinator.java
URL: http://svn.apache.org/viewvc/webservices/kandula/trunk/java/src/org/apache/kandula/coordinator/at/ATCoordinator.java?view=diff&rev=507487&r1=507486&r2=507487
==============================================================================
--- webservices/kandula/trunk/java/src/org/apache/kandula/coordinator/at/ATCoordinator.java (original)
+++ webservices/kandula/trunk/java/src/org/apache/kandula/coordinator/at/ATCoordinator.java Wed Feb 14 03:08:23 2007
@@ -29,7 +29,7 @@
 import org.apache.kandula.faults.AbstractKandulaException;
 import org.apache.kandula.faults.InvalidStateException;
 import org.apache.kandula.faults.KandulaGeneralException;
-import org.apache.kandula.participant.Vote;
+import org.apache.kandula.participant.at.Vote;
 import org.apache.kandula.wsat.completion.CompletionInitiatorPortTypeRawXMLStub;
 import org.apache.kandula.wsat.twopc.ParticipantPortTypeRawXMLStub;
 
@@ -45,7 +45,7 @@
 	 *      java.lang.String, org.apache.axis2.addressing.EndpointReference)
 	 */
 	public EndpointReference register(AbstractContext context, String protocol,
-			EndpointReference participantEPR) throws AbstractKandulaException {
+			EndpointReference participantEPR,String enlistmentID) throws AbstractKandulaException {
 		ATActivityContext atContext = (ATActivityContext) context;
 		atContext.lock();
 		switch (atContext.getStatus()) {
@@ -72,7 +72,7 @@
 		case CoordinatorStatus.STATUS_ACTIVE:
 		case CoordinatorStatus.STATUS_PREPARING_VOLATILE:
 			EndpointReference epr = atContext.addParticipant(participantEPR,
-					protocol);
+					protocol,enlistmentID);
 			atContext.unlock();
 			return epr;
 		case CoordinatorStatus.STATUS_NONE:

Modified: webservices/kandula/trunk/java/src/org/apache/kandula/coordinator/at/ATSubCoordinator.java
URL: http://svn.apache.org/viewvc/webservices/kandula/trunk/java/src/org/apache/kandula/coordinator/at/ATSubCoordinator.java?view=diff&rev=507487&r1=507486&r2=507487
==============================================================================
--- webservices/kandula/trunk/java/src/org/apache/kandula/coordinator/at/ATSubCoordinator.java (original)
+++ webservices/kandula/trunk/java/src/org/apache/kandula/coordinator/at/ATSubCoordinator.java Wed Feb 14 03:08:23 2007
@@ -34,7 +34,7 @@
 				// have to register with the parent coordinator
 				atContext.setSubDurableRegistered(true);
 			}
-			return atContext.addParticipant(participantEPR, protocol);
+			return atContext.addParticipant(participantEPR, protocol,null);
 		}
 
 		else if (protocol.equals(Constants.WS_AT_VOLATILE2PC)) {
@@ -42,7 +42,8 @@
 				// have to register with the parent coordinator
 				atContext.setSubDurableRegistered(true);
 			}
-			return atContext.addParticipant(participantEPR, protocol);
+			//FIXME null
+			return atContext.addParticipant(participantEPR, protocol,null);
 		} else
 			throw new InvalidProtocolException();
 	}



---------------------------------------------------------------------
To unsubscribe, e-mail: kandula-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: kandula-dev-help@ws.apache.org