This content has been marked as final. Show 6 replies
Use a XAConnection factory for the jms proxy so that the receipt happens under a transaction and will not be acknowledged unless the proxy message flow completes successfully.
with UOO you will require to make the transaction syschronous.
1. Make transacation XA enable
2. using Route for the sychrounous transaction
3. use routing options and select mode = request-respone
4. if Proxy service is jms based then you should also set JMS Transport -> Advance settings -> is XA required ->checked
Do you have to set request-response in the route even if it's a one-way message flow? i.e., you have to make it a two way flow to get in-order delivery? Would this also work inside a route table? The use case is here that the sender in site A establishes the unit of order, and the ESB routes each message to N other sites propagating the UOO by copying all the headers.
Edited by: SteveElkind on Apr 28, 2011 7:48 AM
I don't know what you need UOO for, but, for some use cases, its sufficient just to configure a default UOO on the sender's connection factory.
Propapagation of a UOO from one desitnation to another is not automatic (except via SAF, or unless OSB somehow does it for you). Plain vanilla JMS apps do this by calling msg.getStringProperty("JMS_BEA_UnitOfOrder") on the received message and setUnitOfOrder() on the javax.jms.WLProducer.
You might find that there's more OSB expertise on an OSB newsgroup (I think it's one of the newsgroups under [url http://forums.oracle.com/forums/category.jspa?categoryID=194]SOA & Process Management).
We've been told by the local Oracle team that since OSB can propagate all headers that was sufficient to propagate UOO. AFAIK there is no built-in capability in OSB to call setUnitOfOrder(). I'll follow up with them on that further.
The ConnectionFactory option may be impractical - we will probably have 1000's of units of orders (or even essentially unlimited by needing date-specific UOOs). Can UOO be engaged by setting a message property using the standard JMS API?
AFAIK there is no built-in capability in OSB to call setUnitOfOrder().You can use a transport header action to set the Unit of order. If you want to just propagate the unit of order from one jms queue to another, make sure you have a transport header action with Pass All Headers through pipeline checked.