Hi Rodrigo, Well, I'm thinking that if your requirements are such that your application cannot tolerate an eventual consistency of such a level then probably a more "traditional" XA type of solution would be more appropriate for your circumstances.
HTH, Savvas On 8 June 2015 at 19:02, Rodrigo Uchôa <rodrigo.uc...@gmail.com> wrote: > Guys, > > Once again, thank you both for your help. > > Savvas, that's really an option we're considering. But like Michael said, > it would be just a workaround, not really an "atomic transaction". But it > is indeed one option. I'm still trying to weight which of the two pays off. > > Regards, > Rodrigo. > > On Mon, Jun 8, 2015 at 8:28 AM, Michael Musgrove <mmusg...@redhat.com> > wrote: > >> I am not sure this will always be the best solution if the inserts at >> the two servers need to be treated as a single business operation. >> >> The solution you propose means that the inserts do not happen atomically >> and therfore you will put Consistency and Isolation at risk - ie other >> applications will see some of the inserts before both transactions have >> committed. >> >> Mike >> >> Hi Rodrigo, >> >> Does this really have to be in the classical sense of a "distributed >> transaction"? Can you not have App B embed a "undo" hypermedia link in its >> response? >> >> Given the following steps: >> >> 1) App A starts transaction and inserts some rows >> 2) App A makes REST call to app B >> 3) App B inserts rows in a separate transaction and returns a 200 >> response including a "undo" hypermedia link >> 5) App A commits own transaction >> >> If steps 1 or 2 fail App A rollsback transaction so no problem there. >> If step 3 fails then a 500 response (or even a 4** one in case of >> validation errors) will be returned in which case App A can again rollback >> its transaction >> If step 5 fails then App A makes a POST request to the "undo" URL >> >> Savvas >> >> On 2 June 2015 at 18:03, Michael Musgrove <mmusg...@redhat.com> wrote: >> >>> REST-AT and JTA are different transaction models. Unfortunately we >>> only provide an "inbound bridge" to go from REST-AT to JTA but I think you >>> need the other direction ie JTA to REST-AT. >>> >>> There may be a workaround for you though which I would need to >>> experiment with. You would need to start a REST-AT transaction and emulate >>> what we do with the "inbound bridge" by manually starting a bridge. >>> Something similar to: >>> >>> 1) EJB in web app A will start a REST-AT transaction >>> 2) EJB in web app A will start an InboundBridge (instead of the JTA >>> transaction): >>> InboundBridge inboundBridge = >>> InboundBridgeManager.getInstance().createInboundBridge("enlistmentUrl from >>> step 1"); >>> inboundBridge.start(); >>> 3) EJB in web app A will perform JTA work (insert some records in a >>> database) >>> 4) invoke REST endpoint in app B passing the enlistmentUrl in a Link >>> header >>> 5) Mark up the REST endpoint in app B (using the >>> javax.transaction.Transactional annotation) - this will automatically start >>> an instance of the inbound bridge >>> 6) commit the REST-AT transaction started in step 1. This will cause the >>> work done in B and in A to commit within the context of the single REST-AT >>> transaction. >>> >>> The only other ways to we have for distributed transactions are: >>> >>> - "distributed remoting protocol" for JTA (think EJBs) >>> - and of course we JTS too; >>> - web services transactions (XTS, WS-AT) >>> - BlackTie for C based clients >>> >>> Mike >>> >>> Mike, >>> >>> I have been reading the docs and taking a look at the code samples. >>> I'm still unsure however if the protocol/api covers the scenario I'm in: >>> >>> I have a client web app (A), and a REST endpoint (B). Two separate >>> applications. Client in web app A is not a REST endpoint itself, just a >>> regular stateless EJB. >>> >>> So in my scenario the stateless EJB in web app A will start a >>> transaction, insert some records in a database and invoke REST endpoint in >>> app B, which in turn will also run a transaction to insert records in a >>> database. We need to make sure these two transactions are atomic. That >>> meaning, the two transactions should be only one. >>> >>> To me it seems that the protocol only covers scenarios where both >>> participants in the transaction are REST resources, which in my case is not >>> true. The client needs to participate in the transaction and it's just a >>> regular EJB. >>> >>> Is this really the case? >>> >>> Regards! >>> >>> On Tue, May 26, 2015 at 1:43 PM, Rodrigo Uchôa <rodrigo.uc...@gmail.com> >>> wrote: >>> >>>> Thanks a lot, Mike! Exactly what I needed. >>>> >>>> On Tue, May 26, 2015 at 6:06 AM, Michael Musgrove <mmusg...@redhat.com> >>>> wrote: >>>> >>>>> The narayana transaction manager has a rest service that creates >>>>> [transaction] Coordinator resources. These resources map onto conventional >>>>> ACID transactions. It is up to your service to decide what to do when the >>>>> "transaction" is completing. However, we also have a "JTA Bridge" that >>>>> will >>>>> detect when your JAX-RS service performs JTA work (JMS, JPA etc) and >>>>> automatically enlist those XA participants with the currently active >>>>> coordinator. >>>>> >>>>> Our on-line docs [1] contains descriptions of the [REST-AT] protocol >>>>> and our implementation of it including a small section on the bridge [2]. >>>>> We have a number of quickstarts [3] that show it action including a >>>>> quickstart that demonstrates how to enable and use the JTA (inbound) >>>>> bridge >>>>> [4]. >>>>> >>>>> We also provide an integration API [5] that abstracts the mechanics of >>>>> participating in REST-AT transactions - there is a high level description >>>>> of it on our team blog [6]. >>>>> >>>>> >>>>> [1] http://narayana.io/documentation/ >>>>> [REST-AT] >>>>> http://narayana.io/docs/specs/restat-v2-draft-8-2013-jul-29.pdf >>>>> [2] >>>>> http://narayana.io/docs/project/index.html#_interoperating_with_other_transaction_models >>>>> [3] https://github.com/jbosstm/quickstart/tree/master/rts >>>>> [4] >>>>> https://github.com/jbosstm/quickstart/tree/master/rts/at/jta-service >>>>> [5] >>>>> http://narayana.io/docs/project/index.html#_support_for_java_based_services >>>>> [6] >>>>> http://jbossts.blogspot.co.uk/2013/07/out-of-box-support-for-restful.html >>>>> >>>>> >>>>> I have an web application "A" that occasionally have to >>>>> insert/update records that belong to another application, "B". To manage >>>>> this requirement, application "B" expose some REST endpoints that >>>>> application "A" will call whenever it needs. >>>>> >>>>> Problem is, we need to make sure that the inserts/updates occurring >>>>> in both applications are atomic. >>>>> >>>>> Does anyone have done something similar and can point a solution? I >>>>> know that there's a debate whether transactions in REST are conceptually >>>>> wrong, but we're willing to break the rules in this case. >>>>> >>>>> >>>>> OK let's not go there then (but when you say "we're willing to break >>>>> the rules" you are already tacitly stating on which side of the argument >>>>> you stand). >>>>> >>>>> Mike >>>>> >>>>> >>>>> >>>>> Regards! >>>>> >>>>> >>>>> ------------------------------------------------------------------------------ >>>>> One dashboard for servers and applications across Physical-Virtual-Cloud >>>>> Widest out-of-the-box monitoring support with 50+ applications >>>>> Performance metrics, stats and reports that give you Actionable Insights >>>>> Deep dive visibility with transaction tracing using APM >>>>> Insight.http://ad.doubleclick.net/ddm/clk/290420510;117567292;y >>>>> >>>>> >>>>> >>>>> _______________________________________________ >>>>> Resteasy-users mailing >>>>> listResteasy-users@lists.sourceforge.nethttps://lists.sourceforge.net/lists/listinfo/resteasy-users >>>>> >>>>> >>>>> >>>>> -- >>>>> Michael Musgrove >>>>> Red Hat UK Ltd, Transactions Team >>>>> e: mmusg...@redhat.com >>>>> t: +44 191 243 0870 >>>>> >>>>> Registered in England and Wales under Company Registration No. 03798903 >>>>> Directors: Michael Cunningham (US), Charles Peters (US), Matt Parson >>>>> (US), Michael O'Neill(Ireland) >>>>> >>>>> >>>> >>> >>> >>> -- >>> Michael Musgrove >>> Red Hat UK Ltd, Transactions Team >>> e: mmusg...@redhat.com >>> t: +44 191 243 0870 >>> >>> Registered in England and Wales under Company Registration No. 03798903 >>> Directors: Michael Cunningham (US), Charles Peters (US), Matt Parson (US), >>> Michael O'Neill(Ireland) >>> >>> >>> >>> ------------------------------------------------------------------------------ >>> >>> _______________________________________________ >>> Resteasy-users mailing list >>> Resteasy-users@lists.sourceforge.net >>> https://lists.sourceforge.net/lists/listinfo/resteasy-users >>> >>> >> >> >> -- >> Michael Musgrove >> Red Hat UK Ltd, Transactions Team >> e: mmusg...@redhat.com >> t: +44 191 243 0870 >> >> Registered in England and Wales under Company Registration No. 03798903 >> Directors: Michael Cunningham (US), Charles Peters (US), Matt Parson (US), >> Michael O'Neill(Ireland) >> >> >
------------------------------------------------------------------------------
_______________________________________________ Resteasy-users mailing list Resteasy-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/resteasy-users