In JMS messages are not removed from the server, and are available for redelivery until they are acknowledge by the client. This occurs by the client either:
a) Committing a transaction
b) Explicitly acking CLIENT_ACKNOWLEDGE
c) Acks being sent from the client when either DUPS_OK_ACKNOWLEDGE or AUTO_ACKNOWLEDGE is used
In all above cases it requires traffic from the client to the server for the acks
In many cases (e.g. transient messaging, stock prices), the messages are dispensable, it doesn't matter if a few are lost on event of failure. In such a case it makes sense for the server to automatically ack the message before delivery to the consumer.
This can result in less traffic and less work to do on the client, also the server can get rid of the message immediately after delivery and does not have to retain it for possible future redelivery.
This is already implemented by messaging systems including HornetQ and Weblogic JMS. Would be nice to have this in the JMS spec since it's such a common extension.