<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" version="2.0">
  <channel>
    <title>Java and .NET Software Development Blog </title>
    <description>Intertech</description>
    <link>http://www.intertech.com/Blog/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 2.5.0.6</generator>
    <language>en-GB</language>
    <blogChannel:blogRoll>http://www.intertech.com/Blog/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://www.dotnetblogengine.net/syndication.axd</blogChannel:blink>
    <dc:creator>Intertech Blog | .NET and Java Software Development</dc:creator>
    <dc:title>Java and .NET Software Development Blog </dc:title>
    <geo:lat>0.000000</geo:lat>
    <geo:long>0.000000</geo:long>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/intertech/xgZI" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="intertech/xgzi" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
      <title>Free Groovy Training and Free Windows8/Metro/WinRT Training to Celebrate Intertech's 20 Year Anniversary</title>
      <description>&lt;p style="text-align: justify;"&gt;&lt;a href="http://www.intertech.com/Free-Developer-Training/Open-House.aspx"&gt;&lt;img src="http://www.intertech.com/Blog/image.axd?picture=2012%2f5%2fannilogo%5b1%5d.gif" alt="" width="245" height="266" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;Join us on May 31, 2012 from 2:00 to 6:00 CDT for&amp;nbsp;free presentations on Groovy and&amp;nbsp;Windows 8/Metro/WinRT.&amp;nbsp; You can attend the event &lt;a href="http://www.intertech.com/Free-Developer-Training/Open-House.aspx"&gt;in-person at our new facility or live via webinar&lt;/a&gt;.&amp;nbsp; Here's a link with additional information:&amp;nbsp; &lt;a href="http://www.intertech.com/Free-Developer-Training/Open-House.aspx"&gt;http://www.intertech.com/Free-Developer-Training/Open-House.aspx&lt;/a&gt;.&amp;nbsp; Below are summaries of the presentations and bios of the respective presenters.&lt;/p&gt;
&lt;p&gt;&lt;span class="blueSubHeader"&gt;&lt;strong&gt;&lt;span style="color: #000f47; font-size: x-small;"&gt;Session 1: An Introduction to Groovy &lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Among the many alternate Java Virtual Machine (JVM) programming languages, Groovy is quite popular. It is just over 5 years old, yet eWeek reported in Sept 2011 that it was the fastest growing programming language. In this talk, we&amp;rsquo;ll teach you how to get a Groovy environment setup and give you a quick tour of some its features. Prerequisites for this talk: basic Java.&lt;/p&gt;
&lt;p&gt;What You Learn: How to get, setup and use Groovy:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Groovy language basics&lt;/li&gt;
&lt;li&gt;Cool Groovy features for Java developers&lt;/li&gt;
&lt;li&gt;Why use Groovy over Java or other alternate JVM languages&lt;/li&gt;
&lt;li&gt;Warnings associated with using Groovy&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span class="blueSubHeader"&gt;&lt;strong&gt;&lt;span style="color: #000f47; font-size: x-small;"&gt;Session 2: An Overview of Windows 8, Metro Styles Apps and WinRT &lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The Windows 8 OS will present an entirely new UI which is markedly different from that of Windows 7. In this talk, you will be given a tour of the of the Windows 8 UI and come to learn the role of a &amp;ldquo;Metro Style App&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;More importantly, this talk will provide an overview of the new runtime environment (WinRT) and programming model.&lt;/p&gt;
&lt;p&gt;&lt;span class="blueSubHeader"&gt;&lt;strong&gt;&lt;span style="color: #000f47; font-size: x-small;"&gt;Session 3: Building a Winning Business&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;In this presentation, learn:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How to streamline projects with 7 guidelines &amp;amp; one simple way to know if you&amp;rsquo;re on track&lt;/li&gt;
&lt;li&gt;Essential communication principals everyone should know and some people forget!&lt;/li&gt;
&lt;li&gt;Practical tips to effectively interview prospective employees and team members&lt;/li&gt;
&lt;li&gt;7 major roles of an effective leader&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="float: left;"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style="float: left;"&gt;&lt;br /&gt;
&lt;div id="ctl00__10907b2a408f044_presenter" class="indented" style="float: left;"&gt;
&lt;div style="margin: 10px 0px;"&gt;&lt;strong&gt;Jim White (Introduction to Groovy)&lt;/strong&gt;&lt;br /&gt;
&lt;div style="margin-left: 15px;"&gt;Jim White is Director of Training and Instructor with Intertech. He is co-author of &amp;lsquo;Java 2 Micro Edition' (Manning) and a frequent speaker and contributor to various journals and on-line magazines including recent articles at devX.com. He has almost twenty years of software development experience including time as a senior technical architect at Target Corporation. He holds a M.S. in Computer Science from the University of Minnesota.&lt;/div&gt;
&lt;/div&gt;
&lt;div style="margin: 10px 0px;"&gt;&lt;strong&gt;Andrew Troelsen (Windows 8, Metro Style Applications, and WinRT)&lt;/strong&gt;&lt;br /&gt;
&lt;div style="margin-left: 15px;"&gt;Andrew Troelsen is the lead .NET instructor and .NET courseware author for Intertech, where he has worked for the past thirteen years. His work in the .NET community has resulted in obtaining Microsoft C# MVP status for the past five years. When able, Andrew speaks at various conferences around the country and has authored a number of books on the topics of COM, .NET, C# and the Visual Basic programming language.&lt;/div&gt;
&lt;/div&gt;
&lt;div style="margin: 10px 0px;"&gt;&lt;strong&gt;Tom Salonek (Building a Winning Business)&lt;/strong&gt;&lt;br /&gt;
&lt;div style="margin-left: 15px;"&gt;Tom Salonek is the founder and CEO of Intertech. In 2005, he was named one of Minnesota&amp;rsquo;s Top Business Leaders under 40. Intertech has been named twice to Inc. 500&amp;rsquo;s list of fastest growing companies, and is also a seven-time winner of the Business Journal&amp;rsquo;s Best Places to Work award. In 2003, he founded the Intertech Foundation to financially assist families with critically ill children. Tom has completed executive education at the Harvard School of Business and the Massachusetts Institute of Technology and is a past instructor at the University of St. Thomas Management Center. He holds a degree in Computer Science from the University of St. Thomas. He is the author of the book, Building a Winning Business: 70 Takeaways for Creating a Strong Company during Good and Bad Economic Times, and has written more than 50 articles on business, leadership and technology.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <link>http://www.intertech.com/Blog/post/Free-Groovy-Training-and-Free-Windows8MetroWinRT-Training-to-Celebrate-Intertechs-20-Year-Anniversary.aspx</link>
      <comments>http://www.intertech.com/Blog/post/Free-Groovy-Training-and-Free-Windows8MetroWinRT-Training-to-Celebrate-Intertechs-20-Year-Anniversary.aspx#comment</comments>
      <guid>http://www.intertech.com/Blog/post.aspx?id=b8c02936-d411-43fd-869e-7e21cd3da9a1</guid>
      <pubDate>Thu, 24 May 2012 14:31:00 -0500</pubDate>
      <category>.NET</category>
      <category>Java</category>
      <category>Visual Studio</category>
      <dc:publisher>Tom Salonek</dc:publisher>
      <pingback:server>http://www.intertech.com/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.intertech.com/Blog/post.aspx?id=b8c02936-d411-43fd-869e-7e21cd3da9a1</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.intertech.com/Blog/trackback.axd?id=b8c02936-d411-43fd-869e-7e21cd3da9a1</trackback:ping>
      <wfw:comment>http://www.intertech.com/Blog/post/Free-Groovy-Training-and-Free-Windows8MetroWinRT-Training-to-Celebrate-Intertechs-20-Year-Anniversary.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.intertech.com/Blog/syndication.axd?post=b8c02936-d411-43fd-869e-7e21cd3da9a1</wfw:commentRss>
    </item>
    <item>
      <title>Execution thru Act, Learn, Build</title>
      <description>&lt;p&gt;&lt;img style="float: left;" src="http://www.intertech.com/Blog/image.axd?picture=2012%2f5%2fAct-Learn-Build.jpg" alt="" width="151" height="141" /&gt;In the book &lt;em&gt;Just Start: Take Action, Embrace Uncertainty, Create the Future &lt;/em&gt;(see earlier post for citation), the authors&amp;rsquo; state most entrepreneurs &amp;ldquo;allow opportunities to emerge.&amp;rdquo; They also share most entrepreneurs try to limit loss and find &amp;ldquo;good enough&amp;rdquo; solutions. I agree.&lt;/p&gt;
