<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>
<channel>
	<title>Comments on: Must I compensate for everything?</title>
	<atom:link href="http://bill.burkecentral.com/2007/07/20/must-i-compensate-for-everything/feed/" rel="self" type="application/rss+xml" />
	<link>http://bill.burkecentral.com/2007/07/20/must-i-compensate-for-everything/</link>
	<description>Middleware tech talk</description>
	<pubDate>Fri, 21 Nov 2008 23:31:55 +0000</pubDate>
	<generator>http://wordpress.org/?v=MU</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Distributed Compensation with REST and jBPM &#171; Angry Bill</title>
		<link>http://bill.burkecentral.com/2007/07/20/must-i-compensate-for-everything/#comment-219</link>
		<dc:creator>Distributed Compensation with REST and jBPM &#171; Angry Bill</dc:creator>
		<pubDate>Tue, 18 Sep 2007 12:18:27 +0000</pubDate>
		<guid isPermaLink="false">http://billburke.wordpress.com/2007/07/20/must-i-compensate-for-everything/#comment-219</guid>
		<description>[...] Must I compensate for everything? [...]</description>
		<content:encoded><![CDATA[<p>[...] Must I compensate for everything? [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mark Little</title>
		<link>http://bill.burkecentral.com/2007/07/20/must-i-compensate-for-everything/#comment-42</link>
		<dc:creator>Mark Little</dc:creator>
		<pubDate>Thu, 02 Aug 2007 09:19:59 +0000</pubDate>
		<guid isPermaLink="false">http://billburke.wordpress.com/2007/07/20/must-i-compensate-for-everything/#comment-42</guid>
		<description>I think the difference is that in the BA case the client doesn't need to worry about how to invoke a compensator on a service (or a number of services that must be compensated together or not at all). The information about how to compensate is down to the service developer and this is wrapped within a participant that then gets enrolled with the BA coordinator. In the case where you've only got a single service to compensate then something like BA is overkill (though an equivalent of onePhaseCommit would help there). But as soon as you enlist more than one service, it becomes too much overhead on the client developer IMO. BTW, BA also supports a "mixed" outcome. By default, the termination of a BA scope is atomic, so either all of the participants compensate for their services or none of them do. But you can change that so a subset are compensated and the remaining aren't. The coordinator does this reliably too, so we fail safe.</description>
		<content:encoded><![CDATA[<p>I think the difference is that in the BA case the client doesn&#8217;t need to worry about how to invoke a compensator on a service (or a number of services that must be compensated together or not at all). The information about how to compensate is down to the service developer and this is wrapped within a participant that then gets enrolled with the BA coordinator. In the case where you&#8217;ve only got a single service to compensate then something like BA is overkill (though an equivalent of onePhaseCommit would help there). But as soon as you enlist more than one service, it becomes too much overhead on the client developer IMO. BTW, BA also supports a &#8220;mixed&#8221; outcome. By default, the termination of a BA scope is atomic, so either all of the participants compensate for their services or none of them do. But you can change that so a subset are compensated and the remaining aren&#8217;t. The coordinator does this reliably too, so we fail safe.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: billburke</title>
		<link>http://bill.burkecentral.com/2007/07/20/must-i-compensate-for-everything/#comment-41</link>
		<dc:creator>billburke</dc:creator>
		<pubDate>Wed, 01 Aug 2007 22:04:01 +0000</pubDate>
		<guid isPermaLink="false">http://billburke.wordpress.com/2007/07/20/must-i-compensate-for-everything/#comment-41</guid>
		<description>I'm talking about business logic.  In the BPM case, which is business logic driven, the business logic invokes all the compensation actions.  In the BA case, doesn't the framework coordinator handle all this?  Meaning, all this compensation logic is hidden from the application developer?</description>
		<content:encoded><![CDATA[<p>I&#8217;m talking about business logic.  In the BPM case, which is business logic driven, the business logic invokes all the compensation actions.  In the BA case, doesn&#8217;t the framework coordinator handle all this?  Meaning, all this compensation logic is hidden from the application developer?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mark Little</title>
		<link>http://bill.burkecentral.com/2007/07/20/must-i-compensate-for-everything/#comment-40</link>
		<dc:creator>Mark Little</dc:creator>
		<pubDate>Wed, 01 Aug 2007 22:00:35 +0000</pubDate>
		<guid isPermaLink="false">http://billburke.wordpress.com/2007/07/20/must-i-compensate-for-everything/#comment-40</guid>
		<description>You know, I wish we had a whiteboard again or I lived in Boston 'cause I'm always sure we'd have good conversations ;-) Anyway ... in BA the client doesn't know how a service compensates for the work that it did for the client, but the client definitely knows whether the business transaction (for which the BA provides the scope) needs to undo or not. So I don't quite get the &lt;i&gt;"the client is decoupled from whether the resource must be compensated"&lt;/i&gt;. BTW, I'm assuming &lt;i&gt;resource&lt;/i&gt; is service/component/object/whatever and not the participant registered with the coordinator? Maybe there's some disconnect there too: as with traditional tx, there's a service/participant split in BA too. Clients talk to services/objects/whatevers that encompass the business logic, whereas the BA coordinator talks to participants (registered by the service or on behalf of the service somehow).</description>
		<content:encoded><![CDATA[<p>You know, I wish we had a whiteboard again or I lived in Boston &#8217;cause I&#8217;m always sure we&#8217;d have good conversations <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> Anyway &#8230; in BA the client doesn&#8217;t know how a service compensates for the work that it did for the client, but the client definitely knows whether the business transaction (for which the BA provides the scope) needs to undo or not. So I don&#8217;t quite get the <i>&#8220;the client is decoupled from whether the resource must be compensated&#8221;</i>. BTW, I&#8217;m assuming <i>resource</i> is service/component/object/whatever and not the participant registered with the coordinator? Maybe there&#8217;s some disconnect there too: as with traditional tx, there&#8217;s a service/participant split in BA too. Clients talk to services/objects/whatevers that encompass the business logic, whereas the BA coordinator talks to participants (registered by the service or on behalf of the service somehow).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: billburke</title>
		<link>http://bill.burkecentral.com/2007/07/20/must-i-compensate-for-everything/#comment-39</link>
		<dc:creator>billburke</dc:creator>
		<pubDate>Wed, 01 Aug 2007 21:45:50 +0000</pubDate>
		<guid isPermaLink="false">http://billburke.wordpress.com/2007/07/20/must-i-compensate-for-everything/#comment-39</guid>
		<description>Mark, seems BA is about further decoupling.  With BPM, the process drives and must know about whether to compensate or not.  With BA driven services, the client is decoupled from whether the resource must be compensated or not and how it is compensated.</description>
		<content:encoded><![CDATA[<p>Mark, seems BA is about further decoupling.  With BPM, the process drives and must know about whether to compensate or not.  With BA driven services, the client is decoupled from whether the resource must be compensated or not and how it is compensated.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mark Little</title>
		<link>http://bill.burkecentral.com/2007/07/20/must-i-compensate-for-everything/#comment-37</link>
		<dc:creator>Mark Little</dc:creator>
		<pubDate>Wed, 01 Aug 2007 21:17:39 +0000</pubDate>
		<guid isPermaLink="false">http://billburke.wordpress.com/2007/07/20/must-i-compensate-for-everything/#comment-37</guid>
		<description>First off, all transactions are "compensation transactions" ;-) The ones we know and long just do backward compensation. What you're describing is forward compensation (at least that's was WS-BA/Sagas is all about). Second, I don't see this as a jBPM versus BA approach. Ultimately you need something that can reliably record who was involved in the "transaction" and hence who needs to be told to undo, even in the presence of arbitrary failures. That's a coordinator. Plus, some of the participants in the "transaction" may not need to be compensated (c.f., returning VoteReadonly during prepare of 2PC). That's all WS-BA does: it provides a standard (for Web Services) for the protocol between coordinator and participants. It doesn't define when or if a "transaction" should be terminated in a successful or failure state. That's definitely the domain of the business logic. Plus, it doesn't define how any compensations should be done. Again, that's an implementation decision. Participants in a forward compensation based transaction are more often than not tied to the business logic/object/service that they're compensating: they're rarely re-usable (e.g., forward compensating a flight reservation is different to compensating buying a book). WS-BPEL defines compensation handlers in the same way that jBPM would for the business process. Some implementations use WS-BA, others don't. But those that don't have a coordinator somewhere to do the same thing; they just don't bother with the interoperability. One of the earlier Web Services TX specifications (BTP) tried to mix business logic with the coordinator, but that wasn't the right approach. The business logic should always be in charge, driving the coordinator appropriately. You might find &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-comproto/" rel="nofollow"&gt;this&lt;/a&gt; useful.</description>
		<content:encoded><![CDATA[<p>First off, all transactions are &#8220;compensation transactions&#8221; <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> The ones we know and long just do backward compensation. What you&#8217;re describing is forward compensation (at least that&#8217;s was WS-BA/Sagas is all about). Second, I don&#8217;t see this as a jBPM versus BA approach. Ultimately you need something that can reliably record who was involved in the &#8220;transaction&#8221; and hence who needs to be told to undo, even in the presence of arbitrary failures. That&#8217;s a coordinator. Plus, some of the participants in the &#8220;transaction&#8221; may not need to be compensated (c.f., returning VoteReadonly during prepare of 2PC). That&#8217;s all WS-BA does: it provides a standard (for Web Services) for the protocol between coordinator and participants. It doesn&#8217;t define when or if a &#8220;transaction&#8221; should be terminated in a successful or failure state. That&#8217;s definitely the domain of the business logic. Plus, it doesn&#8217;t define how any compensations should be done. Again, that&#8217;s an implementation decision. Participants in a forward compensation based transaction are more often than not tied to the business logic/object/service that they&#8217;re compensating: they&#8217;re rarely re-usable (e.g., forward compensating a flight reservation is different to compensating buying a book). WS-BPEL defines compensation handlers in the same way that jBPM would for the business process. Some implementations use WS-BA, others don&#8217;t. But those that don&#8217;t have a coordinator somewhere to do the same thing; they just don&#8217;t bother with the interoperability. One of the earlier Web Services TX specifications (BTP) tried to mix business logic with the coordinator, but that wasn&#8217;t the right approach. The business logic should always be in charge, driving the coordinator appropriately. You might find <a href="http://www.ibm.com/developerworks/webservices/library/ws-comproto/" rel="nofollow">this</a> useful.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Andy</title>
		<link>http://bill.burkecentral.com/2007/07/20/must-i-compensate-for-everything/#comment-35</link>
		<dc:creator>Andy</dc:creator>
		<pubDate>Wed, 01 Aug 2007 03:49:29 +0000</pubDate>
		<guid isPermaLink="false">http://billburke.wordpress.com/2007/07/20/must-i-compensate-for-everything/#comment-35</guid>
		<description>I guess my big whine is your use of "compensating transactions" which I regard as something different.  Write this in JBossese: http://blogs.msdn.com/rogerwolterblog/archive/2006/05/24/606184.aspx  He more or less explains what I was trying to say and what you were trying to say and hocks BizTalk to boot ;-)</description>
		<content:encoded><![CDATA[<p>I guess my big whine is your use of &#8220;compensating transactions&#8221; which I regard as something different.  Write this in JBossese: <a href="http://blogs.msdn.com/rogerwolterblog/archive/2006/05/24/606184.aspx" rel="nofollow">http://blogs.msdn.com/rogerwolterblog/archive/2006/05/24/606184.aspx</a>  He more or less explains what I was trying to say and what you were trying to say and hocks BizTalk to boot <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: billburke</title>
		<link>http://bill.burkecentral.com/2007/07/20/must-i-compensate-for-everything/#comment-30</link>
		<dc:creator>billburke</dc:creator>
		<pubDate>Thu, 26 Jul 2007 13:49:13 +0000</pubDate>
		<guid isPermaLink="false">http://billburke.wordpress.com/2007/07/20/must-i-compensate-for-everything/#comment-30</guid>
		<description>Andy, you're stealing my thunder :(  My next blog was going to be about how compensation is better to be handled as a business process through jbpm than handled by a business activity service or compensating transaction coordinator.</description>
		<content:encoded><![CDATA[<p>Andy, you&#8217;re stealing my thunder <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  My next blog was going to be about how compensation is better to be handled as a business process through jbpm than handled by a business activity service or compensating transaction coordinator.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Andy</title>
		<link>http://bill.burkecentral.com/2007/07/20/must-i-compensate-for-everything/#comment-29</link>
		<dc:creator>Andy</dc:creator>
		<pubDate>Thu, 26 Jul 2007 06:49:27 +0000</pubDate>
		<guid isPermaLink="false">http://billburke.wordpress.com/2007/07/20/must-i-compensate-for-everything/#comment-29</guid>
		<description>In some cases.  Compensating transactions wouldn't ever be my first choice for most stuff, but there are plenty of edge cases.  It is a tool, however, dang how many people even use EJB transactions correctly?  Crap how many people use basic database transactions correctly?  I also don't know that canceling an order is a great case for compensating transactions as I know them.  In a good system these follow accounting rules and there is more of a workflow.  The data is maintained but put in a new state rather than undone.  I don't know that this falls into what I call "compensating transactions"...certainly compensation is involved ;-).  I kinda like Gavin's new terminology of "conversation" for this.  Certainly JBPM would be a way to map the workflow and states.  I just don't know that I'd call your specific example quintessential compensation per se -- but what do I know... I just crashed gnome for the 5th time today.</description>
		<content:encoded><![CDATA[<p>In some cases.  Compensating transactions wouldn&#8217;t ever be my first choice for most stuff, but there are plenty of edge cases.  It is a tool, however, dang how many people even use EJB transactions correctly?  Crap how many people use basic database transactions correctly?  I also don&#8217;t know that canceling an order is a great case for compensating transactions as I know them.  In a good system these follow accounting rules and there is more of a workflow.  The data is maintained but put in a new state rather than undone.  I don&#8217;t know that this falls into what I call &#8220;compensating transactions&#8221;&#8230;certainly compensation is involved ;-).  I kinda like Gavin&#8217;s new terminology of &#8220;conversation&#8221; for this.  Certainly JBPM would be a way to map the workflow and states.  I just don&#8217;t know that I&#8217;d call your specific example quintessential compensation per se &#8212; but what do I know&#8230; I just crashed gnome for the 5th time today.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: billburke</title>
		<link>http://bill.burkecentral.com/2007/07/20/must-i-compensate-for-everything/#comment-28</link>
		<dc:creator>billburke</dc:creator>
		<pubDate>Wed, 25 Jul 2007 20:37:53 +0000</pubDate>
		<guid isPermaLink="false">http://billburke.wordpress.com/2007/07/20/must-i-compensate-for-everything/#comment-28</guid>
		<description>So what you've basically done is further justify the need for compensation.  Thanks :)</description>
		<content:encoded><![CDATA[<p>So what you&#8217;ve basically done is further justify the need for compensation.  Thanks <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
</channel>
</rss>
