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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to