&lt;p&gt;Most entrepreneurs I know are risk averse, focus on practical decisions, and don&amp;rsquo;t make big gambles.&amp;nbsp; This is the opposite of common thinking.&amp;nbsp; Instead of large endeavors, most entrepreneurs take small steps, learn what works and what doesn&amp;rsquo;t, and then choose to continue or cancel.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Saras D. Sarasvathy from the University of Virginia&amp;rsquo;s Darden School of Business, states &amp;ldquo;act-learn-build&amp;rdquo; is effective for launching new endeavors.&amp;nbsp; It&amp;rsquo;s simply:&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Act&lt;/strong&gt;: Take a step&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Learn&lt;/strong&gt;: Evaluate&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Build&lt;/strong&gt;: Continue until goal achievement or cancellation&lt;/p&gt;
&lt;p&gt;Act-Learn-Build is something we&amp;rsquo;ve been doing at Intertech since our inception.&amp;nbsp; In subsequent posts, I&amp;rsquo;ll share what&amp;rsquo;s worked and what hasn&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <link>http://www.intertech.com/Blog/post/Execution-thru-Act-Learn-Build.aspx</link>
      <comments>http://www.intertech.com/Blog/post/Execution-thru-Act-Learn-Build.aspx#comment</comments>
      <guid>http://www.intertech.com/Blog/post.aspx?id=eed4a8d1-a66d-4f33-832a-961e6fd5f44c</guid>
      <pubDate>Sat, 19 May 2012 17:15:00 -0500</pubDate>
      <category>Business</category>
      <dc:publisher>Tom Salonek</dc:publisher>
      <pingback:server>http://www.intertech.com/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.intertech.com/Blog/post.aspx?id=eed4a8d1-a66d-4f33-832a-961e6fd5f44c</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.intertech.com/Blog/trackback.axd?id=eed4a8d1-a66d-4f33-832a-961e6fd5f44c</trackback:ping>
      <wfw:comment>http://www.intertech.com/Blog/post/Execution-thru-Act-Learn-Build.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.intertech.com/Blog/syndication.axd?post=eed4a8d1-a66d-4f33-832a-961e6fd5f44c</wfw:commentRss>
    </item>
    <item>
      <title>Code Snippets using VS 11 Part 2</title>
      <description>&lt;p&gt;The the last post, I gave a review of the role of code snippets in Visual Studio.&amp;nbsp; Here, I’ll pick it up with some information about how to build custom snippets. &lt;/p&gt; &lt;p&gt;First of all, why might you build custom snippets?&amp;nbsp; The short answer is that if you notice you are authoring the same boiler plate code, time and time again, you could help simplify your days by automating this task via a snippet. &lt;/p&gt; &lt;p&gt;Before we build our own, let’s examine the details of one of the built in snippets: the class snippet (see previous blog post for details regarding how to locate the default snippet files):&lt;/p&gt; &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;="1.0"&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;="utf-8"&lt;/span&gt; ?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;CodeSnippet&lt;/span&gt; &lt;span class="attr"&gt;Format&lt;/span&gt;&lt;span class="kwrd"&gt;="1.0.0"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Header&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;class&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Shortcut&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;class&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Shortcut&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Description&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Expansion snippet for class&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Description&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;SnippetTypes&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;SnippetType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Expansion&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;SnippetType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;SnippetType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;SurroundsWith&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;SnippetType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;SnippetTypes&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Header&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Snippet&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Declarations&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Literal&lt;/span&gt; &lt;span class="attr"&gt;default&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;name&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ToolTip&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Class name&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ToolTip&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Default&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;MyClass&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Default&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Literal&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Declarations&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;   &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Code&lt;/span&gt; &lt;span class="attr"&gt;Language&lt;/span&gt;&lt;span class="kwrd"&gt;="csharp"&lt;/span&gt; &lt;span class="attr"&gt;Format&lt;/span&gt;&lt;span class="kwrd"&gt;="CData"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;!&lt;/span&gt;[CDATA[class $name$&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;      $selected$$end$&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;    }]]&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;   &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Code&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Snippet&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;CodeSnippet&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;The root element for any code snippet is appropriately named &lt;em&gt;&amp;lt;CodeSnippet&amp;gt;&lt;/em&gt;. Within this element scope are two key sub-elements: &amp;lt;Header&amp;gt; and &amp;lt;Snippet&amp;gt;. The &amp;lt;Header&amp;gt; element is used to describe the basic characteristics of the code snippet itself. The following table documents the key sub-elements of &amp;lt;Header&amp;gt;:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.intertech.com/PostingImages/Code-Snippets-using-VS-11-Part-2_BD74/image.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.intertech.com/PostingImages/Code-Snippets-using-VS-11-Part-2_BD74/image_thumb.png" width="244" height="79"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The &amp;lt;Snippet&amp;gt; sub-element is a bit more complex than &amp;lt;Header&amp;gt;, given that this is where the real action happens. In a nutshell, the &amp;lt;Snippet&amp;gt; element defines the following information: 
