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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to