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 2006/01/07 06:35:29 UTC

svn commit: r366674 - in /webservices/kandula/branches/Kandula_1/src/java/org/apache/ws/transaction/coordinator: Callback.java CallbackRegistry.java FaultDispatcher.java InvalidCoordinationProtocolException.java ParticipantService.java

Author: dasarath
Date: Fri Jan  6 21:35:27 2006
New Revision: 366674

URL: http://svn.apache.org/viewcvs?rev=366674&view=rev
Log: (empty)

Added:
    webservices/kandula/branches/Kandula_1/src/java/org/apache/ws/transaction/coordinator/Callback.java
    webservices/kandula/branches/Kandula_1/src/java/org/apache/ws/transaction/coordinator/CallbackRegistry.java
    webservices/kandula/branches/Kandula_1/src/java/org/apache/ws/transaction/coordinator/FaultDispatcher.java
    webservices/kandula/branches/Kandula_1/src/java/org/apache/ws/transaction/coordinator/InvalidCoordinationProtocolException.java
Removed:
    webservices/kandula/branches/Kandula_1/src/java/org/apache/ws/transaction/coordinator/ParticipantService.java

Added: webservices/kandula/branches/Kandula_1/src/java/org/apache/ws/transaction/coordinator/Callback.java
URL: http://svn.apache.org/viewcvs/webservices/kandula/branches/Kandula_1/src/java/org/apache/ws/transaction/coordinator/Callback.java?rev=366674&view=auto
==============================================================================
--- webservices/kandula/branches/Kandula_1/src/java/org/apache/ws/transaction/coordinator/Callback.java (added)
+++ webservices/kandula/branches/Kandula_1/src/java/org/apache/ws/transaction/coordinator/Callback.java Fri Jan  6 21:35:27 2006
@@ -0,0 +1,28 @@
+/*
+ * Created on Dec 30, 2005
+ *
+ */
+package org.apache.ws.transaction.coordinator;
+
+import javax.xml.soap.Name;
+
+import org.apache.axis.message.addressing.EndpointReference;
+
+
+
+
+/**
+ * @author Dasarath Weeratunge
+ *  
+ */
+public interface Callback {
+	
+	String getID();
+	
+	void onFault(Name code);
+
+	void timeout() throws TimedOutException;
+	
+	EndpointReference getEndpointReference();
+
+}
\ No newline at end of file

Added: webservices/kandula/branches/Kandula_1/src/java/org/apache/ws/transaction/coordinator/CallbackRegistry.java
URL: http://svn.apache.org/viewcvs/webservices/kandula/branches/Kandula_1/src/java/org/apache/ws/transaction/coordinator/CallbackRegistry.java?rev=366674&view=auto
==============================================================================
--- webservices/kandula/branches/Kandula_1/src/java/org/apache/ws/transaction/coordinator/CallbackRegistry.java (added)
+++ webservices/kandula/branches/Kandula_1/src/java/org/apache/ws/transaction/coordinator/CallbackRegistry.java Fri Jan  6 21:35:27 2006
@@ -0,0 +1,103 @@
+/*
+ * Created on Dec 24, 2005
+ *
+ */
+package org.apache.ws.transaction.coordinator;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import java.util.Timer;
+import java.util.TimerTask;
+
+import javax.xml.namespace.QName;
+
+import org.apache.axis.MessageContext;
+import org.apache.axis.message.addressing.AddressingHeaders;
+import org.apache.axis.message.addressing.Constants;
+
+/**
+ * @author Dasarath Weeratunge
+ *  
+ */
+public class CallbackRegistry {
+
+	public static final QName CALLBACK_REF = new QName(
+			"http://ws.apache.org/kandula", "CallbackRef");
+
+	// FIXME:
+	public static final int DEFAULT_TIMEOUT_MILLIS = 90 * 1000;
+
+	private static Timer timer = new Timer();
+
+	private static final CallbackRegistry instance = new CallbackRegistry();
+
+	private Map callbacks = new HashMap();
+
+	protected CallbackRegistry() {
+	}
+
+	public static CallbackRegistry getInstance() {
+		return instance;
+	}
+
+	public synchronized void registerCallback(Callback callback) {
+		callbacks.put(callback.getID(), callback);
+	}
+
+	public synchronized void registerCallback(final Callback callback,
+			long timeout) {
+		callbacks.put(callback.getID(), callback);
+
+		if (timeout == 0)
+			timeout = DEFAULT_TIMEOUT_MILLIS;
+
+		System.out.println("[CallbackRegistry] registerCallback: timeout= "
+				+ timeout);
+
+		timer.schedule(new TimerTask() {
+			public void run() {
+				callbacks.remove(callback);
+				try {
+					callback.timeout();
+				} catch (TimedOutException e) {
+					e.printStackTrace();
+				}
+			}
+		}, timeout);
+	}
+
+	public synchronized Callback correlateMessage(QName q, boolean terminal) {
+		String s = getRef(q);
+		if (s == null)
+			return null;
+		else
+			return (Callback) callbacks.get(s);
+	}
+
+	private AddressingHeaders getAddressingHeaders() {
+		return (AddressingHeaders) MessageContext.getCurrentContext().getProperty(
+			Constants.ENV_ADDRESSING_REQUEST_HEADERS);
+	}
+
+	private String getRef(QName q) {
+		AddressingHeaders headers = getAddressingHeaders();
+		try {
+			return headers.getReferenceProperties().get(q).getValue();
+		} catch (NullPointerException e) {
+			return null;
+		}
+	}
+
+	public synchronized void remove(Object callback) {
+		Set s = new HashSet(callbacks.keySet());
+		Iterator iter = s.iterator();
+		while (iter.hasNext()) {
+			Object key = iter.next();
+			if (callbacks.get(key) == callback)
+				callbacks.remove(key);
+		}
+	}
+}
\ No newline at end of file

