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