User: chirino 
  Date: 01/06/18 16:39:07

  Modified:    src/main/org/jbossmq SpyMessageConsumer.java
  Log:
  Bug fix for Message Re-Delivery bug.
  
  Revision  Changes    Path
  1.4       +38 -28    jbossmq/src/main/org/jbossmq/SpyMessageConsumer.java
  
  Index: SpyMessageConsumer.java
  ===================================================================
  RCS file: /cvsroot/jboss/jbossmq/src/main/org/jbossmq/SpyMessageConsumer.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- SpyMessageConsumer.java   2001/03/02 01:12:40     1.3
  +++ SpyMessageConsumer.java   2001/06/18 23:39:07     1.4
  @@ -26,7 +26,7 @@
    *   @author Norbert Lataille ([EMAIL PROTECTED])
    *   @author Hiram Chirino ([EMAIL PROTECTED])
    * 
  - *   @version $Revision: 1.3 $
  + *   @version $Revision: 1.4 $
    */
   public class SpyMessageConsumer implements MessageConsumer, SpyConsumer {
   
  @@ -182,7 +182,9 @@
                        if ( this instanceof SpyQueueReceiver || 
subscription.durableSubscriptionName!=null ) {
                                if (session.modeStop)
                                        return null;
  -                             return session.connection.receive(getSubscription(), 
-1);
  +
  +                             SpyMessage msg = 
session.connection.receive(getSubscription(), -1);
  +                             return preProcessMessage( msg );
                        }
   
                        synchronized (messages) {
  @@ -340,41 +342,49 @@
   
                                        //the SAME Message object is put in different 
SessionQueues
                                        //when we deliver it, we have to clone() it to 
insure independance
  +                                     //HRC: could we avoid this if we know that we 
are delivering in P2P???
                                        SpyMessage message = mes.myClone();
  -                                     message.session = session;
   
  -                                     // Has the message expired?
  -                                     if (mes.isOutdated()) {
  -                                             Log.notice("SessionQueue: I dropped a 
message (timeout)");
  -                                             if ( message.shouldAck ) 
  -                                                     message.doAcknowledge();
  +                                     Message rc = preProcessMessage( message );
  +                                     // could happen if the message has expired.
  +                                     if( rc == null ) 
                                                continue;
  -                                     }
  -
  -                                     // Should we try to ack before the message is 
processed?
  -                                     if (messageListener == null) {
  -
  -                                             if (message.shouldAck && 
session.transacted) {
  -                                                     
session.connection.spyXAResourceManager.ackMessage(session.currentTransactionId, 
message);
  -                                             } else if (message.shouldAck && 
session.acknowledgeMode == session.AUTO_ACKNOWLEDGE || session.acknowledgeMode == 
session.DUPS_OK_ACKNOWLEDGE) {
  -                                                     message.doAcknowledge();
  -                                             }
  -                                             
  -                                             if( message instanceof 
SpyEncapsulatedMessage ) 
  -                                                     return 
((SpyEncapsulatedMessage)message).getMessage();
  -                                             return message;
  -                                             
  -                                     } else {
  -                                             return message;
  -                                     }
  +                             
  +                                     return rc;
   
                                } catch (Exception e) {
                                        e.printStackTrace();
                                }
  -
                        }
  +             }
  +     }
   
  +     Message preProcessMessage(SpyMessage message) throws JMSException {
  +             message.session = session;
  +
  +             // Has the message expired?
  +             if (message.isOutdated()) {
  +                     Log.notice("SessionQueue: I dropped a message (timeout)");
  +                     if ( message.shouldAck ) 
  +                             message.doAcknowledge();
  +                     return null;
                }
   
  +             // Should we try to ack before the message is processed?
  +             if (messageListener == null) {
  +
  +                     if (message.shouldAck && session.transacted) {
  +                             
session.connection.spyXAResourceManager.ackMessage(session.currentTransactionId, 
message);
  +                     } else if (message.shouldAck && session.acknowledgeMode == 
session.AUTO_ACKNOWLEDGE || session.acknowledgeMode == session.DUPS_OK_ACKNOWLEDGE) {
  +                             message.doAcknowledge();
  +                     }
  +                                     
  +                     if( message instanceof SpyEncapsulatedMessage ) 
  +                             return ((SpyEncapsulatedMessage)message).getMessage();
  +                     return message;
  +                     
  +             } else {
  +                     return message;
  +             }
        }
  -}
  \ No newline at end of file
  +}
  
  
  

_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to