-
1. Re: Knowledge of redelivery
kukeltje Jul 29, 2007 4:20 PM (in response to bill.burke)Bill,
Do you have any usecase? We use jms internally in our company and have never been interested in these kinds of info. It is just like someone that sends a package via DHL/UPS/TNT is not interested in how many times a guy/girl went to the house an no-one was there. You only want to know it did or did not get delivered.
The setRedelivery() could be interesting. Have to give it more thoughts thought. -
2. Re: Knowledge of redelivery
bill.burke Jul 30, 2007 9:21 AM (in response to bill.burke)I'll answer your question with a question: Why would a JMS receiver be interested on whether or not a message was redelivered? Maybe a node does not support redelivery of the message. Maybe a node needs to take additional action on a redelivery.
Maybe you are executing a remote service that doesn't support transactions and that may have been executed. So you'll want to transition to a different state that compensates for this.
Since jBPM uses a one size fits all approach for transitioning through JMS you don't have the option of tweaking message delivery semantics on a per node basis. -
3. Re: Knowledge of redelivery
genman Aug 1, 2007 12:08 AM (in response to bill.burke)The redelivery flag is not necessarily a useful thing to have access to.
If the JMS provider restarts, it might actually be false even though the message was in the middle of processing earlier. Or, the redelivery flag might actually be set to true even if your MDB.onMessage() was never reached. This could happen if the inflow adapter loses a connection to the JMS provider on another machine.
The spec also says: "If a client receives a message with the redelivered indicator set, it is likely, but not guaranteed, that this message was delivered to the client earlier but the client did not acknowledge its receipt at that earlier time."
JBoss provides a redelivery count as well (I originally wrote this feature) which is persisted, so is a little more reliable. But I wouldn't rely on this for performing transaction compensations.
If a node needs to take additional action on redelivery, for example, then the best thing is to check every time a message is received that that action was or was not performed.
What might be useful to provide are checkpoints that are persisted (not as the MDB transaction context) that indicate some non-transactional resource was used earlier. -
4. Re: Knowledge of redelivery
kukeltje Aug 1, 2007 12:22 PM (in response to bill.burke)If a node needs to take additional action on redelivery, for example, then the best thing is to check every time a message is received that that action was or was not performed.
You mean some 'duplicate elimination' on the receiving end? That is exactly what we do (and what e.g. the ebMS specs say as well)What might be useful to provide are checkpoints that are persisted (not as the MDB transaction context) that indicate some non-transactional resource was used earlier.
and then use e.g. compensating actions? That is at least what we do.