Added: webservices/kandula/branches/Kandula_1/src/java/org/apache/ws/transaction/coordinator/FaultDispatcher.java
URL: http://svn.apache.org/viewcvs/webservices/kandula/branches/Kandula_1/src/java/org/apache/ws/transaction/coordinator/FaultDispatcher.java?rev=366674&view=auto
==============================================================================
--- webservices/kandula/branches/Kandula_1/src/java/org/apache/ws/transaction/coordinator/FaultDispatcher.java (added)
+++ webservices/kandula/branches/Kandula_1/src/java/org/apache/ws/transaction/coordinator/FaultDispatcher.java Fri Jan  6 21:35:27 2006
@@ -0,0 +1,32 @@
+/*
+ * Created on Jan 6, 2006
+ *
+ */
+package org.apache.ws.transaction.coordinator;
+
+import javax.xml.soap.SOAPBody;
+import javax.xml.soap.SOAPEnvelope;
+import javax.xml.soap.SOAPFault;
+
+import org.apache.axis.MessageContext;
+
+/**
+ * @author Dasarath Weeratunge
+ *  
+ */
+public class FaultDispatcher {
+
+	public void process(SOAPEnvelope req, SOAPEnvelope resp)
+			throws javax.xml.soap.SOAPException {
+		SOAPBody body = req.getBody();
+		SOAPFault fault = body.getFault();
+
+		Callback callback = (Callback) CallbackRegistry.getInstance().correlateMessage(
+			CallbackRegistry.CALLBACK_REF, false);
+		if (callback != null)
+			callback.onFault(fault.getFaultCodeAsName());
+
+		MessageContext.getCurrentContext().setResponseMessage(null);
+	}
+
+}
\ No newline at end of file

Added: webservices/kandula/branches/Kandula_1/src/java/org/apache/ws/transaction/coordinator/InvalidCoordinationProtocolException.java
URL: http://svn.apache.org/viewcvs/webservices/kandula/branches/Kandula_1/src/java/org/apache/ws/transaction/coordinator/InvalidCoordinationProtocolException.java?rev=366674&view=auto
==============================================================================
--- webservices/kandula/branches/Kandula_1/src/java/org/apache/ws/transaction/coordinator/InvalidCoordinationProtocolException.java (added)
+++ webservices/kandula/branches/Kandula_1/src/java/org/apache/ws/transaction/coordinator/InvalidCoordinationProtocolException.java Fri Jan  6 21:35:27 2006
@@ -0,0 +1,13 @@
+/*
+ * Created on Jan 6, 2006
+ *
+ */
+package org.apache.ws.transaction.coordinator;
+
+/**
+ * @author Dasarath Weeratunge
+ *
+ */
+public class InvalidCoordinationProtocolException extends Exception {
+
+}



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