6 Replies Latest reply: Apr 28, 2011 7:54 PM by 687626 RSS

    using weblogic unit-of-order (UOO) in osb proxy service

    user9024636
      Hi,

      I have a JMS Queue deployed to Weblogic server. The messages inside the queue are grouped using the JMS_BEA_Unit-of-order (UOO) Weblogic feature.

      Now i have a OSB 10g Proxy Service which reads messages from this Queue. The problem is, on recieving a message, acknowledgement is send immediately, thus removing the message from the Queue and next message with same Unit-Of-Order is ready for processing.

      But the business scenario needs the first message to be read, processed and then decide to acknowledge or not. The second message should not be read unless the previous message is processed successfully.

      Can anyone help with this scenario?

      Thanks,
      Alex

      Edited by: user9024636 on Feb 11, 2010 2:57 AM
        • 1. Re: using weblogic unit-of-order (UOO) in osb proxy service
          687626
          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.
          • 2. Re: using weblogic unit-of-order (UOO) in osb proxy service
            712757
            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

            Regards,
            http://soa-street.blogspot.com
            • 3. Re: using weblogic unit-of-order (UOO) in osb proxy service
              SteveElkind
              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
              • 4. Re: using weblogic unit-of-order (UOO) in osb proxy service
                Tom B
                Hi Steve,

                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).

                Regards,

                Tom
                • 5. Re: using weblogic unit-of-order (UOO) in osb proxy service
                  SteveElkind
                  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?
                  • 6. Re: using weblogic unit-of-order (UOO) in osb proxy service
                    687626
                    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.