It makes quite a difference if the third party communication can or should be asynchronous. On top of that, is there a talk back channel from the third party? JCA seems to be a necessary solution if you are opting for synchronous communication and the third party operation should be part of the web service transaction. Unfortunately I am a door knob here so I won't say more. However, if asynchronous communication is permitted and the third party component can talk back to whoever-contains-the-web-service, I do suggest you looking into using persistent state machines. Each side of this communication has a state machine which remembers in which state of talking this side is in, and each event will move the operation one step closer unless an error happens. Each event here can be carried synchronously. This might not be the solution for you if your me-and-my-third-party logic is not slicable like the bread I still have in my kitchen.