&lt;ul&gt;
&lt;li&gt;The set of 'variables' to be generated by the expansion. These are the yellow-highlighted-Tab-key-navigated tokens explained earlier in the article. 
&lt;li&gt;The C# skeleton code to be generated once the expansion is activated. &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;The &amp;lt;Snippet&amp;gt; element uses the &amp;lt;Declarations&amp;gt; element to account for the expansion variables, each of which is represented by unique &amp;lt;Literal&amp;gt; element. Consider again the class.xml code snippet. This expansion needs only a single &amp;lt;Literal&amp;gt; to represent the class name: 
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Declarations&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Literal&lt;/span&gt; &lt;span class="attr"&gt;default&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;name&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ToolTip&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Class name&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ToolTip&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Default&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;MyClass&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Default&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Literal&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Declarations&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Finally, we need to address the role of the &amp;lt;Code&amp;gt; sub-element defined within &amp;lt;Snippet&amp;gt;. This element is used to define the code to be inserted, represented by a CDATA section (recall that CDATA sections are used to defined data that is not well-formed XML, but still required by the XML document). Here is the &amp;lt;Code&amp;gt; element for the class.xml code snippet:&lt;/p&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Code&lt;/span&gt; &lt;span class="attr"&gt;Language&lt;/span&gt;&lt;span class="kwrd"&gt;="csharp"&lt;/span&gt; &lt;span class="attr"&gt;Format&lt;/span&gt;&lt;span class="kwrd"&gt;="CData"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;!&lt;/span&gt;[CDATA[class $name$&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;  {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    $selected$$end$&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;  }]]&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Code&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Notice the various names sandwiched by &lt;code&gt;$&lt;/code&gt; tokens (such as &lt;code&gt;$name$&lt;/code&gt;). This syntax is used to reference the variables defined within a &amp;lt;Literal&amp;gt; element, as well as predefined literals understood by Visual Studio (such as &lt;code&gt;$selected$&lt;/code&gt;). 
&lt;p&gt;Also note that the &lt;code&gt;$name$&lt;/code&gt; token is referring to the &lt;code&gt;name&lt;/code&gt; &amp;lt;Literal&amp;gt; defined in the &amp;lt;Declarations&amp;gt; section of the class.xml document. The &lt;code&gt;$selected$&lt;/code&gt; token represents the code statements selected within the IDE before the expansion was activated. As you would guess, &lt;code&gt;$end$&lt;/code&gt; is used to mark where the user's cursor will be placed after the snippet has expanded.&lt;/p&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;If you are an XML superstar, the previous section should be about all you need to define your custom code snippets. However, for those of you wish to see a concrete example, we will build a code snippet, &lt;em&gt;newobj&lt;/em&gt;, which is responsible for generating the following C# statement (shown in pseudo-code):&lt;/p&gt;&lt;pre&gt;[typeName] [varName] = new [typeName]();&lt;/pre&gt;
&lt;p&gt;The [typeName] placeholder will be controlled by a &amp;lt;Literal&amp;gt; aptly named &lt;em&gt;typename&lt;/em&gt; and will have a default value of &lt;code&gt;object&lt;/code&gt;. The [varName] placeholder will be controlled by another &amp;lt;Literal&amp;gt; named &lt;em&gt;varname&lt;/em&gt;, which has the default value of 'obj'. Create a new XML document (&lt;em&gt;newobj.xml&lt;/em&gt;) and enter the following:&lt;/p&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;="1.0"&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;="utf-8"&lt;/span&gt; ?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;CodeSnippet&lt;/span&gt; &lt;span class="attr"&gt;Format&lt;/span&gt;&lt;span class="kwrd"&gt;="1.0.0"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Header&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;new object&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Shortcut&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;newobj&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Shortcut&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Description&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Expansion snippet to allocate a new type&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Description&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;SnippetTypes&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;SnippetType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Expansion&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;SnippetType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;SnippetTypes&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Header&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Snippet&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Declarations&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Literal&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;typename&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ToolTip&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;type name&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ToolTip&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Default&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;object&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Default&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Literal&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Literal&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;varname&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ToolTip&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;variable name&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ToolTip&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Default&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;obj&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Default&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Literal&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Declarations&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Code&lt;/span&gt; &lt;span class="attr"&gt;Language&lt;/span&gt;&lt;span class="kwrd"&gt;="csharp"&lt;/span&gt; &lt;span class="attr"&gt;Format&lt;/span&gt;&lt;span class="kwrd"&gt;="CData"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;!&lt;/span&gt;[CDATA[$typename$ $varname$ = new $typename$ ($end$);]]&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Code&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Snippet&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;CodeSnippet&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;The current version of newobj.xml generates code that triggers the type's default (no argument) constructor. One enhancement you could make is to add a third &amp;lt;Literal&amp;gt; that represents a C-style code comment:&lt;/p&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Literal&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;ctorArgs&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ToolTip&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Type in your ctor args&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ToolTip&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Default&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;/* Type Args Here */&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Default&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Literal&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;We could then update our CDATA section as so:&lt;/p&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Code&lt;/span&gt; &lt;span class="attr"&gt;Language&lt;/span&gt;&lt;span class="kwrd"&gt;="csharp"&lt;/span&gt; &lt;span class="attr"&gt;Format&lt;/span&gt;&lt;span class="kwrd"&gt;="CData"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;!&lt;/span&gt;[CDATA[$typename$ $varname$ = new $typename$ ($ctorArgs$ $end$);]]&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Code&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;The end result is that we have provided a Tab-reachable placeholder where constructor arguments can be manually entered like the one shown here:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.intertech.com/PostingImages/Code-Snippets-using-VS-11-Part-2_BD74/image_3.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.intertech.com/PostingImages/Code-Snippets-using-VS-11-Part-2_BD74/image_thumb_3.png" width="244" height="72"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;At this point, you can register the location of your new *snippet file with the Code Snippet manager.&amp;nbsp; When you wish to activate your snippet, simply type in the registered short cut name like you would do for any of the built in VS snippet. &lt;/p&gt;
&lt;p&gt;Happy coding. &lt;/p&gt;</description>
      <link>http://www.intertech.com/Blog/post/Code-Snippets-using-VS-11-Part-2.aspx</link>
      <comments>http://www.intertech.com/Blog/post/Code-Snippets-using-VS-11-Part-2.aspx#comment</comments>
      <guid>http://www.intertech.com/Blog/post.aspx?id=2613bef1-e0e7-49b1-843d-7087ec471d4b</guid>
      <pubDate>Mon, 14 May 2012 13:45:09 -0500</pubDate>
      <dc:publisher>Andrew Troelsen</dc:publisher>
      <pingback:server>http://www.intertech.com/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.intertech.com/Blog/post.aspx?id=2613bef1-e0e7-49b1-843d-7087ec471d4b</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.intertech.com/Blog/trackback.axd?id=2613bef1-e0e7-49b1-843d-7087ec471d4b</trackback:ping>
      <wfw:comment>http://www.intertech.com/Blog/post/Code-Snippets-using-VS-11-Part-2.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.intertech.com/Blog/syndication.axd?post=2613bef1-e0e7-49b1-843d-7087ec471d4b</wfw:commentRss>
    </item>
    <item>
      <title>Working with Code Snippets using Visual Studio 11 (Part 1)</title>
      <description>&lt;p&gt;When I teach foundational .NET courses at Intertech, I make sure to point out useful features of the IDE, one of which is code snippet technology. In this blog post, I’ll talk about the basics of using snippets with Visual Studio 11 (which is really no different from using them with VS 2010).&amp;nbsp; However, in part 2 of this post, I’ll talk about building custom snippets. &lt;/p&gt; &lt;p&gt;Code snippets have been a very useful feature of VS since the release of 2005 (if memory serves). As you may know, “code snippets” are a feature of the IDE which allow you to insert bodies of predefined, commonly used code, once the snippet is activated. &lt;/p&gt; &lt;p&gt;Each code snippet has a registered name (such as &lt;strong&gt;foreach&lt;/strong&gt;, &lt;strong&gt;exception&lt;/strong&gt;, and so forth).&amp;nbsp; Thus, if you happen to know the name of the snippet you are interested in, simply type in the name within a C# code editor and press the TAB key twice (the first TAB will auto-complete the snippet name, the second TAB will insert the associated code). For example, if you start to type &lt;strong&gt;foreach&lt;/strong&gt; you would find:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.intertech.com/PostingImages/Building-Code-Snippets-using-Visual-Stud_A580/image.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.intertech.com/PostingImages/Building-Code-Snippets-using-Visual-Stud_A580/image_thumb.png" width="244" height="74"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;And once you perform the TAB-TAB operation, you end up with:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.intertech.com/PostingImages/Building-Code-Snippets-using-Visual-Stud_A580/image_3.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.intertech.com/PostingImages/Building-Code-Snippets-using-Visual-Stud_A580/image_thumb_3.png" width="244" height="114"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Most code snippets have built in “placeholders” which you are expected to update.&amp;nbsp; Here, we see that the IEnumerable in the foreach loop is simply named “collection”, which would be a compiler error at the moment.&amp;nbsp; To fill in the placeholders once you have activated a snippet, just keep pressing the TAB key to cycle through each placeholder.&amp;nbsp; Once you are all done, press the ESC key to return to normal code editing mode.&lt;/p&gt; &lt;p&gt;If you don’t happen to know all the snippets built into VS, you can see a list of all snippets via a mouse right-click.&amp;nbsp; For example, if you were to right click in a C# code editor, you will see an Insert Snippet option.&amp;nbsp; From here, you can drill into various sub-categories and tinker away:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.intertech.com/PostingImages/Building-Code-Snippets-using-Visual-Stud_A580/image_4.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.intertech.com/PostingImages/Building-Code-Snippets-using-Visual-Stud_A580/image_thumb_4.png" width="244" height="125"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;In addition to the Insert Snippet option, you will also notice a “Surround with” option. The difference is that these snippets will encase the current selection in the code editor.&amp;nbsp; For example, if you wished to wrap up the current foreach loop into a "#region / #endregion section, you would first select the code, right click, and pick the following:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.intertech.com/PostingImages/Building-Code-Snippets-using-Visual-Stud_A580/image_5.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.intertech.com/PostingImages/Building-Code-Snippets-using-Visual-Stud_A580/image_thumb_5.png" width="244" height="152"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;You should also be aware of the “Code Snippet Manager” tool which can be opened via the Tools menu. Here, you will be able to see each registered code snippet on your machine, the associated short name, category and location in your directory structure:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.intertech.com/PostingImages/Building-Code-Snippets-using-Visual-Stud_A580/image_6.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.intertech.com/PostingImages/Building-Code-Snippets-using-Visual-Stud_A580/image_thumb_6.png" width="244" height="183"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;If you were to navigate to the directory containing a given snippet, you’ll notice these instructions are packaged in into *.snippet files, which contain XML definitions of the snippet (no surprise there…what isn’t described in XML these days?)&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.intertech.com/PostingImages/Building-Code-Snippets-using-Visual-Stud_A580/image_7.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.intertech.com/PostingImages/Building-Code-Snippets-using-Visual-Stud_A580/image_thumb_7.png" width="244" height="179"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;If you open any of these snippets into your text editor of choice, you’ll get some insight as to how the snippets do their work. &lt;/p&gt; &lt;p&gt;In the next part of this blog post, I’ll talk about the process of building and registering custom snippets. &lt;/p&gt; &lt;p&gt;Happy coding.&lt;/p&gt;</description>
      <link>http://www.intertech.com/Blog/post/Working-with-Code-Snippets-using-Visual-Studio-11-(Part-1).aspx</link>
      <comments>http://www.intertech.com/Blog/post/Working-with-Code-Snippets-using-Visual-Studio-11-(Part-1).aspx#comment</comments>
      <guid>http://www.intertech.com/Blog/post.aspx?id=5c675f39-f97e-41d2-b4cb-b878269d76fa</guid>
      <pubDate>Mon, 14 May 2012 12:36:07 -0500</pubDate>
      <category>.NET</category>
      <category>Visual Studio</category>
      <dc:publisher>Andrew Troelsen</dc:publisher>
      <pingback:server>http://www.intertech.com/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.intertech.com/Blog/post.aspx?id=5c675f39-f97e-41d2-b4cb-b878269d76fa</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.intertech.com/Blog/trackback.axd?id=5c675f39-f97e-41d2-b4cb-b878269d76fa</trackback:ping>
      <wfw:comment>http://www.intertech.com/Blog/post/Working-with-Code-Snippets-using-Visual-Studio-11-(Part-1).aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.intertech.com/Blog/syndication.axd?post=5c675f39-f97e-41d2-b4cb-b878269d76fa</wfw:commentRss>
    </item>
    <item>
      <title>Creating the Future in Business thru Execution</title>
      <description>&lt;p&gt;&lt;img style="float: left; padding: 8px;" src="http://www.intertech.com/Blog/image.axd?picture=2012%2f5%2fJust-Do-It-Bike.jpg" alt="" /&gt;Nike&amp;rsquo;s &amp;ldquo;Just Do It!&amp;rdquo; is more than just a slogan.&amp;nbsp; This is a fact CEOs understand.&lt;/p&gt;
