<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://bloggingabout.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Erwyn van der Meer : Enterprise Library</title><link>http://bloggingabout.net/blogs/erwyn/archive/tags/Enterprise+Library/default.aspx</link><description>Tags: Enterprise Library</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>Enterprise Library 5.0 Released</title><link>http://bloggingabout.net/blogs/erwyn/archive/2010/04/21/enterprise-library-5-0-released.aspx</link><pubDate>Wed, 21 Apr 2010 09:22:00 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:483140</guid><dc:creator>Erwyn van der Meer</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://bloggingabout.net/blogs/erwyn/rsscomments.aspx?PostID=483140</wfw:commentRss><comments>http://bloggingabout.net/blogs/erwyn/archive/2010/04/21/enterprise-library-5-0-released.aspx#comments</comments><description>&lt;p&gt;&lt;img src="http://blogs.msdn.com/blogfiles/agile/WindowsLiveWriter/MicrosoftEnterpriseLibrary5.0Released_ED89/image_2.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;The Microsoft Enterprise Library has always been one of the most popular things to come out of the patterns &amp;amp; practices team. Yesterday p&amp;amp;p reached a major milestone by releasing version 5.0 of EntLib.&lt;/p&gt;
&lt;p&gt;The improvements are too numerous to sum up here, but let me mention one: this release has full .NET 3.5 SP1 and .NET 4 compatibility and works great from both Visual Studio 2008 SP1 and Visual Studio 2010 RTM.&lt;/p&gt;
&lt;p&gt;Full details can be found in &lt;a target="_blank" href="http://blogs.msdn.com/agile/archive/2010/04/20/microsoft-enterprise-library-5-0-released.aspx"&gt;Grigori Melnik&amp;rsquo;s blog post on this release&lt;/a&gt;. Or you can go straight to the &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=bcb166f7-dd16-448b-a152-9845760d9b4c&amp;amp;displaylang=en"&gt;download page&lt;/a&gt; or &lt;a target="_blank" href="http://entlib.codeplex.com/releases/view/43135"&gt;the documentation&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=483140" width="1" height="1"&gt;</description><category domain="http://bloggingabout.net/blogs/erwyn/archive/tags/.NET/default.aspx">.NET</category><category domain="http://bloggingabout.net/blogs/erwyn/archive/tags/Architecture+and+Design/default.aspx">Architecture and Design</category><category domain="http://bloggingabout.net/blogs/erwyn/archive/tags/Work/default.aspx">Work</category><category domain="http://bloggingabout.net/blogs/erwyn/archive/tags/Enterprise+Library/default.aspx">Enterprise Library</category><category domain="http://bloggingabout.net/blogs/erwyn/archive/tags/Microsoft/default.aspx">Microsoft</category></item><item><title>Similarity between EntLib 3.0 Policy Injection Application Block and EDRA</title><link>http://bloggingabout.net/blogs/erwyn/archive/2007/03/04/similarity-between-entlib-3-0-policy-injection-application-block-and-edra.aspx</link><pubDate>Sun, 04 Mar 2007 06:03:00 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:129311</guid><dc:creator>Erwyn van der Meer</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://bloggingabout.net/blogs/erwyn/rsscomments.aspx?PostID=129311</wfw:commentRss><comments>http://bloggingabout.net/blogs/erwyn/archive/2007/03/04/similarity-between-entlib-3-0-policy-injection-application-block-and-edra.aspx#comments</comments><description>&lt;P&gt;As announced on Tom Hollander's blog, the Microsoft&amp;nbsp;Enterprise Library 3.0 will include a new application block: the &lt;A href="http://blogs.msdn.com/tomholl/archive/2007/02/23/announcing-the-policy-injection-application-block.aspx"&gt;Policy Injection Application Block&lt;/A&gt;.&lt;/P&gt;
&lt;H2&gt;Enterprise Development Reference Architecture (EDRA)&lt;/H2&gt;
&lt;P&gt;&lt;A href="http://www.edwardbakker.nl/"&gt;Edward&lt;/A&gt; and me noticed a striking similarity with an earlier effort&amp;nbsp;by Microsoft Patterns and Practices. For some other people who have been following the P&amp;amp;P guidance for some years now, this similarity didn't go unnoticed as well. For example in the post: &lt;A href="http://manicprogrammer.com/cs/blogs/michaelruminer/archive/2007/02/27/can-anyone-say-shadowfax.aspx"&gt;Can anyone say Shadowfax&lt;/A&gt;?&lt;/P&gt;
&lt;P&gt;"Shadowfax" was the codename for the &lt;A href="http://www.gotdotnet.com/workspaces/workspace.aspx?id=9c29a963-594e-4e7a-9c45-576198df8058"&gt;Enterprise Development Reference Architecture&lt;/A&gt; (EDRA) released by Microsoft in 2004.&lt;/P&gt;
&lt;P&gt;One of the important goals for EDRA was the separation of business logic from cross cutting concerns in enterprise applications. This was implemented by providing&amp;nbsp;a pipeline of pre- and posthandlers that could be inserted declaratively using configuration in XML format. Messages would pass through this pipeline before reaching the business logic. The response would go back through the pipeline as well. EDRA handlers could inspect and even alter the messages flowing through the pipeline.&lt;/P&gt;
&lt;P&gt;One of the other&amp;nbsp;important goals for EDRA was the ability to physically separate the&amp;nbsp;service interface from the service implementation. As in distributing these layers across different tiers and across security boundaries. &lt;/P&gt;
&lt;P&gt;Our business unit at&amp;nbsp;LogicaCMG followed and evaluated this effort in 2004 and even used it in some projects. We especially liked the fact that this was a ready-made framework for "policy injection". We&amp;nbsp;made some extensions for cross cutting concerns not originally included in EDRA. Previously, we worked on a home-made framework that was based on .NET remoting extensibility to configure cross-cutting concerns. Although architecturally sound, it was far from complete because it&amp;nbsp;still had a long way to go to fulfill our vision.&lt;/P&gt;
&lt;P&gt;EDRA also included an early prototype of the &lt;A href="http://msdn2.microsoft.com/en-us/teamsystem/aa718948.aspx"&gt;Guidance Automation Toolkit&lt;/A&gt; to help framework users with building an EDRA based&amp;nbsp;service. This was known as the "Microsoft IPE Wizard Framework". Check out &lt;A href="http://clariusconsulting.net/blogs/kzu/archive/2004/07/05/257.aspx"&gt;this blog post from Daniel Cazzulino&lt;/A&gt; to see the EDRA wizard framework&amp;nbsp;in action.&lt;/P&gt;
&lt;P&gt;Eventually we reluctantly decided to drop EDRA. Some of the reasons for this were:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;The EDRA wizards were hard to extend. 
&lt;LI&gt;You had to mess with a big XML file to configure handlers. 
&lt;LI&gt;No proper .NET 2.0 support. 
&lt;LI&gt;No WS-* support. 
&lt;LI&gt;No support for calling out into other services from the service implementation. 
&lt;LI&gt;No big adoption in the worldwide .NET community. Not a lot of publicly available handlers. 
&lt;LI&gt;No clear path towards Windows Communication Foundation. The internal messaging structure was not based on SOAP.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Especially the last reason was probably the biggest&amp;nbsp;reason why Microsoft decided to stop the P&amp;amp;P effort on EDRA. The 1.1 release was announced to be the final release.&lt;/P&gt;
&lt;P&gt;The Microsoft Enterprise Library has become far more successful with respect to adoption world-wide than EDRA. There are several EntLib extensions freely available. I've contributed my &lt;A href="http://bloggingabout.net/blogs/erwyn/articles/rolling_file_trace_listener.aspx"&gt;RollingFileTraceListener&lt;/A&gt; to the greater EntLib community. According to the feedback I got, this extension has been really useful for several people and companies.&amp;nbsp;Microsoft&amp;nbsp;has realized the lack of&amp;nbsp;this functionality&amp;nbsp;in the&amp;nbsp;Enterprise Library and&amp;nbsp;EntLib 3.0 will include a similar rolling file trace listener out-of-the-box.&lt;/P&gt;
&lt;P&gt;EDRA is still being used by some companies. One of the largest implementations is the&amp;nbsp;&lt;A href="http://msdn2.microsoft.com/en-us/library/bb190160.aspx"&gt;Commonwealth Bank of Australia CommSee Solution that is based on EDRA&lt;/A&gt;. Microsoft is still using this as a reference case. For instance, there was a presentation on CommSee at &lt;A href="http://msdn2.microsoft.com/en-us/library/bb190160.aspx"&gt;LEAP2007&lt;/A&gt; in Redmond.&lt;/P&gt;
&lt;P&gt;I disliked the idea that EDRA pushed you into the direction of distributing the service interface and service implementation across different tiers. Both layers had to be realized in managed code using EDRA, so the service interface could also just call the service implementation in process. Remember the first law of distributed computing: "Don't distribute!" (unless you have to).&lt;/P&gt;
&lt;P&gt;Of course, it was great that you could distribute service interface and service implementation. But not all applications need this.&lt;/P&gt;
&lt;P&gt;So in my opinion it is better to have different frameworks that cleanly support these orthogonal&amp;nbsp;concepts:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Separating business logic from cross cutting concerns. 
&lt;LI&gt;Separating service interface from service implementation across physical tiers.&lt;/LI&gt;&lt;/UL&gt;
&lt;H2&gt;Proseware&lt;/H2&gt;
&lt;P&gt;By the way, a sample application that was commissioned by Microsoft to provide guidance on how to build distributed systems never saw the public light of day. It was the &lt;A href="http://friends.newtelligence.net/clemensv/PermaLink,guid,b90c9c1c-131f-4806-bf29-8540b40cd8ec.aspx"&gt;Proseware application designed and build by newtelligence's Clemens Vasters&lt;/A&gt;. &lt;A href="http://blogs.msdn.com/richardt/archive/2005/07/11/437671.aspx#438501"&gt;I never got a clear answer from Richard Turner&lt;/A&gt;, the responsible program manager at Microsoft, for why it would not be released.&amp;nbsp;But I think it was because of internal Microsoft politics: Proseware&amp;nbsp;was too close to the release of WCF and might be perceived as conflicting guidance (too close turned out to be two years!).&lt;/P&gt;
&lt;P&gt;Proseware included a great idea to improve the reliability and scalability of web services. By using one-way messaging for both requests and response. That way you can use queuing inside your service to handle heavy loads and to automatically retry failed attempts at processing messages (for example when a database is temporarily unavailable) without bothering the service clients with having to retry.&amp;nbsp;To achieve this, a web service interface would be a very thin facade around an MSMQ transactional&amp;nbsp;message queue. The web service would only return a fault when the message could not be placed onto the queue (highly unlikely). The message would re-enter the&amp;nbsp;queue if the service implementation failed at processing it so it could be processed again. A response from the service implementation would be send using a one-way message to the recipient specified in the WS-Addressing ReplyTo header in the original request. Note that this recipient does not have to be the original caller! It could well be a different service and the response message&amp;nbsp;is really&amp;nbsp;a new request.&amp;nbsp;Check out &lt;A href="http://benjaminm.net/PermaLink.aspx?guid=87ce6b8b-0fbf-4f0d-86c9-d9e780a1cb6a"&gt;this blog entry for more details on Proseware&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Eventually, we will all leave the world of developing and calling synchronous services in distributed systems, but that may take a while ;) Anyway, sorry for this digression, enter the Policy Injection Application Block.&lt;/P&gt;
&lt;H2&gt;Policy Injection Application Block&lt;/H2&gt;
&lt;P&gt;The new&amp;nbsp;Policy Injection Application Block (PIAB) wisely focuses on just the separation of business logic from cross cutting concerns. Windows Communication Foundation is the way to go for distributing your system, i.e., for building connected systems.&lt;/P&gt;
&lt;P&gt;The PIAB shares the idea of a pipeline of pre- and post handlers processing messages. It uses the MarshalByRefObject and TransparentProxy infrastructure that was originally designed for .NET remoting to transparently insert policies when they are enabled. The&amp;nbsp;client just thinks it is calling the business logic object directly. Take a look at the &lt;A href="http://blogs.msdn.com/tomholl/archive/2007/02/23/announcing-the-policy-injection-application-block.aspx"&gt;pictures in Tom's blog entry&lt;/A&gt; to get a better idea of how this works and read &lt;A href="http://blogs.msdn.com/edjez/archive/2007/02/23/policy-injection-app-block-behind-the-scenes.aspx"&gt;Edward Jezierski's blog post&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;You might also be interested in&amp;nbsp;the &lt;A href="http://blogs.msdn.com/tomholl/archive/2007/02/23/announcing-the-policy-injection-application-block.aspx#comments"&gt;comments&lt;/A&gt; posted to Tom's announcement. Several people are concerned about the performance impact that inserting policies will have on your code. This is caused by the technical implementation that Microsoft has chosen to insert policies (or should they be called aspects? ;). As I haven't looked into detail at the new block, I&amp;nbsp;do not have a firm&amp;nbsp;opinion on this matter yet. &lt;/P&gt;
&lt;P&gt;The transparent aspect of the policy injection&amp;nbsp;does conflict with&amp;nbsp;the wisdom put into WCF. WCF follows one of the important tenets of service orientation: "Make boundaries explicit". Don't fool the client into thinking they are just performing a local method call, because the performance and reliability characteristics are entirely different.&amp;nbsp;WCF achieves this explicitness by using DataContracts and ServiceContracts. It does not expose everything by default, you have to opt-in. It also makes you more aware that you should not use chatty interfaces across service boundaries.&lt;/P&gt;
&lt;P&gt;One of the comments to Tom's blog post states that the overhead of just having a&amp;nbsp;PIAB policy injection could mean&amp;nbsp;that the mere act of calling a method is 50 times slower than a direct method call. If this is the case, you should be well aware and design your objects accordingly: don't implement chatty interfaces!&lt;/P&gt;
&lt;P&gt;The future will tell if the PIAB will be more successful than EDRA&amp;nbsp;at enabling the separation of business logic from cross cutting concerns in .NET enterprise applications.&lt;/P&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=129311" width="1" height="1"&gt;</description><category domain="http://bloggingabout.net/blogs/erwyn/archive/tags/.NET/default.aspx">.NET</category><category domain="http://bloggingabout.net/blogs/erwyn/archive/tags/Architecture+and+Design/default.aspx">Architecture and Design</category><category domain="http://bloggingabout.net/blogs/erwyn/archive/tags/Work/default.aspx">Work</category><category domain="http://bloggingabout.net/blogs/erwyn/archive/tags/Enterprise+Library/default.aspx">Enterprise Library</category></item><item><title>Web Service Software Factory and Enterprise Library 3.0</title><link>http://bloggingabout.net/blogs/erwyn/archive/2007/02/05/web-service-software-factory-and-enterprise-library-3-0.aspx</link><pubDate>Mon, 05 Feb 2007 06:29:23 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:108156</guid><dc:creator>Erwyn van der Meer</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://bloggingabout.net/blogs/erwyn/rsscomments.aspx?PostID=108156</wfw:commentRss><comments>http://bloggingabout.net/blogs/erwyn/archive/2007/02/05/web-service-software-factory-and-enterprise-library-3-0.aspx#comments</comments><description>&lt;p&gt;The December 2006 CTP of the &lt;a href="http://msdn2.microsoft.com/en-us/library/aa480534.aspx"&gt;Web Service Software Factory&lt;/a&gt; (WSSF) from Microsoft P&amp;amp;P ships with a 2.0 version of the Microsoft Enterprise Library. The&amp;nbsp;Data Accesss factory&amp;nbsp;inside&amp;nbsp;Service Factory&amp;nbsp;generates code which uses the Data Access Application Block from Enterprise Library.&lt;/p&gt; &lt;p&gt;This interface of the Data Access block&amp;nbsp;hasn't changed significantly in the&amp;nbsp;January 2007 CTP of &lt;a href="http://www.codeplex.com/entlib"&gt;version 3.0 of the Enterprise Library&lt;/a&gt;.&amp;nbsp;I wondered if I could use this version of EntLib&amp;nbsp;together with&amp;nbsp;Service Factory.&lt;/p&gt; &lt;p&gt;It turns out that this is really easy. The Service Factory uses a registry key to locate the EntLib binaries. This key is &lt;font face="Courier New"&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\patterns and practices\Service Factory\EntlibBinaryPath&lt;/font&gt;.&lt;/p&gt; &lt;p&gt;It has a default value of &lt;font face="Courier New"&gt;C:\Program Files\Microsoft Service Factory\Enterprise Library Binaries\&lt;/font&gt;. After you have installed EntLib 3.0, change the value to the location of the new binaries. For the January 2007 CTP the default location is &lt;font face="Courier New"&gt;C:\Program Files\Microsoft Enterprise Library 3.0 - January 2007 CTP\Bin&lt;/font&gt;.&lt;/p&gt; &lt;p&gt;If you create repository classes in your DataAccess project using the "&lt;em&gt;Create data repository classes from business entities&lt;/em&gt;" recipe, the project will reference and use the 3.0 binaries.&lt;/p&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=108156" width="1" height="1"&gt;</description><category domain="http://bloggingabout.net/blogs/erwyn/archive/tags/.NET/default.aspx">.NET</category><category domain="http://bloggingabout.net/blogs/erwyn/archive/tags/Work/default.aspx">Work</category><category domain="http://bloggingabout.net/blogs/erwyn/archive/tags/Enterprise+Library/default.aspx">Enterprise Library</category></item></channel></rss>