You are viewing a plain text version of this content. The canonical link for it is here.
Posted to sandesha-dev@ws.apache.org by ml...@apache.org on 2007/03/15 18:03:55 UTC

svn commit: r518690 - in /webservices/sandesha/trunk/java/src/org/apache/sandesha2: msgprocessors/ storage/beans/ storage/inmemory/ util/ workers/

Author: mlovett
Date: Thu Mar 15 10:03:54 2007
New Revision: 518690

URL: http://svn.apache.org/viewvc?view=rev&rev=518690
Log:
Ensure we try the backchannel before we allow a message to be returned by MakeConnection

Modified:
    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/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/TerminateManager.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/WSRMMessageSender.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java

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=518690&r1=518689&r2=518690
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java Thu Mar 15 10:03:54 2007
@@ -432,6 +432,10 @@
 		EndpointReference to = createSeqRMMessage.getTo();
 		if (to!=null)
 			createSeqEntry.setToAddress(to.getAddress());
+		// If this message is targetted at an anonymous address then we must not have a transport
+		// ready for it, as the create sequence is not a reply.
+		if(to == null || to.hasAnonymousAddress())
+			createSeqEntry.setTransportAvailable(false);
 
 		createSeqMsg.setProperty(Sandesha2Constants.QUALIFIED_FOR_SENDING, Sandesha2Constants.VALUE_FALSE);
 		

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=518690&r1=518689&r2=518690
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java Thu Mar 15 10:03:54 2007
@@ -60,6 +60,7 @@
 		//selecting the set of SenderBeans that suit the given criteria.
 		SenderBean findSenderBean = new SenderBean ();
 		findSenderBean.setSend(true);
+		findSenderBean.setTransportAvailable(false);
 		
 		if (address!=null)
 			findSenderBean.setToAddress(address.getAddress());

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=518690&r1=518689&r2=518690
==============================================================================
--- 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 Thu Mar 15 10:03:54 2007
@@ -113,6 +113,14 @@
 	private long inboundMessageNumber;
 	
 	/**
+	 * If this flag is set to false then the message cannot be delivered, as it is
+	 * targetted at an anonymous address, and we have no approriate transport available.
+	 * When this happens the message will be picked up by a MakeConnection message (or
+	 * by replaying the request message)
+	 */
+	private boolean transportAvailable = true;
+	
+	/**
 	 * Flags that are used to check if the primitive types on this bean
 	 * have been set. If a primitive type has not been set then it will
 	 * be ignored within the match method.
@@ -126,6 +134,7 @@
 	private static final int MSG_TYPE_FLAG     = 0x00100000;
 	private static final int LAST_MSG_FLAG     = 0x01000000;
 	private static final int IN_MSG_NUM_FLAG   = 0x10000000;
+	private static final int TRANSPORT_FLAG    = 0x00000002;
 
 	public SenderBean() {
 
@@ -262,6 +271,15 @@
 		this.inboundSequence = inboundSequence;
 	}
 
+	public boolean isTransportAvailable() {
+		return transportAvailable;
+	}
+
+	public void setTransportAvailable(boolean transportAvailable) {
+		this.transportAvailable = transportAvailable;
+		this.flags |= TRANSPORT_FLAG;
+	}
+
 	public String toString() {
 		StringBuffer result = new StringBuffer();
 		// There is a lot of data in this bean, so we don't trace it all.
@@ -276,6 +294,7 @@
 		result.append("\nResend         : "); result.append(reSend);
 		result.append("\nSent count     : "); result.append(sentCount);
 		result.append("\nTime to send   : "); result.append(timeToSend);
+		result.append("\nTransport avail: "); result.append(transportAvailable);
 		return result.toString();
 	}
 	
@@ -324,6 +343,9 @@
 			match = false;
 
 		else if((bean.flags & IN_MSG_NUM_FLAG) != 0 && bean.getInboundMessageNumber() != this.getInboundMessageNumber())
+			match = false;
+
+		else if((bean.flags & TRANSPORT_FLAG) != 0 && bean.isTransportAvailable() != this.isTransportAvailable())
 			match = false;
 
 		return match;

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=518690&r1=518689&r2=518690
==============================================================================
--- 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 Thu Mar 15 10:03:54 2007
@@ -74,6 +74,7 @@
 		matcher.setSend(true);
 		matcher.setSequenceID(sequenceId);
 		matcher.setTimeToSend(System.currentTimeMillis());
+		matcher.setTransportAvailable(true);
 		
 		List matches = super.find(matcher);
 		if(log.isDebugEnabled()) log.debug("Found " + matches.size() + " messages");

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/TerminateManager.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/TerminateManager.java?view=diff&rev=518690&r1=518689&r2=518690
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/TerminateManager.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/TerminateManager.java Thu Mar 15 10:03:54 2007
@@ -374,6 +374,11 @@
 		if (to!=null)
 			terminateBean.setToAddress(to.getAddress());
 
+		// If this message is targetted at an anonymous address then we must not have a transport
+		// ready for it, as the terminate sequence is not a reply.
+		if(to == null || to.hasAnonymousAddress())
+			terminateBean.setTransportAvailable(false);
+
 		rmsBean.setTerminateAdded(true);
 
 		storageManager.getRMSBeanMgr().update(rmsBean);

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/WSRMMessageSender.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/WSRMMessageSender.java?view=diff&rev=518690&r1=518689&r2=518690
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/WSRMMessageSender.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/WSRMMessageSender.java Thu Mar 15 10:03:54 2007
@@ -148,6 +148,11 @@
 		EndpointReference to = msgContext.getTo();
 		if (to!=null)
 			senderBean.setToAddress(to.getAddress());
+
+		// If this message is targetted at an anonymous address then we must not have a transport
+		// ready for it, as the current message is not a reply.
+		if(to == null || to.hasAnonymousAddress())
+			senderBean.setTransportAvailable(false);
 		
 		msgContext.setProperty(Sandesha2Constants.QUALIFIED_FOR_SENDING, Sandesha2Constants.VALUE_FALSE);
 

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=518690&r1=518689&r2=518690
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java Thu Mar 15 10:03:54 2007
@@ -146,6 +146,15 @@
 			if((toEPR==null || toEPR.hasAnonymousAddress()) &&
 			   (makeConnection == null || !makeConnection.booleanValue()) &&
 			   (t == null || !t.getStatus().equals(RequestResponseTransportStatus.WAITING))) {
+				
+				// Mark this sender bean so that we know that the transport is unavailable, if the
+				// bean is still stored.
+				SenderBean bean = senderBeanMgr.retrieve(senderBean.getMessageID());
+				if(bean != null && bean.isTransportAvailable()) {
+					bean.setTransportAvailable(false);
+					senderBeanMgr.update(bean);
+				}
+				
 				if (log.isDebugEnabled())
 					log.debug("Exit: SenderWorker::run, no response transport for anonymous message");
 				return;



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