I just saw the messaging core specifiction rev.1.
It seems that current core (cvs) will be changed anyway. That probably makes my question obsolete.
Do these changes already go into the 1.0 alpha?
First of all, thank you for your involvement.
I don't think http://jira.jboss.org/jira/browse/JBMESSAGING-59 is a good starting point.
As you very well noticed, this task is going to be part of a major core overhaul, based on the Revision 1 and Adrian's suggestions expressed on http://www.jboss.org/index.html?module=bb&op=viewtopic&t=65108
These changes won't make it into the alpha I plan to release some time next week. The current core is good enough for an "non-clustered 1.0 alpha" (http://jira.jboss.org/jira/secure/IssueNavigator.jspa?reset=true&pid=12310061&fixfor=12310280).
A really good starting point would be to run the TCK and fix the code base toward JMS 1.1 compliance. That would give you *really* good exposure to the code. I am not sure about the logistic implications of this move, though. If you are interested in getting involved in this, let's continue the discussion offline, since this is not a design issue anymore. My e-mail is firstname.lastname@example.org.
NACK'ed messages that should be delivered asynch are passed to the MessageStore and AckStore, if they cant be delivered right away. The LocalPipe looks at the AckStore for NACK'ed messages and passes them to the router. Messages are removed from the AckStore (in this case the local one), when the router accepts them.
When are successful delivered messages removed from the MessageStore?
The way you described things reflects an obsolete design. My apologies, I should have changed the initial specification document. A NACKed message is being kept by the LocalQueue (or LocalTopic), which are AbstractDestinations, until the Receiver that NACKed either acknowledges or requests redelivery. The message is removed from the message store upon the arrival of a positive ACK or timeout.
Look at the message state diagram from http://wiki.jboss.org/wiki/Wiki.jsp?page=JBossMessagingCoreRevision1