Author: gatfora
Date: Thu Feb 22 21:48:11 2007
New Revision: 510839

URL: http://svn.apache.org/viewvc?view=rev&rev=510839
Log:
Fix duplicate RMSBean error from SenderWorker which is caused when 2 sends 
happen at the same time targetting the same end point, which causes 2 RMSBeans 
to be created by the setupNewClientSequence which have the same 
InternalSequenceId, also reworked some trace from MakeConnectionProcessor

Modified:
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.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=510839&r1=510838&r2=510839
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
 (original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
 Thu Feb 22 21:48:11 2007
@@ -39,6 +39,7 @@
 import org.apache.sandesha2.security.SecurityManager;
 import org.apache.sandesha2.security.SecurityToken;
 import org.apache.sandesha2.storage.StorageManager;
+import org.apache.sandesha2.storage.beanmanagers.RMSBeanMgr;
 import org.apache.sandesha2.storage.beanmanagers.SenderBeanMgr;
 import org.apache.sandesha2.storage.beans.RMDBean;
 import org.apache.sandesha2.storage.beans.RMSBean;
@@ -217,28 +218,25 @@
 
                String outSequenceID = null;
 
-               boolean sendCreateSequence = false;
-               if (rmsBean == null) { // out sequence will be set for the
-                                                                               
// server side, in the case of an offer.
-                       sendCreateSequence = true; // message number being one 
and not
-                                                                               
        // having an out sequence, implies
-                                                                               
        // that a create sequence has to be
-                                                                               
        // send.
+               if (rmsBean == null) { 
+                       // SENDING THE CREATE SEQUENCE.
+                       synchronized (RMSBeanMgr.class) {
+                               // There is a timing window where 2 sending 
threads can hit this point
+                               // at the same time and both will create an 
RMSBean to the same endpoint
+                               // with the same internal sequenceid
+                               // Check that someone hasn't created the bean
+                               rmsBean = 
SandeshaUtil.getRMSBeanFromInternalSequenceId(storageManager, 
internalSequenceId);
+                               
+                               // if first message - setup the sending side 
sequence - both for the
+                               // server and the client sides.
+                               if (rmsBean == null) {
+                                       rmsBean = 
SequenceManager.setupNewClientSequence(msgContext, internalSequenceId, 
storageManager);
+                                       rmsBean = 
addCreateSequenceMessage(rmMsgCtx, rmsBean, storageManager);
+                               }
+                       }
+               
                } else {
                        outSequenceID = rmsBean.getSequenceID();
-               }
-
-               // SENDING THE CREATE SEQUENCE.
-               if (sendCreateSequence) {
-
-                       // if first message - setup the sending side sequence - 
both for the
-                       // server and the client sides.
-                       rmsBean = 
SequenceManager.setupNewClientSequence(msgContext, internalSequenceId, 
storageManager);
-                       rmsBean = addCreateSequenceMessage(rmMsgCtx, rmsBean, 
storageManager);
-               }
-               
-               if (rmsBean == null) {
-                       rmsBean = 
SandeshaUtil.getRMSBeanFromInternalSequenceId(storageManager, 
internalSequenceId);
                }
                
                // the message number that was last used.

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=510839&r1=510838&r2=510839
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java
 (original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java
 Thu Feb 22 21:48:11 2007
@@ -46,7 +46,7 @@
         * This is processed using a SenderWorker. 
         */
        public boolean processInMessage(RMMsgContext rmMsgCtx) throws AxisFault 
{
-               if(log.isDebugEnabled()) log.debug("Entry: 
MakeConnectionProcessor::processInMessage");
+               if(log.isDebugEnabled()) log.debug("Enter: 
MakeConnectionProcessor::processInMessage " + 
rmMsgCtx.getSOAPEnvelope().getBody());
 
                MakeConnection makeConnection = (MakeConnection) 
rmMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.MAKE_CONNECTION);
                Address address = makeConnection.getAddress();
@@ -109,6 +109,7 @@
                
                replyToPoll(rmMsgCtx, senderBean, storageManager, pending, 
makeConnection.getNamespaceValue());
                
+               if(log.isDebugEnabled()) log.debug("Exit: 
MakeConnectionProcessor::processInMessage");
                return false;
        }
        
@@ -119,7 +120,7 @@
                        String namespace)
        throws AxisFault
        {
-               if(log.isDebugEnabled()) log.debug("Entry: 
MakeConnectionProcessor::replyToPoll");
+               if(log.isDebugEnabled()) log.debug("Enter: 
MakeConnectionProcessor::replyToPoll");
                TransportOutDescription transportOut = 
pollMessage.getMessageContext().getTransportOut();
                if (transportOut==null) {
                        String message = SandeshaMessageHelper.getMessage(
@@ -173,7 +174,7 @@
                messagePending.toSOAPEnvelope(returnMessage.getEnvelope());
        }
 
-       public boolean processOutMessage(RMMsgContext rmMsgCtx) throws 
AxisFault {
+       public boolean processOutMessage(RMMsgContext rmMsgCtx) {
                return false;
        }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to