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