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 da...@apache.org on 2007/06/18 22:07:56 UTC
svn commit: r548468 -
/webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/coordinator/CoordinatorImpl.java
Author: dasarath
Date: Mon Jun 18 13:07:55 2007
New Revision: 548468
URL: http://svn.apache.org/viewvc?view=rev&rev=548468
Log:
Hannes Erven, Georg Hicker
Modified:
webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/coordinator/CoordinatorImpl.java
Modified: webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/coordinator/CoordinatorImpl.java
URL: http://svn.apache.org/viewvc/webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/coordinator/CoordinatorImpl.java?view=diff&rev=548468&r1=548467&r2=548468
==============================================================================
--- webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/coordinator/CoordinatorImpl.java (original)
+++ webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/coordinator/CoordinatorImpl.java Mon Jun 18 13:07:55 2007
@@ -7,11 +7,13 @@
import java.net.MalformedURLException;
import java.rmi.RemoteException;
+import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;
import org.apache.axis.AxisFault;
import org.apache.axis.components.uuid.UUIDGen;
import org.apache.axis.components.uuid.UUIDGenFactory;
+import org.apache.axis.message.MessageElement;
import org.apache.axis.message.addressing.EndpointReference;
import org.apache.axis.types.URI.MalformedURIException;
import org.apache.kandula.utils.SoapFaultSender;
@@ -19,51 +21,107 @@
import org.apache.kandula.wscoor.RegisterType;
/**
- * @author Dasarath Weeratunge
+ * An abstract implementation of the Coordinator interface.
+ *
+ * @author Dasarath Weeratunge, Hannes Erven, Georg Hicker
*
*/
public abstract class CoordinatorImpl extends Coordinator {
- private String id;
-
+ /**
+ *
+ * This header element is set to a value the initiator chose for the
+ * participant before forwarding the registration service endpoint.
+ */
+ public final static QName INITIATOR_MATCHCODE = new QName(
+ "http://ws.apache.org/kandula/ws-ba--extension", "matchcode"
+ );
+
+ /**
+ * T
+ */
private CoordinationContext ctx;
protected CoordinatorImpl(String coordinationType)
- throws MalformedURIException {
+ throws MalformedURIException
+ {
UUIDGen gen = UUIDGenFactory.getUUIDGen();
- id = "uuid:" + gen.nextUUID();
+ final String id = "uuid:" + gen.nextUUID();
+
CoordinationService cs = CoordinationService.getInstance();
- EndpointReference epr = cs.getRegistrationCoordinatorService(this);
- ctx = new CoordinationContext(id, coordinationType, epr);
+ EndpointReference epr = cs.getRegistrationCoordinatorService(this, id);
+
+ this.ctx = new CoordinationContext(id, coordinationType, epr);
}
public String getID() {
+ final String id = this.ctx.getIdentifier().get_value().toString();
return id;
}
public CoordinationContext getCoordinationContext() {
- return ctx;
+ return this.ctx;
}
- public abstract EndpointReference register(String prot,
- EndpointReference pps) throws InvalidCoordinationProtocolException;
+ /**
+ * Welcome a new participant in a transaction context.
+ * @param prot The protocol the participant wishes to register for
+ * @param pps The participant's protocol service endpoint
+ * @param referenceCode The reference code the initiator provided to the participant
+ * @return The coordinator's endpoint reference for this participant
+ * @throws InvalidCoordinationProtocolException
+ */
+ public abstract EndpointReference register(
+ final String prot,
+ final EndpointReference pps,
+ final String referenceCode
+ ) throws InvalidCoordinationProtocolException;
+
+
+ /**
+ * Add a participant matchcode to the default registration service.
+ * ATTENTION: at this point there are no checks!
+ * @param participantMATCHCODE The matchcode
+ * @return The service.
+ */
+ protected CoordinationContext getCoordinationContext(final String participantMATCHCODE) {
+ final CoordinationContext ctx = this.getCoordinationContext();
+
+ // Duplicate the coordination context!
+ final CoordinationContext r =
+ new CoordinationContext(
+ ctx.getIdentifier(),
+ ctx.getCoordinationType(),
+ new EndpointReference(ctx.getRegistrationService())
+ );
+
+ final MessageElement participantIDMessageElement =
+ new MessageElement(INITIATOR_MATCHCODE, participantMATCHCODE);
+ r.getRegistrationService().getProperties().add(participantIDMessageElement);
+
+ return r;
+ }
public synchronized RegisterResponseType registerOperation(
RegisterType params) throws RemoteException {
EndpointReference epr = null;
try {
- epr = register(params.getProtocolIdentifier().toString(),
- new EndpointReference(params.getParticipantProtocolService()));
-
+ epr = register(
+ params.getProtocolIdentifier().toString(),
+ new EndpointReference(params.getParticipantProtocolService()),
+ CallbackRegistry.getRef(INITIATOR_MATCHCODE)
+ );
} catch (InvalidCoordinationProtocolException e) {
throw INVALID_PROTOCOL_SOAP_FAULT();
} catch (IllegalStateException e) {
throw INVALID_STATE_SOAP_FAULT();
+
} catch (IllegalArgumentException e) {
throw INVALID_PARAMETERS_SOAP_FAULT();
+
}
RegisterResponseType r = new RegisterResponseType();
@@ -85,4 +143,4 @@
}
}
-}
\ No newline at end of file
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: kandula-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: kandula-dev-help@ws.apache.org