Author: mckierna
Date: Thu Jul  5 02:56:40 2007
New Revision: 553443

URL: http://svn.apache.org/viewvc?view=rev&rev=553443
Log:
SANDESHA2-96: reduce gap in dup msg filtering

Modified:
    
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java

Modified: 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java?view=diff&rev=553443&r1=553442&r2=553443
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
 (original)
+++ 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
 Thu Jul  5 02:56:40 2007
@@ -17,6 +17,8 @@
 
 package org.apache.sandesha2.handlers;
 
+import java.util.List;
+
 import javax.xml.namespace.QName;
 
 import org.apache.axiom.om.OMElement;
@@ -44,6 +46,7 @@
 import org.apache.sandesha2.storage.StorageManager;
 import org.apache.sandesha2.storage.Transaction;
 import org.apache.sandesha2.storage.beanmanagers.RMDBeanMgr;
+import org.apache.sandesha2.storage.beans.InvokerBean;
 import org.apache.sandesha2.storage.beans.RMDBean;
 import org.apache.sandesha2.util.FaultManager;
 import org.apache.sandesha2.util.MsgInitializer;
@@ -215,6 +218,25 @@
           if (log.isDebugEnabled())
               log.debug("Detected duplicate message " + msgNo);
             
+               boolean isDuplicate = true;
+               //still allow this msg if we have no corresponding invoker bean 
for it and we are inOrder
+               boolean isInOrder = 
+                       
SandeshaUtil.getDefaultPropertyBean(rmMsgCtx.getConfigurationContext().getAxisConfiguration()).isInOrder();
+               if(isInOrder)
+               {
+               InvokerBean finderBean = new InvokerBean();
+               finderBean.setMsgNo(msgNo);
+               finderBean.setSequenceID(sequenceId);
+               List invokerBeanList = 
storageManager.getInvokerBeanMgr().find(finderBean);
+               if((invokerBeanList==null || invokerBeanList.size()==0) 
+                               && bean.getNextMsgNoToProcess()<=msgNo){
+                       isDuplicate = false;
+              if (log.isDebugEnabled())
+                log.debug("Allowing completed message on sequence " + 
sequenceId + ", msgNo " + msgNo);
+               }
+               }
+               
+               if(isDuplicate){
             // Add the duplicate RM AxisOperation to the message
             
             //If the service has not been found by this time, we cannot 
proceed.
@@ -222,7 +244,8 @@
             if (service==null)
                  throw new SandeshaException ("Duplicate message detected. But 
cant dispatch since the Service has not been found");
             
-            setupDuplicateOperation(rmMsgCtx);
+            setupDuplicateOperation(rmMsgCtx);                 
+               }
             
         }
       } else {



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

Reply via email to