&lt;p&gt;In a survey, when asked to name the main reason for the success of their companies, 75% of the CEOs leading Inc. magazine&amp;rsquo;s top 500 companies said &amp;ldquo;superior execution in a mundane business.&amp;rdquo; In my book &amp;ldquo;Building a Winning Business,&amp;rdquo; takeaway #37 is titled &amp;ldquo;Just Do It!&amp;rdquo; In this brief chapter, I share &amp;ldquo;It&amp;rsquo;s better to take action than to procrastinate while obsessing about perfection.&amp;rdquo; This position is backed by a recent Harvard Business Review book called &lt;em&gt;Just Start: Take Action, Embrace Uncertainty, Create the Future&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;The book is authored by educators Leonard A. Schlesinger, Charles F. Kiefer and Paul B. Brown.&amp;nbsp; They spent years studying entrepreneurs and how they create new products and offerings (in situations where analyzing data or forecasting wouldn&amp;rsquo;t work).&amp;nbsp; Their findings?&amp;nbsp; &amp;ldquo;Successful entrepreneurs don&amp;rsquo;t just &amp;lsquo;think different,&amp;rsquo; they translate that thinking into immediate action&amp;hellip; Rather than predict the future, they try to create it.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <link>http://www.intertech.com/Blog/post/Creating-the-Future-in-Business-thru-Execution.aspx</link>
      <comments>http://www.intertech.com/Blog/post/Creating-the-Future-in-Business-thru-Execution.aspx#comment</comments>
      <guid>http://www.intertech.com/Blog/post.aspx?id=12ebbbd8-6b09-4739-9ef1-1fc3cabeeda8</guid>
      <pubDate>Sat, 12 May 2012 15:09:00 -0500</pubDate>
      <category>Business</category>
      <dc:publisher>Tom Salonek</dc:publisher>
      <pingback:server>http://www.intertech.com/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.intertech.com/Blog/post.aspx?id=12ebbbd8-6b09-4739-9ef1-1fc3cabeeda8</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.intertech.com/Blog/trackback.axd?id=12ebbbd8-6b09-4739-9ef1-1fc3cabeeda8</trackback:ping>
      <wfw:comment>http://www.intertech.com/Blog/post/Creating-the-Future-in-Business-thru-Execution.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.intertech.com/Blog/syndication.axd?post=12ebbbd8-6b09-4739-9ef1-1fc3cabeeda8</wfw:commentRss>
    </item>
    <item>
      <title>Engagement and Employee Feedback</title>
      <description>&lt;p&gt;This is the last in series of posts on engagement.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Feedback is one of the top areas for engagement. As cited earlier, Gretchen Spreitzer, professor of management and organizations at the University of Michigan&amp;rsquo;s Ross School of Business, and Christine Porath, assistant professor at Georgetown University&amp;rsquo;s McDonough School of Business, in &amp;ldquo;Creating Sustainable Performance&amp;rdquo; (HBR Jan/Feb. 2012) stated:&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&amp;ldquo;Feedback creates opportunities for learning and the energy so critical for a culture of thriving. By resolving feelings of uncertainty, feedback keeps people&amp;rsquo;s work-related activities focused on personal and organizational goals. The quicker and more direct the feedback, the more useful it is.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;To support feedback, we do a series of things at Intertech:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A performance review.&amp;nbsp; This is the least effective way feedback.&amp;nbsp; Reviews look backward&amp;hellip;&amp;nbsp; &amp;ldquo;We never can should have.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Key Result Areas (KRA&amp;rsquo;s).&amp;nbsp; KRA&amp;rsquo;s are a Dale Carnegie concept to goal setting and feedback.&amp;nbsp; Because KRA&amp;rsquo;s are focused on the future, it&amp;rsquo;s much more effective than a review.&lt;/li&gt;
