<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Udi Dahan - The Software Simplist &#187; Search Results  &#187;  [Podcast]</title>
	<atom:link href="http://www.udidahan.com/?s=Podcast&#038;feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.udidahan.com</link>
	<description>Enterprise Development Expert &#38; SOA Specialist</description>
	<lastBuildDate>Tue, 31 Aug 2010 09:56:46 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>The Fallacy Of ReUse</title>
		<link>http://www.udidahan.com/2009/06/07/the-fallacy-of-reuse/</link>
		<comments>http://www.udidahan.com/2009/06/07/the-fallacy-of-reuse/#comments</comments>
		<pubDate>Sun, 07 Jun 2009 08:40:16 +0000</pubDate>
		<dc:creator>udidahan</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Autonomous Services]]></category>
		<category><![CDATA[EDA]]></category>
		<category><![CDATA[OO]]></category>
		<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://www.udidahan.com/?p=1026</guid>
		<description><![CDATA[This industry is pre-occupied with reuse.
There&#8217;s this belief that if we just reused more code, everything would be better.
Some even go so far as saying that the whole point of object-orientation was reuse &#8211; it wasn&#8217;t, encapsulation was the big thing. After that component-orientation was the thing that was supposed to make reuse happen. Apparently [...]]]></description>
			<content:encoded><![CDATA[<p>This industry is pre-occupied with reuse.</p>
<p>There&#8217;s this belief that if we just reused more code, everything would be better.</p>
<p>Some even go so far as saying that the whole point of object-orientation was reuse &#8211; it wasn&#8217;t, encapsulation was the big thing. After that component-orientation was the thing that was supposed to make reuse happen. Apparently that didn&#8217;t pan out so well either because here we are now pinning our reuseful hopes on service-orientation.</p>
<p>Entire books of patterns have been written on how to achieve reuse with the orientation of the day.<br />
Services have been classified every which way in trying to achieve this, from entity services and activity services, through process services and orchestration services. Composing services has been touted as the key to reusing, and creating reusable services.</p>
<p>I might as well let you in on the dirty-little secret:</p>
<h3>Reuse is a fallacy</h3>
<p>Before running too far ahead, let&#8217;s go back to what the actual goal of reuse was: getting done faster.</p>
<p>That&#8217;s it.</p>
<p>It&#8217;s a fine goal to have.</p>
<p>And here&#8217;s how reuse fits in to the picture:</p>
<blockquote><p>
If we were to write all the code of a system, we&#8217;d write a certain amount of code.<br />
If we could reuse some code from somewhere else that was written before, we could write less code.<br />
The more code we can reuse, the less code we write.<br />
The less code we write, the sooner we&#8217;ll be done!
</p></blockquote>
<p>However, the above logical progression is based on another couple of fallacies:</p>
<h3>Fallacy: All code takes the same amount of time to write</h3>
<h3>Fallacy: Writing code is the primary activity in getting a system done</h3>
<p>Anyone who&#8217;s actually written some code that&#8217;s gone into production knows this.</p>
<p>There&#8217;s the time it takes us to understand what the system should do.<br />
Multiply that by the time it takes the users to understand what the system should do <img src='http://www.udidahan.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
Then there&#8217;s the integrating that code with all the other code, databases, configuration, web services, etc.<br />
Debugging. Deploying. Debugging. Rebugging. Meetings. Etc.</p>
<p>Writing code is actually the least of our worries.<br />
We actually spend less time writing code than&#8230;</p>
<h3>Rebugging code</h3>
<p>Also known as bug regressions.</p>
<p>This is where we fix one piece of code, and in the process break another piece of code.<br />
It&#8217;s not like we do it on purpose. It&#8217;s all those dependencies between the various bits of code.<br />
The more dependencies there are, the more likely something&#8217;s gonna break.<br />
Especially when we have all sorts of hidden dependencies,<br />
like when other code uses stuff we put in the database without asking us what it means,<br />
or, heaven forbid, changing it without telling us.</p>
<p>These debugging/rebugging cycles can make stabilizing a system take a long time.</p>
<p>So, how does reuse help/hinder with that?</p>
<p>Here&#8217;s how:</p>
<h3>Dependencies multiply by reuse</h3>
<p>It&#8217;s to be expected. If you wrote the code all in one place, there are no dependencies. By reusing code, you&#8217;ve created a dependency. The more you reuse, the more dependencies you have. The more dependencies, the more rebugging.</p>
<p>Of course, we need to keep in mind the difference between&#8230;</p>
<h3>Reuse &#038; Use</h3>
<p>Your code <b>uses</b> the runtime API (JDK, .NET BCL, etc).<br />
Likewise other frameworks like (N)Hibernate, Spring, WCF, etc.</p>
<p>Reuse happens when you extend and override existing behaviors within other code.<br />
This is most often done by inheritance in OO languages.</p>
<p>Interestingly enough, by the above generally accepted definition, most web services &#8220;reuse&#8221; is actually really use.</p>
<p>Let&#8217;s take a look at the characteristics of the code we&#8217;re using and reusing to see where we get the greatest value:</p>
<h3>The value of (re)use</h3>
<p>If we were to (re)use a piece of code in only one part of our system, it would be safe to say that we would get less value than if we could (re)use it in more places. For example, we could say that for many web applications, the web framework we use provides more value than a given encryption algorithm that we may use in only a few places.</p>
<p>So, what characterizes the code we use in many places?</p>
<p>Well, it&#8217;s very <b>generic</b>.</p>
<p>Actually, the more generic a piece of code, the less likely it is that we&#8217;ll be changing something in it when fixing a bug in the system.</p>
<p><b>That&#8217;s important</b>.</p>
<p>However, when looking at the kind of code we reuse, and the reasons around it, we tend to see very <b>non-generic</b> code &#8211; something that deals with the domain-specific behaviors of the system. Thus, the likelihood of a bug fix needing to touch that code is higher than in the generic/use-not-reuse case, often much higher.</p>
<h3>How it all fits together</h3>
<blockquote><p>
Goal:&#09;Getting done faster<br />
Via:&#09;Spending less time debugging/rebugging/stabilizing<br />
Via:&#09;Having less dependencies reasonably requiring a bug fix to touch the dependent side<br />
Via:&#09;Not reusing non-generic code
</p></blockquote>
<p>This doesn&#8217;t mean you shouldn&#8217;t use generic code / frameworks where applicable &#8211; absolutely, you should.<br />
Just watch the number of kind of dependencies you introduce.</p>
<h3>Back to services</h3>
<p>So, if we follow the above advice with services, we wouldn&#8217;t want domain specific services reusing each other.<br />
If we could get away with it, we probably wouldn&#8217;t even want them using each other either.</p>
<p>As use and reuse go down, we can see that service autonomy goes up. And vice-versa.<br />
Luckily, we have service interaction mechanisms from Event-Driven Architecture that enable use without breaking autonomy.<br />
Autonomy is actually very similar to the principle of encapsulation that drove object-orientation in the first place.<br />
Interesting, isn&#8217;t it?</p>
<h3>In summary</h3>
<p>We all want to get done faster.</p>
<p>Way back when, someone told us reuse was the way to do that.</p>
<p>They were wrong.</p>
<p>Reuse may make sense in the most tightly coupled pieces of code you have, but not very much anywhere else.</p>
<p>When designing services in your SOA, stay away from reuse, and minimize use (with EDA patterns).</p>
<p>The next time someone pulls the &#8220;reuse excuse&#8221;, you&#8217;ll be ready.</p>
<hr size="1" />
<h3>Further Reading</h3>
<ul>
<li><a href="http://www.udidahan.com/2008/10/22/additional-logic-required-for-service-autonomy/">Additional logic required for service autonomy</a></li>
<li><a href="http://www.udidahan.com/2008/12/13/self-contained-events-and-soa/">Self-contained events &#038; SOA</a></li>
<li><a href="http://msdn2.microsoft.com/en-us/arcjournal/bb245672">Autonomous Services and Enterprise Entity Aggregation</a> [MS Architecture Journal]</li>
<li><a href="http://udidahan.weblogs.us/2006/05/26/podcast-does-soa-mean-the-end-of-oo/">Does SOA mean the end of OO?</a> [Podcast]</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/2009/06/07/the-fallacy-of-reuse/feed/</wfw:commentRss>
		<slash:comments>49</slash:comments>
		</item>
		<item>
		<title>DDD &amp; Many to Many Object Relational Mapping</title>
		<link>http://www.udidahan.com/2009/01/24/ddd-many-to-many-object-relational-mapping/</link>
		<comments>http://www.udidahan.com/2009/01/24/ddd-many-to-many-object-relational-mapping/#comments</comments>
		<pubDate>Sat, 24 Jan 2009 19:47:02 +0000</pubDate>
		<dc:creator>udidahan</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[DDD]]></category>
		<category><![CDATA[Data Access]]></category>
		<category><![CDATA[Databases]]></category>
		<category><![CDATA[NHibernate]]></category>

		<guid isPermaLink="false">http://www.udidahan.com/2009/01/24/ddd-many-to-many-object-relational-mapping/</guid>
		<description><![CDATA[ The ability to map entity relationships is broadly supported by many O/RM tools. For some reason, though, many developers run into issues when trying to map a many-to-many relationship between entities. Although much has already been written about the technological aspects of it, I thought I&#8217;d take more of an architectural / DDD perspective [...]]]></description>
			<content:encoded><![CDATA[<p><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 0px 10px 10px; border-right-width: 0px" height="150" alt="many to many" src="http://www.udidahan.com/wp-content/uploads/image52.png" width="150" align="right" border="0"> The ability to map entity relationships is broadly supported by many O/RM tools. For some reason, though, many developers run into issues when trying to map a many-to-many relationship between entities. Although much has already been written about the technological aspects of it, I thought I&#8217;d take more of an architectural / DDD perspective on it here.</p>
<h3>Value Objects Don&#8217;t Count</h3>
<p>While the canonical example presented is Customer -&gt; Address, and has a good treatment <a href="http://devlicio.us/blogs/billy_mccafferty/archive/2008/07/11/when-to-use-many-to-one-s-vs-many-to-many-with-nhibernate.aspx">here</a> for nHibernate, it isn&#8217;t architecturally representative.</p>
<p>Addresses are value objects. What this means is that if we have to instance of the Address class, and they both have the same business data, they are semantically equivalent. Customers, on the other had, are not value objects &#8211; they&#8217;re entities. If we have two customers with the same business data (both of them called Bob Smith), that does not mean they are semantically equivalent &#8211; they are not the same person.</p>
<h3>All Entities</h3>
<p>Therefore, for our purposes here we&#8217;ll use something different. Say we have an entity called Job which is something that a company wants to hire for. It has a title, description, skill level, and a bunch of other data. Say we also have another entity called Job Board which is where the company posts jobs so that applicants can see them, like Monster.com. A job board has a name, description, web site, referral fee, and a bunch of other data.</p>
<p>A job can be posted to multiple job boards. And a job board can have multiple jobs posted. A regular many to many relationship. At this point, we&#8217;re not even going to complicate the association.</p>
<p>This is simply represented in the DB with an association table containing two columns for each of the entity tables&#8217; ids. </p>
<p>In the domain model, developers can also represent this with the Job class containing a list of JobBoard instances, and the JobBoard class containing a list of jobs.</p>
<p>It&#8217;s intuitive. Simple. Easy to implement. And wrong.</p>
<p>In order to make intelligent DDD choices, we&#8217;re going to first take what may seem to be a tangential course, but I assure you that your aggregate roots depend on it.</p>
<h3>Moving forward with our example</h3>
<p>Let&#8217;s say the user picks a job, and then ticks off the job boards where they want the job posted, and clicks submit.</p>
<p>For simplicity&#8217;s sake, at this point, let&#8217;s ignore the communication with the actual job sites, assuming that if we can get the association into the DB, magic will happen later causing the job to appear on all the sites.</p>
<p>Our well-intentioned developer takes the job ID, and all the job board IDs, opens a transaction, gets the job object, gets the job board objects, adds all the job board objects to the job, and commits, as follows:</p>
<p><!-- code formatted by http://manoli.net/csharpformat/ -->
<div class="csharpcode">
<pre class="alt"><span class="lnum">   1:  </span>        <span class="kwrd">public</span> <span class="kwrd">void</span> PostJobToBoards(Guid jobId, <span class="kwrd">params</span> Guid[] boardIds)</pre>
<pre><span class="lnum">   2:  </span>        {</pre>
<pre class="alt"><span class="lnum">   3:  </span>            <span class="kwrd">using</span> (ISession s = <span class="kwrd">this</span>.SessionFactory.OpenSession())</pre>
<pre><span class="lnum">   4:  </span>            <span class="kwrd">using</span> (ITransaction tx = s.BeginTransaction())</pre>
<pre class="alt"><span class="lnum">   5:  </span>            {</pre>
<pre><span class="lnum">   6:  </span>                var job = s.Get&lt;Job&gt;(jobId);</pre>
<pre class="alt"><span class="lnum">   7:  </span>                var boards = <span class="kwrd">new</span> List&lt;JobBoard&gt;();</pre>
<pre><span class="lnum">   8:  </span>&nbsp;</pre>
<pre class="alt"><span class="lnum">   9:  </span>                <span class="kwrd">foreach</span>(Guid id <span class="kwrd">in</span> boardIds)</pre>
<pre><span class="lnum">  10:  </span>                    boards.Add(s.Get&lt;JobBoard&gt;(id));</pre>
<pre class="alt"><span class="lnum">  11:  </span>&nbsp;</pre>
<pre><span class="lnum">  12:  </span>                job.PostTo(boards);</pre>
<pre class="alt"><span class="lnum">  13:  </span>&nbsp;</pre>
<pre><span class="lnum">  14:  </span>                tx.Commit();</pre>
<pre class="alt"><span class="lnum">  15:  </span>            }</pre>
<pre><span class="lnum">  16:  </span>        }</pre>
</div>
<p>In this code, Job is our aggregate root. You can see that is the case since Job is the entry point that the service layer code uses to interact with the domain model. Soon we&#8217;ll see why this is wrong.</p>
<p>** Notice that in this service layer code, our well-intentioned developer is following the rule that while you can get as many objects as you like, you are only allowed one method call on one domain object. The code called in line 12 is what you&#8217;d pretty much expect:</p>
<p><!-- code formatted by http://manoli.net/csharpformat/ --></p>
<div class="csharpcode">
<pre class="alt"><span class="lnum">   1:  </span>        <span class="kwrd">public</span> <span class="kwrd">void</span> PostTo(IList&lt;JobBoard&gt; boards)</pre>
<pre><span class="lnum">   2:  </span>        {</pre>
<pre class="alt"><span class="lnum">   3:  </span>            <span class="kwrd">foreach</span>(JobBoard jb <span class="kwrd">in</span> boards)</pre>
<pre><span class="lnum">   4:  </span>            {</pre>
<pre class="alt"><span class="lnum">   5:  </span>                <span class="kwrd">this</span>.JobBoards.Add(jb);</pre>
<pre><span class="lnum">   6:  </span>                jb.Jobs.Add(<span class="kwrd">this</span>);</pre>
<pre class="alt"><span class="lnum">   7:  </span>            }</pre>
<pre><span class="lnum">   8:  </span>        }</pre>
</div>
<p>Only that as we were committing, someone deleted one of the job boards just then. Or that someone updated the job board causing a concurrency conflict. Or anything that would cause one single association to not be created.</p>
<p>That would cause the whole transaction to fail and all changes to roll back.</p>
<p>Rightly so, thinks our well-intentioned developer.</p>
<p>But users don&#8217;t think like well-intentioned developers.</p>
<h3>Partial Failures</h3>
<p>If I were to go to the grocery store with the list my wife gave me, finding that they&#8217;re out of hazelnuts (the last item on the list), would NOT buy all the other groceries and go home empty handed, what do you think would happen?</p>
<p>Right. That&#8217;s how users look at us developers. Before running off and writing a bunch of code, we need to understand the business semantics of users actions, including asking about partial failures.</p>
<p>The list isn&#8217;t a unit of work that needs to succeed or rollback atomically. It&#8217;s actually many units of work. I mean, I wouldn&#8217;t want my wife to send me to the store 10 times to buy 10 items, so the list is really just a kind of user shortcut. Therefore, in the job board scenario, each job to job board connection is its own transaction.</p>
<p>This is more common than you might think.</p>
<p>Once you go looking for cases where the domain is forgiving of partial failures, you may start seeing more and more of them.</p>
<h3>Aggregate Roots</h3>
<p>In the original transaction where we tried to connect many job boards to a single job, we saw that the single job is the aggregate root. However, once we have multiple transactions, each connecting one job and one job board, the job board is just as likely an aggregate root as the job.</p>
<p>We can do&nbsp;&nbsp; <font face="Courier">jobBoard.Post(job);</font>&nbsp;&nbsp;&nbsp; or&nbsp;&nbsp;&nbsp;&nbsp; <font face="Courier">job.PostTo(jobBoard);</font></p>
<p>But we need just a bit more analysis to come to the right decision.</p>
<p>While we could just leave the bi-directional/circular dependency between them, it would be preferable if we could make it uni-directional instead. To do that, we need to understand their relationship:</p>
<p>If there was no such thing as &#8220;job&#8221;, would there be meaning to &#8220;job board&#8221; ? Probably not.</p>
<p>If there was no such thing as &#8220;job board&#8221;, would there be meaning to &#8220;job&#8221; ? Probably. Yes. Our company can handle the hiring process of a job regardless of whether the candidate came in through Monster.com or not.</p>
<p>From this we understand that the uni-directional relationship can be modelled as one-to-many from job board to job. The Job class would no longer have a collection of Job Board objects. In fact, it could even be in an assembly separate from Job Board and not reference Job Board in any way. Job Board, on the other hand, would still have a collection of Job objects.</p>
<p>Going back to the code above we see that the right choice is&nbsp;&nbsp; <font face="Courier">jobBoard.Post(job);</font>&nbsp;&nbsp;&nbsp; </p>
<p>Job Board is the aggregate root in this case. Also, the many-to-many mapping has now dissolved, leaving behind a single one-to-many mapping.</p>
<p>Let that sink in a second.</p>
<h3>But Wait&#8230;</h3>
<p>While the GUI showing which jobs are posted on a given job board are well served by the above decision (simply traversing the object graph from Job Board to its collection of Jobs), that&#8217;s not the whole story. Another GUI needs to show administrative users which Job Boards a given Job has been posted to. Since we no longer have the domain-level connection, we can&#8217;t traverse myJob.JobBoards.</p>
<p>Our only option is to perform a query. That&#8217;s not so bad, but not as pretty as object traversal. </p>
<p>The real benefit is in chopping apart the Gordian M-to-N mapping knot and getting a cleaner, more well factored domain model. </p>
<p>That gives us much greater leverage for bigger, system-level decomposition.</p>
<p>We&#8217;re now all set to move up to a pub/sub solution between these aggregate roots, effectively upgrading them to Bounded Contexts. From there, we can move to full-blown internet-scale caching with REST for extra scalability on showing a job board with all its jobs.</p>
<h3>In Closing</h3>
<p>We often look at many-to-many relationships just like any other relationship. And from a purely technical perspective, we&#8217;re not wrong. However, the business reality around these relationships is often very different &#8211; forgiving of partial failures, to the point of actually requiring them.</p>
<p>Since the business folks who provide us with requirements rarely think of failure scenarios, they don&#8217;t specify that &#8220;between these two entities here, I don&#8217;t want transactional atomicity&#8221; (rolling our technical eyes &#8211; the idiots [sarcasm, just to make sure you don't misread me]).</p>
<p>Yet, if we were to spell out what the system will do under failure conditions when transactionally atomic, those same business folks will be rolling our eyes back to us.</p>
<p>What I&#8217;ve found surprises some DDD practitioners is how critical this issue really is to arriving at the correct aggregate roots and bounded contexts. </p>
<p>It&#8217;s also simple, and practical, so you won&#8217;t be offending the YAGNI police. </p>
<hr size="1">
<h3>Related Content</h3>
<blockquote>
<p><a href="http://www.udidahan.com/2008/02/15/from-crud-to-domain-driven-fluency/">From CRUD to Domain-Driven Fluency</a></p>
<p><a href="http://www.udidahan.com/2007/09/12/podcast-domain-models-soa-and-the-single-version-of-the-truth/">[Podcast] Domain Models, SOA, and The Single Version of the Truth</a></p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/2009/01/24/ddd-many-to-many-object-relational-mapping/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Self-Contained Events and SOA</title>
		<link>http://www.udidahan.com/2008/12/13/self-contained-events-and-soa/</link>
		<comments>http://www.udidahan.com/2008/12/13/self-contained-events-and-soa/#comments</comments>
		<pubDate>Sat, 13 Dec 2008 23:35:08 +0000</pubDate>
		<dc:creator>udidahan</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Autonomous Services]]></category>
		<category><![CDATA[EDA]]></category>
		<category><![CDATA[Master Data Management]]></category>
		<category><![CDATA[Pub/Sub]]></category>
		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://www.udidahan.com/2008/12/13/self-contained-events-and-soa/</guid>
		<description><![CDATA[In the architectural principle of fully self contained messages, events &#8220;can &#8211; instantly and in future &#8211; be interpreted as the respective event without the need to rely on additional data stores that would need to be in time-sync with the event during message-processing.&#8221;
Also, &#8220;passing reference data in a message makes the message-consuming systems dependent [...]]]></description>
			<content:encoded><![CDATA[<p><img style="border-right: 0px; border-top: 0px; margin: 0px 0px 10px 10px; border-left: 0px; border-bottom: 0px" height="237" alt="diamond" src="http://www.udidahan.com/wp-content/uploads/diamond.jpg" width="214" align="right" border="0">In <a href="http://soa-eda.blogspot.com/2008/11/architectural-principle-of-fully-self.html">the architectural principle of fully self contained messages</a>, events &#8220;can &#8211; instantly and in future &#8211; be interpreted as the respective event without the need to rely on additional data stores that would need to be in time-sync with the event during message-processing.&#8221;</p>
<p>Also, &#8220;passing reference data in a message makes the message-consuming systems dependent on the knowledge and availability of actual persistent data that is stored “somewhere”. This data must separately be accessed for the sake of understanding the event that is represented by the message.&#8221; </p>
<p>The discussion of self-contained events can be compared to <a href="http://martinfowler.com/bliki/IntegrationDatabase.html">integration databases</a> vs <a href="http://martinfowler.com/bliki/ApplicationDatabase.html">application databases</a>. </p>
<h3>Centralized Integration &#8211; Pros &amp; Cons</h3>
<p>If everything in a system can access a central datastore, it is enough for one party to publish an event containing only the ID of an entity that that party previously entered/updated. Upon receiving that event, a subscriber would go to the central datastore and get the fields its interested in for that ID. The advantage of this approach is that the minimal amount of data necessary crosses the network, as subscribers only retrieve the fields that interest them. Martin Fowler describes the disadvantages as:</p>
<blockquote><p>&#8220;An integration database needs a schema that takes all its client applications into account. The resulting schema is either more general, more complex or both. The database usually is controlled by a separate group to the applications and database changes are more complex because they have to be negotiated between the database group and the various applications.&#8221;</p>
</blockquote>
<p>This is far from being aligned with the principle of autonomy so important to SOA. In that respect, the architectural principle of self-contained messages points us away from those problems and towards more autonomous services.</p>
<p>However, once we have these autonomous business services in place, we may find that we don&#8217;t need 100% fully self-contained messages anymore. </p>
<h3>A Real-World Example</h3>
<p>Let&#8217;s say we have 3 business services, Sales, Fulfillment, and Billing.</p>
<p>Sales publishes an OrderAccepted event when it accepts an order. That event contains all the order information.</p>
<p>Both Fulfillment and Billing are subscribed to this event, and thus receive it. </p>
<p>Fulfillment does not ship products to the customer until the customer has been billed, so it just stores the order information internally, and is done.</p>
<p>Billing starts the process of billing the customer for their order, possibly joining several orders into a single bill. After completing this process, it publishes a CustomerBilled event containing all billing information, as well as the IDs of the orders in that bill. It does not put all the order information in that event, as it is not the authoritative owner of that data.</p>
<p>When Fulfillment receives the CustomerBilled event, it uses the IDs of the orders contained in the event to find the order information it previously stored internally. It does not need to call the Sales service for this information or contact some central Master Data Management system. It uses the data it has, and goes about fulfilling the orders and shipping the products to the customer, finally publishing its own OrderShipped event.</p>
<p>Notice, as well, that in the original OrderAccepted event there were the IDs of products the customer ordered. These product IDs originated from another service, Merchandising, responsible for the product catalog. The same thing can be said for the customer ID originating from another service &#8211; Customer Care.</p>
<h3>The Issue of Time</h3>
<p>One could argue that since subscribers use previously cached data when processing new events, that data might not be up to date. Also, we may have race conditions between our services. In the above example, if Billing was extremely fast and more highly available than Fulfillment. Billing could have received the OrderAccepted event, processed it, and published the CustomerBilled event before Fulfillment had received the OrderAccepted event. In short, the CustomerBilled and OrderAccepted messages could be out of order in Fulfillment’s queue.</p>
<p>What would Fulfillment do when trying to process the CustomerBilled message when it doesn’t have the order information?
<p>Well, it knows that the world is parallel and non-sequential, so it does NOT return/log an error, but rather puts that message in the back of the queue to be processed again later (or maybe in some other temporary holding area). This enables the OrderAccepted message to be processed before the CustomerBilled message is retried. When the retry occurs, well, everything’s OK – it’s worked itself out over time.
<p>In the case where we retry again and again and things don’t work themselves out (maybe the OrderAccepted event was lost), we move that message off to a different queue for something else to resolve the conflict (maybe a person, maybe software). If/when the conflict is resolved (got the Sales system / messaging system to replay the OrderAccepted event), the conflict resolver returns the CustomerBilled message to the queue, and now everything works just fine.
<p>As all of this is occurring, the only thing that’s visible to external parties is that it happens to be taking longer than usual for the OrderShipped event to be published. In other words, time is the only difference.<br />
<h3>&nbsp;</h3>
<h3>Summary</h3>
<p>The problem of non-self-contained events is mitigated first and foremost by business services in SOA, and the apparent issue of time-synchronization by business logic inside these services.</p>
<p>Don&#8217;t be afraid to put IDs in your messages and events.</p>
<p>Do be afraid of using those IDs to access datastores shared by multiple &#8220;services&#8221;.</p>
<p>Using IDs to correlated current events to data from previous events is not only OK, it&#8217;s to be expected.</p>
<p>The architectural principle of fully self-contained messages steers us away from the problems of Integration Databases and towards Application Databases, autonomous services, and a better SOA implementation. From there, following the principle of autonomy from a business perspective, will lead us to services not publishing data in their messages that is owned by other services, taking us the next step of our journey to SOA.</p>
<hr size="1">
<h3> Related Content</h3>
<blockquote><p><a href="http://www.udidahan.com/2008/01/01/podcast-message-ordering-is-it-cost-effective/">[Podcast] Message Ordering &#8211; Is it cost effective?</a></p>
<p><a href="http://www.udidahan.com/2007/08/16/dont-eda-between-existing-systems/">Don&#8217;t EDA between existing systems</a></p>
<p><a href="http://www.udidahan.com/2007/05/31/podcast-handling-dependencies-between-subscribers-in-soa/">[Podcast] Handling dependencies between subscribers in SOA</a></p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/2008/12/13/self-contained-events-and-soa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Podcast] Highly Scalable Web Architectures</title>
		<link>http://www.udidahan.com/2008/06/19/podcast-highly-scalable-web-architectures/</link>
		<comments>http://www.udidahan.com/2008/06/19/podcast-highly-scalable-web-architectures/#comments</comments>
		<pubDate>Thu, 19 Jun 2008 20:42:34 +0000</pubDate>
		<dc:creator>udidahan</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Caching]]></category>
		<category><![CDATA[Messaging]]></category>
		<category><![CDATA[Pub/Sub]]></category>
		<category><![CDATA[Scalability]]></category>
		<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://udidahan.weblogs.us/2008/06/19/podcast-highly-scalable-web-architectures/</guid>
		<description><![CDATA[For those people who couldn&#8217;t come to TechEd USA and didn&#8217;t see my talks on how to build highly scalable web architectures, you&#8217;re in luck &#8211; Craig, the man behind the Polymorphic Podcast sat down with me and we chatted about what the problems, common solutions, and effective tactics there are in this space. For [...]]]></description>
			<content:encoded><![CDATA[<p>For those people who couldn&#8217;t come to TechEd USA and didn&#8217;t see my talks on how to build highly scalable web architectures, you&#8217;re in luck &#8211; Craig, the man behind the <a href="http://polymorphicpodcast.com">Polymorphic Podcast</a> sat down with me and we chatted about what the problems, common solutions, and effective tactics there are in this space. For those of you who <em>were</em> at TechEd and still <em>didn&#8217;t</em> come to my talk &#8211; <em>what were you thinking?!</em></p>
<p> <img src='http://www.udidahan.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://polymorphicpodcast.com/shows/scaletheweb/">Check it out.</a></p>
<p>Some of this stuff is a bit counter-intuitive (and not readily supported by the tools available in Visual Studio) so please, do feel free to ask questions (in the comments below).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/2008/06/19/podcast-highly-scalable-web-architectures/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Prism &#8211; Occasionally Connected?</title>
		<link>http://www.udidahan.com/2008/06/09/prism-occasionally-connected/</link>
		<comments>http://www.udidahan.com/2008/06/09/prism-occasionally-connected/#comments</comments>
		<pubDate>Mon, 09 Jun 2008 12:46:56 +0000</pubDate>
		<dc:creator>udidahan</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Smart Client]]></category>
		<category><![CDATA[Threading]]></category>

		<guid isPermaLink="false">http://udidahan.weblogs.us/2008/06/09/prism-occasionally-connected/</guid>
		<description><![CDATA[Prism, AKA Composite Application Guidance + Composite Application Library, is rolling towards a release. I&#8217;ve been talking with Glenn Block quite a bit about Prism, and am even on the advisory board (what were they thinking?).
One of the topics not covered by Prism is occasional connectivity, and I would like to say a word or [...]]]></description>
			<content:encoded><![CDATA[<p>Prism, AKA Composite Application Guidance + Composite Application Library, is rolling towards a release. I&#8217;ve been talking with Glenn Block quite a bit about Prism, and am even on the advisory board (what were they thinking?).</p>
<p>One of the topics <em>not</em> covered by Prism is occasional connectivity, and I would like to say a word or two about that. First of all, if you&#8217;re building a standalone client (one that doesn&#8217;t communicate with anything), then there&#8217;s a good chance that Prism isn&#8217;t for you, although you could be composing other standalone client modules. So, if your client isn&#8217;t communicating with anything, well, then this post probably won&#8217;t interest you that much. Let&#8217;s start with&#8230;</p>
<h3>Physics<img style="border-right: 0px; border-top: 0px; margin: 0px 0px 10px 10px; border-left: 0px; border-bottom: 0px" height="192" alt="Physics" src="http://udidahan.weblogs.us/wp-content/uploads/image22.png" width="244" align="right" border="0"> </h3>
<p>Networks fail. Period. </p>
<p>This means that your client machine will not always be connected to other servers. </p>
<p>Also, servers fail &#8211; critical Windows patches and just regular power outages.</p>
<blockquote><p>Ergo, your &#8220;smart&#8221; client will be occasionally connected, whether you planned for it or not.</p>
</blockquote>
<p>And please don&#8217;t take this post as a &#8220;dumping on Prism&#8221; post &#8211; it isn&#8217;t intended that way. Rather, it is about how you should think about designing modules in Prism, and why.</p>
<h3>Modules and Connectivity</h3>
<p>Consider the case where we have two modules being composed in a single client. Each module communicates with a different server. Let&#8217;s call these modules Ma and Mb, and the servers Sa and Sb respectively. Now, let&#8217;s discuss what occurs given that the modules weren&#8217;t designed with occasional connectivity in mind.</p>
<blockquote><p>User clicks something in Mb which requires communication.</p>
<p>Mb tries to call Sb, say, over HTTP, using a regular web service invocation.</p>
<p>The calling thread, in this case, the one used for user interaction, is blocked waiting for a response from Sb.<a href="http://udidahan.weblogs.us/wp-content/uploads/image23.png"><img style="border-right: 0px; border-top: 0px; margin: 10px 0px 10px 10px; border-left: 0px; border-bottom: 0px" height="184" alt="image" src="http://udidahan.weblogs.us/wp-content/uploads/image-thumb19.png" width="244" align="right" border="0"></a></p>
<p>Sometime in this call, Sb fails, connectivity goes down, whatever. </p>
<p>30 seconds after the call, the HTTP connection times out.</p>
</blockquote>
<p>If something important were happening in Ma at the same time, the user couldn&#8217;t even <em>see</em> it, let alone do anything about it since the user interaction thread is stuck. This is a serious concern for the financial services domain, but in many others as well.</p>
<h3>You mean there&#8217;s more?</h3>
<p>I can go on, but I think that that&#8217;s enough to paint the picture that if you are building a smart client, there are a lot more things to think about than just learning Prism. That&#8217;s my main concern after witnessing what happened around the CAB. Given the learning curve around these frameworks many developers don&#8217;t seek to deepen their understanding beyond just becoming proficient with them. This isn&#8217;t just centered on the developers, evangelists in Microsoft tend to paint the picture this way:</p>
<blockquote><p>Once you understand X (CAB, Prism, BizTalk, whatever), all your problems are solved.</p>
</blockquote>
<p>That&#8217;s not to say there aren&#8217;t good things in those technologies, but that&#8217;s just it, they&#8217;re just <em>tools</em>. Silver hammers and &#8220;laser&#8221; guided saws do not a master carpenter make. There&#8217;s actually a pretty good chance the regular guy will saw their arm off.</p>
<h3>Help<a href="http://udidahan.weblogs.us/wp-content/uploads/image24.png"><img style="border-right: 0px; border-top: 0px; margin: 10px 0px 10px 10px; border-left: 0px; border-bottom: 0px" height="191" alt="image" src="http://udidahan.weblogs.us/wp-content/uploads/image-thumb20.png" width="244" align="right" border="0"></a></h3>
<p>I do hope more &#8220;instruction manuals&#8221; will be coming out of Microsoft on these topics. That&#8217;s not to say there aren&#8217;t any. Specifically on the topic of occasional connectivity, there is <a href="http://msdn.microsoft.com/en-us/library/ms998482.aspx">Chapter 4 of the Smart Client Architecture &amp; Design Guide</a>. Unfortunately, it doesn&#8217;t say anything about how that connects with the MVC/MVP being used client side (the bits affected by Prism). <a href="http://msdn.microsoft.com/en-us/library/ms998490.aspx">Chapter 6</a> of the same guide deals with the client-side threading, but doesn&#8217;t address issues like: </p>
<ul>
<li>Which model object instance are views bound to.</li>
<li>Do other threads have access to that object at the same time.</li>
<li>Which controller/presenter is responsible for giving that object to the view.</li>
<li>Do they need to clone it.</li>
<li>How deep should the clone be.</li>
<li>How do various controllers/presenters (which may be showing the same object in different views at the same time) communicate changes to their various independent clones.</li>
</ul>
<p>I haven&#8217;t yet documented all the patterns that answer these questions, but until I do (or Microsoft does), let me offer these few resources which I&#8217;ve put out over the years:</p>
<ul>
<li><a href="http://www.developer.com/design/article.php/3708006">Occasionally Connected Systems Architecture: The Client</a></li>
<li><a href="http://www.developer.com/design/article.php/3705396">Occasionally Connected Systems Architecture: Concurrency</a></li>
<li><a href="http://www.developer.com/design/article.php/3708006">Threading issues when smart clients reconnect</a></li>
<li>[Podcast] <a href="http://udidahan.weblogs.us/2007/04/17/podcast-occasionally-connected-smart-clients-and-adonet-sync-services/">Occasionally Connected Smart Clients and ADO.NET Sync Services</a></li>
</ul>
<p>There&#8217;s also some more links under the <a href="http://udidahan.weblogs.us/first-time-here/#smart_client">Smart Client link</a> of my <a href="http://udidahan.weblogs.us/first-time-here/">&#8220;First time here?&#8221; page</a>.</p>
<p>Also, please join me in asking Microsoft for an update to these guides &#8211; comments below or your own blog posts would be great.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/2008/06/09/prism-occasionally-connected/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Podcast] REST + Messaging = Enterprise Solutions</title>
		<link>http://www.udidahan.com/2008/03/16/podcast-rest-messaging-enterprise-solutions/</link>
		<comments>http://www.udidahan.com/2008/03/16/podcast-rest-messaging-enterprise-solutions/#comments</comments>
		<pubDate>Sun, 16 Mar 2008 12:40:02 +0000</pubDate>
		<dc:creator>udidahan</dc:creator>
				<category><![CDATA[Ask Udi Podcast]]></category>
		<category><![CDATA[ESB]]></category>
		<category><![CDATA[Messaging]]></category>
		<category><![CDATA[Pub/Sub]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://udidahan.weblogs.us/2008/03/16/podcast-rest-messaging-enterprise-solutions/</guid>
		<description><![CDATA[In this podcast we revisit the topic of REST and how to make it work for process-centric enterprise systems. After describing the basic advantages and pitfalls of plain resource thinking, we&#8217;ll look at how mapping messaging concepts to resources provides solutions for transactional, multi-resource processing.
&#160;
Download

Download via the Dr. Dobb’s site
Or download directly here.

Additional References

Podcast: &#8220;REST [...]]]></description>
			<content:encoded><![CDATA[<p>In this podcast we revisit the topic of REST and how to make it work for process-centric enterprise systems. After describing the basic advantages and pitfalls of plain resource thinking, we&#8217;ll look at how mapping messaging concepts to resources provides solutions for transactional, multi-resource processing.
<p>&nbsp;<br />
<h3>Download</h3>
<blockquote>
<p><a href="http://www.ddj.com/architect/206903485">Download via the Dr. Dobb’s site</a></p></blockquote>
<blockquote><p>Or download directly <a href="http://www.dobbsprojects.com/media/newengine/dynamp.php/080313ud01.mp3?podcast=080313ud01.mp3">here</a>.</p>
</blockquote>
<h3>Additional References</h3>
<ul>
<li><a href="http://udidahan.weblogs.us/2006/07/21/podcastthe-rest-vs-web-services-debate/">Podcast: &#8220;REST vs Web Services Debate&#8221; </a>
<li><a href="http://en.wikipedia.org/wiki/Representational_State_Transfer">REST Definition</a>
<li><a href="http://www.ics.uci.edu/%7Efielding/pubs/dissertation/top.htm">Roy Fielding&#8217;s Thesis: &#8220;Architectural Styles and the Design ofNetwork-based Software Architectures&#8221;</a></li>
<li><a href="http://en.wikipedia.org/wiki/HTTP_ETag">ETag Definition</a></li>
</ul>
<h3>Want more?</h3>
<blockquote><p>Check out the <a href="http://udidahan.weblogs.us/ask-udi/">“Ask Udi”</a> archives.</p>
</blockquote>
<h3>Got a question?</h3>
<blockquote><p><a href="mailto:podcast@UdiDahan.com">Send Udi your question to answer on the show.</a></p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/2008/03/16/podcast-rest-messaging-enterprise-solutions/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
<enclosure url="http://www.dobbsprojects.com/media/newengine/dynamp.php/080313ud01.mp3?podcast=080313ud01.mp3" length="0" type="audio/mp3" />
		</item>
		<item>
		<title>[Podcast] Message Priority &#8211; You Aren&#8217;t Gonna Need It</title>
		<link>http://www.udidahan.com/2008/01/30/podcast-message-priority-you-arent-gonna-need-it/</link>
		<comments>http://www.udidahan.com/2008/01/30/podcast-message-priority-you-arent-gonna-need-it/#comments</comments>
		<pubDate>Wed, 30 Jan 2008 11:20:19 +0000</pubDate>
		<dc:creator>udidahan</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Ask Udi Podcast]]></category>
		<category><![CDATA[ESB]]></category>
		<category><![CDATA[NServiceBus]]></category>

		<guid isPermaLink="false">http://udidahan.weblogs.us/2008/01/30/podcast-message-priority-you-arent-gonna-need-it/</guid>
		<description><![CDATA[In this podcast we&#8217;ll be discussing the issues around supporting different kinds of service-level agreements in an SOA, and how using message prioritization helps and hurts. We&#8217;ll also be looking at alternative solutions more distributed in nature,which make use of specific deployment and configuration schemes that result in a more robust system.
Symon asks:

Hi Udi,
I don&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>In this podcast we&#8217;ll be discussing the issues around supporting different kinds of service-level agreements in an SOA, and how using message prioritization helps and hurts. We&#8217;ll also be looking at alternative solutions more distributed in nature,which make use of specific deployment and configuration schemes that result in a more robust system.</p>
<p>Symon asks:</p>
<blockquotes></blockquotes>
<blockquote><p>Hi Udi,</p>
<p>I don&#8217;t know if this is really an NServiceBus question or a more general architecture question, so if you want to treat it as an Ask Udi question feel free. <img src='http://www.udidahan.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   My question is about handling message prioritization between services in an SOA architecture using an ESB-  in this case NServiceBus.</p>
<p>We&#8217;ve been running along nicely getting the hang of using the NServiceBus but have just hit a point in our application where it&#8217;s become clear that we&#8217;re going to need to prioritize messages between services according to an arbitrary set of rules.  To that end we&#8217;ve created a &#8220;controller&#8221; that determines a message&#8217;s priority according to a set of rules and that controller should forward the message to other services for handling according to that priority.  Where we&#8217;re stuck is figuring out the best way to handle the prioritization of the forwarded message.</p>
<p>We touched on the idea of having several endpoints representing low, medium or high priority and shunting the message to the appropriate endpoint, however since the receiving service consists of multiple workers located on other machines we need to have a dispatcher for each of these endpoints.  Since we&#8217;re using MSMQ this seems to be causing an explosion of queues and the solution seems to require a lot of overhead in terms of set up, but it *does* look like it might be flexible as long as we come up with a smart dispatcher.</p>
<p>Is this an &#8220;ideal&#8221; way to handle message prioritization?  I know there is a notion of priority in MSMQ messages, but this isn&#8217;t exposed in NServiceBus as far as I can tell.</p>
<p>Any suggestions?</p>
<p>Cheers,</p>
<p>Symon</p></blockquote>
<h3>Download</h3>
<blockquote><p><a href="http://www.ddj.com/architect/205920557">Download via the Dr. Dobb&#8217;s site</a></p></blockquote>
<blockquote><p>Or download directly <a href="http://www.dobbsprojects.com/media/newengine/dynamp.php/080128ud01.mp3?podcast=080128ud01.mp3">here</a>.</p></blockquote>
<h3>Additional References</h3>
<ul>
<li><a href="http://udidahan.weblogs.us/2007/09/09/podcast-shared-subscriptions-between-autonomous-components/">Podcast: &#8220;Shared Subscriptions between Autonomous Components&#8221;</a></li>
<li><a href="http://udidahan.weblogs.us/2007/04/10/podcast-space-based-architectures-for-the-web/">Podcast: &#8220;Space-Based Architecture for the Web&#8221;</a></li>
<li><a href="http://www.gigaspaces.com/wiki/display/GS/Compute+Server+-+Master-Worker+Pattern">Info: &#8220;Master-Worker Pattern&#8221;</a></li>
</ul>
<h3>Want more?</h3>
<blockquote><p>Check out the <a href="/ask-udi/">“Ask Udi”</a> archives.</p></blockquote>
<h3>Got a question?</h3>
<blockquote><p><a href="mailto:podcast@UdiDahan.com">Send Udi your question to answer on the show.</a></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/2008/01/30/podcast-message-priority-you-arent-gonna-need-it/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
<enclosure url="http://www.dobbsprojects.com/media/newengine/dynamp.php/080128ud01.mp3?podcast=080128ud01.mp3" length="0" type="audio/mp3" />
		</item>
		<item>
		<title>[Podcast] Message Ordering: Is it Cost Effective?</title>
		<link>http://www.udidahan.com/2008/01/01/podcast-message-ordering-is-it-cost-effective/</link>
		<comments>http://www.udidahan.com/2008/01/01/podcast-message-ordering-is-it-cost-effective/#comments</comments>
		<pubDate>Tue, 01 Jan 2008 23:01:16 +0000</pubDate>
		<dc:creator>udidahan</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Ask Udi Podcast]]></category>
		<category><![CDATA[Autonomous Services]]></category>
		<category><![CDATA[EDA]]></category>
		<category><![CDATA[ESB]]></category>
		<category><![CDATA[MSMQ]]></category>
		<category><![CDATA[NServiceBus]]></category>
		<category><![CDATA[Pub/Sub]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Threading]]></category>

		<guid isPermaLink="false">http://udidahan.weblogs.us/2008/01/01/podcast-message-ordering-is-it-cost-effective/</guid>
		<description><![CDATA[In this podcast we&#8217;ll be discussing the issues around multi-threaded processing of messages by a service, specifically that the processing of message received second may be finished before that of the first. This scenario tends to rear its ugly head at higher levels of load and is critical for correctness in high-scalability environments.
Our long time [...]]]></description>
			<content:encoded><![CDATA[<p>In this podcast we&#8217;ll be discussing <span class="greenBlurb">the issues around multi-threaded processing of messages by a service, specifically that the processing of message received second may be finished before that of the first. This scenario tends to rear its ugly head at higher levels of load and is critical for correctness in high-scalability environments.</span></p>
<p>Our long time listener Bill asks:</p>
<blockquote><p> Hi Udi,</p>
<p>I have a question  around processing of messages in proper order.  When leveraging multiple  threads to process messages in a message queue, it is possible for the  second message in the queue to get processed before the first &#8211; especially  if the first message is considerably larger than the second.  I have taken  a lot of care to make sure that messages are sent in the correct order, only to  find that the receiving system can process them out of order  anyway.</p>
<p>Consider a  Policy Created notification, which must come before a Policy Approved  notification.  If both messages are sitting in the queue when the receiving  service starts up, the approval message can be processed before the creation  message. How can I make sure that message ordering is respected by the receiving  system?  I am using WCF/MSMQ as the underlying transport by the way.   The only way I have found so far is to limit the receiving service to a single  thread, which is by no means desirable.</p>
<p>Best  Regards,</p>
<p>Bill</p></blockquote>
<h3>Download</h3>
<p><a href="http://www.ddj.com/architect/205206017">Download via the Dr. Dobb&#8217;s site</a></p>
<p>Or download directly <a href="http://www.dobbsprojects.com/media/newengine/dynamp.php/071231ud01.mp3?podcast=071231ud01.mp3">here</a>.</p>
<h3>Additional References</h3>
<ul>
<li>Blog post: <a href="http://udidahan.weblogs.us/2007/12/09/in-order-messaging-a-myth/">In-Order Messaging a Myth?</a></li>
<li>Blog post: <a href="http://udidahan.weblogs.us/2007/12/15/handling-messages-out-of-order/">Handling Messages out of Order</a></li>
</ul>
<h3>Want more?</h3>
<p>Check out the <a href="/ask-udi/">“Ask Udi”</a> archives.</p>
<h3>Got a question?</h3>
<p><a href="mailto:podcast@UdiDahan.com">Send Udi your question to answer on the show.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/2008/01/01/podcast-message-ordering-is-it-cost-effective/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="http://www.dobbsprojects.com/media/newengine/dynamp.php/071231ud01.mp3?podcast=071231ud01.mp3" length="0" type="audio/mp3" />
		</item>
		<item>
		<title>First time here?</title>
		<link>http://www.udidahan.com/first-time-here/</link>
		<comments>http://www.udidahan.com/first-time-here/#comments</comments>
		<pubDate>Sun, 09 Dec 2007 23:04:37 +0000</pubDate>
		<dc:creator>thesoftwaresimplist</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://udidahan.weblogs.us/first-time-here/</guid>
		<description><![CDATA[Hi there. I&#8217;m Udi. Welcome to my blog.
After blogging since 2003, with over 500 posts I&#8217;ve pulled together the &#8220;best of the best&#8221; for you in the top 3 areas in which my clients use my expertise. Click to skip the introductions.
[ SOA - Domain Models - Smart Clients ]
Service-Oriented Architecture
Before you roll your eyes [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://udidahan.weblogs.us/wp-content/uploads/udi_dahan_headshot.jpg" style="border: 0px none ; margin: 0px 40px" align="right" height="200" width="170" />Hi there. I&#8217;m Udi. Welcome to my blog.</p>
<p>After blogging since 2003, with over 500 posts I&#8217;ve pulled together the &#8220;best of the best&#8221; for you in the top 3 areas in which my clients use my expertise. Click to skip the introductions.<br />
[ <a href="/first-time-here/#soa">SOA</a> - <a href="/first-time-here/#domain_model">Domain Models</a> - <a href="/first-time-here/#smart_client">Smart Clients </a>]</p>
<h3>Service-Oriented Architecture</h3>
<p>Before you roll your eyes at me, believe me I do know that SOA has been hyped to death and that you&#8217;re probably sick of it. Me too. I&#8217;m interested in actually <strong>implementing </strong>SOA, not just talking about it &#8211; it&#8217;s actually what I do for a living; from high-level architecture, to detailed design, to choosing frameworks and technologies, and actually building the thing.</p>
<p>What I&#8217;ve got online includes podcasts on SOA, webcasts, books I&#8217;ve contributed to, full-lenth articles, and open-source frameworks I&#8217;ve written to help developers do the right thing by default.  So, if you&#8217;d like to hear more about the practical aspects of <strong>doing </strong>SOA, you can jump to the relevant part of this page by <a href="/first-time-here/#soa">clicking here</a>.</p>
<h3>Domain Models</h3>
<p>You won&#8217;t find much of the more theoretical aspects of the domain model pattern or other patterns of application architecture &#8211; rather you&#8217;ll find presentations I&#8217;ve given on the subject, samples, and even an extension to NHibernate. All of these are derived from the work I&#8217;ve done around using these patterns &#8211; not the least of which is actually making them <strong>performant</strong>.</p>
<p>Also on the topic of Domain Models and Data Access, you&#8217;ll be able to find information on writing highly <strong>concurrent</strong> systems. This includes an object-oriented development style for service layers that yeild the best <strong>multi-user</strong> throughput. Jump to the Domain Model section <a href="/first-time-here/#domain_model">here</a>.</p>
<h3>Smart / Rich / Occasionally Connected Client</h3>
<p>I know that Microsoft has been pretty active here, putting out the Composite User Interface Application Block (CAB) and the Smart Client Software Factory (SCSF). The only thing is that those are both complex and not thread-safe &#8211; I know, I&#8217;ve been burned.</p>
<p>So, here you can find the set of patterns, technologies, and frameworks that make for a thread-safe, multi-threaded client that a team can develop in parallel. Jump to the Smart Client section <a href="/first-time-here/#smart_client">here</a>.</p>
<hr size="1" /><a title="soa" name="soa"></a></p>
<h3><a title="soa" name="soa"></a>Doing SOA</h3>
<p><a title="soa" name="soa"></a>If you&#8217;re tasked with architecting, designing, or implement a Service-Oriented Architecture then the resources below should help you get to the bottom line of all the theory and get you going in terms of actual development.</p>
<p><a title="soa" name="soa"></a><u>Podcasts:</u></p>
<ul>
<li><a href="http://udidahan.weblogs.us/2006/05/26/podcast-does-soa-mean-the-end-of-oo/">Does SOA mean the end of OO?</a></li>
<li><a href="http://udidahan.weblogs.us/2007/12/05/podcast-migrating-from-n-tier-to-soa/">Migrating from N-Tier to SOA</a></li>
<li><a href="http://udidahan.weblogs.us/2006/06/02/podcast-does-an-soa-require-an-esb/">Does an SOA require an ESB?</a></li>
</ul>
<blockquote><p>If you&#8217;d like to more of these kinds of podcasts, check out the <a href="http://udidahan.weblogs.us/category/ask-udi-podcast/">&#8220;Ask Udi&#8221; podcast.</a></p></blockquote>
<p>I&#8217;ve also be interviewed on SOA on several other <a href="http://udidahan.weblogs.us/podcasts/">podcasts</a>:</p>
<ul>
<li><a href="http://dotnetrocks.com/default.aspx?showID=268">.NET Rocks interview on SOA</a></li>
<li><a href="http://channel9.msdn.com/ShowPost.aspx?PostID=268866">Channel 9&#8217;s Ron Jacobs interview on SOA and Workflow</a></li>
</ul>
<p><u>Webcasts:</u></p>
<ul>
<li>SOA Distilled for UML China [<a href="http://udidahan.weblogs.us/wp-content/uploads/soa_distilled_uml_china.pdf">PDF</a>] [<a href="ed2k://|file|UMLChina%E8%AE%B2%E5%BA%A7%E5%BD%95%E9%9F%B3%E5%8F%8A%E5%B9%BB%E7%81%AF20070613UdiDahanSOA%E7%B2%BE%E7%B2%B9.rar|88323477|39201895A2D613FDD66AAE4CBDEFF3A5|h=TAYDKISS4DQI455ZRUFFXOGMJCU7MGZM|/">Audio</a> - 90MB via EMule]</li>
<li>Why you can&#8217;t do SOA without Message [<a href="http://msevents.microsoft.com/cui/WebCastEventDetails.aspx?EventID=1032273610&amp;EventCategory=5&amp;culture=en-US&amp;CountryCode=US">TechEd USA 2005</a>]</li>
</ul>
<p><u>Books:</u></p>
<ul>
<li><a href="http://www.amazon.com/Applying-Domain-Driven-Design-Patterns-Examples/dp/0321268202/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1197275327&amp;sr=8-1">Applying Domain-Driven Design and Patterns</a> [Chapter] <a href="http://www.jnsk.se/weblog/posts/GuestAuthors.htm">An introduction to SOA</a></li>
<li><a href="http://www.soa-expertenwissen.de/"> SOA Expertise &#8211; Methods, Concept, &amp; Practice</a> [Article] <a href="http://udidahan.weblogs.us/2007/04/28/the-enterprise-service-bus-and-your-soa/">The ESB and Your SOA—A Great Team</a></li>
</ul>
<p><u>Full-length Articles:</u></p>
<ul>
<li><a href="http://msdn2.microsoft.com/en-us/arcjournal/bb245672">Autonomous Services and Enterprise Entity Aggregation</a> [MS Architecture Journal]</li>
<li><a href="http://www.devx.com/ibm/Article/29325">SOA Support, Therapy, and Treatment </a>[IBM DevX Portal]</li>
</ul>
<p><u>Open Source Frameworks:</u></p>
<ul>
<li><a href="http://udidahan.weblogs.us/category/nservicebus">nServiceBus</a> &#8211; communications framework for making enterprise .NET systems easier to build</li>
</ul>
<hr size="1" /><a title="domain_model" name="domain_model"></a></p>
<h3><a title="domain_model" name="domain_model"></a>Using Domain Models</h3>
<p>If you&#8217;re looking for how to implement business logic and data access in your application, then you&#8217;ve come to the right place. Here you&#8217;ll find the patterns, design, and code that will make your business logic cohesive, your data access simpler, and keep everything performing at its peak.</p>
<p><u>Introductory info:</u></p>
<ul>
<li><a href="http://udidahan.weblogs.us/2007/04/21/domain-model-pattern/">What is a domain model?</a></li>
<li><a href="http://udidahan.weblogs.us/2006/11/09/dataset-%e2%80%93-or-mapping-rumble-at-teched-mvp-dinner/">Where should (and more importantly, shouldn&#8217;t) you use a domain model</a></li>
<li><a href="http://www.developer.com/design/article.php/3531871">Don&#8217;t tie your architecture to a specific object/relational mapping product</a> [Developer.com]</li>
</ul>
<p><u>Make it perform:</u></p>
<ul>
<li><a href="http://udidahan.weblogs.us/2007/04/23/fetching-strategy-design/">Fetching Strategy Design</a> &#8211; UML diagrams describing performance enhancing patterns</li>
<li><a href="http://udidahan.weblogs.us/2007/09/16/fetching-strategy-nhibernate-implementation-available/">Samples + NHibernate modifications for Fetching Strategies</a></li>
<li><a href="http://udidahan.weblogs.us/2007/10/26/teched-speaking-about-high-performance-persistent-domain-models/">Presentation on High-Performance, Persistent Domain Models</a> [TechEd Europe 2007]</li>
</ul>
<p><u>Concurrency for multi-user throughput:</u></p>
<ul>
<li><a href="http://www.developer.com/design/article.php/3705396">Concurrency for Occasionally Connected Systems</a> [Developer.com]</li>
<li><a href="http://udidahan.weblogs.us/2007/03/28/podcast-datasets-web-services/">Podcast on DataSets and Web Services</a> [ <a href="/ask-udi-podcast/">Ask Udi podcast</a> ]</li>
<li><a href="http://udidahan.weblogs.us/2007/01/22/realistic-concurrency/">Realistic Concurrency (difference between optimistic and pessimistic)</a></li>
</ul>
<hr size="1" /><a title="smart_client" name="smart_client"></a></p>
<h3>Multi-core efficient Smart Clients</h3>
<p>If you&#8217;re tasked with building a desktop application that communicates with a server, needs to be able to work offline, makes use of multiple cores for a better user experience, and can be developed without having to remember 5 books worth of theory, then this is for you.</p>
<p><u>Patterns:</u></p>
<ul>
<li><a href="http://udidahan.weblogs.us/2006/03/01/a-model-a-view-and-a-presenter-walk-into-a-bar/">Sample implementation of Model-View-Presenter pattern</a></li>
<li><a href="http://udidahan.weblogs.us/2007/01/16/thoughts-about-usability/">Unit-testing still critical to project success even when using the relevant patterns</a></li>
<li><a href="http://udidahan.weblogs.us/2007/04/30/generic-validation/">Generic validation using the service locator pattern</a></li>
</ul>
<p><u>Occasional Connectivity:</u><a href="http://udidahan.weblogs.us/2007/04/17/podcast-occasionally-connected-smart-clients-and-adonet-sync-services/"><br />
</a></p>
<ul>
<li><a href="http://udidahan.weblogs.us/2007/04/17/podcast-occasionally-connected-smart-clients-and-adonet-sync-services/">Podcast on occasionally connected smart clients</a> (and why ADO.NET Sync Services doesn&#8217;t help)</li>
<li><a href="http://udidahan.weblogs.us/2007/07/12/podcast-passing-data-between-layers-in-soa-modelsmart-client-application/">Passing data from the UI to SOA Services</a> [Podcast]</li>
<li><a href="http://www.developer.com/design/article.php/3708006">Threading issues when smart clients reconnect</a> [Developer.com article]</li>
</ul>
<p><u>Thread-Safety = Just-plain Safe</u></p>
<ul>
<li><a href="http://udidahan.weblogs.us/2007/09/28/objectbuilder-synchronization-features-needed-for-pubsub-ing-smart-clients/">Explanation of threading concerns when using dependency injection and asynchronous messaging</a></li>
<li><a href="http://udidahan.weblogs.us/2007/12/06/object-builder-the-place-to-fix-system-wide-threading-bugs/">Followup on dependency injection, threading capabilities</a></li>
<li><a href="http://udidahan.weblogs.us/2007/10/12/podcast-thread-safe-asynchronous-smart-clients/">Thread-safe, Asynchronous Smart Clients [podcast]</a></li>
<li><a href="http://udidahan.weblogs.us/2007/12/07/eureka-aop-is-the-final-piece-of-the-multi-threaded-smart-client-puzzle/">Prototype of Aspect-Oriented Programming to make views thread-safe by default</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/first-time-here/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>[Podcast] Migrating from N-Tier to SOA</title>
		<link>http://www.udidahan.com/2007/12/05/podcast-migrating-from-n-tier-to-soa/</link>
		<comments>http://www.udidahan.com/2007/12/05/podcast-migrating-from-n-tier-to-soa/#comments</comments>
		<pubDate>Wed, 05 Dec 2007 21:27:18 +0000</pubDate>
		<dc:creator>thesoftwaresimplist</dc:creator>
				<category><![CDATA[Ask Udi Podcast]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/12/05/podcast-migrating-from-n-tier-to-soa/</guid>
		<description><![CDATA[In this podcast we&#8217;ll be discussing certain methodologies for migrating an architecture from N-Tier to SOA. We&#8217;ll see what parts can be used almost unchanged, and which N-Tier concepts have no place in this new, service-oriented world.
Ketan asks:

Hello Udi,
I am Ketan, working as Analyst Programmer in India. I want some information regarding SOA Architecture. I [...]]]></description>
			<content:encoded><![CDATA[<p>In this podcast we&#8217;ll be discussing certain methodologies for migrating an architecture from N-Tier to SOA. We&#8217;ll see what parts can be used almost unchanged, and which N-Tier concepts have no place in this new, service-oriented world.</p>
<p>Ketan asks:</p>
<blockquote><p>
Hello Udi,</p>
<p>I am Ketan, working as Analyst Programmer in India. I want some information regarding SOA Architecture. I have visited several blogs and sites and I do have enough knowledge regarding technical terms of SOA. I have worked a lot in 3-tier mechanism a lot and now want to switch on SOA Architecture in Visual Studio 2005.</p>
<p>I read your blog post <a href="http://udidahan.weblogs.us/2004/01/17/ill-see-you-when-you-get-there/">How to migrate to SOA</a> and liked the contents and am interested in doing it. Can you please be more precise about how to migrate from 3-tier to SOA? Actually, I have read whole content of above link and you have explained enough. But, still I want you to keep me out from dark. You have described it functionally, but I want some technical description of this process. Please help me in this.</p>
<p>If you can provide me some example/application (in which SOA Architecture has been implemented), then it will be very helpful to me.</p>
<p>Thanks in advance. Waiting for your favorable reply.</p>
<p>Ketan
</p></blockquote>
<h3>Download</h3>
<p><a href="http://www.ddj.com/architect/204700666">Download via the Dr. Dobb&#8217;s site</a></p>
<p>Or download directly <a href="http://www.dobbsprojects.com/media/newengine/dynamp.php/071204ud01.mp3?podcast=071204ud01.mp3">here</a>.</p>
<h3>Additional References</h3>
<ul>
<li>Blog post on <a href="http://udidahan.weblogs.us/2004/01/17/ill-see-you-when-you-get-there/">migrating from layers to services</a></li>
<li>Podcast on <a href="http://udidahan.weblogs.us/2006/05/26/podcast-does-soa-mean-the-end-of-oo/">&#8220;Does SOA mean the end of OO&#8221;?</a></li>
</ul>
<h3>Want more?</h3>
<p>Check out the <a href="/ask-udi/">“Ask Udi”</a> archives.</p>
<h3>Got a question?</h3>
<p><a href="mailto:podcast@UdiDahan.com">Send Udi your question to answer on the show.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/2007/12/05/podcast-migrating-from-n-tier-to-soa/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="http://www.dobbsprojects.com/media/newengine/dynamp.php/071204ud01.mp3?podcast=071204ud01.mp3" length="0" type="audio/mp3" />
		</item>
		<item>
		<title>[Podcast] Versioning and SOA&#8211;There is no IDog2</title>
		<link>http://www.udidahan.com/2007/11/09/podcast-versioning-and-soa-there-is-no-idog2/</link>
		<comments>http://www.udidahan.com/2007/11/09/podcast-versioning-and-soa-there-is-no-idog2/#comments</comments>
		<pubDate>Fri, 09 Nov 2007 09:38:08 +0000</pubDate>
		<dc:creator>thesoftwaresimplist</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Ask Udi Podcast]]></category>
		<category><![CDATA[Pub/Sub]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/11/09/podcast-versioning-and-soa-there-is-no-idog2/</guid>
		<description><![CDATA[In this podcast we&#8217;ll look at the issues around versioning and SOA and how the asynchronous nature of messaging obviates the need for previously accepted interface-based versioning practices. 
Jarrod asks:

Hi Udi,
I have some questions around versioning and SOA:
Over the years I&#8217;ve been fairly adamant about the practice of versioning interfaces should a method change be [...]]]></description>
			<content:encoded><![CDATA[<p>In this podcast we&#8217;ll look at the issues around versioning and SOA and how the asynchronous nature of messaging obviates the need for previously accepted interface-based versioning practices. </p>
<p>Jarrod asks:</p>
<blockquote><p>
Hi Udi,</p>
<p>I have some questions around versioning and SOA:</p>
<p>Over the years I&#8217;ve been fairly adamant about the practice of versioning interfaces should a method change be needed.</p>
<p>Hence, IDog and IDog2 </p>
<p>Generally I would also say that a method addition would need a new interface as much as a change to an existing method or property (sometimes requiring completely deprecating the old interface). </p>
<p>With SOA being used more and contract first designs coming down the pipe&#8230;an addition of a method or operation to a contract in SOA does not mean its a breaking change. </p>
<p>So, do you continue to create a new interface and version the name within an SOA environment? Even if its just one method that is being added? </p>
<p>A service contract, in general&#8230;with just a single method in my opinion is a bad design. Sure, there are exceptions to that but I can just see changes made to the service contracts over the course of a few years with many 1-2 method interfaces. </p>
<p>Day 1 : 12 methods on interface IDog</p>
<p>6 months later : 1 new method, create IDog2 which implements IDog</p>
<p>15 months later : 2 new methods, create IDog3 which implements IDog2</p>
<p>Some can argue that if you&#8217;re having to add methods like this, the original design was flawed. That may be&#8230;or you could just be in a volatile business environment in which SOA must adapt.  </p>
<p>So my main questions are: </p>
<p>1) Do you think its the best practice to continue to version interfaces for non-breaking method additions in an SOA environment in which you also have control of the consumers (internal consumers)?  </p>
<p>2)  Do you think its the best practice to continue to version interfaces for non-breaking method additions in an SOA environment in which you do not have control of the consumers (external consumers)? </p>
<p>3) If the answer to the above is yes, is a single method on a new interface acceptable? </p>
<p>4) If you know of a problem in an existing interface on a method and have control of the consumers &#8211; do you &#8220;fix&#8221; the method and redeploy to the consumers? Or do you deprecate the entire interface and begin anew?</p>
<p>I&#8217;m interested in seeing your responses <img src='http://www.udidahan.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Jarrod
</p></blockquote>
<p><b>Download</b></p>
<p><a href="http://ddj.com/architect/202803620">Download via the Dr. Dobb&#8217;s site</a></p>
<p>Or download directly <a href="http://www.dobbsprojects.com/media/newengine/dynamp.php/071107ud01.mp3?podcast=071107ud01.mp3">here</a></p>
<p><b>Additional References</b></p>
<ul>
<li><a href="http://udidahan.weblogs.us/2006/09/05/podcast-autonomous-services-and-pubsub/">Podcast on Autonomous Services and Pub/Sub</a></li>
<li><a href="http://www.pluralsight.com/blogs/craig/archive/2006/04/06/21176.aspx">Blog post on &#8220;The Perils of WSDL first&#8221;</a></li>
</ul>
<p><b>Want more?</b></p>
<p>Check out the <a href="/ask-udi/">&#8220;Ask Udi&#8221; archives</a>.</p>
<p><b>Got a question?</b></p>
<p><a href="mailto:podcast@UdiDahan.com">Send Udi your question to answer on the show.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/2007/11/09/podcast-versioning-and-soa-there-is-no-idog2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
<enclosure url="http://www.dobbsprojects.com/media/newengine/dynamp.php/071107ud01.mp3?podcast=071107ud01.mp3" length="15111074" type="audio/mp3" />
		</item>
		<item>
		<title>[Podcast] Durable Services with WCF, WF, and NServiceBus</title>
		<link>http://www.udidahan.com/2007/10/23/podcast-durable-services-with-wcf-wf-and-nservicebus/</link>
		<comments>http://www.udidahan.com/2007/10/23/podcast-durable-services-with-wcf-wf-and-nservicebus/#comments</comments>
		<pubDate>Tue, 23 Oct 2007 21:17:40 +0000</pubDate>
		<dc:creator>thesoftwaresimplist</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Ask Udi Podcast]]></category>
		<category><![CDATA[NServiceBus]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Scalability]]></category>
		<category><![CDATA[WCF]]></category>
		<category><![CDATA[Web Services]]></category>
		<category><![CDATA[Workflow]]></category>

		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/10/23/podcast-durable-services-with-wcf-wf-and-nservicebus/</guid>
		<description><![CDATA[In this podcast we&#8217;ll look at the issues around Durable Services, what makes them stateful or stateless, as well as how WCF and WF can be used to implement them. Finally, we&#8217;ll compare solutions based on .NET 3.5 and on NServiceBus&#8211;covering aspects such as transactions and persistent time-outs. 
Suresh asks:

Hi Udi,
I&#8217;ve been reading about the [...]]]></description>
			<content:encoded><![CDATA[<p>In this podcast we&#8217;ll look at the issues around Durable Services, what makes them stateful or stateless, as well as how WCF and WF can be used to implement them. Finally, we&#8217;ll compare solutions based on .NET 3.5 and on NServiceBus&#8211;covering aspects such as transactions and persistent time-outs. </p>
<p>Suresh asks:</p>
<blockquote><p>
Hi Udi,</p>
<p>I&#8217;ve been reading about the coming &#8220;durable services&#8221; that will be available with the next version of WCF. I also have been listening to your podcasts and reading your blog posts about NServiceBus where you talk about long-running workflows. It sounds like both of these technologies are trying to solve the same problem.</p>
<p>Do durable services do away with long-running workflow? If so, does that mean we don&#8217;t need Workflow Foundation either? If not, what is the connection between them.</p>
<p>If you could shed some light on the matter that would be great.</p>
<p>Suresh
</p></blockquote>
<p><b>Download</b></p>
<p><a href="http://www.ddj.com/architect/202600413">Download via the Dr. Dobb&#8217;s site</a></p>
<p>Or download directly <a href="http://www.dobbsprojects.com/media/newengine/dynamp.php/071022ud01.mp3?podcast=071022ud01.mp3">here</a></p>
<p><b>Additional References</b></p>
<ul>
<li>Blog post on <A href="http://www.winterdom.com/weblog/2007/06/28/WorkflowServicesInOrcas.aspx">Workflow Services in Orcas</A></li>
<li>Blog post on <A href="http://weblogs.asp.net/gsusx/archive/2007/06/14/orcas-durable-services.aspx">Orcas Durable Services</A></li>
<li>Blog post on <a href="https://www.gazitt.com/blog/PermaLink,guid,a8383226-a0dd-48c5-9fea-33d5da159d17.aspx">.NET Framework 3.5 Beta1 is Live on the Web</a></li>
</ul>
<p><b>Want more?</b></p>
<p>Check out the <a href="/ask-udi/">&#8220;Ask Udi&#8221; archives</a>.</p>
<p><b>Got a question?</b></p>
<p><a href="mailto:podcast@UdiDahan.com">Send Udi your question to answer on the show.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/2007/10/23/podcast-durable-services-with-wcf-wf-and-nservicebus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.dobbsprojects.com/media/newengine/dynamp.php/071022ud01.mp3?podcast=071022ud01.mp3" length="16231213" type="audio/mp3" />
		</item>
		<item>
		<title>[Podcast] Thread-Safe Asynchronous Smart Clients</title>
		<link>http://www.udidahan.com/2007/10/12/podcast-thread-safe-asynchronous-smart-clients/</link>
		<comments>http://www.udidahan.com/2007/10/12/podcast-thread-safe-asynchronous-smart-clients/#comments</comments>
		<pubDate>Fri, 12 Oct 2007 07:08:09 +0000</pubDate>
		<dc:creator>thesoftwaresimplist</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Ask Udi Podcast]]></category>
		<category><![CDATA[OO]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Smart Client]]></category>
		<category><![CDATA[Threading]]></category>

		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/10/12/podcast-thread-safe-asynchronous-smart-clients/</guid>
		<description><![CDATA[In this podcast we&#8217;ll look at various patterns involved in creating MVC-based Smart Clients which communicate using asynchronous messaging and how to avoid threading problems there. 
Neil asks:

Hi Udi,
We&#8217;re building a smart client application that uses WCF for full-duplex communications with our server. This is the asynchronous communication you talk about in your podcast. The [...]]]></description>
			<content:encoded><![CDATA[<p>In this podcast we&#8217;ll look at various patterns involved in creating MVC-based Smart Clients which communicate using asynchronous messaging and how to avoid threading problems there. </p>
<p>Neil asks:</p>
<blockquote><p>
Hi Udi,</p>
<p>We&#8217;re building a smart client application that uses WCF for full-duplex communications with our server. This is the asynchronous communication you talk about in your podcast. The smart-client is based on the MVC pattern, where model objects raise events when they&#8217;re changed so that the views can update themselves.</p>
<p>What&#8217;s started happening recently is that the smart-client has been freezing-up on us intermittently. We don&#8217;t know how to debug this and are wondering if its an architectural problem.</p>
<p>Any help you can give would be most appreciated.</p>
<p>Neil
</p></blockquote>
<p><b>Download</b></p>
<p><a href="http://www.ddj.com/architect/202401468">Download via the Dr. Dobb&#8217;s site</a></p>
<p>Or download directly <a href="http://www.dobbsprojects.com/media/newengine/dynamp.php/071011ud01.mp3?podcast=071011ud01.mp3">here</a></p>
<p><b>Additional References</b></p>
<ul>
<li>Blog post on <A href="http://udidahan.weblogs.us/2007/04/04/occasionally-connected-systems-architecture/">Occasionally Connected Systems Architecture</A></li>
<li>Blog post on <A href="http://udidahan.weblogs.us/2007/09/28/objectbuilder-synchronization-features-needed-for-pubsub-ing-smart-clients/">ObjectBuilder synchronization features needed for pub/sub-ing Smart Clients</A></li>
</ul>
<p><b>Want more?</b></p>
<p>Check out the <a href="/ask-udi/">&#8220;Ask Udi&#8221; archives</a>.</p>
<p><b>Got a question?</b></p>
<p><a href="mailto:podcast@UdiDahan.com">Send Udi your question to answer on the show.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/2007/10/12/podcast-thread-safe-asynchronous-smart-clients/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.dobbsprojects.com/media/newengine/dynamp.php/071011ud01.mp3?podcast=071011ud01.mp3" length="13030892" type="audio/mp3" />
		</item>
		<item>
		<title>[Podcast] Domain Models, SOA, and The Single Version of the Truth</title>
		<link>http://www.udidahan.com/2007/09/12/podcast-domain-models-soa-and-the-single-version-of-the-truth/</link>
		<comments>http://www.udidahan.com/2007/09/12/podcast-domain-models-soa-and-the-single-version-of-the-truth/#comments</comments>
		<pubDate>Wed, 12 Sep 2007 08:56:12 +0000</pubDate>
		<dc:creator>thesoftwaresimplist</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Ask Udi Podcast]]></category>
		<category><![CDATA[DDD]]></category>
		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/09/12/podcast-domain-models-soa-and-the-single-version-of-the-truth/</guid>
		<description><![CDATA[In this podcast we&#8217;ll try to describe some of the pitfalls of trying to split a domain model between multiple services, as well as how SOA side-steps the &#8220;single version of the truth&#8221; issue found in reporting.
Rishi asks:

Hi Udi,
First of all, thanks for all the posts and info you share, it is very insightful compared [...]]]></description>
			<content:encoded><![CDATA[<p>In this podcast we&#8217;ll try to describe some of the pitfalls of trying to split a domain model between multiple services, as well as how SOA side-steps the &#8220;single version of the truth&#8221; issue found in reporting.</p>
<p>Rishi asks:</p>
<blockquote><p>
Hi Udi,<br />
First of all, thanks for all the posts and info you share, it is very insightful compared to loads n&#8217; loads of marketing bull and vendor whitepapers. Ok, I have two questions for you.</p>
<p>1. I want to create a SOA-based LOB application/platform and I generally understand the &#8216;tenets of services&#8217; and reasons for the same. However, as you may well know, there is a lot of interdependency between business constructs (such as a customer with an order, or a delivery with a product construct). Now, should we share these constructs within a tightly-coupled and domain-based &#8220;system&#8221; which exposes a number of services to the outside world and use the constructs directly inside the so-called &#8220;system&#8221; boundary. Or on the opposite spectrum have a number of autonomous and independent services that expose, own, and share certain business constructs or at least part of the data that represents them as a whole. For example, an order service will need to interact with a customer construct, which primarily/essentially is (or should be?) owned by a customer profile service &#8211; in this context, with clear, direct, and immediate inter-dependency what is preferable? Where do we draw the enclosing line?</p>
<p>2. In a line of business application, reporting and shaping data are a given necessity. Now, with autonomous and independent services which define business constructs in their contextual ways, how do we practically shape, combine, and filter data across various services? We certainly can&#8217;t do joins over multiple services in a practical way? And as some suggest, if we are to maintain duplicate or master data elsewhere, it just seems very messy to me &#8211; just consider having 3 versions of an order services, with 2 versions of support services, and &#8216;n&#8217; number of other services to comb data from. Further, for reporting and also analytical purposes we really need to have business data structured in a well-defined manner, which for all purposes needs to be the &#8220;single version of the truth&#8221;. I can&#8217;t see granular services, with all its tenets, sitting nicely with such other requirements of the business &#8211; and yet I am not even asking them to be real-time. How do we meet such business requirements in your view with SOA?</p>
<p>Hope the above makes sense!</p>
<p>Cheers,<br />
Rishi</p>
<p>PS: I use the word business construct purposefully, and it does not directly attribute to a well-defined programmable entity (in object-oriented way, that is).
</p></blockquote>
<p><a href="http://www.ddj.com/architect/201805549">Download via the Dr. Dobb&#8217;s site.</a></p>
<p>Or download directly <a href="http://www.dobbsprojects.com/media/newengine/dynamp.php/070911ud01.mp3?podcast=070911ud01.mp3">here</a>.</p>
<p><b>Additional References</b></p>
<ul>
<li><a href="http://udidahan.weblogs.us/2006/05/26/podcast-does-soa-mean-the-end-of-oo/">Ask Udi Podcast #000&#8211;Does SOA mean the end of OO?</a></li>
<li><a href="http://udidahan.weblogs.us/2007/03/08/podcast-master-data-management-and-soa/">Ask Udi Podcast #009&#8211;Master Data Management and SOA</a></li>
<li><a href="http://udidahan.weblogs.us/2007/05/20/podcast-how-does-extract-transform-load-fit-with-soa/">Ask Udi Podcast #016&#8211;How does Extract, Transform, Load fit with SOA?</a></li>
</ul>
<p><b>Want more?</b></p>
<p>Check out the <a href="/ask-udi/">&#8220;Ask Udi&#8221; archives</a>.</p>
<p><b>Got a question?</b></p>
<p><a href="mailto:podcast@UdiDahan.com">Send Udi your question to answer on the show.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/2007/09/12/podcast-domain-models-soa-and-the-single-version-of-the-truth/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
<enclosure url="http://www.dobbsprojects.com/media/newengine/dynamp.php/070911ud01.mp3?podcast=070911ud01.mp3" length="9831013" type="audio/mp3" />
		</item>
		<item>
		<title>[Podcast] Shared subscriptions between autonomous components</title>
		<link>http://www.udidahan.com/2007/09/09/podcast-shared-subscriptions-between-autonomous-components/</link>
		<comments>http://www.udidahan.com/2007/09/09/podcast-shared-subscriptions-between-autonomous-components/#comments</comments>
		<pubDate>Mon, 10 Sep 2007 05:30:15 +0000</pubDate>
		<dc:creator>thesoftwaresimplist</dc:creator>
				<category><![CDATA[Ask Udi Podcast]]></category>
		<category><![CDATA[Autonomous Services]]></category>
		<category><![CDATA[Pub/Sub]]></category>
		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/09/09/podcast-shared-subscriptions-between-autonomous-components/</guid>
		<description><![CDATA[This week we&#8217;re discussing scenarios involving the use of multiple autonomous components handling the same event. We also get into the topics of component hosting as well as solution development structure.
Our long-time listener Bill asks the following:

Hi Udi,
Thank you for your podcast clarifying the concept of autonomous components.  It certainly cleared up a lot [...]]]></description>
			<content:encoded><![CDATA[<p>This week we&#8217;re discussing scenarios involving the use of multiple autonomous components handling the same event. We also get into the topics of component hosting as well as solution development structure.</p>
<p>Our long-time listener Bill asks the following:</p>
<blockquote><p>
Hi Udi,</p>
<p>Thank you for your podcast clarifying the concept of autonomous components.  It certainly cleared up a lot in terms of how you define an autonomous component and helped position the concept better in my mind.</p>
<p>I am considering building our Policy Administration service with 3 autonomous components as you previously suggested &#8211; one for each insurance product family.  As you previously mentioned, these autonomous components could either share a database instance or have separate database instances, even though they may share schema (being a part of the same service).</p>
<p>What concerns me however is that there is some data that must be shared between these autonomous components.  A perfect example is Region.  If a new Region is defined somewhere in the enterprise, a RegionCreatedNotification is published onto the bus.  If I have 3 autonomous components sharing the same database, is it best I just choose one to be the subscriber for this event?  Or should I create a new separate queue to receive these notifications and put a message handler for it in a separate MessageHandlers assembly?  Or should I subscribe all 3 autonomous components and have them each check if the Region has already been created in the database before inserting a new one?</p>
<p>Option (1) seems presumptuous because it assumes all 3 autonomous components are sharing the same database.  Option (2) seems a bit strange because it is like creating a 4th autonomous component only to receive the RegionCreatedNotification messages.  And Option (3) seems wasteful since there is redundant code and the system is doing extra unnecessary lookups.  At the moment it looks like Option (2) is my best bet, but I&#8217;m very interested to get your take on it.</p>
<p>Another question is whether you would say that autonomous components should be hosted in different processes.  Since I don&#8217;t need to run these autonomous components on separate servers at this stage, it would seem wasteful to create a service host for each component.  I could always create separate service hosts at a later time if I needed to host one or more autonomous components on other servers.</p>
<p>And the final question I have is in terms of solution structure.  I was contemplating the following structure:</p>
<p>ProductFamily1<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
Company.PolicyAdministration.ProductFamily1.Domain<br />
Company.PolicyAdministration.ProductFamily1.MessageHandlers<br />
Company.PolicyAdministration.ProductFamily1.Messages<br />
Company.PolicyAdministration.ProductFamily1.Persistence<br />
Company.PolicyAdministration.ProductFamily1.Persistence.Implementation<br />
Company.PolicyAdministration.ProductFamily1.Etc&#8230;</p>
<p>ProductFamily2<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
Company.PolicyAdministration.ProductFamily2.Domain<br />
Company.PolicyAdministration.ProductFamily2.MessageHandlers<br />
Company.PolicyAdministration.ProductFamily2.Messages<br />
Company.PolicyAdministration.ProductFamily2.Persistence<br />
Company.PolicyAdministration.ProductFamily2.Persistence.Implementation<br />
Company.PolicyAdministration.ProductFamily2.Etc&#8230;</p>
<p>ProductFamily3<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
Company.PolicyAdministration.ProductFamily3.Domain<br />
Company.PolicyAdministration.ProductFamily3.MessageHandlers<br />
Company.PolicyAdministration.ProductFamily3.Messages<br />
Company.PolicyAdministration.ProductFamily3.Persistence<br />
Company.PolicyAdministration.ProductFamily3.Persistence.Implementation<br />
Company.PolicyAdministration.ProductFamily3.Etc&#8230;</p>
<p>Common<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
Company.PolicyAdministration.Common.Domain<br />
Company.PolicyAdministration.Common.Persistence<br />
Company.PolicyAdministration.Common.Messages<br />
Company.PolicyAdministration.Common.ServiceHost<br />
Company.PolicyAdministration.Common.Etc&#8230;</p>
<p>Do you have any thoughts on the above structure?</p>
<p>Once again thank you very much for your extremely valuable advice!</p>
<p>Best Regards,<br />
Bill
</p></blockquote>
<p><a href="http://www.ddj.com/architect/201804009">Download via the Dr. Dobbs&#8217; site.</a></p>
<p>Or download directly <a href="http://www.dobbsprojects.com/media/newengine/dynamp.php/070904ud01.mp3?podcast=070904ud01.mp3">here</a>.</p>
<p><u>Additional References:</u></p>
<ul>
<li><a href="http://udidahan.weblogs.us/2007/06/02/podcast-using-autonomous-components-for-slas-in-soa/">Ask Udi Podcast #017 &#8211; Using Autonomous Components for SLAs in SOA</a></li>
<li><a href="http://udidahan.weblogs.us/2007/04/18/podcast-how-to-structure-net-solutions-and-components/">Ask Udi Podcast #020 &#8211; How to structure .NET solutions and components</a></li>
</ul>
<p><b>Want More?</b></p>
<p>Check out the <a href="/ask-udi/">“Ask Udi” archives</a>.</p>
<p><b>Got a question?</b></p>
<p>Send Udi your question and have him answer it on the show: <a href="mailto:podcast@UdiDahan.com">podcast@UdiDahan.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/2007/09/09/podcast-shared-subscriptions-between-autonomous-components/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="http://www.dobbsprojects.com/media/newengine/dynamp.php/070904ud01.mp3?podcast=070904ud01.mp3" length="14630852" type="audio/mp3" />
		</item>
		<item>
		<title>[Podcast] Can We Do Away with Services and Just Leave the Messaging?</title>
		<link>http://www.udidahan.com/2007/08/11/podcast-can-we-do-away-with-services-and-just-leave-the-messaging/</link>
		<comments>http://www.udidahan.com/2007/08/11/podcast-can-we-do-away-with-services-and-just-leave-the-messaging/#comments</comments>
		<pubDate>Sat, 11 Aug 2007 09:18:38 +0000</pubDate>
		<dc:creator>thesoftwaresimplist</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Ask Udi Podcast]]></category>
		<category><![CDATA[Autonomous Services]]></category>
		<category><![CDATA[EDA]]></category>
		<category><![CDATA[ESB]]></category>
		<category><![CDATA[Pub/Sub]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/08/11/podcast-can-we-do-away-with-services-and-just-leave-the-messaging/</guid>
		<description><![CDATA[This week we have a comment from a fellow SOA blogger, Jack van Hoof:

ESB&#8217;s are a lot about messaging and therefore a better name might be &#8220;Enterprise Data Bus&#8221;. It&#8217;s the asynchronous messaging that needs such an infrastructure with persistency and mediation facilities. All the WS-* standards are about messaging as well, leveraging the message [...]]]></description>
			<content:encoded><![CDATA[<p>This week we have a comment from a fellow SOA blogger, <a href="http://soa-eda.blogspot.com">Jack van Hoof</a>:</p>
<blockquote><p>
ESB&#8217;s are a lot about messaging and therefore a better name might be &#8220;Enterprise Data Bus&#8221;. It&#8217;s the asynchronous messaging that needs such an infrastructure with persistency and mediation facilities. All the WS-* standards are about messaging as well, leveraging the message itself to tell the infrastructure how it has to be handled. </p>
<p>I think WS-* will make it possible to have the ESB evolve from a vendor-product to a concept implemented in the operating systems an network devices that understand WS-*. Then you can leave the prefix &#8220;Enterprise&#8221; and we will be ready for an univeral asynchronous data bus over the Internet (or any other network you like). This will help breaking the current &#8220;services centric&#8221; idea of SOA into a &#8220;messages centric&#8221; perspective.</p>
<p>What are your thoughts?
</p></blockquote>
<p><a href="http://www.ddj.com/web-development/201306152">Download via the Dr. Dobb&#8217;s site</a></p>
<p>Or download directly <a href="http://www.dobbsprojects.com/media/newengine/dynamp.php/070808ud01.mp3?podcast=070808ud01.mp3">here</a>.</p>
<p><u>Additional References:</u></p>
<ul>
<li><a href="http://udidahan.weblogs.us/2006/06/02/podcast-does-an-soa-require-an-esb/">Podcast on if you need an ESB for SOA</a></li>
<li><a href="http://udidahan.weblogs.us/2007/03/29/podcast-enterprise-service-discovery/">Podcast on Enterprise Service Discovery</a></li>
<li><a href="http://soa-eda.blogspot.com/2006/11/esb-as-global-dataspace.html">Blog post on ESBs as a global dataspace</a></li>
<li><a href="http://soa-eda.blogspot.com/2006/06/brave-new-world-with-ws.html">Blog post about what the brave new world of WS-* brings us</a></li>
</ul>
<p><b>Want more?</b> Check out the <a href="/ask-udi/">&#8220;Ask Udi&#8221; archives</a>.</p>
<p><b>Got a question?</b> Have Udi answer it on the podcast &#8211; <a href="mailto:podcast@UdiDahan.com">podcast@UdiDahan.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/2007/08/11/podcast-can-we-do-away-with-services-and-just-leave-the-messaging/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.dobbsprojects.com/media/newengine/dynamp.php/070808ud01.mp3?podcast=070808ud01.mp3" length="13990964" type="audio/mp3" />
		</item>
		<item>
		<title>[Podcast] Interview with Paul Preiss &#8211; IASA President and Founder</title>
		<link>http://www.udidahan.com/2007/08/07/podcast-interview-with-paul-preiss-iasa-president-and-founder/</link>
		<comments>http://www.udidahan.com/2007/08/07/podcast-interview-with-paul-preiss-iasa-president-and-founder/#comments</comments>
		<pubDate>Wed, 08 Aug 2007 04:47:48 +0000</pubDate>
		<dc:creator>thesoftwaresimplist</dc:creator>
				<category><![CDATA[Ask Udi Podcast]]></category>

		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/08/07/podcast-interview-with-paul-preiss-iasa-president-and-founder/</guid>
		<description><![CDATA[In this podcast we talk to Paul Preiss, President and Founder of the International Association of Software Architects, about the field of IT Architecture, the value IASA brings to architects, vendors, and corporate IT, as well as the various training programs available including the free Skills Library&#8211;over 600 pages of articles written by architects for [...]]]></description>
			<content:encoded><![CDATA[<p>In this podcast we talk to Paul Preiss, President and Founder of the International Association of Software Architects, about the field of IT Architecture, the value IASA brings to architects, vendors, and corporate IT, as well as the various training programs available including the free Skills Library&#8211;over 600 pages of articles written by architects for architects.</p>
<p><a href="http://www.ddj.com/web-development/201200592">Download via the Dr. Dobb&#8217;s site</a></p>
<p>Or download directly <a href="http://www.dobbsprojects.com/media/newengine/dynamp.php/070720ud01.mp3?podcast=070720ud01.mp3">here</a>.</p>
<p><u>Additional References:</u></p>
<ul>
<li><a href="http://www.iasahome.org/">IASA home page</a></li>
<li><a href="http://www.iasahome.org/web/home/skillset">IASA Skills Library</li>
<li><a href="http://www.iasahome.org/web/home/chapter/startup">How to start your own IASA chapter</li>
<li><a href="http://www.iasahome.org/web/home/training/program">Join the IASA Training Program</a></li>
</ul>
<p><b>Want more?</b></p>
<p>Check out the <a href="/ask-udi/">“Ask Udi” archives</a></p>
<p><a href="mailto:podcast@UdiDahan.com">Ask Udi a question for the podcast&#8230;</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/2007/08/07/podcast-interview-with-paul-preiss-iasa-president-and-founder/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.dobbsprojects.com/media/newengine/dynamp.php/070720ud01.mp3?podcast=070720ud01.mp3" length="20391171" type="audio/mp3" />
		</item>
		<item>
		<title>[Podcast] Using WCF for Entity and Activity Services to Implement Business Services</title>
		<link>http://www.udidahan.com/2007/07/17/podcast-using-wcf-for-entity-and-activity-services-to-implement-business-services/</link>
		<comments>http://www.udidahan.com/2007/07/17/podcast-using-wcf-for-entity-and-activity-services-to-implement-business-services/#comments</comments>
		<pubDate>Tue, 17 Jul 2007 14:00:08 +0000</pubDate>
		<dc:creator>thesoftwaresimplist</dc:creator>
				<category><![CDATA[Ask Udi Podcast]]></category>
		<category><![CDATA[Autonomous Services]]></category>
		<category><![CDATA[ESB]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[WCF]]></category>
		<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/07/17/podcast-using-wcf-for-entity-and-activity-services-to-implement-business-services/</guid>
		<description><![CDATA[This week we return to the topic of Entity, Activity, and Process services and compares their usages as top-level SOA elements and as implementation details of the application architecture inside a business service.
And the question that this answers is:

Hi Udi,
We&#8217;ve been having some discussions about how to implement our latest project using SOA and this [...]]]></description>
			<content:encoded><![CDATA[<p>This week we return to the topic of Entity, Activity, and Process services and compares their usages as top-level SOA elements and as implementation details of the application architecture inside a business service.</p>
<p>And the question that this answers is:</p>
<blockquote><p>
Hi Udi,</p>
<p>We&#8217;ve been having some discussions about how to implement our latest project using SOA and this is what we came up with: </p>
<p>Every activity is a method, which is broken into a class ( Think separation of concerns ), so we get high reusability.<br />
On top of those classes we have decided to put a WCF layer, so you can expose the method as a web method. If an activity needs data, then it will access a entity service via WCF. To make the activities useful for the business we put them in a class which we have called processes ( a process layer). A process contains one or more activities and is able to call other processes and activities aren&#8217;t allowed to call processes or other activities.  On top of each process we have decided to put a WCF so the UI can access them. </p>
<p>So it&#8217;s pretty close to what you wrote about in the Microsoft Architecture Journal except that we don&#8217;t have direct call to the entity services, we wrap it up in an activity before the call, which is wrapped in a WCF-host. Much like the definitions in Ontology and Taxonomy of Services in a Service-Oriented Architecture</p>
<p>I would love to hear your comments and thoughts about this architecture. </p>
<p>With thanks, Ingo
</p></blockquote>
<p><a href="http://www.ddj.com/dept/webservices/201001690">Download via the Dr. Dobbs&#8217; site</a>.</p>
<p>Or download directly <a href="http://www.dobbsprojects.com/media/newengine/dynamp.php/070716ud01.mp3?podcast=070716ud01.mp3">here</a>.</p>
<p><u>Additional References:</u></p>
<ul>
<li><a href="http://msdn2.microsoft.com/en-us/arcjournal/bb491121.aspx">Ontology and Taxonomy of Services in a Service-Oriented Architecture</a></li>
<li><a href="http://udidahan.weblogs.us/2007/02/20/autonomous-services-and-enterprise-entity-aggregation/">Udi&#8217;s Architecture Journal article on Autonomous Services<br />
</a></li>
<li><a href="http://udidahan.weblogs.us/2007/04/18/podcast-how-to-structure-net-solutions-and-components/">Podcast on how to structure .NET solutions and components</a></li>
<li><a href="http://udidahan.weblogs.us/2007/06/08/entity-services-rollup/">Blog post covering a discussion on Entity Services</a></li>
</ul>
<p><b>Want More?</b></p>
<p>Check out the <a href="/ask-udi/">&#8220;Ask Udi&#8221; archives</a>.</p>
<p><b>Got a question?</b></p>
<p>Send Udi your question and have him answer it on the show: <a href="mailto:podcast@UdiDahan.com">podcast@UdiDahan.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/2007/07/17/podcast-using-wcf-for-entity-and-activity-services-to-implement-business-services/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.dobbsprojects.com/media/newengine/dynamp.php/070716ud01.mp3?podcast=070716ud01.mp3" length="10951162" type="audio/mp3" />
		</item>
		<item>
		<title>[Podcast] Passing Data Between Layers in SOA Model/Smart Client Application</title>
		<link>http://www.udidahan.com/2007/07/12/podcast-passing-data-between-layers-in-soa-modelsmart-client-application/</link>
		<comments>http://www.udidahan.com/2007/07/12/podcast-passing-data-between-layers-in-soa-modelsmart-client-application/#comments</comments>
		<pubDate>Thu, 12 Jul 2007 22:37:18 +0000</pubDate>
		<dc:creator>thesoftwaresimplist</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Ask Udi Podcast]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Smart Client]]></category>
		<category><![CDATA[WCF]]></category>
		<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/07/12/podcast-passing-data-between-layers-in-soa-modelsmart-client-application/</guid>
		<description><![CDATA[This week we discuss the different options that are available for passing data between a client and a service, as well as common pitfalls around trying to use the same objects for both presentation to the user and persistence to the database.
Download via the Dr. Dobb&#8217;s site.
Or download directly here.
And here&#8217;s the question that gets [...]]]></description>
			<content:encoded><![CDATA[<p>This week we discuss the different options that are available for passing data between a client and a service, as well as common pitfalls around trying to use the same objects for both presentation to the user and persistence to the database.</p>
<p><a href="http://ddj.com/dept/webservices/201001098">Download via the Dr. Dobb&#8217;s site.</a></p>
<p>Or download directly <a href="http://www.dobbsprojects.com/media/newengine/dynamp.php/070712ud01.mp3?podcast=070712ud01.mp3">here</a>.</p>
<p>And here&#8217;s the question that gets us started:</p>
<blockquote><p>
Hello there, </p>
<p>We are developing an application in .NET Smart Client application which connects to a WCF service and then to the data access layer.  The issue we have here is on the type of data which can be passed between the client side and web service. </p>
<p>1. Can it be a dataset (No!), custom entity or XML or anything else ? </p>
<p>     Which is the best one ?</p>
<p>2. Ofcourse , a dataset can&#8217;t be used coz it can&#8217;t be used in non-.NET environment?</p>
<p>3. If we go for custom-entity or XML how do we ensure the changes happen to the data during client-side actions ? For example, binding the XML or custom entity to a data grid can be done.  But if user makes any changes to the same,  how do we identify ?</p>
<p>4. If we use custom entities / XM L, the same can not be passed to the Data Access Application Block which invokes the data objects.</p>
<p>Note : All the above are based on assumption without using a translator in between any of the layers.</p>
<p>Please provide a better solution if you have come across any.
</p></blockquote>
<p><u>Additional References:</u></p>
<ul>
<li><a href="http://udidahan.weblogs.us/2007/03/28/podcast-datasets-web-services/">Podcast on using DataSets with Web Services</li>
<li><a href="http://udidahan.weblogs.us/2007/03/30/entity-framework-disconnected-problems-solutions/">Blog post on tracking changes to objects on the client side</a></li>
<li><a href="/ask-udi/">Looking for more of the &#8220;Ask Udi&#8221; podcast?</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/2007/07/12/podcast-passing-data-between-layers-in-soa-modelsmart-client-application/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
<enclosure url="http://www.dobbsprojects.com/media/newengine/dynamp.php/070712ud01.mp3?podcast=070712ud01.mp3" length="15111103" type="audio/mp3" />
		</item>
		<item>
		<title>[Podcast] Ross Mason on ESBs and the Mule Project</title>
		<link>http://www.udidahan.com/2007/06/30/podcast-ross-mason-on-esbs-and-the-mule-project/</link>
		<comments>http://www.udidahan.com/2007/06/30/podcast-ross-mason-on-esbs-and-the-mule-project/#comments</comments>
		<pubDate>Sat, 30 Jun 2007 14:03:26 +0000</pubDate>
		<dc:creator>thesoftwaresimplist</dc:creator>
				<category><![CDATA[Ask Udi Podcast]]></category>
		<category><![CDATA[ESB]]></category>
		<category><![CDATA[Pub/Sub]]></category>
		<category><![CDATA[Scalability]]></category>

		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/06/30/podcast-ross-mason-on-esbs-and-the-mule-project/</guid>
		<description><![CDATA[In this podcast we talk to Ross Mason about the value Enterprise Service Buses (ESBs) provide over regular Enterprise Application Integration products and how Mule, a Java-based open-source ESB, makes ESBs easy to use.
Download via the Dr. Dobb&#8217;s site
Or download directly here.
Additional References:

OSGi
MuleSource, the company supporting Mule
Microsoft BizTalk Internet Services Bus
ALT.NET, a community around the [...]]]></description>
			<content:encoded><![CDATA[<p>In this podcast we talk to Ross Mason about the value Enterprise Service Buses (ESBs) provide over regular Enterprise Application Integration products and how Mule, a Java-based open-source ESB, makes ESBs easy to use.</p>
<p><a href="http://ddj.com/dept/webservices/200000160">Download via the Dr. Dobb&#8217;s site</a></p>
<p>Or download directly <a href="http://www.dobbsprojects.com/media/newengine/dynamp.php/070622ud01.mp3?podcast=070622ud01.mp3">here</a>.</p>
<p><u>Additional References:</u></p>
<ul>
<li><a href="http://www.osgi.org">OSGi</a></li>
<li><a href="http://www.mulesource.com">MuleSource, the company supporting Mule</a></li>
<li><a href="http://labs.biztalk.net">Microsoft BizTalk Internet Services Bus</a></li>
<li><a href="http://laribee.com/blog/2007/04/10/altnet/">ALT.NET, a community around the solution, not the tools</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/2007/06/30/podcast-ross-mason-on-esbs-and-the-mule-project/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.dobbsprojects.com/media/newengine/dynamp.php/070622ud01.mp3?podcast=070622ud01.mp3" length="19271046" type="audio/mp3" />
		</item>
		<item>
		<title>[Podcast] Sockets, Web Services, and Security</title>
		<link>http://www.udidahan.com/2007/06/21/podcast-sockets-web-services-and-security/</link>
		<comments>http://www.udidahan.com/2007/06/21/podcast-sockets-web-services-and-security/#comments</comments>
		<pubDate>Thu, 21 Jun 2007 20:00:47 +0000</pubDate>
		<dc:creator>thesoftwaresimplist</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Ask Udi Podcast]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/06/21/podcast-sockets-web-services-and-security/</guid>
		<description><![CDATA[In this podcast we answer questions about the considerations of choosing various communications technology&#8211;from TCP and UDP sockets, to .NET Remoting, Web Services, and Windows Communication Foundation. Also, issues such as scalability and security are discussed in the context of company intranets.
Download via the Dr. Dobb&#8217;s site.
Or download directly here.
Here&#8217;s the original question:

Hi Udi,
This is [...]]]></description>
			<content:encoded><![CDATA[<p>In this podcast we answer questions about the considerations of choosing various communications technology&#8211;from TCP and UDP sockets, to .NET Remoting, Web Services, and Windows Communication Foundation. Also, issues such as scalability and security are discussed in the context of company intranets.</p>
<p><a href="http://ddj.com/dept/webservices/199300134">Download via the Dr. Dobb&#8217;s site.</a></p>
<p>Or download directly <a href="http://www.dobbsprojects.com/media/newengine/dynamp.php/070507ud01.mp3?podcast=070507ud01.mp3">here</a>.</p>
<p>Here&#8217;s the original question:</p>
<blockquote><p>
Hi Udi,</p>
<p>This is Kumar, i am new to .NET and related technologies. Actually i am designing an application with few a components like a Socket Server(a service) which received input from payment terminal for loyalty application, which should communicate with Web Services deployed in an IIS application server, then the web services should communicate with an Oracle Database.</p>
<p>What are the patterns and best practices to use for the communication between the socket server and application server, and how do I scale for multiple clients in socketserver, and what are the security things that i need to consider.</p>
<p>Should i need to use .NET Remoting instead Web Services for my application server layer, and which is best for my socket server?</p>
<p>Thank you for your support.</p>
<p>Kumar
</p></blockquote>
<p><u>Additional References</u></p>
<ul>
<li><a href="http://msdn2.microsoft.com/en-us/library/bb310550.aspx">MSDN WCF performance whitepaper</a></li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms166043.aspx">Microsoft SQL Server Service Broker</a></li>
<li><a href="http://msdn.microsoft.com/msdnmag/issues/06/11/ThreatModeling/default.aspx">Threat modeling, the STRIDE approach</a></li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms978516.aspx">Microsoft Patterns &#038; Practices group; Threat modeling for web applications Ebook<a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/2007/06/21/podcast-sockets-web-services-and-security/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="http://www.dobbsprojects.com/media/newengine/dynamp.php/070507ud01.mp3?podcast=070507ud01.mp3" length="9991074" type="audio/mp3" />
		</item>
		<item>
		<title>[Podcast] Asynch Communication and the User Experience</title>
		<link>http://www.udidahan.com/2007/06/21/podcast-asynch-communication-and-the-user-experience/</link>
		<comments>http://www.udidahan.com/2007/06/21/podcast-asynch-communication-and-the-user-experience/#comments</comments>
		<pubDate>Thu, 21 Jun 2007 19:40:29 +0000</pubDate>
		<dc:creator>thesoftwaresimplist</dc:creator>
				<category><![CDATA[Ask Udi Podcast]]></category>
		<category><![CDATA[Autonomous Services]]></category>
		<category><![CDATA[Pub/Sub]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/06/21/podcast-asynch-communication-and-the-user-experience/</guid>
		<description><![CDATA[In this podcast we answer questions about how web presentation layers can communicate asynchronously with services, Service Level Agreements with respect to asynchronous user interaction, and if using compiled DLLs for message schemas creates tight coupling.
Download via the Dr. Dobbs&#8217; site
Or download directly here.
And here&#8217;s the original question:

Hi Udi,
I thought I&#8217;d ask a question about [...]]]></description>
			<content:encoded><![CDATA[<p>In this podcast we answer questions about how web presentation layers can communicate asynchronously with services, Service Level Agreements with respect to asynchronous user interaction, and if using compiled DLLs for message schemas creates tight coupling.</p>
<p><a href="http://ddj.com/dept/webservices/199601132">Download via the Dr. Dobbs&#8217; site</a></p>
<p>Or download directly <a href="http://www.dobbsprojects.com/media/newengine/dynamp.php/070515ud01.mp3?podcast=070515ud01.mp3">here</a>.</p>
<p>And here&#8217;s the original question:</p>
<blockquote><p>
Hi Udi,</p>
<p>I thought I&#8217;d ask a question about an implementation that seems to be bouncing off my head. We have been thinking about services that can, at the business owners discretion based on SLA expectations, be synchronous, async but within a &#8220;human&#8221; timeframe ie, the gui could still wait and just fail gracefully if the response took too long, or async where the client must check back later. </p>
<p>Client abc is using application xyz and sends a message via the bus to do something. Logically, client abc is waiting for a response even though application xyz sent it asynchronously. Client abc may wait with the gui in front of them, with a progress bar running or a little ajaxy polling widget. They may wait for an email or an message on their web site for long running operations. How would you arrange that the response to this particular message would get routed to only client abc? If the answer is you shouldn&#8217;t think that way, then what would a subscriber to that message type, as shown in your example, do with the client abc&#8217;s response? Imagine a password reset example where the result is a temporary password but the service consults or updates multiple systems as a result of the request.</p>
<p>You also use a shared message type library. As we have been studying WCF, we have focused mostly on the features that would help us allow service consumers and suppliers move independently. We have been looking at message versioning and loose coupling techniques. We have settled on the idea that a shared message library would make our message too brittle, once again forcing each consumer to sync up with each service update. What is your take on that?</p>
<p>Philip
</p></blockquote>
<p><u>Additional Resources</u></p>
<ul>
<li><a href="http://www.joelonsoftware.com/items/2007/01/26.html">Joel Spolsky&#8217;s posts about how they do asynchronous callbacks over the Web</a></li>
<li><a href="http://labs.biztalk.net/">Microsoft Biztalk Internet Service Bus for asynchronous callbacks over the Web</a></li>
<li><a href="http://udidahan.weblogs.us/2007/03/23/podcast-autonomy-loose-coupling-chicken-egg/">Podcast on loose coupling</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/2007/06/21/podcast-asynch-communication-and-the-user-experience/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Podcast] Using Autonomous Components for SLAs in SOA</title>
		<link>http://www.udidahan.com/2007/06/02/podcast-using-autonomous-components-for-slas-in-soa/</link>
		<comments>http://www.udidahan.com/2007/06/02/podcast-using-autonomous-components-for-slas-in-soa/#comments</comments>
		<pubDate>Sun, 03 Jun 2007 05:07:36 +0000</pubDate>
		<dc:creator>thesoftwaresimplist</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Ask Udi Podcast]]></category>
		<category><![CDATA[Autonomous Services]]></category>
		<category><![CDATA[EDA]]></category>
		<category><![CDATA[ESB]]></category>
		<category><![CDATA[Podcast]]></category>
		<category><![CDATA[Pub/Sub]]></category>
		<category><![CDATA[SCA & SDO]]></category>
		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/06/02/podcast-using-autonomous-components-for-slas-in-soa/</guid>
		<description><![CDATA[In this podcast we answer questions about how to use autonomous components to unify disparate building blocks like servers, middleware, and databases in order to handle the technical complexity of complying with detailed service-level agreements. Reuse of business logic, database schemas, and messaging topics between autonomous components are discussed as well.
Download via the Dr. Dobbs&#8217; [...]]]></description>
			<content:encoded><![CDATA[<p>In this podcast we answer questions about how to use autonomous components to unify disparate building blocks like servers, middleware, and databases in order to handle the technical complexity of complying with detailed service-level agreements. Reuse of business logic, database schemas, and messaging topics between autonomous components are discussed as well.</p>
<p><a href="http://www.ddj.com/dept/webservices/199800168">Download via the Dr. Dobbs&#8217; site</a>.</p>
<p>Or download directly <a href="http://www.dobbsprojects.com/media/newengine/dynamp.php/070531ud01.mp3?podcast=070531ud01.mp3">here</a>.</p>
<p>And here&#8217;s this week&#8217;s question:</p>
<blockquote><p>
Hi Udi,</p>
<p>Thanks again for your continued assistance.  I was very much interested by your advice to consolidate each of the services related to each product family into a single service, but as autonomous components.  </p>
<p>From your description of autonomous components from a prior podcast, it seems that they are much the same as services &#8211; in that they communicate only via loosely coupled messaging, and can have their own databases.  Would you say that the main difference between autonomous components is that different autonomous components within a service may in fact share business logic and databases?  If so, it would seem that combining these services into a single service with 3 autonomous components would be a matter of definition, rather than an architectural shift.  Any information you could provide to clarify this distinction would be fantastic.</p>
<p>Something else that&#8217;s been playing on my mind of late &#8211; is whether or not you would consider a topic as having to belong to a specific service.  That is, would you say it is bad practice to have multiple services publish on a common topic?  I suppose if we have multiple services publishing on a common topic, then they should be defined as autonomous components, belonging to a single larger service &#8211; in which case that common topic would belong to that new service.</p>
<p>As usual your advice is always extremely helpful.  Please keep those podcasts coming!</p>
<p>Best Regards,<br />
Bill
</p></blockquote>
<p><u>Additional References</u></p>
<ul>
<li><a href="http://udidahan.weblogs.us/2007/04/30/podcast-message-schemas-between-multiple-publishers-and-subscribers/">Podcast on Message Schemas between multiple Publishers and Subscribers</a></li>
<li><a href="http://udidahan.weblogs.us/2006/08/28/podcast-business-and-autonomous-components-in-soa/">Podcast on Business and Autonomous Components in SOA </a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/2007/06/02/podcast-using-autonomous-components-for-slas-in-soa/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
<enclosure url="http://www.dobbsprojects.com/media/newengine/dynamp.php/070531ud01.mp3?podcast=070531ud01.mp3" length="15911054" type="audio/mp3" />
		</item>
		<item>
		<title>[Podcast] Handling Dependencies Between Subscribers in SOA</title>
		<link>http://www.udidahan.com/2007/05/31/podcast-handling-dependencies-between-subscribers-in-soa/</link>
		<comments>http://www.udidahan.com/2007/05/31/podcast-handling-dependencies-between-subscribers-in-soa/#comments</comments>
		<pubDate>Thu, 31 May 2007 20:59:28 +0000</pubDate>
		<dc:creator>thesoftwaresimplist</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Ask Udi Podcast]]></category>
		<category><![CDATA[Autonomous Services]]></category>
		<category><![CDATA[EDA]]></category>
		<category><![CDATA[ESB]]></category>
		<category><![CDATA[Podcast]]></category>
		<category><![CDATA[Pub/Sub]]></category>
		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/05/31/podcast-handling-dependencies-between-subscribers-in-soa/</guid>
		<description><![CDATA[In this podcast we answer questions about how to solve dependencies between systems that subscribe to events in SOA. We&#8217;ll also get into the pitfalls of employing distributed transaction when reusing existing systems even behind service boundaries.
Download via the Dr. Dobbs&#8217; site.
Or download directly here.
And the original question was:

Udi:
I have a question regarding publishing events [...]]]></description>
			<content:encoded><![CDATA[<p>In this podcast we answer questions about how to solve dependencies between systems that subscribe to events in SOA. We&#8217;ll also get into the pitfalls of employing distributed transaction when reusing existing systems even behind service boundaries.</p>
<p><a href="http://ddj.com/dept/webservices/199703676">Download via the Dr. Dobbs&#8217; site</a>.</p>
<p>Or download directly <a href="http://www.dobbsprojects.com/media/newengine/dynamp.php/070529ud01.mp3?podcast=070529ud01.mp3">here</a>.</p>
<p>And the original question was:</p>
<blockquote><p>
Udi:</p>
<p>I have a question regarding publishing events that relate to data changes. I found the article you wrote in the Arch Journal #8 very helpful. I think striving for autonomy is very important. The scenario I was thinking about is how can you ensure synchronization across subscribers of a particular event. </p>
<p>For example, System A publishes an event when customer information is updated. There are several systems that subscribe to this event. Two of the systems, System B and System C, need to be sync regarding customer information. System B uses operations from System C using the customer data. Using your example, System B has a process that runs for all &#8220;Preferred Customers&#8221;, and it uses processes on System C. However, System C may not have process the event to and may have a customer as preferred.</p>
<p>I have several thoughts, but would like to get your thoughts on this scenario. Are there any best practices or patterns?</p>
<p>Phil
</p></blockquote>
<p><u>Additional References:</u></p>
<ul>
<li><a href="http://msdn2.microsoft.com/en-us/arcjournal/bb245672">Autonomous Services and Enterprise Entity Aggregation</a> (Article in Microsoft Architecture Journal)</li>
<li><a href="http://udidahan.weblogs.us/2006/09/05/podcast-autonomous-services-and-pubsub/">Podcast on Autonomous Services and Pub/Sub</a></li>
</ul>
<p>You can find more episodes like this in the <a href="http://udidahan.weblogs.us/ask-udi/">Ask Udi archives</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/2007/05/31/podcast-handling-dependencies-between-subscribers-in-soa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.dobbsprojects.com/media/newengine/dynamp.php/070529ud01.mp3?podcast=070529ud01.mp3" length="11911190" type="audio/mp3" />
		</item>
		<item>
		<title>[Podcast] How does Extract, Transform, Load fit with SOA?</title>
		<link>http://www.udidahan.com/2007/05/20/podcast-how-does-extract-transform-load-fit-with-soa/</link>
		<comments>http://www.udidahan.com/2007/05/20/podcast-how-does-extract-transform-load-fit-with-soa/#comments</comments>
		<pubDate>Sun, 20 May 2007 21:43:03 +0000</pubDate>
		<dc:creator>thesoftwaresimplist</dc:creator>
				<category><![CDATA[Ask Udi Podcast]]></category>
		<category><![CDATA[Autonomous Services]]></category>
		<category><![CDATA[Databases]]></category>
		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/05/20/podcast-how-does-extract-transform-load-fit-with-soa/</guid>
		<description><![CDATA[This week&#8217;s question comes from Jayan, who asks:

Hi Udi,
I just went through your Blog which talks about not creating entity services, but instead creating a business service. I understood why you would want it to be a business service, although I am still struggling to fully define what a business service is. 
Currently what we [...]]]></description>
			<content:encoded><![CDATA[<p>This week&#8217;s question comes from Jayan, who asks:</p>
<blockquote><p>
Hi Udi,</p>
<p>I just went through your Blog which talks about not creating entity services, but instead creating a business service. I understood why you would want it to be a business service, although I am still struggling to fully define what a business service is. </p>
<p>Currently what we have requested is to have a single service, extract, transform and load master data. From your explanations it seems like this is a business service and not just an entity one. What one of the sales guys from an SOA company is saying that this is very possible and would be easy to do.. What I wanted to get your perspective is if this is the right thing to do. What we requested is below:</p>
<p>1.	To create a business service that will extract, transform and load data (One service for user, one for customer and one for product?)<br />
2.	This service will then be called by the different applications we have (3 Java applications, 1 .Net Application and 1 Siebel Application as well as a host of VB/Excel Applications)<br />
3.	The service will be calling on different backend sources for data from SAP systems, Access DBs, Excel Files, Web Pages &#038; Oracle Systems </p>
<p>They say that creating this would produce a.) a reusable service and b.) cost savings. Although I am still apprehensive because it seems as you mentioned in your podcast, each system would have slightly different set of rules for the data entity (and btw you are right).. would this still matter? The thing we want to eliminate is the replication of extracting and loading, although each system would transform the data in its own specific way.. </p>
<p>Appreciate any perspective that you might have. </p>
<p>Thanks,</p>
<p>Jayan
</p></blockquote>
<p>Get it via the Dr. Dobb&#8217;s site <a href="http://www.ddj.com/dept/webservices/199601565">here</a>.</p>
<p>Or download directly <a href="http://www.dobbsprojects.com/media/newengine/dynamp.php/070516ud01.mp3?podcast=070516ud01.mp3">here</a>.</p>
<p><u>Additional References</u></p>
<p><a href="http://udidahan.weblogs.us/2007/03/08/podcast-master-data-management-and-soa/">Podcast on Master Data Management and SOA</a><br />
<a href="http://udidahan.weblogs.us/2006/08/28/podcast-business-and-autonomous-components-in-soa/">Podcast on Business and Autonomous Components in SOA</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.udidahan.com/2007/05/20/podcast-how-does-extract-transform-load-fit-with-soa/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
<enclosure url="http://www.dobbsprojects.com/media/newengine/dynamp.php/070516ud01.mp3?podcast=070516ud01.mp3" length="11430954" type="audio/mp3" />
		</item>
	</channel>
</rss>
