Author: mlovett
Date: Tue Dec 12 01:24:28 2006
New Revision: 486070
URL: http://svn.apache.org/viewvc?view=rev&rev=486070
Log:
Sync 2-way for WSRM 1.1, see SANDESHA2-62
Added:
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/scenarios/AnonymousEchoTest.java
(with props)
Modified:
webservices/sandesha/trunk/java/config/module.xml
webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/SandeshaMessageKeys.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/resource.properties
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/SequenceProcessor.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/polling/PollingManager.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/beans/SenderBean.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/inmemory/InMemorySenderBeanMgr.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SequenceManager.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SpecSpecificConstants.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/Sender.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java
Modified: webservices/sandesha/trunk/java/config/module.xml
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/config/module.xml?view=diff&rev=486070&r1=486069&r2=486070
==============================================================================
--- webservices/sandesha/trunk/java/config/module.xml (original)
+++ webservices/sandesha/trunk/java/config/module.xml Tue Dec 12 01:24:28 2006
@@ -48,7 +48,6 @@
<!-- namespaces for the 2006-08 spec -->
<actionMapping>http://docs.oasis-open.org/ws-rx/wsrm/200608/SequenceAcknowledgement</actionMapping>
<actionMapping>http://docs.oasis-open.org/ws-rx/wsrm/200608/AckRequested</actionMapping>
-
<actionMapping>http://docs.oasis-open.org/ws-rx/wsrm/200608/MakeConnection</actionMapping>
</operation>
<operation name="RMInOutOperation"
mep="http://www.w3.org/2004/08/wsdl/in-out">
@@ -61,6 +60,7 @@
<actionMapping>http://docs.oasis-open.org/ws-rx/wsrm/200608/CreateSequence</actionMapping>
<actionMapping>http://docs.oasis-open.org/ws-rx/wsrm/200608/CloseSequence</actionMapping>
<actionMapping>http://docs.oasis-open.org/ws-rx/wsrm/200608/TerminateSequence</actionMapping>
+
<actionMapping>http://docs.oasis-open.org/ws-rx/wsrm/200608/MakeConnection</actionMapping>
</operation>
<operation name="RMOutOnlyOperation"
mep="http://www.w3.org/2004/08/wsdl/out-only">
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java?view=diff&rev=486070&r1=486069&r2=486070
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
Tue Dec 12 01:24:28 2006
@@ -124,7 +124,7 @@
// Dropping duplicates
boolean dropped = dropIfDuplicate(rmMessageContext,
storageManager);
if (dropped) {
- returnValue = InvocationResponse.SUSPEND; //the
msg has been paused
+ returnValue = InvocationResponse.ABORT; //the
msg has been dropped
processDroppedMessage(rmMessageContext,
storageManager);
if (log.isDebugEnabled())
log.debug("Exit:
SandeshaGlobalInHandler::invoke, dropped " + returnValue);
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/SandeshaMessageKeys.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/SandeshaMessageKeys.java?view=diff&rev=486070&r1=486069&r2=486070
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/SandeshaMessageKeys.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/SandeshaMessageKeys.java
Tue Dec 12 01:24:28 2006
@@ -257,7 +257,6 @@
public final static String elementMustForSpec = "elementMustForSpec";
public final static String addressingNamespaceNotSet =
"addressingNamespaceNotSet";
public final static String couldNotSendCreateSeqResponse =
"couldNotSendCreateSeqResponse";
- public final static String invalidOfferNoResponseEndpoint =
"invalidOfferNoResponseEndpoint";
public final static String invalidElementFoundWithinElement =
"invalidElementFoundWithinElement";
public final static String invokerNotFound="invokerNotFound";
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/resource.properties
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/resource.properties?view=diff&rev=486070&r1=486069&r2=486070
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/resource.properties
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/resource.properties
Tue Dec 12 01:24:28 2006
@@ -273,7 +273,6 @@
toBeanNotSet=The 'To' Sequence Property Bean has not been set for the sequence.
replyToBeanNotSet=The 'ReplyTo' Sequence Property Bean has not been set for
the sequence.
cannotFindTransportInDesc=Cannot find the transport in description {0} in the
ConfigurationContext
-invalidOfferNoResponseEndpoint=Cannot derive a valid offer from the given
infomation. No Endpoint for receiving messages.
invalidElementFoundWithinElement=Found invalid ''{0}'' element within ''{1}''
element
invokerNotFound=An invoker thread was not found to dispatch messages on the
inbound sequence {0}.
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java?view=diff&rev=486070&r1=486069&r2=486070
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
Tue Dec 12 01:24:28 2006
@@ -437,23 +437,6 @@
rmMsgCtx.setMessageId(messageId1);
}
- if (serverSide) {
- // let the request end with 202 if a ack has not been
- // written in the incoming thread.
-
- MessageContext reqMsgCtx = null;
- try {
- reqMsgCtx =
msgContext.getOperationContext().getMessageContext(
-
WSDLConstants.MESSAGE_LABEL_IN_VALUE);
- } catch (AxisFault e) {
- throw new SandeshaException(e);
- }
-
- if
(reqMsgCtx.getProperty(Sandesha2Constants.ACK_WRITTEN) == null
- ||
!"true".equals(reqMsgCtx.getProperty(Sandesha2Constants.ACK_WRITTEN)))
-
reqMsgCtx.getOperationContext().setProperty(org.apache.axis2.Constants.RESPONSE_WRITTEN,
"false");
- }
-
EndpointReference toEPR = msgContext.getTo();
if (toEPR == null) {
String message =
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.toEPRNotValid, null);
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java?view=diff&rev=486070&r1=486069&r2=486070
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java
Tue Dec 12 01:24:28 2006
@@ -8,7 +8,10 @@
import org.apache.axis2.Constants;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.context.OperationContext;
import org.apache.axis2.description.TransportOutDescription;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.apache.sandesha2.RMMsgContext;
import org.apache.sandesha2.Sandesha2Constants;
import org.apache.sandesha2.SandeshaException;
@@ -33,13 +36,16 @@
*/
public class MakeConnectionProcessor implements MsgProcessor {
+ private static final Log log =
LogFactory.getLog(MakeConnectionProcessor.class);
+
/**
* Prosesses incoming MakeConnection request messages.
* A message is selected by the set of SenderBeans that are waiting to
be sent.
* This is processed using a SenderWorker.
*/
public boolean processInMessage(RMMsgContext rmMsgCtx) throws AxisFault
{
-
+ if(log.isDebugEnabled()) log.debug("Entry:
MakeConnectionProcessor::processInMessage");
+
MakeConnection makeConnection = (MakeConnection)
rmMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.MAKE_CONNECTION);
Address address = makeConnection.getAddress();
Identifier identifier = makeConnection.getIdentifier();
@@ -54,24 +60,16 @@
findSenderBean.setSend(true);
if (address!=null)
- findSenderBean.setWsrmAnonURI(address.getAddress());
+ findSenderBean.setToAddress(address.getAddress());
if (identifier!=null)
findSenderBean.setSequenceID(identifier.getIdentifier());
//finding the beans that go with the criteria of the passed
SenderBean
-
- //beans with reSend=true
- findSenderBean.setReSend(true);
+ //The reSend flag is ignored for this selection, so there is no
need to
+ //set it.
Collection collection = senderBeanMgr.find(findSenderBean);
- //beans with reSend=false
- findSenderBean.setReSend (false);
- Collection collection2 = senderBeanMgr.find(findSenderBean);
-
- //all possible beans
- collection.addAll(collection2);
-
//selecting a bean to send RANDOMLY. TODO- Should use a better
mechanism.
int size = collection.size();
int itemToPick=-1;
@@ -90,14 +88,15 @@
SenderBean senderBean = null;
for (int item=0;item<size;item++) {
-
senderBean = (SenderBean) it.next();
if (item==itemToPick)
break;
}
- if (senderBean==null)
+ if (senderBean==null) {
+ if(log.isDebugEnabled()) log.debug("Exit:
MakeConnectionProcessor::processInMessage, no matching message found");
return false;
+ }
TransportOutDescription transportOut =
rmMsgCtx.getMessageContext().getTransportOut();
if (transportOut==null) {
@@ -110,15 +109,17 @@
MessageContext returnMessage =
storageManager.retrieveMessageContext(messageStorageKey,configurationContext);
RMMsgContext returnRMMsg =
MsgInitializer.initializeMessage(returnMessage);
-
- addMessagePendingHeader (returnRMMsg,pending);
+ if(pending) addMessagePendingHeader (returnRMMsg,pending);
setTransportProperties (returnMessage, rmMsgCtx);
- //setting that the response gets written written.
- //This will be used by transports. For e.g.
CommonsHTTPTransportSender will send 200 OK, instead of 202.
-
rmMsgCtx.getMessageContext().getOperationContext().setProperty(Constants.RESPONSE_WRITTEN
, Constants.VALUE_TRUE);
+ // Link the response to the request
+ OperationContext context =
rmMsgCtx.getMessageContext().getOperationContext();
+ context.addMessageContext(returnMessage);
+ returnMessage.setOperationContext(context);
+ // Store the response again
+ storageManager.updateMessageContext(messageStorageKey,
returnMessage);
//running the MakeConnection through a SenderWorker.
//This will allow Sandesha2 to consider both of following
senarios equally.
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/SequenceProcessor.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/SequenceProcessor.java?view=diff&rev=486070&r1=486069&r2=486070
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/SequenceProcessor.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/SequenceProcessor.java
Tue Dec 12 01:24:28 2006
@@ -119,13 +119,6 @@
secManager.checkProofOfPossession(token, body, msgCtx);
}
- //RM will not send sync responses. If sync acks are there this
will be
- // made true again later.
- if (rmMsgCtx.getMessageContext().getOperationContext() != null)
{
-
rmMsgCtx.getMessageContext().getOperationContext().setProperty(Constants.RESPONSE_WRITTEN,
- Constants.VALUE_FALSE);
- }
-
// setting acked msg no range
ConfigurationContext configCtx =
rmMsgCtx.getMessageContext().getConfigurationContext();
if (configCtx == null) {
@@ -303,10 +296,18 @@
RMMsgContext ackRMMsgCtx =
AcknowledgementManager.generateAckMessage(rmMsgCtx, sequencePropertyKey,
sequenceId, storageManager);
MessageContext ackMsgCtx = ackRMMsgCtx.getMessageContext();
- EndpointReference acksTo = ackRMMsgCtx.getTo();
-
- if (SandeshaUtil.isAnonymousURI (acksTo.getAddress())) {
+ boolean anonAck = ackRMMsgCtx.getTo().hasAnonymousAddress();
+ EndpointReference replyTo = rmMsgCtx.getReplyTo();
+ // Only use the backchannel for ack messages if we are sure
that the application
+ // doesn't need it. A 1-way MEP should be complete by now.
+ boolean complete = ackMsgCtx.getOperationContext().isComplete();
+ if (anonAck && !complete && (replyTo == null ||
replyTo.hasAnonymousAddress())) {
+ if (log.isDebugEnabled()) log.debug("Exit:
SequenceProcessor::sendAckIfNeeded, avoiding using backchannel");
+ return;
+ }
+
+ if(anonAck) {
// setting CONTEXT_WRITTEN since acksto is anonymous
if (rmMsgCtx.getMessageContext().getOperationContext()
== null) {
// operation context will be null when doing in
a GLOBAL
@@ -326,7 +327,7 @@
AxisEngine engine = new AxisEngine(configCtx);
engine.send(ackRMMsgCtx.getMessageContext());
- } else {
+ } else if(!anonAck) {
// / Transaction asyncAckTransaction =
// storageManager.getTransaction();
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/polling/PollingManager.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/polling/PollingManager.java?view=diff&rev=486070&r1=486069&r2=486070
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/polling/PollingManager.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/polling/PollingManager.java
Tue Dec 12 01:24:28 2006
@@ -17,7 +17,6 @@
package org.apache.sandesha2.polling;
-import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Random;
@@ -26,17 +25,15 @@
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.context.MessageContext;
-import org.apache.axis2.description.TransportOutDescription;
-import org.apache.axis2.engine.AxisEngine;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.apache.sandesha2.RMMsgContext;
import org.apache.sandesha2.Sandesha2Constants;
import org.apache.sandesha2.SandeshaException;
-import org.apache.sandesha2.storage.SandeshaStorageException;
import org.apache.sandesha2.storage.StorageManager;
-import org.apache.sandesha2.storage.beanmanagers.RMSBeanMgr;
+import org.apache.sandesha2.storage.Transaction;
import org.apache.sandesha2.storage.beanmanagers.RMDBeanMgr;
import org.apache.sandesha2.storage.beanmanagers.SenderBeanMgr;
-import org.apache.sandesha2.storage.beans.RMSBean;
import org.apache.sandesha2.storage.beans.RMDBean;
import org.apache.sandesha2.storage.beans.SenderBean;
import org.apache.sandesha2.util.MsgInitializer;
@@ -48,6 +45,7 @@
* keeps running. Will do MakeConnection based on the request queue or
randomly.
*/
public class PollingManager extends Thread {
+ private static final Log log = LogFactory.getLog(PollingManager.class);
private ConfigurationContext configurationContext = null;
private StorageManager storageManager = null;
@@ -60,112 +58,112 @@
private final int POLLING_MANAGER_WAIT_TIME = 3000;
public void run() {
-
-
while (isPoll()) {
-
+ Transaction t = null;
try {
-
- RMDBeanMgr nextMsgMgr =
storageManager.getRMDBeanMgr();
-
- //geting the sequences to be polled.
- //if shedule contains any requests, do the
earliest one.
- //else pick one randomly.
-
- String sequenceId = getNextSheduleEntry ();
-
- RMDBean nextMsgBean = null;
-
- if (sequenceId==null) {
-
- RMDBean findBean = new RMDBean ();
- findBean.setPollingMode(true);
-
- List results =
nextMsgMgr.find(findBean);
- int size = results.size();
- if (size>0) {
- Random random = new Random ();
- int item = random.nextInt(size);
- nextMsgBean = (RMDBean)
results.get(item);
+ t = storageManager.getTransaction();
+ internalRun();
+ t.commit();
+ t = null;
+ } catch (Exception e) {
+ if(log.isDebugEnabled()) log.debug("Exception",
e);
+ if(t != null) {
+ try {
+ t.rollback();
+ } catch(Exception e2) {
+ if(log.isDebugEnabled())
log.debug("Exception during rollback", e);
}
-
-
-
- } else {
- RMDBean findBean = new RMDBean ();
- findBean.setPollingMode(true);
- findBean.setSequenceID(sequenceId);
-
- nextMsgBean =
nextMsgMgr.findUnique(findBean);
- }
-
- //If not valid entry is found, try again later.
- if (nextMsgBean==null)
- continue;
-
- sequenceId = nextMsgBean.getSequenceID();
-
- //create a MakeConnection message
- String referenceMsgKey =
nextMsgBean.getReferenceMessageKey();
-
- String sequencePropertyKey = sequenceId;
- String replyTo =
SandeshaUtil.getSequenceProperty(sequencePropertyKey,
-
Sandesha2Constants.SequenceProperties.REPLY_TO_EPR,storageManager);
- String WSRMAnonReplyToURI = null;
- if
(SandeshaUtil.isWSRMAnonymousReplyTo(replyTo))
- WSRMAnonReplyToURI = replyTo;
-
- MessageContext referenceMessage =
storageManager.retrieveMessageContext(referenceMsgKey,configurationContext);
- RMMsgContext referenceRMMessage =
MsgInitializer.initializeMessage(referenceMessage);
- RMMsgContext makeConnectionRMMessage =
RMMsgCreator.createMakeConnectionMessage(referenceRMMessage,
- sequenceId ,
WSRMAnonReplyToURI,storageManager);
-
-
makeConnectionRMMessage.setProperty(MessageContext.TRANSPORT_IN,null);
- //storing the MakeConnection message.
- String makeConnectionMsgStoreKey =
SandeshaUtil.getUUID();
-
-
makeConnectionRMMessage.setProperty(Sandesha2Constants.MessageContextProperties.SEQUENCE_PROPERTY_KEY,
- sequencePropertyKey);
-
- //add an entry for the MakeConnection message
to the sender (with ,send=true, resend=false)
- SenderBean makeConnectionSenderBean = new
SenderBean ();
-//
makeConnectionSenderBean.setInternalSequenceID(internalSequenceId);
-
makeConnectionSenderBean.setMessageContextRefKey(makeConnectionMsgStoreKey);
-
makeConnectionSenderBean.setMessageID(makeConnectionRMMessage.getMessageId());
-
makeConnectionSenderBean.setMessageType(Sandesha2Constants.MessageTypes.MAKE_CONNECTION_MSG);
- makeConnectionSenderBean.setReSend(false);
- makeConnectionSenderBean.setSend(true);
-
makeConnectionSenderBean.setSequenceID(sequenceId);
- EndpointReference to =
makeConnectionRMMessage.getTo();
- if (to!=null)
-
makeConnectionSenderBean.setToAddress(to.getAddress());
-
- SenderBeanMgr senderBeanMgr =
storageManager.getSenderBeanMgr();
-
- //this message should not be sent until it is
qualified. I.e. till it is sent through the Sandesha2TransportSender.
-
makeConnectionRMMessage.setProperty(Sandesha2Constants.QUALIFIED_FOR_SENDING,
Sandesha2Constants.VALUE_FALSE);
-
-
SandeshaUtil.executeAndStore(makeConnectionRMMessage,
makeConnectionMsgStoreKey);
-
- senderBeanMgr.insert(makeConnectionSenderBean);
- } catch (SandeshaStorageException e) {
- e.printStackTrace();
- } catch (SandeshaException e) {
- e.printStackTrace();
- } catch (AxisFault e) {
- e.printStackTrace();
- } finally {
- try {
- Thread.sleep(POLLING_MANAGER_WAIT_TIME);
- } catch (InterruptedException e) {
- e.printStackTrace();
+ t = null;
}
}
-
+ try {
+ Thread.sleep(POLLING_MANAGER_WAIT_TIME);
+ } catch (InterruptedException e) {
+ if(log.isDebugEnabled()) log.debug("Sleep was
interrupted", e);
+ }
}
}
+ private void internalRun() throws AxisFault {
+ RMDBeanMgr nextMsgMgr = storageManager.getRMDBeanMgr();
+
+ //geting the sequences to be polled.
+ //if shedule contains any requests, do the earliest one.
+ //else pick one randomly.
+
+ String sequenceId = getNextSheduleEntry ();
+ RMDBean nextMsgBean = null;
+
+ RMDBean findBean = new RMDBean();
+ findBean.setPollingMode(true);
+ findBean.setSequenceID(sequenceId); // Note that this may be
null
+ List results = nextMsgMgr.find(findBean);
+ int size = results.size();
+ if (size>0) {
+ Random random = new Random ();
+ int item = random.nextInt(size);
+ nextMsgBean = (RMDBean) results.get(item);
+ }
+
+ //If not valid entry is found, try again later.
+ if (nextMsgBean==null) {
+ if(log.isDebugEnabled()) log.debug("No polling requests
queued");
+ return;
+ }
+ sequenceId = nextMsgBean.getSequenceID();
+
+ if(log.isDebugEnabled()) log.debug("Polling for sequence " +
sequenceId);
+
+ //create a MakeConnection message
+ String referenceMsgKey = nextMsgBean.getReferenceMessageKey();
+
+ String sequencePropertyKey = sequenceId;
+ String replyTo =
SandeshaUtil.getSequenceProperty(sequencePropertyKey,
+
Sandesha2Constants.SequenceProperties.REPLY_TO_EPR,storageManager);
+ String WSRMAnonReplyToURI = null;
+ if (SandeshaUtil.isWSRMAnonymousReplyTo(replyTo))
+ WSRMAnonReplyToURI = replyTo;
+
+ MessageContext referenceMessage =
storageManager.retrieveMessageContext(referenceMsgKey,configurationContext);
+ RMMsgContext referenceRMMessage =
MsgInitializer.initializeMessage(referenceMessage);
+ RMMsgContext makeConnectionRMMessage =
RMMsgCreator.createMakeConnectionMessage(referenceRMMessage,
+ sequenceId , WSRMAnonReplyToURI,storageManager);
+
+ // Put our transaction onto the message context
+
makeConnectionRMMessage.setProperty(Sandesha2Constants.WITHIN_TRANSACTION,
Sandesha2Constants.VALUE_TRUE);
+
+
makeConnectionRMMessage.setProperty(MessageContext.TRANSPORT_IN,null);
+ //storing the MakeConnection message.
+ String makeConnectionMsgStoreKey = SandeshaUtil.getUUID();
+
+
makeConnectionRMMessage.setProperty(Sandesha2Constants.MessageContextProperties.SEQUENCE_PROPERTY_KEY,
+ sequencePropertyKey);
+
+ //add an entry for the MakeConnection message to the sender
(with ,send=true, resend=false)
+ SenderBean makeConnectionSenderBean = new SenderBean ();
+//
makeConnectionSenderBean.setInternalSequenceID(internalSequenceId);
+
makeConnectionSenderBean.setMessageContextRefKey(makeConnectionMsgStoreKey);
+
makeConnectionSenderBean.setMessageID(makeConnectionRMMessage.getMessageId());
+
makeConnectionSenderBean.setMessageType(Sandesha2Constants.MessageTypes.MAKE_CONNECTION_MSG);
+ makeConnectionSenderBean.setReSend(false);
+ makeConnectionSenderBean.setSend(true);
+ makeConnectionSenderBean.setSequenceID(sequenceId);
+ EndpointReference to = makeConnectionRMMessage.getTo();
+ if (to!=null)
+ makeConnectionSenderBean.setToAddress(to.getAddress());
+
+ SenderBeanMgr senderBeanMgr = storageManager.getSenderBeanMgr();
+
+ //this message should not be sent until it is qualified. I.e.
till it is sent through the Sandesha2TransportSender.
+
makeConnectionRMMessage.setProperty(Sandesha2Constants.QUALIFIED_FOR_SENDING,
Sandesha2Constants.VALUE_FALSE);
+
+ SandeshaUtil.executeAndStore(makeConnectionRMMessage,
makeConnectionMsgStoreKey);
+
+ senderBeanMgr.insert(makeConnectionSenderBean);
+ }
+
private synchronized String getNextSheduleEntry () {
+ if(log.isDebugEnabled()) log.debug("Entry:
PollingManager::getNextSheduleEntry");
String sequenceId = null;
if (sheduledPollingRequests.size()>0) {
@@ -178,6 +176,7 @@
}
+ if(log.isDebugEnabled()) log.debug("Exit:
PollingManager::getNextSheduleEntry, " + sequenceId);
return sequenceId;
}
@@ -188,11 +187,15 @@
* @throws SandeshaException
*/
public synchronized void start (ConfigurationContext
configurationContext) throws SandeshaException {
+ if(log.isDebugEnabled()) log.debug("Entry:
PollingManager::start");
+
this.configurationContext = configurationContext;
this.sheduledPollingRequests = new HashMap ();
this.storageManager =
SandeshaUtil.getSandeshaStorageManager(configurationContext,configurationContext.getAxisConfiguration());
setPoll(true);
super.start();
+
+ if(log.isDebugEnabled()) log.debug("Exit:
PollingManager::start");
}
/**
@@ -200,14 +203,20 @@
*
*/
public synchronized void stopPolling () {
+ if(log.isDebugEnabled()) log.debug("Entry:
PollingManager::stopPolling");
setPoll(false);
+ if(log.isDebugEnabled()) log.debug("Exit:
PollingManager::stopPolling");
}
public synchronized void setPoll (boolean poll) {
+ if(log.isDebugEnabled()) log.debug("Entry:
PollingManager::setPoll");
this.poll = poll;
+ if(log.isDebugEnabled()) log.debug("Exit:
PollingManager::setPoll");
}
public synchronized boolean isPoll () {
+ if(log.isDebugEnabled()) log.debug("Entry:
PollingManager::isPoll");
+ if(log.isDebugEnabled()) log.debug("Exit:
PollingManager::isPoll");
return poll;
}
@@ -222,8 +231,7 @@
* @param sequenceId
*/
public synchronized void shedulePollingRequest (String sequenceId) {
-
- System.out.println("Polling request sheduled for sequence:" +
sequenceId);
+ if(log.isDebugEnabled()) log.debug("Entry:
PollingManager::shedulePollingRequest, " + sequenceId);
if (sheduledPollingRequests.containsKey (sequenceId)) {
Integer sequenceEntryCount = (Integer)
sheduledPollingRequests.get(sequenceId);
@@ -234,7 +242,6 @@
sheduledPollingRequests.put(sequenceId,
sequenceEntryCount);
}
+ if(log.isDebugEnabled()) log.debug("Exit:
PollingManager::shedulePollingRequest");
}
-
-
}
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/beans/SenderBean.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/beans/SenderBean.java?view=diff&rev=486070&r1=486069&r2=486070
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/beans/SenderBean.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/beans/SenderBean.java
Tue Dec 12 01:24:28 2006
@@ -90,11 +90,6 @@
private String sequenceID;
/**
- * TODO use the value in CreateSequenceBean.
- */
- private String wsrmAnonURI;
-
- /**
* Destination URL of the message to be sent. This can be used to
decide weather the message cannot be sent,
* before actyally reading the message from the storage.
*/
@@ -194,14 +189,6 @@
public void setSequenceID(String sequenceID) {
this.sequenceID = sequenceID;
- }
-
- public String getWsrmAnonURI() {
- return wsrmAnonURI;
- }
-
- public void setWsrmAnonURI(String wsrmAnonURI) {
- this.wsrmAnonURI = wsrmAnonURI;
}
public String getToAddress() {
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/inmemory/InMemorySenderBeanMgr.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/inmemory/InMemorySenderBeanMgr.java?view=diff&rev=486070&r1=486069&r2=486070
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/inmemory/InMemorySenderBeanMgr.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/inmemory/InMemorySenderBeanMgr.java
Tue Dec 12 01:24:28 2006
@@ -110,6 +110,13 @@
log.debug("isSend didn't match");
add = false;
}
+
+ if (bean.getToAddress() != null
+ && !bean.getToAddress().equals("")
+ &&
!bean.getToAddress().equals(temp.getToAddress())) {
+ log.debug("ToAddress didn't match");
+ add = false;
+ }
// Do not use the isReSend flag to match messages, as it can
stop us from
// detecting RM messages during 'getNextMsgToSend'
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java?view=diff&rev=486070&r1=486069&r2=486070
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java
Tue Dec 12 01:24:28 2006
@@ -47,6 +47,7 @@
import org.apache.sandesha2.storage.beans.SenderBean;
import org.apache.sandesha2.storage.beans.SequencePropertyBean;
import org.apache.sandesha2.wsrm.AcknowledgementRange;
+import org.apache.sandesha2.wsrm.Sequence;
import org.apache.sandesha2.wsrm.SequenceAcknowledgement;
/**
@@ -68,21 +69,34 @@
throws SandeshaException {
if (log.isDebugEnabled())
log.debug("Enter:
AcknowledgementManager::piggybackAcksIfPresent");
-
+
ConfigurationContext configurationContext =
rmMessageContext.getConfigurationContext();
-
SenderBeanMgr retransmitterBeanMgr =
storageManager.getSenderBeanMgr();
+ // If this message is going to an anonymous address then we add
in an ack for the
+ // sequence that was used on the inbound side.
+ EndpointReference target = rmMessageContext.getTo();
+ if(target.hasAnonymousAddress()) {
+ Sequence sequence = (Sequence)
rmMessageContext.getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE);
+ if(sequence != null) {
+ String outboundSequenceId =
sequence.getIdentifier().getIdentifier();
+ String outboundInternalSeq =
SandeshaUtil.getSequenceProperty(outboundSequenceId,
+
Sandesha2Constants.SequenceProperties.INTERNAL_SEQUENCE_ID, storageManager);
+ String inboundSequenceId =
SandeshaUtil.getServerSideIncomingSeqIdFromInternalSeqId(outboundInternalSeq);
+
+ if(log.isDebugEnabled())
log.debug("Piggybacking ack for " + inboundSequenceId);
+ RMMsgCreator.addAckMessage(rmMessageContext,
inboundSequenceId, inboundSequenceId, storageManager);
+ }
+ if(log.isDebugEnabled()) log.debug("Enter:
AcknowledgementManager::piggybackAcksIfPresent, anon");
+ return;
+ }
+
SenderBean findBean = new SenderBean();
-
findBean.setMessageType(Sandesha2Constants.MessageTypes.ACK);
findBean.setSend(true);
- findBean.setReSend(false);
-
- String carrietTo = rmMessageContext.getTo().getAddress();
+ findBean.setToAddress(target.getAddress());
Collection collection = retransmitterBeanMgr.find(findBean);
-
Iterator it = collection.iterator();
piggybackLoop: while (it.hasNext()) {
@@ -95,12 +109,6 @@
MessageContext ackMsgContext =
storageManager.retrieveMessageContext(ackBean.getMessageContextRefKey(),
configurationContext);
-
- // wsa:To has to match for piggybacking.
- String to = ackMsgContext.getTo().getAddress();
- if (!carrietTo.equals(to)) {
- continue piggybackLoop;
- }
if (log.isDebugEnabled()) log.debug("Adding ack
headers");
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java?view=diff&rev=486070&r1=486069&r2=486070
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java
Tue Dec 12 01:24:28 2006
@@ -26,6 +26,7 @@
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.AddressingConstants;
import org.apache.axis2.addressing.EndpointReference;
+import org.apache.axis2.addressing.EndpointReferenceHelper;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.context.OperationContext;
@@ -134,8 +135,19 @@
if (offeredEndpoint==null) {
EndpointReference replyTo =
applicationMsgContext.getReplyTo(); //using replyTo as the Endpoint if it is
not specified
- if (replyTo!=null)
+ if (replyTo!=null) {
offeredEndpoint =
SandeshaUtil.cloneEPR(replyTo);
+ }
+ }
+ // Finally fall back to using an anonymous endpoint
+ if (offeredEndpoint==null) {
+ String anon = null;
+
if(AddressingConstants.Final.WSA_NAMESPACE.equals(addressingNamespaceValue)) {
+ anon =
AddressingConstants.Final.WSA_ANONYMOUS_URL;
+ } else {
+ anon =
AddressingConstants.Submission.WSA_ANONYMOUS_URL;
+ }
+ offeredEndpoint = new EndpointReference(anon);
}
if (offeredSequence != null &&
!"".equals(offeredSequence)) {
SequenceOffer offerPart = new
SequenceOffer(rmNamespaceValue);
@@ -145,15 +157,9 @@
createSequencePart.setSequenceOffer(offerPart);
if
(Sandesha2Constants.SPEC_2006_08.NS_URI.equals(rmNamespaceValue)) {
- if (offeredEndpoint!=null) {
- Endpoint endpoint = new
Endpoint (rmNamespaceValue,addressingNamespaceValue);
- endpoint.setEPR
(offeredEndpoint);
- offerPart.setEndpoint(endpoint);
- } else {
- String message =
SandeshaMessageHelper.getMessage(
-
SandeshaMessageKeys.invalidOfferNoResponseEndpoint);
- throw new SandeshaException
(message);
- }
+ Endpoint endpoint = new Endpoint
(rmNamespaceValue,addressingNamespaceValue);
+ endpoint.setEPR (offeredEndpoint);
+ offerPart.setEndpoint(endpoint);
}
}
}
@@ -489,7 +495,7 @@
* @throws SandeshaException
*/
public static void addAckMessage(RMMsgContext applicationMsg, String
sequencePropertyKey ,String sequenceId, StorageManager storageManager)
- throws AxisFault {
+ throws SandeshaException {
if(log.isDebugEnabled())
log.debug("Entry: RMMsgCreator::addAckMessage " +
sequenceId);
@@ -548,7 +554,11 @@
applicationMsg.setMessageId(SandeshaUtil.getUUID());
//generating the SOAP envelope.
- applicationMsg.addSOAPEnvelope();
+ try {
+ applicationMsg.addSOAPEnvelope();
+ } catch(AxisFault e) {
+ throw new SandeshaException(e);
+ }
// Ensure the message also contains the token that needs to be
used
secureOutboundMessage(sequencePropertyKey,
applicationMsg.getMessageContext());
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SequenceManager.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SequenceManager.java?view=diff&rev=486070&r1=486069&r2=486070
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SequenceManager.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SequenceManager.java
Tue Dec 12 01:24:28 2006
@@ -279,13 +279,14 @@
}
} else {
+ //setting replyTo, which defaults to anonymous
+ String replyTo = anonymousURI;
EndpointReference replyToEPR =
firstAplicationMsgCtx.getReplyTo();
- //setting replyTo and acksTo beans.
-
- if (replyToEPR!=null)
- replyToBean = new
SequencePropertyBean(sequencePropertyKey,
-
Sandesha2Constants.SequenceProperties.REPLY_TO_EPR, replyToEPR.getAddress());
-
+ if (replyToEPR!=null) replyTo = replyToEPR.getAddress();
+
+ replyToBean = new
SequencePropertyBean(sequencePropertyKey,
+
Sandesha2Constants.SequenceProperties.REPLY_TO_EPR, replyTo);
+
//TODO set AcksToBean.
}
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SpecSpecificConstants.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SpecSpecificConstants.java?view=diff&rev=486070&r1=486069&r2=486070
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SpecSpecificConstants.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SpecSpecificConstants.java
Tue Dec 12 01:24:28 2006
@@ -351,11 +351,11 @@
case Sandesha2Constants.MessageTypes.CREATE_SEQ:
case Sandesha2Constants.MessageTypes.CLOSE_SEQUENCE:
case Sandesha2Constants.MessageTypes.TERMINATE_SEQ:
+ case
Sandesha2Constants.MessageTypes.MAKE_CONNECTION_MSG:
result = service.getOperation(new
QName("RMOutInOperation"));
break;
case Sandesha2Constants.MessageTypes.ACK:
case Sandesha2Constants.MessageTypes.ACK_REQUEST:
- case
Sandesha2Constants.MessageTypes.MAKE_CONNECTION_MSG:
result = service.getOperation(new
QName("RMOutOnlyOperation"));
break;
}
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/Sender.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/Sender.java?view=diff&rev=486070&r1=486069&r2=486070
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/Sender.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/Sender.java
Tue Dec 12 01:24:28 2006
@@ -17,7 +17,6 @@
package org.apache.sandesha2.workers;
-import org.apache.axis2.addressing.AddressingConstants;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.sandesha2.Sandesha2Constants;
@@ -98,31 +97,6 @@
log.debug(message);
}
continue;
- }
-
- String toAddress = senderBean.getToAddress();
- if (toAddress != null) {
- boolean unsendableAddress = false;
-
- if (toAddress
-
.equals(AddressingConstants.Submission.WSA_ANONYMOUS_URL))
- unsendableAddress = true;
- else if (toAddress
-
.equals(AddressingConstants.Final.WSA_ANONYMOUS_URL))
- unsendableAddress = true;
- else if (toAddress
-
.startsWith(Sandesha2Constants.WSRM_ANONYMOUS_URI_PREFIX))
- unsendableAddress = true;
-
- if (unsendableAddress) {
- if (log.isDebugEnabled()) {
- String message =
SandeshaMessageHelper.getMessage(
-
SandeshaMessageKeys.cannotSendToTheAddress,
-
toAddress);
- log.debug(message);
- }
- continue;
- }
}
// work Id is used to define the piece of work
that will be
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java?view=diff&rev=486070&r1=486069&r2=486070
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java
Tue Dec 12 01:24:28 2006
@@ -6,11 +6,15 @@
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axiom.soap.SOAPFault;
import org.apache.axis2.AxisFault;
+import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.context.OperationContext;
+import org.apache.axis2.context.OperationContextFactory;
import org.apache.axis2.description.TransportOutDescription;
import org.apache.axis2.engine.AxisEngine;
+import org.apache.axis2.engine.Handler.InvocationResponse;
+import org.apache.axis2.transport.RequestResponseTransport;
import org.apache.axis2.transport.TransportUtils;
import org.apache.axis2.transport.http.HTTPConstants;
import org.apache.commons.logging.Log;
@@ -113,6 +117,23 @@
return;
}
+ // If we are sending to the anonymous URI then we
_must_ have a transport waiting,
+ // or the message can't go anywhere. If there is
nothing here then we leave the
+ // message in the sender queue, and a MakeConnection
will hopefully pick it up
+ // soon.
+ EndpointReference toEPR = msgCtx.getTo();
+ if(toEPR.hasAnonymousAddress()) {
+ RequestResponseTransport t = null;
+ MessageContext inMsg = null;
+ OperationContext op =
msgCtx.getOperationContext();
+ if(op != null) inMsg =
op.getMessageContext(OperationContextFactory.MESSAGE_LABEL_IN_VALUE);
+ if(inMsg != null) t =
(RequestResponseTransport)
inMsg.getProperty(RequestResponseTransport.TRANSPORT_CONTROL);
+ if(t == null) {
+ if(log.isDebugEnabled())
log.debug("Exit: SenderWorker::run, no response transport for anonymous
message");
+ return;
+ }
+ }
+
updateMessage(msgCtx);
int messageType = senderBean.getMessageType();
@@ -142,7 +163,6 @@
if (transportOut!=null)
msgCtx.setTransportOut(transportOut);
-
boolean successfullySent = false;
@@ -176,7 +196,19 @@
AxisEngine engine = new AxisEngine
(msgCtx.getConfigurationContext());
if (log.isDebugEnabled())
log.debug("Resuming a send for message
: " + msgCtx.getEnvelope().getHeader());
- engine.resumeSend(msgCtx);
+ InvocationResponse response =
engine.resumeSend(msgCtx);
+ if(log.isDebugEnabled()) log.debug("Engine
resume returned " + response);
+ if(response != InvocationResponse.SUSPEND) {
+ RequestResponseTransport t = null;
+ MessageContext inMsg = null;
+ OperationContext op =
msgCtx.getOperationContext();
+ if(op != null) inMsg =
op.getMessageContext(OperationContextFactory.MESSAGE_LABEL_IN_VALUE);
+ if(inMsg != null) t =
(RequestResponseTransport)
inMsg.getProperty(RequestResponseTransport.TRANSPORT_CONTROL);
+ if(t != null) {
+ if(log.isDebugEnabled())
log.debug("Signalling transport in " + t);
+ if(t != null)
t.signalResponseReady();
+ }
+ }
successfullySent = true;
} catch (Exception e) {
Added:
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/scenarios/AnonymousEchoTest.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/scenarios/AnonymousEchoTest.java?view=auto&rev=486070
==============================================================================
---
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/scenarios/AnonymousEchoTest.java
(added)
+++
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/scenarios/AnonymousEchoTest.java
Tue Dec 12 01:24:28 2006
@@ -0,0 +1,114 @@
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.sandesha2.scenarios;
+
+import java.io.File;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.axis2.Constants;
+import org.apache.axis2.addressing.EndpointReference;
+import org.apache.axis2.client.Options;
+import org.apache.axis2.client.ServiceClient;
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.context.ConfigurationContextFactory;
+import org.apache.sandesha2.Sandesha2Constants;
+import org.apache.sandesha2.SandeshaTestCase;
+import org.apache.sandesha2.client.SandeshaClient;
+import org.apache.sandesha2.client.SandeshaClientConstants;
+import org.apache.sandesha2.client.SequenceReport;
+import org.apache.sandesha2.util.SandeshaUtil;
+
+/**
+ * This testcase is similar to the AnonymousAckEchoTest, but the replyTo EPR
+ * is also anonymous, so all the server->client message flows use the HTTP
+ * backchannel.
+ */
+public class AnonymousEchoTest extends SandeshaTestCase {
+
+ public AnonymousEchoTest () {
+ super ("AnonymousEchoTest");
+ }
+
+ public void setUp () throws Exception {
+ super.setUp();
+ String repoPath = "target" + File.separator + "repos" +
File.separator + "server";
+ String axis2_xml = repoPath + File.separator +
"server_axis2.xml";
+ startServer(repoPath, axis2_xml);
+ }
+
+ public void testSyncEcho () throws Exception {
+ String to = "http://127.0.0.1:" + serverPort +
"/axis2/services/RMSampleService";
+
+ String repoPath = "target" + File.separator + "repos" +
File.separator + "client";
+ String axis2_xml = repoPath + File.separator +
"client_axis2.xml";
+ ConfigurationContext configContext =
ConfigurationContextFactory.createConfigurationContextFromFileSystem(repoPath,axis2_xml);
+
+ Options clientOptions = new Options ();
+ clientOptions.setAction(echoAction);
+ clientOptions.setTo(new EndpointReference (to));
+ String sequenceKey = SandeshaUtil.getUUID();
+ String offeredSequenceID = SandeshaUtil.getUUID();
+ clientOptions.setProperty(SandeshaClientConstants.LAST_MESSAGE,
"true");
+
clientOptions.setProperty(SandeshaClientConstants.SEQUENCE_KEY,sequenceKey);
+
clientOptions.setProperty(SandeshaClientConstants.OFFERED_SEQUENCE_ID,offeredSequenceID);
+
clientOptions.setProperty(SandeshaClientConstants.RM_SPEC_VERSION,Sandesha2Constants.SPEC_VERSIONS.v1_1);
+ clientOptions.setTransportInProtocol(Constants.TRANSPORT_HTTP);
+
+ // Put in enough config to convince Axis that this is async,
without setting up
+ // new WS-Adressing replyTo etc.
+ clientOptions.setUseSeparateListener(true);
+
clientOptions.setProperty(Constants.Configuration.USE_CUSTOM_LISTENER,Boolean.TRUE);
+
+ ServiceClient serviceClient = new ServiceClient
(configContext,null);
+ serviceClient.setOptions(clientOptions);
+
+ OMElement reply =
serviceClient.sendReceive(getEchoOMBlock("echo1",sequenceKey));
+ String replyText = checkEchoOMBlock(reply);
+ assertEquals("echo1", replyText);
+
+ long limit = System.currentTimeMillis() + waitTime;
+ Error lastError = null;
+ while(System.currentTimeMillis() < limit) {
+ Thread.sleep(tickTime); // Try the assertions each tick
interval, until they pass or we time out
+
+ try {
+ //assertions for the out sequence.
+ SequenceReport sequenceReport =
SandeshaClient.getOutgoingSequenceReport(serviceClient);
+
assertTrue(sequenceReport.getCompletedMessages().contains(new Long(1)));
+
assertEquals(SequenceReport.SEQUENCE_DIRECTION_OUT,
sequenceReport.getSequenceDirection());
+
assertEquals(SequenceReport.SEQUENCE_STATUS_TERMINATED,
sequenceReport.getSequenceStatus());
+
+ //assertions for the in sequence
+ sequenceReport =
SandeshaClient.getIncomingSequenceReport(offeredSequenceID, configContext);
+
assertTrue(sequenceReport.getCompletedMessages().contains(new Long(1)));
+
assertEquals(SequenceReport.SEQUENCE_DIRECTION_IN,
sequenceReport.getSequenceDirection());
+
assertEquals(SequenceReport.SEQUENCE_STATUS_TERMINATED,
sequenceReport.getSequenceStatus());
+
+ lastError = null;
+ break;
+ } catch(Error e) {
+ lastError = e;
+ }
+ }
+
+ if(lastError != null) throw lastError;
+
+ configContext.getListenerManager().stop();
+ serviceClient.cleanup();
+ }
+
+}
Propchange:
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/scenarios/AnonymousEchoTest.java
------------------------------------------------------------------------------
svn:eol-style = native
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]