<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>createTank &#187; Articles</title>
	<atom:link href="http://createtank.com/category/articles/feed/" rel="self" type="application/rss+xml" />
	<link>http://createtank.com</link>
	<description></description>
	<lastBuildDate>Thu, 28 Jan 2010 13:10:51 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>The Education of the Architect</title>
		<link>http://createtank.com/2009/01/the-education-of-the-architect/</link>
		<comments>http://createtank.com/2009/01/the-education-of-the-architect/#comments</comments>
		<pubDate>Tue, 13 Jan 2009 12:20:42 +0000</pubDate>
		<dc:creator>joe</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Articles]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Career]]></category>
		<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://createtank.com/2009/01/13/the-education-of-the-architect/</guid>
		<description><![CDATA[This is a little esoteric, but I believe in it fully&#8230;
In Vitruvius&#8217; Ten Book on Architecture, Chapter 1, The Education of the Architect, Vitruvius calls for a wide foundation of knowledge for the architect, including art, math, history, philosophy, music, and medicine.  That a good architect should strive for a breadth of applicable knowledge.
He also [...]]]></description>
			<content:encoded><![CDATA[<p>This is a little esoteric, but I believe in it fully&#8230;<span id="more-74"></span></p>
<p>In Vitruvius&#8217; <em>Ten Book on Architecture</em>, Chapter <span>1, <a href="http://www.gutenberg.org/files/20239/20239-h/29239-h.htm#Page_5" target="_blank">The Education of the Architect</a>, Vitruvius calls for a wide foundation of knowledge for the architect, including art, math, history, philosophy, music, and medicine.  That a good architect should strive for a breadth of applicable knowledge.</span></p>
<p>He also points out the usefulness of understanding the nature of practice and theory in all of these subjects, that a balance should be maintained.</p>
<p style="margin-left: 40px"><em>2. It follows, therefore, that architects who have aimed at acquiring manual skill without scholarship have never been able to reach a position of authority to correspond to their pains, while those who relied only upon theories and scholarship were obviously hunting the shadow, not the substance. But those who have a thorough knowledge of both, like men armed at all points, have the sooner attained their object and carried authority with them.</em></p>
<p><span>I would argue that the same logic is very well applied to our occupation today, in that over-specialization is not particularly suited to success.  That is, EA practitioners are IMHO better as generalists, with a breadth of knowledge, both technical, and non-technical.</span></p>
<p>For my part, I typically look for experience and success in the following areas:</p>
<ul>
<li><span>business (corporate and entrepreneurial)</span></li>
<li><span>software development (multiple languages and types [OO, functional])</span></li>
<li><span>systems administration</span></li>
<li><span>creativity and problem solving skills<br />
</span></li>
<li><span>engineering<br />
</span></li>
<li><span>open source</span></li>
<li><span>open standards</span></li>
<li><span>development methodology<br />
</span></li>
<li><span>Unix/Linux<br />
</span></li>
<li><span>marketing</span></li>
<li><span>writing</span></li>
<li><span>speaking/presenting</span></li>
<li><span>more&#8230;<br />
</span></li>
</ul>
<p><span>In the real world, I see too many architects relying upon theory alone (</span><span><em>hunting the shadow</em> as it were)</span><span>, create problems for themselves and their teams.  For this reason, I&#8217;m a big fan of the people at <a href="http://www.codingthearchitecture.com/" target="_blank">CodingTheArchitecture</a>.</span></p>
<p><em>Ten Books on Architecture</em> from Project Gutenberg:<br />
<a href="http://www.gutenberg.org/files/20239/20239-h/29239-h.htm" target="_blank">http://www.gutenberg.org/<wbr></wbr>files/20239/20239-h/29239-h.<wbr></wbr>htm</a></p>
<p><em>Originally Posted by john joseph roets at <a href="http://groups.google.com/group/the-enterprise-architecture-network?hl=en" target="_blank">the-enterprise-architecture-network</a> Google group, an example of reuse in writing.</em></p>
<p>Post in complete context here:<br />
<a href="http://tinyurl.com/a8w5tk" target="_blank">http://tinyurl.com/a8w5tk</a></p>
]]></content:encoded>
			<wfw:commentRss>http://createtank.com/2009/01/the-education-of-the-architect/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A bit about WADL (Revised)</title>
		<link>http://createtank.com/2007/08/a-bit-about-wadl/</link>
		<comments>http://createtank.com/2007/08/a-bit-about-wadl/#comments</comments>
		<pubDate>Thu, 23 Aug 2007 18:27:08 +0000</pubDate>
		<dc:creator>larry</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://createtank.com/2007/05/23/a-bit-about-wadl/</guid>
		<description><![CDATA[In today’s high-tech world there is a growing need to create a simpler way to describe web-based applications. In the past one would use a WSDL to describe such application. One competing project put forth from Sun is Web Application Description Language [WADL] (http://research.sun.com/techrep/2006/abstract-153.html).
From Sun:
WADL is designed to provide a machine processable protocol description format [...]]]></description>
			<content:encoded><![CDATA[<p>In today’s high-tech world there is a growing need to create a simpler way to describe web-based applications. In the past one would use a WSDL to describe such application. One competing project put forth from Sun is Web Application Description Language [WADL]<span id="more-27"></span> (<a href="http://research.sun.com/techrep/2006/abstract-153.html" title="http://research.sun.com/techrep/2006/abstract-153.html" target="_blank">http://research.sun.com/techrep/2006/abstract-153.html</a>).</p>
<p>From Sun:</p>
<blockquote><p>WADL is designed to provide a machine processable protocol description format for use with such HTTP-based Web applications, especially those using XML.</p></blockquote>
<p>A WADL file is an XML based language specification used to describe WEB-based applications.  These files define resources, methods, requests and responses. The WADL project (<a href="https://wadl.dev.java.net/" target="_blank">https://wadl.dev.java.net/</a>) houses the language specification as well as a wealth of other information including source code, examples and documentation.</p>
<h2>wadl2java Utility</h2>
<p>The WADL project also provides a Java utility called wadl2java. Wadl2java produces Java stubs from WADL files. The utility can be called directly from the command-line or as an Apache Ant task.  At first I was a little baffled over how this utility worked.  So, I decided to email the creator, Marc Hadley, with some questions.  I was pleasantly surprised that he answered my questions.  My concern was that wadl2java requires separate tasks and output directories for every WADL file.  I’m use to having all generated classes contained within the same directory.  Marc pointed out that even if he changed wadl2java to allow for this, the possibility still existed that a conflict could arise when two separate WADL files specified an XML element or attribute with the same name.  Whichever WADL file was processed last would generate a class that overwrote the preceding.  Wow, the light bulb went off, now I understood why it works the way it does.  This was a conscience design decision to avoid class-naming conflicts, thus the utility must place these files in separate directories. In other words, if you were creating an application that consumes the services of two separate applications described by their own WADL files, two separate ant tasks would be required to produce the class stubs. Three applications would require three ant tasks, and so on.  The generated stubs must be placed in independent output directories or the results from the second WADL would overwrite at least the end-point of the first WADL, as well as any other like-named classes. To avoid this, wadl2java has some built-in dependency checking that can be specified within the ant task.</p>
<h2>Areas for Improvement?</h2>
<p>Since the WADL project provides documentation I won’t go into details about the specification. However, I would like to point out a few areas that I found a bit confusing. When creating a WADL to describe an application, the ‘method’ reference has an ‘href’ attribute whose value must be prefixed with a pound ‘#’ sign. I see no practical reason for this requirement and would suspect that the WADL utilities can be programmed in such a manor to eliminate it. Additionally, the ‘href’ attribute actually is associated with the ‘id’ attribute of the ‘method’ definition such that the value of the ‘href’ attribute in the ‘method’ reference minus the pound ‘#’ sign refers to the value of the ‘id’ attribute in the ‘method’ definition. This is confusing because the labels used for these attributes are not consistent. Here I would suggest that both attributes be labeled the same. If it makes sense to use ‘href’ then both should be ‘href’. Otherwise, both should be ‘id’.<br />
Another confusing area is the ‘method’ definition’s ‘name’ attribute. A ‘name’ attribute is usually an attribute used to identify something and is similar in function to how the ‘id’ attribute is being used. However, is this case, the value of this attribute really refers to the HTTP method type used to access the application. I would suggest that the attribute be labeled as ‘type’ or something similar.</p>
<p>Finally, the use of a ‘description’ attribute within the wadl2java’s ant task concerns me.  This task uses the ‘description’ attribute to indicate the name of the WADL file one wishes to process. This is a little puzzling.  Most Ant tasks I’ve seen make use of a ‘description’ attribute to provide a means for adding comments or further information regarding the particular task being performed. Maybe a better label for such an attribute would be ‘file’.</p>
<h2>Overall&#8230;</h2>
<p>Generally the WADL specification and its related tools excite me. I would recommend its use to anyone seeking a simple yet powerful means to describe any WEB-based application.<br />
For more information about WADL please check out their site at <a href="https://wadl.dev.java.net/" target="_blank">https://wadl.dev.java.net/</a>.</p>
<p>Originally published May 23, 2007.</p>
]]></content:encoded>
			<wfw:commentRss>http://createtank.com/2007/08/a-bit-about-wadl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Technology and Architecture &#8211; Walls ARE Important</title>
		<link>http://createtank.com/2007/07/walls/</link>
		<comments>http://createtank.com/2007/07/walls/#comments</comments>
		<pubDate>Tue, 03 Jul 2007 11:39:46 +0000</pubDate>
		<dc:creator>joe</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Articles]]></category>
		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://createtank.com/2007/07/03/architecture-and-technology/</guid>
		<description><![CDATA[One of the first notations made in my notes from the ZapThink session (see Zapthink LZA Reviewed) was a subtle disagreement about the relationship between Architecture and Technology. ZapThink asserts that &#8220;Architecture is not about technology.&#8221; They paraphrase &#8220;physical&#8221;* architects stating that buildings are and should be designed &#8220;for the space.&#8221;
What the Classics Say
While this [...]]]></description>
			<content:encoded><![CDATA[<p>One of the first notations made in my notes from the ZapThink session<span id="more-30"></span> (see <a href="http://createtank.com/2007/05/24/zapthink-lza/">Zapthink LZA Reviewed</a>) was a subtle disagreement about the relationship between Architecture and Technology. ZapThink asserts that &#8220;Architecture is not about technology.&#8221; They paraphrase &#8220;physical&#8221;* architects stating that buildings are and should be designed &#8220;for the space.&#8221;</p>
<h2>What the Classics Say</h2>
<p>While this is not untrue, a review of classic architectural writings reveals a fuller and more enlightened perspective. In point of fact, Architecture is about the spaces <em>and</em> the structure <em>and</em> the foundation. Physical Architecture does in fact concern itself in no small manner with the structure and foundation of the building. Without a solid and proper foundation, even the best and most suitable &#8220;spaces-based&#8221; Architecture will fail. The spaces based viewpoint might come from the fact that in the world of physical Architecture, structures and foundations are usually a known quantity, as a great deal of experience has been recorded over the past few thousand years. However, whenever a new material or technology is introduced, inherent unknowns often produce failure. With this failure and its study comes further understanding.</p>
<p><!--more--></p>
<h2>Software Architecture</h2>
<p>In our world of software and systems Architecture, the foundation is the technology upon which one builds. Without an experienced based, solid foundation, even the best system will fail. Unfortunately, we do not have the advantage of thousands of years of direct experience to tap in our decisions of foundation and structure as do the physical Architects. Many modern software Architects start and end with what they already know, or let developers, politics, or circumstances decide. This is a short-sighted path. At createTank, we&#8217;ve seen success in recommendations based upon information from two primary sources:</p>
<ol>
<li>Direct experience on hundreds of major projects in all variety of form and function.</li>
<li>Interdisciplinary Architectural research.</li>
</ol>
<p>In this way, we can put to good use those abstract principals refined over thousands of years of physical Architecture, made concrete and applicable through direct experience doing modern, &#8220;dirty hands&#8221; work. When combined, these sources provide a more holistic architectural perspective. We are not perfect, nor claim all answers, but the proof is in the pudding, and one well built system is worth a thousand white-board rectangles.</p>
<h2>The createTank perspective</h2>
<p>Architecture is not only about technology, but it does concern itself with technology. That is, Architecture is not only concerned with the space, but also the structure holding up and indeed <strong>defining that space</strong>. This is the technology aspect of architecture. Without a solid foundation and structural components, any building or structure will fail. Enterprise Architecture&#8217;s virtual constructs are no different. The best design, the best architecture, <em>will</em> be hampered by a weak foundation, whether in the O/S, software language, or framework chosen. This is stated in confidence, because although the actual system may indeed function well, lack of scalability, maintainability over time, or agility to integrate with other systems will catch up in time and prove expensive or fatal.</p>
<h2>Summary</h2>
<p>In the end, ZapThink is not necessarily wrong in their assertion, the assertion is just incomplete. It is easy to understand as they are trying to highlight the business value of SOA. However, downplaying the role of technology in SOA to such an extent is unsettling. Walls <em>are</em> important in physical architecture, and technology <em>is</em> important in your software architecture. It might not be continually considered the most important component of your architecture, but an architecture should only be considered healthy when the foundation (its technology) is trusted solid and sound. Walls and structure, as too, technology, hold up and define the space or functionality designed. In essence, a good architect <em>MUST</em> understand the technology involved, including which technology best fits a given problem, in order to create the best possible system. This is absolute. In your projects, you would do well to place stock in the hire or counsel of an architect with extensive experience in the technologies involved and with the ability to communicate the lessons learned therein at multiple levels.</p>
<blockquote><p>&#8230;the traceries had <em>caught the eye</em> of the architect&#8230;up to that time&#8230;his eye had been on openings only&#8230;Now, the great pause was at the moment when the space and dividing stone-work were both equally considered &#8212; John Ruskin, The Seven Lamps of Architecture, The Lamp of Truth, Section XIII.</p></blockquote>
<p><sup>*</sup> <small>&#8220;Physical Architect&#8221; is used here to jointly differentiate architects of physical structures (e.g. buildings, houses, industrial complexes, skyscrapers, etc.) from architects of more virtual structures (e.g. software systems, software applications, enterprise IT systems, etc.).</small></p>
]]></content:encoded>
			<wfw:commentRss>http://createtank.com/2007/07/walls/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introduction to HttpUnit</title>
		<link>http://createtank.com/2007/06/httpunit-intro/</link>
		<comments>http://createtank.com/2007/06/httpunit-intro/#comments</comments>
		<pubDate>Thu, 14 Jun 2007 02:28:15 +0000</pubDate>
		<dc:creator>larry</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://createtank.com/2007/06/13/introduction-to-httpunit/</guid>
		<description><![CDATA[In today&#8217;s application development environment it is standard practice to build unit tests for each object being developed. Unit testing is increasingly more and more popular in Java due to the many open-source unit testing frameworks available. However, this type of testing becomes more difficult when the application is Web based or contains EJBs because [...]]]></description>
			<content:encoded><![CDATA[<p>In today&#8217;s application development environment it is standard practice to build unit tests for each object being developed. Unit testing is increasingly more and more popular in Java due to the many open-source unit testing frameworks available. However, this type of testing becomes more difficult when the application is Web based or contains EJBs because of the dependency on application servers, servlet containers and EJB containers.<span id="more-32"></span> We can, though, test the publicly exposed portion of the Web application with frameworks like <a href="http://httpunit.sourceforge.net" target="_blank">HttpUnit</a>.</p>
<p>HttpUnit is a Java testing framework, which is used to access Web-based content in a manor similar to that of a Web Browser. Most things a user can do through a Web browser can be emulated with HttpUnit. It even supports form submission, JavaScript to a degree, and https. Additionally, HttpUnit allows one to examine the returned pages.</p>
<p>Let&#8217;s examine a very simple HttpUnit example by testing one of my favorite sites, http://carcruises.com. This site lists a considerable amount of car cruises within the US by month and state passed to the server in the form of query parameters. We want to test the results of querying for a list of cruises in Pennsylvania for the month of June.</p>
<p>First, we must create a class to extend the junit.framework.TestCase class. This is necessary to take advantage of JUnit&#8217;s assert methods. Within this class we create a test method (testGetPAJuneCarcruises) where we will emulate an http call to the car cruises website.</p>
<pre><strong>Listing 1</strong><font color="#0000ff">
public class CarCruisesTest  extends junit.framework.TestCase {
    public void testGetPAJuneCarcruises() {
        String sURL = "http://carcruises.com/" +
            "cruise_list.asp?month_select=6&amp;" +
            "state=Pennsylvania";
        try {
            // Create the conversation object,
            // which will maintain state for us</font><font color="#ff0000">
            WebConversation conversation = new WebConversation();
            WebRequest request = new GetMethodWebRequest(sURL);
            WebResponse response = conversation.getResponse(request);</font><font color="#0000ff">
        } catch (Exception ex) {
            ex.printStackTrace();
            // Fail the test if an exception is thrown.
            super.fail(ex.getMessage());
        }
    }
}</font></pre>
<p>Listing 1 illustrates 3 significant lines of code. Initially we must instantiate a WebConversation object. This object is responsible for maintaining the session of the connection just like a Web Browser does when a human is looking at the URL. Next, we must create a WebRequest object pointing to the URL. This object can be a &#8220;GET&#8221;, &#8220;PUT&#8221; or &#8220;POST&#8221; request. Finally, we create a WebResponse object used to retrieve the results of the request.</p>
<p>OK, so that was easy enough but we haven&#8217;t tested anything. Usually it is standard practice to invoke JUnit assertNotNull methods on each of the objects (which is why our class must extend junit.framework.TestCase). Therefore, after instantiation of each object perform an assertNotNull as illustrated in Listing 2. If any of the objects are null the test will fail before moving on to the instantiation of the next object.</p>
<pre><strong>Listing 2</strong><font color="#0000ff">
public void testGetPAJuneCarcruises(){
        String sURL = "http://carcruises.com/" +
            "cruise_list.asp?month_select=6&amp;" +
            "state=Pennsylvania";
    try {
        // Create the conversation object,
        // which will maintain state for us
        WebConversation conversation = new WebConversation();</font><font color="#ff0000">
        assertNotNull("New conversation", conversation);</font><font color="#0000ff">
        WebRequest request = new GetMethodWebRequest(sURL);</font><font color="#ff0000">
        assertNotNull("Request to URL "+sURL,request);</font><font color="#0000ff">
        WebResponse response = conversation.getResponse(request);</font><font color="#ff0000">
        assertNotNull("Response from URL " + sURL,response);</font><font color="#0000ff">
    } catch (Exception ex) {
        ex.printStackTrace();
        // Fail the test if an exception is thrown.
        super.fail(ex.getMessage());
    }
}</font></pre>
<p>If all of our objects are not NULL then we are ready to take a closer look at the WebResponse object. We&#8217;ll want to test for a valid response code by using the WebResponse object&#8217;s getResponseCode. If this method returns a 200 then we can test for other response objects. For example, we can test that the response message returns &#8220;OK&#8221; by making a call to the WebResponse object&#8217;s getResponseMessage method. Typically responses from Web applications also contain titles. We can test for a title by performing an assertEquals using the WebResponse object&#8217;s getTitle method. Snippet 1 illustrated these three tests.</p>
<pre><strong>Snippet 1</strong><font color="#0000ff">
assertEquals("Response code should return 200",
    200, response.getResponseCode());
assertEquals("Response message should return OK",
    "OK",response.getResponseMessage());
assertEquals("Car Cruises Online - Cruise Listing",
    response.getTitle());</font></pre>
<p>If theses assertions are correct we can begin to look at forms and links. Snippet 2 demonstrates the methods necessary to retrieve this data from the WebResponse object. Since more than one form or link can be present in any one response, the methods return arrays of type WebForm and WebLink respectively. For our example we know there is only one form in the response so we first test for NULL then we test the array length to make sure we only received 1 form. As for links, our example is using a dynamic URL in which the number of links can change at any time. Therefore we just test for null and then to be consistent we check the array length to make sure it is greater than or equal to 0.</p>
<pre><strong>Snippet 2</strong><font color="#0000ff">
WebForm[] forms = response.getForms();
assertNotNull(forms);
assertTrue("Response should contain only 1 form",forms.length == 1);
WebLink[] links = response.getLinks();
assertNotNull(links);
assertTrue("Response should contain 0 or more links",links.length &gt;= 0);
</font></pre>
<p>Each of the WebForm and WebLink objects can be further broken down into other objects. Each URL may or may not utilize this inner objects. Some of these objects are Buttons, Methods, Parameters, and so on. Likewise, the WebResponse object can be further broken down into other objects. Please see the <a href="http://httpunit.sourceforge.net/doc/api/index.html" target="_blank">HttpUnit javadocs</a> for more information (<a href="http://httpunit.sourceforge.net/doc/api/index.html" target="_blank">http://httpunit.sourceforge.net/doc/api/index.html</a>).</p>
<p>Another interesting thing to note is that usually one would disable HttpUnit from throwing exceptions due to JavaScript errors. This is necessary because of the on-going differences in the inner workings of JavaScript. Therefore, as a first step, use Snippet 3 to disable these exceptions before the instantiation of the WebConversation object</p>
<pre><strong>Snippet 3</strong><font color="#0000ff">
// Don't let JavaScript errors trip us up!
HttpUnitOptions.setExceptionsThrownOnScriptError(false);
</font></pre>
<p>Putting it all together we create the code in Listing 3.  Usually I do all of my development work in Eclipse so I can execute any JUnit test directly from the IDE, however, it can also be executed through ant if so desired.  Snippet 4 illustrates a simple ant task that will execute any Junit test classes whose source code is in the relative directory src/java.test and whose name ends with Test.java.  This also assumes you&#8217;ve already compiled your test source files and they are included in the test.classpath path.</p>
<pre><strong>Listing 3</strong><font color="#0000ff">
public class CarCruisesTest  extends junit.framework.TestCase{
    public void testGetPAJuneCarcruises(){
        String sURL = "http://carcruises.com/" +
            "cruise_list.asp?month_select=6&amp;" +
            "state=Pennsylvania";
        try {
            // Don't let Javascript errors trip us up!
            HttpUnitOptions.setExceptionsThrownOnScriptError(false);
            // Create the conversation object which will maintain
            // state for us.
            WebConversation conversation = new WebConversation();

            // Create the request object pointing to our URL.
            WebRequest request = new GetMethodWebRequest(sURL);

            // Perform a get request and store results in response.
            WebResponse response = conversation.getResponse(request);

            // Check for valid response code.
            assertEquals("Response code should return 200",
                        200,response.getResponseCode());

            // Check for valid response message.
            assertEquals("Response message should return OK",
                        "OK",response.getResponseMessage());

            // Check for valid response title.
            assertEquals("Car Cruises Online - Cruise Listing",
                        response.getTitle());

            // Make sure there is 1 and only 1 form.
            WebForm[] forms = response.getForms();
            assertNotNull(forms);
            assertTrue("Response should contain only 1 form",
                        forms.length == 1);

            // Make sure the Links are not NULL.
            WebLink[] links = response.getLinks();
            assertNotNull(links);
            assertTrue("Response should contain at least 1 link",
                        links.length &gt;= 1);
        } catch (Exception ex) {
            ex.printStackTrace();
            // Fail the test if an exception is thrown.
            super.fail(ex.getMessage());
        }
    }
}</font></pre>
<p>Since we instruct Junit to format the output as xml we can then feed the resultant xml into the JunitReport task and generate html to make the results pretty.  For further information on these ant task please see the <a href="http://httpunit.sourceforge.net" target="_blank">JUnit</a> project at sourceforge.</p>
<pre><strong>Snippet 4</strong><font color="#0000ff">
&lt;target name="test" &gt;
	&lt;mkdir dir="tst-rslts"/&gt;
	&lt;junit haltonfailure="no" printsummary="yes"&gt;
		&lt;classpath refid="test.classpath"/&gt;
		&lt;batchtest fork="yes" todir="tst-rslts"&gt;
			&lt;formatter type="xml"/&gt;
			&lt;fileset dir="src/java.test"&gt;
				&lt;include name="**/*Test.java"/&gt;
			&lt;/fileset&gt;
		&lt;/batchtest&gt;
	&lt;/junit&gt;
	&lt;junitreport todir="tst-rslts"&gt;
		&lt;fileset dir="tst-rslts"&gt;
			&lt;include name="TEST-*.xml"/&gt;
		&lt;/fileset&gt;
		&lt;report format="frames" todir="tst-rslts"/&gt;
	&lt;/junitreport&gt;
&lt;/target&gt;
</font></pre>
]]></content:encoded>
			<wfw:commentRss>http://createtank.com/2007/06/httpunit-intro/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Useful Resources in WSDL Design for Complex Payloads</title>
		<link>http://createtank.com/2007/06/wsdl-design/</link>
		<comments>http://createtank.com/2007/06/wsdl-design/#comments</comments>
		<pubDate>Thu, 07 Jun 2007 16:54:40 +0000</pubDate>
		<dc:creator>joe</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Information]]></category>

		<guid isPermaLink="false">http://createtank.com/2007/06/07/wsdl-design/</guid>
		<description><![CDATA[Some useful articles and best practices information for WSDL design in systems with complex XML schemas.
Using XML schemas effectively in WSDL design
An excellent presentation from HP giving high level description and reasoning for particular WSDL design strategies.  Contains information concerning XML schema design style, schema import within WSDL, XML namespace usage, Web Services versioning, [...]]]></description>
			<content:encoded><![CDATA[<p>Some useful articles and best practices information for WSDL design in systems with complex XML schemas.<span id="more-31"></span></p>
<p><a href="http://devresource.hp.com/drc/slide_presentations/schemaWSDL/index.jsp" target="_blank">Using XML schemas effectively in WSDL design</a></p>
<blockquote><p>An excellent presentation from HP giving high level description and reasoning for particular WSDL design strategies.  Contains information concerning XML schema design style, schema import within WSDL, XML namespace usage, Web Services versioning, and interoperability.</p></blockquote>
<p><a href="http://webservices.xml.com/pub/a/ws/2003/05/27/wsdl.html" target="_blank">WSDL Tales From The Trenches, Part 1</a></p>
<blockquote><p>Part one of a great and comprehensive three part article series from XML.com detailing issues surrounding WSDL design.  This part focuses on WSDL design, generation, statefulness, and implementation design decisions related to the interfacing of web services.</p></blockquote>
<p><a href="http://webservices.xml.com/pub/a/ws/2003/06/24/wsdl.html" target="_blank">WSDL Tales From The Trenches, Part 2</a></p>
<blockquote><p>Part two of a three part article series from XML.com detailing issues surrounding WSDL design.  This part focuses on tools, Modular WSDL design, namespaces, and error handling.</p></blockquote>
<p><a href="http://webservices.xml.com/pub/a/ws/2003/08/05/wsdl.html" target="_blank">WSDL Tales From The Trenches, Part 3</a></p>
<blockquote><p>Part three of a three part article series from XML.com detailing issues surrounding WSDL design.  This part focuses on data within a web service, covering the import of data definitions (via xsd:include and wsdl:include), schema design styles, and XML namespaces.</p></blockquote>
<p><a href="http://www.ibm.com/developerworks/webservices/library/ws-version/" target="_blank">Best practices for Web services versioning</a></p>
<blockquote><p>A great, in depth article from IBM developerWorks.  Provides and details options for managing web service versioning.  Includes approaches to web services versioning with UDDI.</p></blockquote>
<p><a href="http://www.xml.com/pub/a/2002/02/20/endpoints.html" target="_blank">SOAP Encodings, WSDL, and XML Schema Types</a></p>
<blockquote><p>Article from XML.com concerned with use of a schema from a WSDL.</p></blockquote>
<p><a href="http://devresource.hp.com/drc/resources/WSBestPractices/index.jsp" target="_blank">Best Practices for Web Service Development</a></p>
<blockquote><p>Another presentation from HP containing information on the importance of WSDL design, best practices for WSDL design, web services design patterns, development and testing of web services, web services security, and web service reliability.</p></blockquote>
<p><a href="http://www.w3.org/TR/wsdl" target="_blank">Web Service Definition Language (WSDL)</a></p>
<blockquote><p>W3C WSDL Specification 1.1</p></blockquote>
<p><a href="http://www.w3.org/TR/xmlschema-0/" target="_blank">XML Schema Part 0 Primer Second Edition </a></p>
<blockquote><p>W3C Document which &#8220;provides an easily readable description of the XML Schema facilities&#8230;&#8221;</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://createtank.com/2007/06/wsdl-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ZapThink LZA Reviewed</title>
		<link>http://createtank.com/2007/05/zapthink-lza/</link>
		<comments>http://createtank.com/2007/05/zapthink-lza/#comments</comments>
		<pubDate>Fri, 25 May 2007 04:29:47 +0000</pubDate>
		<dc:creator>joe</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Articles]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://createtank.com/2007/05/24/zapthink-lza/</guid>
		<description><![CDATA[ZapThink launched LZA (Licensed ZapThink Architect) Boot Camps in early 2007 to provide a SOA credential and matched training.  The Boot Camps were intended to provide both a common, objective understanding of SOA to practicing Enterprise Architects and the chance to obtain a credential from a qualified and respected third party (ZapThink).
createTank Attends&#8230;
After much [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.zapthink.com/" target="_blank">ZapThink</a> launched LZA (Licensed ZapThink Architect) Boot Camps in early 2007 to provide a SOA credential and matched training.  The Boot Camps were intended to provide both a common, objective understanding of SOA to practicing Enterprise Architects and the chance to obtain a credential from a qualified and respected third party (ZapThink).<span id="more-28"></span></p>
<h2>createTank Attends&#8230;</h2>
<p>After much thought, I attended the LZA Boot Camp in Baltimore last month (April 23-25) for what boiled down to two hard, tangible reasons:</p>
<ol>
<li> To widen my horizons (and createTank&#8217;s) by concentrating on a broader and more business oriented slant toward SOA (createTank has historically focused on research around the implementation questions of a SOA, or software architecture in general).</li>
<li> To attain an architectural (and specifically a SOA) credential to differentiate createTank from those that are &#8220;architects in name only&#8221; (see Vitruvius&#8217; Edu<span style="font-style: italic">cation of an Architect</span> to be discussed here at a later date).  The fact that this credential would come from such an independent and objective organization as ZapThink was <em>quite</em> a convincing point.</li>
</ol>
<p>I did in fact get what I came for &#8230; I saw a review of SOA from a different perspective, and I am now a Senior Licensed ZapThink Architect (Senior LZA).  However, I did get more than I expected. Specifically, I found in my notes and &#8220;take-backs,&#8221; a refinement in some of our positions at createTank.  I also met quite a few good Architects and Technologists from across the country and around the world that should hopefully prove to be good friends with which to bounce and share architectural ideas.  I&#8217;d been looking for a community such as this for a long time now.</p>
<h2>Since Then&#8230;</h2>
<p>I&#8217;ve finally found the time to review the notes and complete my internal reports.  They really did pack a lot into the three days.  The time betwixt has allowed me a good deal of dialogue with other Architects, including our own Larry Liberto, which has further refined the positions and ideas of interest.  I should be posting many of our findings and related interesting points here over the next few weeks.</p>
<p>Concerning the refined positions, most are agreed upon by createTank and ZapThink, but createTank seems to  have a slightly different take in areas which may prove interesting.  This is likely due to our technical and implementation specific background. It might be an over simplification, but we tend to ground our architectural advice from below in our implementation experience, whilst ZapThink tends to support their architectural advice from above with business experience.  Of course both methods are legitimate and useful, but they <em>are</em> different.  There is a great deal of overlap, as there should be in architecture, but by researching the differences, we may refine our positions and learn more from each other.  I&#8217;m somewhat amazed at how we&#8217;ve come to so many of the same conclusions about SOA and Architecture in general while approaching the problem from such different perspectives.  I&#8217;d speculate that the common factors are [1] experience and [2] the ability to be honest about that experience.  It seems that many groups (especially vendors) let marketing get in the way of that which is best left in its simplest state.</p>
<p>We at createTank have been big fans of ZapThink for a while now as one of only a few organizations out there that were not trying to sell SOA as a set of products, but rather trying to reveal the truth behind its power.   I would definitely recommend the LZA Boot Camp to any genuine or aspiring Architect out there with an interest in seeing SOA framed in an objective manner.  I&#8217;d also recommend it to organizations looking to implement SOA internally, as a vaccine to the seemingly endless vendor sales pitches in store for them.</p>
<p>ZapThink: <a href="http://www.zapthink.com/" target="_blank">http://www.zapthink.com/</a></p>
<p>ZapThink LZA: <a href="http://www.zapthink.com/lza.html" target="_blank">http://www.zapthink.com/lza.html</a></p>
<p>ZapThink Architect Resource Center [ARC]: <a href="http://www.zapthink.com/ARC-view.html" target="_blank">http://www.zapthink.com/ARC-view.html</a></p>
<p>Next Scheduled LZA Event:  Sydney, Australia    May 28-30, 2007<br />
Register: <a href="http://www.zapthink.com/eventreg.html" target="_blank">http://www.zapthink.com/eventreg.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://createtank.com/2007/05/zapthink-lza/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SOA &#8211; Wrap and Replace the Squeaky Wheel</title>
		<link>http://createtank.com/2007/05/soa-wrap-and-replace-the-squeaky-wheel/</link>
		<comments>http://createtank.com/2007/05/soa-wrap-and-replace-the-squeaky-wheel/#comments</comments>
		<pubDate>Mon, 21 May 2007 03:12:12 +0000</pubDate>
		<dc:creator>joe</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Articles]]></category>
		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://createtank.com/2007/05/20/soa-wrap-and-replace-the-squeaky-wheel/</guid>
		<description><![CDATA[Many SOA advocates refer to the implementation of SOA as &#8220;wrap and replace&#8221; rather than &#8220;Rip and Replace.&#8221;  createTank has determined through experience that a more refined description might sometimes be helpful &#8212; that of &#8220;wrap and replace &#8216;the squeaky wheel.&#8217;&#8221;  This description is usually more acceptable to developers and management alike, as [...]]]></description>
			<content:encoded><![CDATA[<p>Many SOA advocates refer to the implementation of SOA as &#8220;wrap and replace&#8221; rather than &#8220;Rip and Replace.&#8221;  createTank has determined through experience that a more refined description might sometimes be helpful &#8212; that of &#8220;wrap and replace &#8216;the squeaky wheel.&#8217;&#8221;  This description is usually more acceptable to developers and management alike, as it highlights the possibility that a great deal of legacy code may not need to be rewritten at all (or at least not immediately).<span id="more-23"></span></p>
<p>As with any SOA implementation or legacy integration, the team wraps the legacy implementation(s) with the chosen SOA technology or framework, adding necessary new functionality alongside.  At some point in time after the wrapping takes place, legacy implementations of services/operations deemed to perform insufficiently may be completely replaced by new implementations just as with the regularly described &#8220;wrap and replace&#8221; method.  However, the &#8220;wrap and replace&#8221; description leaves out the very real possibility of the retention of legacy services/operations which continue to perform and deliver value.  These implementations may remain in place working transparently alongside new implementations.</p>
<p><a href="http://createtank.com/wp-content/uploads/2007/05/wrap-and-replace.jpg" title="Wrap and Replace â€œthe Squeaky Wheelâ€"><img src="http://createtank.com/wp-content/uploads/2007/05/wrap-and-replace.jpg" alt="Wrap and Replace â€œthe Squeaky Wheelâ€" height="388" width="415" /></a><a href="http://createtank.com/wp-content/uploads/2007/05/wrap-and-replace.jpg" title="Squeaky Wheel Illustration"> </a></p>
<p>In the illustration, we see two legacy systems (Legacy<sub>A</sub> and Legacy<sub>B</sub>) and new functionality integrated into a SOA Framework.  Within the systems, multiple services or operations are marked in red as candidates for replacement.  These are the &#8220;squeaky wheels.&#8221;  Notice that a good portion of the legacy implementations could remain in service indefinitely.  This shows the agility that SOA provides, in that the team is not forced to replace the legacy code until they have a &#8220;real&#8221; reason to do so.</p>
<p>The fact that the legacy implementation can remain around indefinitely brings us to one final point of any good SOA integration, that the system need not be completely replaced or rewritten every major industry cycle.  For example, if Legacy<sub>A</sub> was written in COBOL in the 70&#8217;s, Legacy<sub>B</sub> was written in JMS in the late 90&#8217;s, and the latest system is written with SOAP over HTTP interfaces, a future implementation in the fictional &#8220;Protocol-X&#8221; could still retain some or all of the existing implementations without rewrite.  This is an important point, because new languages and technologies will continually overcome what we are now implementing.</p>
]]></content:encoded>
			<wfw:commentRss>http://createtank.com/2007/05/soa-wrap-and-replace-the-squeaky-wheel/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Why Linux Is Wealthier Than Microsoft</title>
		<link>http://createtank.com/2003/11/why-linux-is-wealthier-than-microsoft/</link>
		<comments>http://createtank.com/2003/11/why-linux-is-wealthier-than-microsoft/#comments</comments>
		<pubDate>Tue, 25 Nov 2003 01:52:52 +0000</pubDate>
		<dc:creator>joe</dc:creator>
				<category><![CDATA[Articles]]></category>

		<guid isPermaLink="false">http://createtank.com/2003/11/24/why-linux-is-wealthier-than-microsoft/</guid>
		<description><![CDATA[Written by Russell Roberts
Sometimes I suspect Bill Gates doesn&#8217;t sleep so well at night. Not out of any guilt over his billions or the alleged mediocrity of his product. No, I wonder whether he might actually worry about the competition. Not Apple (though that iPod MP3 player is a killer toy, and I&#8217;m cheerfully typing [...]]]></description>
			<content:encoded><![CDATA[<p><span id="more-10"></span><em><span class="small">Written by Russell Roberts</span></em></p>
<p>Sometimes I suspect Bill Gates doesn&#8217;t sleep so well at night. Not out of any guilt over his billions or the alleged mediocrity of his product. No, I wonder whether he might actually worry about the competition. Not Apple (though that iPod MP3 player is a killer toy, and I&#8217;m cheerfully typing these words on an Apple (AAPL) PowerBook G4). No, I&#8217;ll bet Linux and its creator, Linus Torvalds, cross Gates&#8217;s mind when he&#8217;s looking up at the ceiling late at night.</p>
<p><!--more-->On the surface, Linus vs. Bill seems to be the ultimate David vs. Goliath contest. It appears to pit the man who cheerfully gives away his code against the guy who ruthlessly seeks every last penny for it. You&#8217;d expect Gates would squash Torvalds. Yet they have more in common than you might think. And the final score in their high-stakes rivalry could end up surprisingly close.</p>
<p><strong>MONEY VS. ALTRUISM.</strong> For starters, the two face a similar challenge. Even their big brains are puny compared to the wisdom and knowledge spread throughout their organizations. In Gates&#8217;s case, it&#8217;s a huge, publicly held company. In Torvalds&#8217; case, it&#8217;s a loosely connected but increasingly powerful network of software developers. Both men must find ways to motivate people to work together so knowledge can spread and have maximum impact on improving software quality.</p>
<p>Microsoft (MSFT) uses money to motivate. And no doubt about it, that&#8217;s a powerful incentive. But others exist. The community of Linux users and developers is held together by pride and the thrill of working toward a common goal of a universal, free (or at least relatively inexpensive), elegant, bug-free or bug-resistant alternative to Windows, the world&#8217;s dominant computer operating system.</p>
<p>Can the volunteers who work on improving Linux outperform employees dreaming of stock options? That&#8217;s not to say Microsoft employees are motivated only by money. They, too, take pride in their work. Disdaining monetary incentives entirely would seem to cripple Linux and reduce it to a charitable organization. But charities work wonders. They can build a religious community or raise a barn or build a habitat for a neighbor.</p>
<p>Look at the progress Gates&#8217;s personal foundation is making against malaria. Honda (HMC), I&#8217;m sure, would trounce the United Way&#8217;s attempts to design and build a car. But I wouldn&#8217;t necessarily expect Honda to do a good job at running a school for the blind. With some causes, passion and pride can outperform money.</p>
<p><strong>GEEK FERVOR.</strong> Designing software may be such a cause. A lot of people are passionate about creating an alternative to Windows. In some cases, the desire to see Windows&#8217; dominant position threatened is its own passion. As a 21-year-old living at home, Torvalds created Linux in 1991 in Finland. He offered it for free to the world and made the source code available to anyone who wanted to alter itâ€”as long as the tinkerer was willing to make the new additions available to the public as well. The result is a product embraced with religious fervor by the geek community and even penetrating the mainstream, running servers and other hardware.</p>
<p>Yet the rivalry is defined by more than motivation and incentives. Does Torvalds or Gates have more resources at his disposal? Gates, right? But that answer assumes that money is the most important asset. Even if money trumps idealism as a motivator, Torvalds has a bigger teamâ€”the millions who use Linux and continue to tinker with it. Potentially, he has more brainpower on his team.</p>
<p>Torvalds has another advantage. His organization is less organized than Microsoft. It&#8217;s really a disorganization. At Microsoft, Gates is the head honcho. Torvalds is just Linux&#8217; gatekeeper. He&#8217;s not really in controlâ€”he&#8217;s called the project leader, the guru. That may appear to be a disadvantage. But remember the problem that every organization&#8217;s leader faces: The team&#8217;s smartest member, even if he or she is nominally in control, is vastly more ignorant than the entire network of people who compose the organization.</p>
<p><strong>CREATIVE CHAOS.</strong> Being disorganized can actually leverage that knowledge more effectively than a command-and-control hierarchy. Innovation must rely on creativity generated by the mass of folks underneath. In a dynamic system, trial and error is a powerful force for change. A bottom-up system with a gatekeeper can be more innovative than the hierarchical system over which Gates reigns. It can generate a lot more trials, and a good gatekeeper can throw out the errors.</p>
<p>You would think being the head honcho allows Gates to plan. But Torvalds rightfully revels in not planning. He&#8217;s counting on the marketplace&#8217;s judgment of Linux and the wisdom of his disorganized organization as a better strategy. He may be right. And while Torvalds and Linux have recently faced legal issues about whether Linux might have some proprietary code embedded in it, that distraction is dwarfed by the time and energy Gates has devoted to battling the U.S. Justice Dept. That antitrust case clearly diverted resources away from innovation and making sure his organization was operating at top efficiency.</p>
<p>While Torvalds is a threat to Gates, Gates seems to be little or no threat to Torvalds. To hear Torvalds talk about it, he&#8217;s having fun as Linux&#8217; guardian. His challenge is merely that of being an effective shepherd to a vast flock of very creative, un-sheeplike sheep. Regardless of the marketplace&#8217;s final judgment, Torvalds probably sleeps a lot more soundly than Gates.</p>
<p>This article first appeared on the <a href="http://www.businessweek.com/technology/content/nov2003/tc20031119_9737.htm" target="_blank" _base_href="http://createtank.com/">Business Week</a> web site.</p>
<p>Reprinted with permission of the author <a href="http://www.invisibleheart.com/Iheart/EconomyLinux.html" target="_blank" _base_href="http://createtank.com/">Russell Roberts</a>.</p>
<p><em> </em></p>
<p><em>Russell Roberts<br />
Professor of Economics<br />
J. Fish and Lillian F. Smith Distinguished Scholar at the Mercatus Center<br />
Department of Economics<br />
4400 University Dr.<br />
MSN 3G4<br />
George Mason University<br />
Fairfax, VA.  22030<br />
</em></p>
<p><em><br />
<script language="JavaScript" type="text/javascript" _base_href="http://createtank.com/"> <!-- var prefix = \'&#109;a\' + \'i&#108;\' + \'&#116;o\'; var path = \'hr\' + \'ef\' + \'=\'; var addy21193 = \'r&#111;b&#101;rts\' + \'&#64;\' + \'gm&#117;\' + \'&#46;\' + \'&#101;d&#117;\'; document.write( \'<a \' + path + \'\\'\' + prefix + \':\' + addy21193 + \'\\'>\' + addy21193 + \'\' ); //--> </script> </em></p>
<p><em><a href="mailto:roberts@gmu.edu" _base_href="http://createtank.com/">roberts@gmu.edu</a><noscript>This email address is being protected from spam bots, you need Javascript enabled to view it</noscript><br />
<a href="http://www.invisibleheart.com/" target="_blank" _base_href="http://createtank.com/">http://www.invisibleheart.com</a><br />
</em></p>
<p><em>Research Fellow<br />
Hoover Institution<br />
Stanford University<br />
</em></p>
<p><em>Features Editor<br />
Library of Economics and Liberty<br />
<a href="http://www.econlib.org/" target="_blank" _base_href="http://createtank.com/">http://www.econlib.org</a> </em></p>
]]></content:encoded>
			<wfw:commentRss>http://createtank.com/2003/11/why-linux-is-wealthier-than-microsoft/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