&lt;li&gt;Yammer.&amp;nbsp; Yammer is a business social media tool.&amp;nbsp; Throughout the day, our team posts updates, questions, and kudos.&lt;/li&gt;
&lt;li&gt;Peer recognition.&amp;nbsp; We&amp;rsquo;ve implemented a program called &amp;ldquo;ACE.&amp;rdquo; ACE is a way for one employee to recognize another.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Finally, as it relates to feedback, I&amp;rsquo;m a big believer in hand written notes.&amp;nbsp; This is backed by research.&amp;nbsp; Data states a handwritten note is 2X+ more meaningful than a face-to-face conversation.&amp;nbsp; The data goes on to state a face-to-face conversation is 2X+ more meaningful than an email.&lt;/p&gt;</description>
      <link>http://www.intertech.com/Blog/post/Engagement-and-Employee-Feedback.aspx</link>
      <comments>http://www.intertech.com/Blog/post/Engagement-and-Employee-Feedback.aspx#comment</comments>
      <guid>http://www.intertech.com/Blog/post.aspx?id=9643f931-bec2-40bc-84eb-ba538e7d2f9f</guid>
      <pubDate>Sat, 28 Apr 2012 18:01:00 -0500</pubDate>
      <category>Business</category>
      <dc:publisher>Tom Salonek</dc:publisher>
      <pingback:server>http://www.intertech.com/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.intertech.com/Blog/post.aspx?id=9643f931-bec2-40bc-84eb-ba538e7d2f9f</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.intertech.com/Blog/trackback.axd?id=9643f931-bec2-40bc-84eb-ba538e7d2f9f</trackback:ping>
      <wfw:comment>http://www.intertech.com/Blog/post/Engagement-and-Employee-Feedback.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.intertech.com/Blog/syndication.axd?post=9643f931-bec2-40bc-84eb-ba538e7d2f9f</wfw:commentRss>
    </item>
    <item>
      <title>IE9 (Internet Explorer 9) Changes Developers Should Know About</title>
      <description>&lt;h1&gt;Intro&lt;/h1&gt; &lt;p&gt;The ASP.NET project I am on currently has spanned 5 years and has undergone many upgrades.&amp;nbsp; The latest upgrade was made necessary by the Internet Explorer 9 (IE9) push by Microsoft in Windows Update.&amp;nbsp; Our users started getting it and things that used to work started breaking.&amp;nbsp; I was given the task to find and repair these issues.&amp;nbsp; This post details my findings.&amp;nbsp; I am posting the two that I felt would be most relevant to developers.&amp;nbsp; Note that one of the issues (the second one) is related to ASP.NET alone but the first one is important for all web developers.&lt;/p&gt; &lt;h1&gt;Content (or custom) Attribute Changes&lt;/h1&gt; &lt;p&gt;Before IE9, content attributes could be get or set using JavaScript object DOM ‘expando’ properties.&amp;nbsp; With the introduction of IE9, that is no longer the case.&amp;nbsp; A content attribute is an attribute that is specified in the HTML source or, with ASP.NET, in the server side Control.Attributes collection.&amp;nbsp; There are pre-defined HTML content attributes like ‘value’ or ‘id’.&amp;nbsp; There are also user-defined content attributes (I call them ‘custom’ attributes), and that’s what I’ll be talking about in this post.&amp;nbsp; Expando properties are defined from MSDN as follows:&amp;nbsp; All objects in JavaScript support "expando" properties, or properties that can be added and removed dynamically at run time. (See &lt;a href="http://msdn.microsoft.com/en-us/library/89t1khd2(v=vs.94).aspx"&gt;http://msdn.microsoft.com/en-us/library/89t1khd2(v=vs.94).aspx&lt;/a&gt;)&lt;/p&gt; &lt;p&gt;Before IE9 the custom attributes were implied with the same name expando properties (i.e. javaObject.customAttr was valid in JavaScript.)&amp;nbsp; With IE9, that is no longer the case.&amp;nbsp; Note that the pre-defined content attributes will still be available as expando properties.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;FIX&lt;/strong&gt; -- The fix is to use the getAttribute and setAttribute functions of the JavaScript object instead of the expando properties.&lt;/p&gt; &lt;p&gt;See the MSDN explanation of this IE9 change here:&amp;nbsp; &lt;a href="http://msdn.microsoft.com/en-us/library/ie/gg622931(v=vs.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/ie/gg622931(v=vs.85).aspx&lt;/a&gt;&lt;/p&gt; &lt;h2&gt;Example 1&amp;nbsp; – Content Attribute As HTML Source&lt;/h2&gt; &lt;p&gt;This example will show what happens in IE9 and compatibility mode when we set a custom attribute in the HTML source.&lt;/p&gt; &lt;p&gt;Here is the ASP.NET code:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;font size="1"&gt;&amp;lt;asp:Button ID=&lt;span class="str"&gt;"ContentAttrBtn"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt; Text=&lt;span class="str"&gt;"Get Custom Content Attribute"&lt;/span&gt; 
    OnClientClick=&lt;span class="str"&gt;"attrAsContentAttribute(); return false;"&lt;/span&gt; /&amp;gt;
&amp;lt;asp:TextBox ID=&lt;span class="str"&gt;"TextBox2"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt; helloWorld=&lt;span class="str"&gt;"content attribute!"&lt;/span&gt; /&amp;gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;font size="1"&gt;If you aren’t familiar with ASP.NET, this is the HTML that is generated:&lt;/font&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;font size="1"&gt;&amp;lt;input type=&lt;span class="str"&gt;"submit"&lt;/span&gt; name=&lt;span class="str"&gt;"ctl00$MainContent$ContentAttrBtn"&lt;/span&gt; 
  &lt;span class="kwrd"&gt;value&lt;/span&gt;=&lt;span class="str"&gt;"Get Custom Content Attribute"&lt;/span&gt; onclick=&lt;span class="str"&gt;"attrAsContentAttribute(); return false;"&lt;/span&gt;
  id=&lt;span class="str"&gt;"MainContent_ContentAttrBtn"&lt;/span&gt; /&amp;gt;
&amp;lt;input name=&lt;span class="str"&gt;"ctl00$MainContent$TextBox2"&lt;/span&gt; type=&lt;span class="str"&gt;"text"&lt;/span&gt; id=&lt;span class="str"&gt;"MainContent_TextBox2"&lt;/span&gt; 
  helloWorld=&lt;span class="str"&gt;"content attribute!"&lt;/span&gt; /&amp;gt;&lt;/font&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
Here is the JavaScript:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;font size="1"&gt;function attrAsContentAttribute() {
    var txt = document.getElementById(&lt;span class="str"&gt;'&amp;lt;%= TextBox2.ClientID %&amp;gt;'&lt;/span&gt;);
    alert(&lt;span class="str"&gt;'TextBox2 helloWorld attribute (expando) = '&lt;/span&gt; + txt.helloWorld);
    alert(&lt;span class="str"&gt;'TextBox2 value attribute (expando) = '&lt;/span&gt; + txt.&lt;span class="kwrd"&gt;value&lt;/span&gt;);
    alert(&lt;span class="str"&gt;'TextBox2 helloWorld attribute (getAttribute) = '&lt;/span&gt; + txt.getAttribute(&lt;span class="str"&gt;"helloWorld"&lt;/span&gt;));
}&lt;/font&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;When this is run in IE9, we get the following alert boxes:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.intertech.com/PostingImages/f46971d3ba3c_1053F/image.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.intertech.com/PostingImages/f46971d3ba3c_1053F/image_thumb.png" width="477" height="213"&gt;&lt;/a&gt; …Note that this is undefined in IE9 now.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.intertech.com/PostingImages/f46971d3ba3c_1053F/image_3.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.intertech.com/PostingImages/f46971d3ba3c_1053F/image_thumb_3.png" width="482" height="223"&gt;&lt;/a&gt; …I entered “textbox value” into the textbox.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.intertech.com/PostingImages/f46971d3ba3c_1053F/image_4.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.intertech.com/PostingImages/f46971d3ba3c_1053F/image_thumb_4.png" width="485" height="191"&gt;&lt;/a&gt; …works with getAttribute.&lt;/p&gt;
&lt;p&gt;When this is run in IE9 Compatibility Mode, the following alert box changes (the 1st one):&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.intertech.com/PostingImages/f46971d3ba3c_1053F/image_5.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.intertech.com/PostingImages/f46971d3ba3c_1053F/image_thumb_5.png" width="487" height="199"&gt;&lt;/a&gt; …works in compatibility mode.&lt;/p&gt;
&lt;h2&gt;Example 2 – Content Attribute Added in ASP.NET Code Behind (on server)&lt;/h2&gt;
&lt;p&gt;This example will show what happens in IE9 and compatibility mode when we set a custom attribute in the ASP.NET code behind.&lt;/p&gt;
&lt;p&gt;Here is the ASP.NET code:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;font size="1"&gt;&amp;lt;asp:Button ID=&lt;span class="str"&gt;"ServerAttrBtn"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt; Text=&lt;span class="str"&gt;"Get Custom Server Attribute"&lt;/span&gt; 
    OnClientClick=&lt;span class="str"&gt;"attrSetOnServer(); return false;"&lt;/span&gt; /&amp;gt;
&amp;lt;asp:TextBox ID=&lt;span class="str"&gt;"TextBox1"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt; /&amp;gt;
&lt;/font&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;pre class="csharpcode"&gt;&lt;font size="1"&gt;If you aren’t familiar with ASP.NET, this is the HTML that is generated:&lt;/font&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;font size="1"&gt;&amp;lt;input type=&lt;span class="str"&gt;"submit"&lt;/span&gt; name=&lt;span class="str"&gt;"ctl00$MainContent$ServerAttrBtn"&lt;/span&gt; 
  &lt;span class="kwrd"&gt;value&lt;/span&gt;=&lt;span class="str"&gt;"Get Custom Server Attribute"&lt;/span&gt; onclick=&lt;span class="str"&gt;"attrSetOnServer(); return false;"&lt;/span&gt; 
  id=&lt;span class="str"&gt;"MainContent_ServerAttrBtn"&lt;/span&gt; /&amp;gt;
&amp;lt;input name=&lt;span class="str"&gt;"ctl00$MainContent$TextBox1"&lt;/span&gt; type=&lt;span class="str"&gt;"text"&lt;/span&gt; id=&lt;span class="str"&gt;"MainContent_TextBox1"&lt;/span&gt; 
  helloWorld=&lt;span class="str"&gt;"hello from server!"&lt;/span&gt; /&amp;gt;&lt;/font&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;This is the code-behind to the page where I am setting the helloWorld attribute:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;font size="1"&gt;TextBox1.Attributes.Add(&lt;span class="str"&gt;"helloWorld"&lt;/span&gt;, &lt;span class="str"&gt;"hello from server!"&lt;/span&gt;);&lt;/font&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;Here is the JavaScript:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;font size="1"&gt;function attrSetOnServer() {
    var txt = document.getElementById(&lt;span class="str"&gt;'&amp;lt;%= TextBox1.ClientID %&amp;gt;'&lt;/span&gt;);
    alert(&lt;span class="str"&gt;'TextBox1 helloWorld attribute (expando) = '&lt;/span&gt; + txt.helloWorld);
    alert(&lt;span class="str"&gt;'TextBox1 id attribute (expando) = '&lt;/span&gt; + txt.id);
    alert(&lt;span class="str"&gt;'TextBox1 helloWorld attribute (getAttribute) = '&lt;/span&gt; + txt.getAttribute(&lt;span class="str"&gt;"helloWorld"&lt;/span&gt;));
}&lt;/font&gt;
&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;When this is run in IE9, we get the following alert boxes:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.intertech.com/PostingImages/f46971d3ba3c_1053F/image_6.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.intertech.com/PostingImages/f46971d3ba3c_1053F/image_thumb_6.png" width="489" height="218"&gt;&lt;/a&gt; …Note that this is undefined in IE9 now.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.intertech.com/PostingImages/f46971d3ba3c_1053F/image_7.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.intertech.com/PostingImages/f46971d3ba3c_1053F/image_thumb_7.png" width="488" height="210"&gt;&lt;/a&gt; …id of the TextBox or input element.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.intertech.com/PostingImages/f46971d3ba3c_1053F/image_8.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.intertech.com/PostingImages/f46971d3ba3c_1053F/image_thumb_8.png" width="487" height="191"&gt;&lt;/a&gt; …works with getAttribute.&lt;/p&gt;
&lt;p&gt;When this is run in IE9 Compatibility Mode, the following alert box changes (the 1st one):&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.intertech.com/PostingImages/f46971d3ba3c_1053F/image_9.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.intertech.com/PostingImages/f46971d3ba3c_1053F/image_thumb_9.png" width="489" height="200"&gt;&lt;/a&gt; …works in compatibility mode.&lt;/p&gt;
&lt;h1&gt;AjaxControlToolkit CalendarExtender &lt;/h1&gt;
&lt;p&gt;This issue is more specific to ASP.NET applications that are using the AjaxControlToolkit (November 2011 Release).&amp;nbsp; I noticed in my app that when I selected a date using the calendar extender (the calendar image that allows you to choose a date from a visual calendar), and the date had one digit in the month and/or day, it was formatted in the TextBox as follows:&amp;nbsp; &lt;strong&gt;4/9/2012&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It should have formatted it this way:&amp;nbsp; &lt;strong&gt;04/09/2012&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Note that I never set the CalendarExtender.Format value.&amp;nbsp; I just took the default.&lt;/p&gt;
&lt;p&gt;Why do I care, you may ask?&amp;nbsp; Because the validation in the control doesn’t work correctly when it is formatted without leading zeroes.&amp;nbsp; What I noticed in my app was that I would get a “Date required” error message when a date was already in the TextBox control.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;FIX&lt;/strong&gt; -- The fix is to set the CalendarExtender.Format explicitly to "MM/dd/yyyy".&lt;/p&gt;
&lt;p&gt;I logged this bug as an issue on CodePlex and you can follow it if you are interested here:&amp;nbsp; &lt;a href="http://ajaxcontroltoolkit.codeplex.com/workitem/27137"&gt;http://ajaxcontroltoolkit.codeplex.com/workitem/27137&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://www.intertech.com/Blog/post/IE9-(Internet-Explorer-9)-Changes-Developers-Should-Know-About.aspx</link>
      <comments>http://www.intertech.com/Blog/post/IE9-(Internet-Explorer-9)-Changes-Developers-Should-Know-About.aspx#comment</comments>
      <guid>http://www.intertech.com/Blog/post.aspx?id=4567b1b9-cb7d-4468-8f85-bb415ebacbc0</guid>
      <pubDate>Thu, 26 Apr 2012 15:44:23 -0500</pubDate>
      <dc:publisher>Rich Franzmeier</dc:publisher>
      <pingback:server>http://www.intertech.com/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.intertech.com/Blog/post.aspx?id=4567b1b9-cb7d-4468-8f85-bb415ebacbc0</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.intertech.com/Blog/trackback.axd?id=4567b1b9-cb7d-4468-8f85-bb415ebacbc0</trackback:ping>
      <wfw:comment>http://www.intertech.com/Blog/post/IE9-(Internet-Explorer-9)-Changes-Developers-Should-Know-About.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.intertech.com/Blog/syndication.axd?post=4567b1b9-cb7d-4468-8f85-bb415ebacbc0</wfw:commentRss>
    </item>
    <item>
      <title>The Revolutionary/Evolutionary Database Projects (and Dev11)</title>
      <description>&lt;p&gt;I have been working with database projects since the 2006 CTP &amp;ldquo;Data Dude&amp;rdquo; days through its 1.0 release as &lt;a href="Visual Studio Team Edition for Database Professionals&amp;quot;"&gt;Visual Studio Team Edition for Database Professionals&lt;/a&gt;; Its realized vision -- of organizing our database artifacts/schema into a solution; checking changes into source control (TFS) surrounded with descriptive meta data (work items) documenting the motivations for those changes; and empowering us to automate the build, deployment, and test of those changes through our staged environments &amp;ndash; has truly been revolutionary for this aspect of software development for those who have persevered in the new discipline.&amp;nbsp; Those of you who have been using this for a while also know that tools and best practices surrounding database projects has been very evolutionary as well with each release of Visual Studio, not to mention each release of SQL Server.&amp;nbsp; The Dev 11/SQL 2012 release is no exception here.&lt;/p&gt;
&lt;p&gt;The latest release of Visual Studio (Dev 11 at the time of this post) will upgrade your databases project (&lt;strong&gt;.dbproj&lt;/strong&gt;) to a database project (&lt;strong&gt;.ssdt&lt;/strong&gt;) which stands for SQL Server Developer Tools.&amp;nbsp; This is a major rework by the tools team which is now fully aligned with the various SQL server cleints with the aim of providing a unified toolset for all SQL Server Development whether you are working in SQL Server Management Studio (SSMS), Business Intelligence Design Studio (BIDS), or Visual Studio (VS).&amp;nbsp; We have been &lt;a href="http://msdn.microsoft.com/en-us/magazine/hh394146.aspx"&gt;reading about this effort&lt;/a&gt; and/or playing with these features in Community Technology Previews (CTPs) which began integrating with Visual Studio 2010 Premium SP1 in CTP3.&amp;nbsp; The Visual Studio Dev11 Beta shipped with the release candidate 0 (RC0) of the SSDT tools.&amp;nbsp; The SSDT tools have since been released to manufacturing (RTM).&amp;nbsp; Thus, if you want to play with these tools in Dev11, a good place to start is to either download and install the &lt;a href="http://www.microsoft.com/download/en/details.aspx?id=29065&amp;amp;amp;ocid=aff-n-we-loc--ITPRO40886&amp;amp;amp;WT.mc_id=aff-n-we-loc--ITPRO40886"&gt;Feature Pack for 2012&lt;/a&gt;, or just install the required VS components for the VS dev-build-deploy cycle.&amp;nbsp; Specifically for me, this consists of &lt;strong&gt;64-bit&lt;/strong&gt; &lt;a href="http://go.microsoft.com/fwlink/?LinkID=239631&amp;amp;clcid=0x409"&gt;DACFramework.msi&lt;/a&gt;, &lt;a href="http://go.microsoft.com/fwlink/?LinkID=239644&amp;amp;clcid=0x409"&gt;SqlSystemClrTypes.msi&lt;/a&gt;, &lt;a href="http://go.microsoft.com/fwlink/?LinkID=239635&amp;amp;clcid=0x409"&gt;SQLDOM.msi&lt;/a&gt;, and &lt;a href="http://go.microsoft.com/fwlink/?LinkID=239637&amp;amp;clcid=0x409"&gt;SQLLS.msi&lt;/a&gt;.&amp;nbsp; Those of you installing on 32-bit build machines, would want to install the 32-bit versions of those downloads.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dev11 Bug Alert:&lt;/strong&gt; If you are getting the following error on your Dev11 64-bit build machines when you go to build your .ssdt projects:&lt;/p&gt;
&lt;div style="width: 100%; border: #000 2px solid;"&gt;&lt;a href="http://www.intertech.com/PostingImages/7e5831e1b6c0_12D80/clip_image0026.gif"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="clip_image002[6]" src="http://www.intertech.com/PostingImages/7e5831e1b6c0_12D80/clip_image0026_thumb.gif" alt="clip_image002[6]" width="16" height="16" border="0" /&gt;&lt;/a&gt;C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets (381): The "SqlModelResolutionTask" task could not be loaded from the assembly C:\Program Files\Microsoft SQL Server\110\DAC\Bin\Microsoft.Data.Tools.Schema.Tasks.Sql.11.dll. Could not load file or assembly 'file:///C:\Program Files\Microsoft SQL Server\110\DAC\Bin\Microsoft.Data.Tools.Schema.Tasks.Sql.11.dll' or one of its dependencies. The system cannot find the file specified. Confirm that the &amp;lt;UsingTask&amp;gt; declaration is correct, that the assembly and all its dependencies are available, and that the task contains a public class that implements Microsoft.Build.Framework.ITask.&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Workaround: &lt;/strong&gt;This is due to a bug in the Dev11 build targets.&amp;nbsp; The workaround is to copy your DAC files from the (x86) Program files directory to a 64-bit location, for example:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;C:\Program Files (x86)\Microsoft SQL Server\110\DAC\Bin\&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;gets copied to&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;C:\Program Files\Microsoft SQL Server\110\DAC\Bin\&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;Not So Fast On that Uninstall&lt;/h3&gt;
&lt;p&gt;Great strides have been made with SSDT projects.&amp;nbsp; Just to name a few, developers working offline in declarative mode using &lt;a href="http://blogs.msdn.com/b/sqlexpress/archive/2011/07/12/introducing-localdb-a-better-sql-express.aspx"&gt;LocalDB&lt;/a&gt; or online interacting with a shared database both get a greatly improved Transact-SQL Debugging and testing experience; one database project is used for all versions of SQL Server and the organization of database artifacts is much friendlier/more intuitive than the previous .dbproj.&amp;nbsp; On the other hand, while there are many great new features, not all the old features of database projects you may be taking advantage of have made it into the SSDT code rewrite (See &lt;a href="http://blogs.msdn.com/b/ssdt/archive/2011/11/21/sql-server-data-tools-ctp4-vs-vs2010-database-projects.aspx"&gt;SQL Server Data Tools CTP4 vs. VS2010 Database Projects&lt;/a&gt; ) and conversions aren&amp;rsquo;t no-brainers for all database projects (See &lt;a href="http://blogs.msdn.com/b/ssdt/archive/2011/11/21/top-vsdb-gt-ssdt-project-conversion-issues.aspx"&gt;Top VSDB-&amp;gt;SSDT Project Conversion Issues&lt;/a&gt;)&amp;nbsp; [As an aside, our upgrade team was not impressed with the upgrade logic used by the database project conversion wizard.&amp;nbsp; If you don&amp;rsquo;t mind not losing your seamless history of artifact changes in your .dbproj, I recommend just pointing at a database and recreating your solution as an SSDT rather than the really odd arrangement of new and old scripts you acquire over time while working with a converted .dbproj file.&amp;nbsp; However, for those who do want to keep this history, manually upgraded, e.g moving artifacts to the appropriate folders and deleting others is a tedious option.]&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.intertech.com/PostingImages/7e5831e1b6c0_12D80/SNAGHTML155916c.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="SNAGHTML155916c" src="http://www.intertech.com/PostingImages/7e5831e1b6c0_12D80/SNAGHTML155916c_thumb.png" alt="SNAGHTML155916c" width="201" height="285" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Example of &amp;ldquo;upgraded&amp;rdquo; database project which preserves the .dbproj artifact organization.&amp;nbsp; Unfortunately when new artifacts get added, the solution places them in the new .ssdt folder organization.&amp;nbsp; (Now we have 2 &amp;ldquo;Production folders&amp;rdquo; &amp;ndash; and a solution which is in neither the .dbproj nor .ssdt canonical form,&amp;nbsp; Worse yet, you may start getting compiler errors after synching table changes because with .ssdt projects index scripts are stored in the table definition itself for readability (Nice!), &lt;span style="text-decoration: underline;"&gt;But&lt;/span&gt; it does not clean up the .dbproj&amp;rsquo;s pattern of storing index scripts as separate files.&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;So in your exuberance over the new features, don&amp;rsquo;t be too hasty clicking &lt;strong&gt;Uninstall &lt;/strong&gt;on your dev machine and build machine VS2010 installations, especially if you want to continue using features, like for example, the data generation/compare tools.&amp;nbsp; But keep a stiff upper lip as well, Microsoft is already narrowing the gap with out-of-band power tools that integrate with the 2012 tools (See&amp;nbsp; &lt;a href="http://visualstudiogallery.msdn.microsoft.com/9b0228c6-15d1-44de-9279-66dde12bf861?SRC=Featured"&gt;SSDT PowerTools&lt;/a&gt; which at the time of this writing has re-integrated the &lt;strong&gt;Schema Explorer&lt;/strong&gt; with .ssdt projects)&amp;nbsp;&lt;/p&gt;</description>
      <link>http://www.intertech.com/Blog/post/The-RevolutionaryEvolutionary-Database-Projects-(and-Dev11).aspx</link>
      <comments>http://www.intertech.com/Blog/post/The-RevolutionaryEvolutionary-Database-Projects-(and-Dev11).aspx#comment</comments>
      <guid>http://www.intertech.com/Blog/post.aspx?id=27e8215f-bcc0-4e74-947b-d68cd83fe398</guid>
      <pubDate>Thu, 26 Apr 2012 11:48:00 -0500</pubDate>
      <category>Database</category>
      <category>QA</category>
      <category>SQL Server</category>
      <category>Team Foundation Server</category>
      <category>Visual Studio</category>
      <dc:publisher>Dave Zimmerman</dc:publisher>
      <pingback:server>http://www.intertech.com/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.intertech.com/Blog/post.aspx?id=27e8215f-bcc0-4e74-947b-d68cd83fe398</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.intertech.com/Blog/trackback.axd?id=27e8215f-bcc0-4e74-947b-d68cd83fe398</trackback:ping>
      <wfw:comment>http://www.intertech.com/Blog/post/The-RevolutionaryEvolutionary-Database-Projects-(and-Dev11).aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.intertech.com/Blog/syndication.axd?post=27e8215f-bcc0-4e74-947b-d68cd83fe398</wfw:commentRss>
    </item>
    <item>
      <title>Incivility in the Workplace Makes for Wasted Time and Money</title>
      <description>&lt;p&gt;Incivility is bad for business.&lt;/p&gt;
&lt;p&gt;A culture that tolerates uncivil prima donnas because of who they are or what they deliver goes against findings in a recent Harvard Business Review article.&amp;nbsp; The article, by Pearson and Porath, is based on seven years of research.&amp;nbsp; They share, when one co-worker is abusive to another, the abused will:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Decrease effort (by 50%)&lt;/li&gt;
&lt;li&gt;Intentionally decrease work quality (by 33% or more)&lt;/li&gt;
&lt;li&gt;Waste time by actively avoiding the offender (by 66%)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;At Intertech, incivility isn&amp;rsquo;t tolerated from employees, customers, or partners.&amp;nbsp; For the uncivil, our solution is simple&amp;hellip; end the relationship.&amp;nbsp; This may seem extreme.&amp;nbsp; But, data on human development states people are about 98% defined as a person by their mid-20&amp;rsquo;s. For me, this means it&amp;rsquo;s pointless to be in the &amp;ldquo;human change business.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Last thing to note, if uncivil are permitted to have their own operating guidelines and stay, it&amp;rsquo;s a matter of time before the abused, who are civil and deliver good work, choose to leave.&amp;nbsp;&lt;/p&gt;</description>
      <link>http://www.intertech.com/Blog/post/Incivility-in-the-Workplace-Makes-for-Wasted-Time-and-Money.aspx</link>
      <comments>http://www.intertech.com/Blog/post/Incivility-in-the-Workplace-Makes-for-Wasted-Time-and-Money.aspx#comment</comments>
      <guid>http://www.intertech.com/Blog/post.aspx?id=19b41fd2-5079-499f-936f-a0810a222901</guid>
      <pubDate>Wed, 25 Apr 2012 10:31:00 -0500</pubDate>
      <category>Business</category>
      <dc:publisher>Tom Salonek</dc:publisher>
      <pingback:server>http://www.intertech.com/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.intertech.com/Blog/post.aspx?id=19b41fd2-5079-499f-936f-a0810a222901</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.intertech.com/Blog/trackback.axd?id=19b41fd2-5079-499f-936f-a0810a222901</trackback:ping>
      <wfw:comment>http://www.intertech.com/Blog/post/Incivility-in-the-Workplace-Makes-for-Wasted-Time-and-Money.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.intertech.com/Blog/syndication.axd?post=19b41fd2-5079-499f-936f-a0810a222901</wfw:commentRss>
    </item>
    <item>
      <title>Spring Transactions and the &lt;tx:method&gt; Element</title>
      <description>&lt;p&gt;This week, I had a wonderful group of people from the IT department of one of Minnesota's great counties in my classroom to learn Spring 3.&amp;nbsp; It's always nice to see a group of people that seem to get along well in the classroom.&amp;nbsp; My guess is they also get along well at work and that usually bodes well for software projects.&amp;nbsp; Teams that work together usually find solutions together.&lt;/p&gt; &lt;p&gt;A couple of very good questions from class this week centered on the schema-based (XML) configuration of Spring transactions.&lt;/p&gt; &lt;h2&gt;Spring Transactions in XML&lt;/h2&gt; &lt;p&gt;In general, when using Spring's declarative schema-based transactions, you need to define three elements in the XML metadata along with the beans that need transactions (unless these are defined with annotations and component scans).&amp;nbsp; The XML below is an example of defining a few beans and the three elements needed to apply Spring's schema-based AOP transactions.&lt;/p&gt; &lt;div id="codeSnippetWrapper"&gt; &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;&amp;lt;!-- A couple of business beans that need transactions --&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;bean&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="contactDao"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="com.intertech.service.ContactDaoJDBCImpl"&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #ff0000"&gt;destroy-method&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="dispose"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;autowire&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="byType"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;bean&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;bean&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="contactService"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="com.intertech.service.ContactServiceImpl"&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #ff0000"&gt;autowire&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="byType"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;bean&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;&amp;lt;!-- A transaction manager bean --&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;bean&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="txManager"&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="org.springframework.jdbc.datasource.DataSourceTransactionManager"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;property&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="dataSource"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;ref&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="basicDS"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;bean&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;&amp;lt;!-- The transaction advice - setting attributes for transactions --&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;tx:advice&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="txAdvice"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;transaction-manager&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="txManager"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;tx:attributes&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;tx:method&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="get*"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;read-only&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="true"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;tx:method&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="add*"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;propagation&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="REQUIRED"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;tx:method&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="update*"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;propagation&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="REQUIRED"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;isolation&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="SERIALIZABLE"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;tx:method&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="remove*"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;propagation&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="REQUIRED"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;isolation&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="SERIALIZABLE"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;tx:method&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="*"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;tx:attributes&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;tx:advice&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;&amp;lt;!-- Establish the AOP transaction cross cutting concern and define which classes/methods are transactional  --&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;aop:config&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;aop:pointcut&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="serviceOperations"&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #ff0000"&gt;expression&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="execution(* com.intertech.service.*.*(..))"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;aop:advisor&lt;/span&gt; &lt;span style="color: #ff0000"&gt;advice-ref&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="txAdvice"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;pointcut-ref&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="serviceOperations"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;aop:config&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Beyond the two beans (id's of contactDao and contactService) that will be provided transactions, the txManager bean defines the transaction manager to be used.&amp;nbsp; Spring provides several transaction manager beans which act as facades to the actual technology-specific transaction implementations.&amp;nbsp; The transaction manager beans must implement org.springframework.transaction.PlatformTransactionManager, which allows custom and new transaction managers to facilitate transactions in Spring without developers having to learn and understand that manager directly.&amp;nbsp; In the case above, I am just using Spring's DataSourceTransactionManager bean that wraps the transaction manager capability provided via JDBC and the available data source.&amp;nbsp; See &lt;a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/transaction/PlatformTransactionManager.html"&gt;here&lt;/a&gt; for more information on defining transaction managers.&lt;/p&gt;
&lt;p&gt;Next is the all important transaction advice element.&amp;nbsp; This element sets the transaction manager to use for transactions (as defined by the previous transaction manager bean in this case), and then establishes the transaction attributes for various transactional methods.&amp;nbsp; This is the portion of the configuration I want to focus on in this post.&amp;nbsp; More on this in just a bit.&lt;/p&gt;
&lt;p&gt;The last of the 3 elements defining schema-based transactions in Spring is the the AOP configuration element.&amp;nbsp; As Spring's declarative transactions are performed by AOP, this element defines the points of execution for transactions (and other cross cutting concerns) across the application.&amp;nbsp; In this example, the AOP transaction advisor and associated pointcut expression say that transactions are to be applied to any method in any class in the com.intertech.service package (regardless of return type, method name, method parameters, etc.).&amp;nbsp; See &lt;a href="http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/aop.html#aop-schema"&gt;here&lt;/a&gt; for more information on AOP configuration definitions.&lt;/p&gt;
&lt;h2&gt;Transaction Attributes&lt;/h2&gt;
&lt;p&gt;Back to the transaction advice element, you will note that the &amp;lt;tx:attributes&amp;gt; element contains any number of child &amp;lt;tx:method&amp;gt; elements.&amp;nbsp; These elements lead to a great deal of confusion.&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;tx:attributes&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;tx:method&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="get*"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;read-only&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="true"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;tx:method&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="add*"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;propagation&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="REQUIRED"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;tx:method&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="update*"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;propagation&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="REQUIRED"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;isolation&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="SERIALIZABLE"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;tx:method&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="remove*"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;propagation&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="REQUIRED"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;isolation&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="SERIALIZABLE"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;tx:method&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="*"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;tx:attributes&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;How do these elements relate to the pointcut defined in the AOP configuration?&amp;nbsp; How do the wildcards and matches work on these elements?&amp;nbsp; Does the name="*" containing element always have to be there?&lt;/p&gt;
&lt;h3&gt;AOP Configuration Pointcut and &amp;lt;tx:method&amp;gt;&lt;/h3&gt;
&lt;p&gt;First off, those classes and methods captured by the AOP configuration element and its associated pointcut for the transaction advisor define which methods in all the methods of the Spring beans may have transactions applied to them.&amp;nbsp; If you will, this represents a potentially large set of methods, but smaller than the original set provided by all beans in the application.&amp;nbsp; Importantly, however, this &lt;strong&gt;&lt;u&gt;&lt;em&gt;does not&lt;/em&gt;&lt;/u&gt;&lt;/strong&gt; mean that the methods captured by the AOP pointcut are going to have transactions yet.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.intertech.com/PostingImages/Spring-Transaction_A02E/image_4.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="http://www.intertech.com/PostingImages/Spring-Transaction_A02E/image_thumb_4.png" width="644" height="301"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Next, the transaction advice element with its transactional attributes (and nested transactional method elements) determine which methods will indeed be transactional and how the transactions on those methods will operate.&amp;nbsp; In the example above, there are several &amp;lt;tx:method&amp;gt; elements that select subsets of the AOP pointcut methods.&amp;nbsp; The methods captured by the wild card matches (all methods in this group that start with "get", start with "add", start with "remove", etc....) as shown in the yellow ovals in the diagram below become transactional.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.intertech.com/PostingImages/Spring-Transaction_A02E/image_5.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="http://www.intertech.com/PostingImages/Spring-Transaction_A02E/image_thumb_5.png" width="644" height="301"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Wildcards and Order of &amp;lt;tx:method&amp;gt;&lt;/h3&gt;
&lt;p&gt;The order of the &amp;lt;tx:method&amp;gt; elements is not important.&amp;nbsp; What is important is the name pattern!&amp;nbsp; Spring attempts to match the most specific name patterns first.&amp;nbsp; So, for example, say you had just three &amp;lt;tx:method&amp;gt; elements as shown below.&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;tx:method&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="add*"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;propagation&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="SUPPORTS"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;read-only&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="true"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;tx:method&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="addC*"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;propagation&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="REQUIRED"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;timeout&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="30"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;tx:method&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="*"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div id="codeSnippetWrapper"&gt;Then also assume you had a method called addContact( ) and another called addRate( ) that fell under the methods of the AOP pointcut.&amp;nbsp; In this case, the second &amp;lt;tx:method&amp;gt; element above would be applied to addContact( ) method and the first &amp;lt;tx:method&amp;gt; would apply to the addRate( ) method.&amp;nbsp; That is because more specific addC* pattern matches addContact but not addRate.&amp;nbsp; Further, even though the "*" pattern would capture both the addContact( ) and addRate( ) methods, it is more general and less specific than either of the "add*" or "addC*" names.&amp;nbsp; The name="*" pattern is important, however, to capture all methods selected by the AOP pointcut, but not by a more specific &amp;lt;tx:method&amp;gt; name.&amp;nbsp; In this example, a method like foo( ) that was captured by the pointcut would not be captured by either add* or addC* patterns.&lt;/div&gt;
&lt;h3&gt;The Attributes&lt;/h3&gt;
&lt;div&gt;Remember, the &amp;lt;tx:method&amp;gt; elements determine what is transactional, but also determine what attributes are applied to the transactions of those methods captured in the pattern match.&amp;nbsp; More information can be found on the transaction attributes &lt;a href="http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/transaction.html#transaction-declarative-txadvice-settings"&gt;here&lt;/a&gt;.&amp;nbsp; However, below is a table listing the attributes and their default values.&amp;nbsp; When your &amp;lt;tx:method&amp;gt; element does not specify the attribute, the method's transaction uses the default value.&amp;nbsp; In the example above, the catch-all &amp;lt;tx:method name="*"/&amp;gt; element abides by all defaults.&lt;/div&gt;
&lt;table border="1" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="139"&gt;
&lt;p align="center"&gt;&lt;strong&gt;&lt;em&gt;Transaction attribute&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td valign="top" width="286"&gt;
&lt;p align="center"&gt;&lt;strong&gt;&lt;em&gt;Purpose&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td valign="top" width="213"&gt;
&lt;p align="center"&gt;&lt;strong&gt;&lt;em&gt;Default setting&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="139"&gt;
&lt;p&gt;propagation&lt;/p&gt;&lt;/td&gt;
&lt;td valign="top" width="286"&gt;
&lt;p&gt;What should happen if a transaction already exists?&lt;/p&gt;&lt;/td&gt;
&lt;td valign="top" width="213"&gt;
&lt;p&gt;REQUIRED&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="139"&gt;
&lt;p&gt;isolation&lt;/p&gt;&lt;/td&gt;
&lt;td valign="top" width="286"&gt;
&lt;p&gt;Set the isolation level of the transaction.&lt;/p&gt;&lt;/td&gt;
&lt;td valign="top" width="213"&gt;
&lt;p&gt;DEFAULT&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="139"&gt;
&lt;p&gt;read-only&lt;/p&gt;&lt;/td&gt;
&lt;td valign="top" width="286"&gt;
&lt;p&gt;Specify if data can be modified or only read in the transaction.&lt;/p&gt;&lt;/td&gt;
&lt;td valign="top" width="213"&gt;
&lt;p&gt;False (allowing for reads and writes)&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="139"&gt;
&lt;p&gt;timeout&lt;/p&gt;&lt;/td&gt;
&lt;td valign="top" width="286"&gt;
&lt;p&gt;Length of time in seconds that the transaction can run before timing out.&lt;/p&gt;&lt;/td&gt;
&lt;td valign="top" width="213"&gt;
&lt;p&gt;-1&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="139"&gt;
&lt;p&gt;rollback-for&lt;/p&gt;&lt;/td&gt;
&lt;td valign="top" width="286"&gt;
&lt;p&gt;What triggers a rollback of a transaction?&lt;/p&gt;&lt;/td&gt;
&lt;td valign="top" width="213"&gt;
&lt;p&gt;RuntimeException&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="139"&gt;
&lt;p&gt;no-rollback-for&lt;/p&gt;&lt;/td&gt;
&lt;td valign="top" width="286"&gt;
&lt;p&gt;What does not trigger a rollback of a transaction?&lt;/p&gt;&lt;/td&gt;
&lt;td valign="top" width="213"&gt;
&lt;p&gt;Any checked exception&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Wrap Up&lt;/h2&gt;
&lt;p&gt;I want to thank Kevin and Bryan from my class this week for raising the good questions which led to the material for this post.&amp;nbsp; I had a lot of good questions to choose from this week as everyone in my class was engaging and thoughtful.&amp;nbsp; It makes class a lot of fun for everyone - students and instructor alike.&amp;nbsp; If you are looking to learn more about Spring 3, contact &lt;a href="email:dmccabe@intertech.com"&gt;Dan McCabe&lt;/a&gt; at Intertech, Inc. to enroll in a class today.&amp;nbsp; You can find more information about our Complete Spring 3 Framework class &lt;a href="http://www.intertech.com/Courses/Course.aspx?CourseID=99567"&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
      <link>http://www.intertech.com/Blog/post/Spring-Transactions-and-the-lt;txmethodgt;-Element.aspx</link>
      <comments>http://www.intertech.com/Blog/post/Spring-Transactions-and-the-lt;txmethodgt;-Element.aspx#comment</comments>
      <guid>http://www.intertech.com/Blog/post.aspx?id=acd45075-7144-41a0-9631-366b245cac12</guid>
      <pubDate>Sun, 22 Apr 2012 19:19:45 -0500</pubDate>
      <category>Spring Framework</category>
      <category>Java</category>
      <dc:publisher>Jim White</dc:publisher>
      <pingback:server>http://www.intertech.com/Blog/pingback.axd</pingback:server>
      <pingback:target>http://www.intertech.com/Blog/post.aspx?id=acd45075-7144-41a0-9631-366b245cac12</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.intertech.com/Blog/trackback.axd?id=acd45075-7144-41a0-9631-366b245cac12</trackback:ping>
      <wfw:comment>http://www.intertech.com/Blog/post/Spring-Transactions-and-the-lt;txmethodgt;-Element.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.intertech.com/Blog/syndication.axd?post=acd45075-7144-41a0-9631-366b245cac12</wfw:commentRss>
    </item>
  </channel>
</rss>

