Ading time out capability for trasactions in the coordinator.
Fixing a bug in the register response message.

Improving Interop Tests.
diff --git a/src/org/apache/kandula/coordinator/at/ATCoordinator.java b/src/org/apache/kandula/coordinator/at/ATCoordinator.java
index 6393ba8..8ebec31 100644
--- a/src/org/apache/kandula/coordinator/at/ATCoordinator.java
+++ b/src/org/apache/kandula/coordinator/at/ATCoordinator.java
@@ -334,7 +334,7 @@
 	 * @param context
 	 * @throws Exception
 	 */
-	private void abortActivity(AbstractContext context)
+	public void abortActivity(AbstractContext context)
 			throws AbstractKandulaException {
 		ParticipantPortTypeRawXMLStub stub = new ParticipantPortTypeRawXMLStub();
 		ATActivityContext atContext = (ATActivityContext) context;
@@ -350,7 +350,6 @@
 		CompletionInitiatorPortTypeRawXMLStub completionStub = new CompletionInitiatorPortTypeRawXMLStub(
 				atContext.getCompletionParticipant());
 		completionStub.abortedOperation();
-
 	}
 
 	/**
@@ -414,7 +413,7 @@
 				}
 			}
 		}
-		
+
 		try {
 			Method method = ATCoordinator.class.getMethod("durablePrepare",
 					new Class[] { AbstractContext.class });
@@ -466,4 +465,28 @@
 			}
 		}
 	}
+
+	public void timeout(AbstractContext context){
+		ATActivityContext atContext = (ATActivityContext) context;
+		atContext.lock();
+		switch (atContext.getStatus()) {
+
+		case CoordinatorStatus.STATUS_ABORTING:
+		case CoordinatorStatus.STATUS_COMMITTING:
+		case CoordinatorStatus.STATUS_PREPARED_SUCCESS:
+			atContext.unlock();
+			break;
+		case CoordinatorStatus.STATUS_ACTIVE:
+		case CoordinatorStatus.STATUS_PREPARING_VOLATILE:
+		case CoordinatorStatus.STATUS_PREPARING_DURABLE:
+			try {
+					abortActivity(context);
+				} catch (AbstractKandulaException e) {
+					e.printStackTrace();
+				}
+			break;
+		default:
+			atContext.unlock();
+		}
+	}
 }
diff --git a/src/org/apache/kandula/storage/SimpleStore.java b/src/org/apache/kandula/storage/SimpleStore.java
index eab06ca..a82337e 100644
--- a/src/org/apache/kandula/storage/SimpleStore.java
+++ b/src/org/apache/kandula/storage/SimpleStore.java
@@ -17,12 +17,17 @@
 package org.apache.kandula.storage;
 
 import java.util.HashMap;
+import java.util.Timer;
+import java.util.TimerTask;
+
+import org.apache.kandula.context.impl.ATActivityContext;
+import org.apache.kandula.coordinator.at.ATCoordinator;
 
 /**
  * @author <a href="mailto:thilina@opensource.lk"> Thilina Gunarathne </a>
  */
 public class SimpleStore implements Store {
-
+	Timer timer = new Timer();
 	private HashMap contextMap;
 
 	/*
@@ -38,6 +43,17 @@
 	public void put(Object id, Object context) {
 		contextMap.put(id, context);
 	}
+	
+	public void put(final Object id, final ATActivityContext context,long expires) {
+		contextMap.put(id, context);
+		timer.schedule(new TimerTask() {
+			public void run() {
+				forget(id);
+				ATCoordinator coordinator = new ATCoordinator();
+				coordinator.timeout(context);
+			}
+		}, expires);
+	}
 
 	/*
 	 * (non-Javadoc)
diff --git a/src/org/apache/kandula/utility/EndpointReferenceFactory.java b/src/org/apache/kandula/utility/EndpointReferenceFactory.java
index 07e857b..e4c5423 100644
--- a/src/org/apache/kandula/utility/EndpointReferenceFactory.java
+++ b/src/org/apache/kandula/utility/EndpointReferenceFactory.java
@@ -228,4 +228,4 @@
 			}

 		}

 	}

-}
\ No newline at end of file
+}

diff --git a/src/org/apache/kandula/wscoor/RegistrationCoordinatorPortTypeRawXMLStub.java b/src/org/apache/kandula/wscoor/RegistrationCoordinatorPortTypeRawXMLStub.java
index 489d18d..c26116b 100644
--- a/src/org/apache/kandula/wscoor/RegistrationCoordinatorPortTypeRawXMLStub.java
+++ b/src/org/apache/kandula/wscoor/RegistrationCoordinatorPortTypeRawXMLStub.java
@@ -138,7 +138,7 @@
 							"CoordinatorProtocolService"));
 			if (serviceElement != null) {
 				EndpointReference coordinatorService = EndpointReferenceFactory
-						.endpointFromOM(serviceElement.getFirstElement());
+						.endpointFromOM(serviceElement);
 				// try to avoid following
 				InitiatorTransaction initiatorTransaction;
 				initiatorTransaction = (InitiatorTransaction) StorageFactory
diff --git a/src/org/apache/kandula/wscoor/RegistrationPortTypeRawXMLSkeleton.java b/src/org/apache/kandula/wscoor/RegistrationPortTypeRawXMLSkeleton.java
index 7e1bae3..93d3310 100644
--- a/src/org/apache/kandula/wscoor/RegistrationPortTypeRawXMLSkeleton.java
+++ b/src/org/apache/kandula/wscoor/RegistrationPortTypeRawXMLSkeleton.java
@@ -93,13 +93,10 @@
 		SOAPFactory factory = OMAbstractFactory.getSOAP12Factory();
 		OMNamespace wsCoor = factory.createOMNamespace(
 				org.apache.kandula.Constants.WS_COOR, "wscoor");
-		OMElement protocolService = factory.createOMElement(
-				"CoordinatorProtocolService", wsCoor);
 		OMElement coordinatorProtocolService = factory.createOMElement(
 				"CoordinatorProtocolService", wsCoor);
 		EndpointReferenceFactory.endpointToOM(epr, coordinatorProtocolService,
 				factory);
-		protocolService.addChild(coordinatorProtocolService);
-		return protocolService;
+		return coordinatorProtocolService;
 	}
 }
\ No newline at end of file
diff --git a/test/interop/InteropTest.java b/test/interop/InteropTest.java
index 129e05a..903c1d7 100644
--- a/test/interop/InteropTest.java
+++ b/test/interop/InteropTest.java
@@ -29,7 +29,7 @@
 public class InteropTest extends TestCase {

 

 	EndpointReference coordinator = new EndpointReference(

-			"http://localhost:8085/axis2/services/ActivationCoordinator");

+			"http://127.0.0.1:8086/axis2/services/ActivationCoordinator");

 

 	String axis2Repo = "target/initiator-repository";

 

@@ -37,8 +37,9 @@
 

 	TestServiceStub stub = new TestServiceStub("target/initiator-repository",

 			new EndpointReference(

-					"http://localhost:8085/axis2/services/TestService"));

-

+					"http://www.soaphub.org/wstx/services/InteropService"));

+					//"http://127.0.0.1:81/wstx/services/InteropService"));	

+					

 	public InteropTest() throws Exception {

 		super(InteropTest.class.getName());

 	}

@@ -50,21 +51,21 @@
 	public void testCompletionCommit() throws Exception {

 		TransactionManager tm = new TransactionManager(Constants.WS_AT,

 				coordinator, axis2Repo, axis2XML);

-		tm.begin(true);

+		tm.begin(false);

 		tm.commit();

 	}

 

 	public void testCompletionRollback() throws Exception {

 		TransactionManager tm = new TransactionManager(Constants.WS_AT,

 				coordinator, axis2Repo, axis2XML);

-		tm.begin(true);

+		tm.begin(false);

 		tm.rollback();

 	}

 

 	public void testCommit() throws Exception {

 		TransactionManager tm = new TransactionManager(Constants.WS_AT,

 				coordinator, axis2Repo, axis2XML);

-		tm.begin(true);

+		tm.begin(false);

 		stub.commitOperation();

 		tm.commit();

 	}

@@ -80,7 +81,7 @@
 	public void testPhase2Rollback() throws Exception {

 		TransactionManager tm = new TransactionManager(Constants.WS_AT,

 				coordinator, axis2Repo, axis2XML);

-		tm.begin(true);

+		tm.begin(false);

 		stub.phase2RollbackOperation();

 

 		boolean done = false;

@@ -95,7 +96,7 @@
 	public void testReadonly() throws Exception {

 		TransactionManager tm = new TransactionManager(Constants.WS_AT,

 				coordinator, axis2Repo, axis2XML);

-		tm.begin(true);

+		tm.begin(false);

 		stub.readonlyOperation();

 		tm.commit();

 	}

@@ -103,14 +104,15 @@
 	public void testVolatileAndDurable() throws Exception {

 		TransactionManager tm = new TransactionManager(Constants.WS_AT,

 				coordinator, axis2Repo, axis2XML);

-		tm.begin(true);

+		tm.begin(false);

 		stub.readonlyOperation();

 		tm.commit();

 	}

 	public void testEarlyAborted() throws Exception {

 		TransactionManager tm = new TransactionManager(Constants.WS_AT,

 				coordinator, axis2Repo, axis2XML);

-		tm.begin(true);

+		tm.begin(false);

 		stub.earlyAbortedOperation();

+		Thread.sleep(5000);

 	}

 }
\ No newline at end of file
diff --git a/test/interop/TestServiceStub.java b/test/interop/TestServiceStub.java
index 79cefaf..63f3539 100644
--- a/test/interop/TestServiceStub.java
+++ b/test/interop/TestServiceStub.java
@@ -20,6 +20,7 @@
 

 import org.apache.axiom.om.OMAbstractFactory;

 import org.apache.axiom.om.OMElement;

+import org.apache.axiom.om.OMNamespace;

 import org.apache.axiom.soap.SOAPEnvelope;

 import org.apache.axiom.soap.SOAPFactory;

 import org.apache.axis2.AxisFault;

@@ -84,25 +85,30 @@
 

 	}

 

-	public void commitOperation() throws IOException, AxisFault {

-

+	public void sendMessage(String name) throws AxisFault

+	{

 		Options options = new Options();

 		MessageContext messageContext = new MessageContext();

 		messageContext.setProperty(AddressingConstants.WS_ADDRESSING_VERSION,

 				AddressingConstants.Submission.WSA_NAMESPACE);

-		SOAPEnvelope env = createSOAPEnvelope();

+		

+		SOAPFactory factory = OMAbstractFactory.getSOAP12Factory();

+		SOAPEnvelope env = factory.getDefaultEnvelope();

+		OMNamespace namespace = factory.createOMNamespace("http://fabrikam123.com","tns");

+		OMElement testType = factory.createOMElement(name,namespace);

+		env.getBody().addChild(testType);

 		messageContext.setEnvelope(env);

-

-		options.setAction("Commit");

+		

+		options.setAction(name);

 		options.setTo(this.toEPR);

-

-		// messageSender

-		// .setSenderTransport(org.apache.axis2.Constants.TRANSPORT_HTTP);

 		OperationClient client = operations[0].createClient(serviceContext,

 				options);

 		client.addMessageContext(messageContext);

 		client.execute(true);

-

+	}

+	

+	public void commitOperation() throws IOException, AxisFault {

+		sendMessage("Commit");

 	}

 

 	public void rollbackOperation() throws IOException, AxisFault {

diff --git a/test/interop/testService.java b/test/interop/testService.java
index f9ce57e..beb165d 100644
--- a/test/interop/testService.java
+++ b/test/interop/testService.java
@@ -18,7 +18,11 @@
 
 import java.util.Map;
 
+import org.apache.axiom.om.OMAbstractFactory;
 import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMNamespace;
+import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axiom.soap.SOAPFactory;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.context.OperationContext;
@@ -51,20 +55,15 @@
 	}
 
 	public OMElement Commit(OMElement element) {
-		element.build();
-		element.detach();
-		return element;
+		return getResponseElement();
 	}
 
 	public OMElement Rollback(OMElement element) {
-		element.build();
-		element.detach();
-		return element;
+		return getResponseElement();
 	}
 
 	public OMElement Phase2Rollback(OMElement element) throws AxisFault {
-		element.build();
-		element.detach();
+
 		String reqID = (String) msgcts
 				.getProperty(AbstractContext.REQUESTER_ID);
 		Store store = StorageFactory.getInstance().getStore();
@@ -87,12 +86,11 @@
 		store.put(participantContext1.getID(), participantContext1);
 		ParticipantUtility.registerParticipant(participantContext1);
 
-		return element;
+		return getResponseElement();
 	}
 
 	public OMElement Readonly(OMElement element) throws AxisFault {
-		element.build();
-		element.detach();
+
 		String reqID = (String) msgcts
 				.getProperty(AbstractContext.REQUESTER_ID);
 		Store store = StorageFactory.getInstance().getStore();
@@ -115,12 +113,11 @@
 		store.put(participantContext1.getID(), participantContext1);
 		ParticipantUtility.registerParticipant(participantContext1);
 
-		return element;
+		return getResponseElement();
 	}
 
 	public OMElement VolatileAndDurable(OMElement element) throws AxisFault {
-		element.build();
-		element.detach();
+
 		String reqID = (String) msgcts
 				.getProperty(AbstractContext.REQUESTER_ID);
 		final Store store = StorageFactory.getInstance().getStore();
@@ -162,12 +159,11 @@
 			}
 		});
 		thread.start();
-		return element;
+		return getResponseElement();
 	}
 
 	public OMElement EarlyAborted(OMElement element) throws AxisFault {
-		element.build();
-		element.detach();
+
 		String reqID = (String) msgcts
 				.getProperty(AbstractContext.REQUESTER_ID);
 		Store store = StorageFactory.getInstance().getStore();
@@ -199,6 +195,13 @@
 			throw new AxisFault(e);
 		}
 
-		return element;
+		return getResponseElement();
+	}
+	private OMElement getResponseElement()
+	{
+		SOAPFactory factory = OMAbstractFactory.getSOAP12Factory();
+		OMNamespace namespace = factory.createOMNamespace("http://fabrikam123.com",null);
+		OMElement testType = factory.createOMElement("Response",namespace);
+		return testType;
 	}
 }
\ No newline at end of file