<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>InsideRIA</title>
<link rel="alternate" type="text/html" href="http://www.insideria.com/" />
<link rel="self" type="application/atom+xml" href="http://www.insideria.com/atom.xml" />
<id>tag:www.insideria.com,2008-01-28://34</id>
<updated>2008-01-28T17:26:27Z</updated>
<subtitle>InsideRIA.com is an online community developed by O’Reilly and sponsored by Adobe Systems Incorporated. Our goal is to create an invaluable resource for information on the ever-changing state of design and development of rich Internet applications (RIAs).</subtitle>
<generator uri="http://www.sixapart.com/movabletype/">Movable Type Publishing Platform 4.01</generator>

<entry>
<title>Anatomy of an Enterprise Flex RIA Part 2: Running the Sample Code</title>
<link rel="alternate" type="text/html" href="http://www.insideria.com/2008/01/running-the-sample-code-last.html" />
<id>tag:www.insideria.com,2008://34.22710</id>

<published>2008-01-28T13:00:00Z</published>
<updated>2008-01-28T17:26:27Z</updated>

<summary>In the last installment of our Development Series Anatomy of an Enterprise Flex RIA, we looked at the tools we&apos;ll be discussing in this series. Now we&apos;re going to look at the sample code that uses those tools as a way to show Flex working in an enterprise setting.  Ready to dig in?  We&apos;ve got sample code and full specs...</summary>
<author>
<name>Tony Hillerson</name>

</author>

<category term="Development" scheme="http://www.sixapart.com/ns/types#category" />

<category term="features" scheme="http://www.sixapart.com/ns/types#category" />

<category term="ejb30" label="ejb 3.0" scheme="http://www.sixapart.com/ns/types#tag" />
<category term="flex" label="flex" scheme="http://www.sixapart.com/ns/types#tag" />
<category term="livecycledataservices" label="livecycle data services" scheme="http://www.sixapart.com/ns/types#tag" />
<category term="maven" label="maven" scheme="http://www.sixapart.com/ns/types#tag" />

<content type="html" xml:lang="en" xml:base="http://www.insideria.com/">
<![CDATA[<div class="ap_r" style="margin: 16px;"><a href="http://www.insideria.com/upload/2008/01/running_the_sample_code_last/riaseries_part2.jpg" class="highslide" onclick="return hs.expand(this)"><img src="http://www.insideria.com/upload/2008/01/running_the_sample_code_last/riaseries_part2.jpg" alt="riaseries_part2.jpg" title="Click to enlarge" width="148"/></a></div><a href="http://www.insideria.com/2008/01/anatomy-of-an-enterprise-flex.html">Last installment</a> we looked at the tools we'll be discussing in this series. Now we're going to look at the sample code that uses those tools as a way to show Flex working in an enterprise setting.

<p>To run the sample code you need to do a little preparation:<br />
<ol><br />
<li>1. Create a database called <span class="yellowinlinecode"><em>bookie</em></span>. </li><br />
<li>2. Unzip <span class="yellowinlinecode"><em><a href="http://downloads.oreilly.com/digitalmedia/insideria/enterprise-flex-code.zip">enterprise-flex-code.zip</a></em></span> to a working directory.</li><br />
<li>3. Unzip <span class="yellowinlinecode"><em><a href="http://downloads.oreilly.com/digitalmedia/insideria/m2_repository.zip">m2_repository.zip</a></em></span> and copy the contents into <span class="yellowinlinecode"><em>${user.home}/.m2/repository</em></span>. </li></ol></p>

<p><br />
On a Mac, this should be in <span class="yellowinlinecode"><em>/Users/&lt;your username&gt;/.m2</em></span>. On Linux, this should be in <span class="yellowinlinecode"><em>/home/&lt;your username&gt;/.m2</em></span>. On Windows, this will be in <span class="yellowinlinecode"><em>C:\Documents and Settings\&lt;your username&gt;\.m2</em></span>.</p>

<p>Edit the properties files in the working directory for your system:</p>

<p>In <span class="yellowinlinecode"><project root>/development.properties</span>, change <span class="yellowinlinecode"><strong>jboss.deploy.dir</strong></span> to point to the deploy directory of your JBoss installation.In <span class="yellowinlinecode"><project root>/bookie-data edit jdbc.properties.mysql</span>, set the username, password, and any other database-specific information to match your system&#8217;s. In <span class="yellowinlinecode"><project root>/bookie-ui edit mxml.project.properties</span>, change the <span class="yellowinlinecode"><strong>flex.sdk.bin.dir</strong></span> to the directory containing the <span class="redinlinecode">mxmlc</span> compiler and <span class="yellowinlinecode">deploy.dir</span> to match <span class="yellowinlinecode">your jboss deploy directory/bookie.ear/bookie.war</span>.</p>

<p>Run maven build: At a command prompt in the root of your project, run <span class="redinlinecode">`mvn package`</span>.</p>

<p>Run ant deploy: At a command prompt in the root of your project, run <span class="redinlinecode">`ant dev-deploy`</span>.<br />
<ol><li>1. Start JBoss.</li><br />
<li>2. Point your browser at <span class="redinlinecode">http://localhost:8080/bookie</span>.</li><br />
<li>3. Log in with card number 123456.</li><br />
<li>4. Try out the application!</li></ol><br />
 <br />
<strong>Our Project: Bookie</strong></p>

<p><strong>Introducing Bookie</strong></p>

<p>Our project is for an imaginary online book reservation application called Bookie. This application will be a self-service system for a hypothetical library. It will allow a user to log in with a library card number, search for books, and reserve them online so that by the time she gets to the library, the books will be ready for her to pick up.</p>

<p>It also allows library administrators to add and update information regarding authors and their books. While they&#8217;re working, they&#8217;ll also see automated notifications of new book reservations so that they can be prepared when a user shows up to get the book she reserved.</p>

<p><strong>Use Cases</strong></p>

<p>A <span class="yellowinlinecode"><em>use case</em></span>, or <span class="yellowinlinecode"><em>user story</em></span>, as mentioned earlier, describes the functionality we want our application to offer users. A use case highlights the functionality we need to include in our application, not just as raw functionality but also as proposed solutions to problems that users would like to have solved. You can think of a use case as a story that describes the way the user will use the application. </p>

<p>For instance:</p>

<p>&#8220;The user enters his shipping information, including state, and the system calculates the tax for that state."</p>

<p>Use cases don&#8217;t make technical demands explicitly, such as what kind of database schema to use or which language to use, nor do they use jargon or technical terms.</p>

<p>Table 1 and Table 2 list the use cases for Bookie. We&#8217;ll make them simple and condensed&#8212;simpler than they would be &#8220;in the wild"; just the titles, really. We have use cases that discuss both user and administrator stories.</p>

<table width="430"><tr><th scope="col" colspan="2" style="font-size: 11px; font-weight: bold; color: #525252; border: 1px solid #d7d7d7; letter-spacing: 2px;text-transform: uppercase; text-align: left; padding: 6px 6px 6px 12px; background-color: #f2f2f2;">Table 1: user Use Cases </th></tr><tr><th scope="col" style="font-size: 11px; font-weight: bold; color: #525252; border: 1px solid #d7d7d7; letter-spacing: 2px; text-transform: uppercase; text-align: left; padding: 6px 6px 6px 12px; background-color: #f2f2f2;">USE CASE NAME </th><th scope="col" style="font-size: 11px; font-weight: bold; color: #525252; border: 1px solid #d7d7d7; letter-spacing: 2px;text-transform: uppercase; text-align: left; padding: 6px 6px 6px 12px; background-color: #f2f2f2;">DESCRIPTION</th></tr><tr><td valign="top" style="width: 40%; border: 1px solid #d7d7d7; background: #fff; padding: 6px 6px 6px 12px; color: #525252;"> Sign In</td><td valign="top" style="width: 60%; border: 1px solid #d7d7d7; background: #fff; padding: 6px 6px 6px 12px; color: #525252;">Users will sign in to the application with their library card number. This is all the authentication we&#8217;ll do in this simple application, but it will be enough to identify a user against whom we can save data in the database.</td></tr><tr><td valign="top" style="border: 1px solid #d7d7d7; background: #fff; padding: 6px 6px 6px 12px; color: #525252;">Find by Author</td><td valign="top" style="border: 1px solid #d7d7d7; background: #fff; padding: 6px 6px 6px 12px; color: #525252;">The user will be able to find all the books by a certain author.</td></tr><tr><td valign="top" style="border: 1px solid #d7d7d7; background: #fff; padding: 6px 6px 6px 12px; color: #525252;">Find by Subject</td><td valign="top" style="border: 1px solid #d7d7d7; background: #fff; padding: 6px 6px 6px 12px; color: #525252;">The user will be able to find all the books under a certain subject.</td></tr><tr><td valign="top" style="border-left: 1px solid #d7d7d7;border: 1px solid #d7d7d7; background: #fff; padding: 6px 6px 6px 12px; color: #525252;">Find by Title </td><td valign="top" style="border: 1px solid #d7d7d7; background: #fff; padding: 6px 6px 6px 12px; color: #525252;">The user will be able to search for books by the book&rsquo;s title.</td></tr><tr><td valign="top" style="border: 1px solid #d7d7d7; background: #fff; padding: 6px 6px 6px 12px; color: #525252;">Browse Authors </td><td valign="top" style="border: 1px solid #d7d7d7; background: #fff; padding: 6px 6px 6px 12px; color: #525252;">The user can browse a list of all authors.</td></tr><tr><td valign="top" style="border-left: 1px solid #d7d7d7;border: 1px solid #d7d7d7; background: #fff; padding: 6px 6px 6px 12px; color: #525252;"> Browse Titles</td><td valign="top" style="border: 1px solid #d7d7d7; background: #fff; padding: 6px 6px 6px 12px; color: #525252;">The user can browse a list of all titles.</td></tr><tr><td valign="top" style="border: 1px solid #d7d7d7; background: #fff; padding: 6px 6px 6px 12px; color: #525252;">Browse Subjects </td><td valign="top" style="border: 1px solid #d7d7d7; background: #fff; padding: 6px 6px 6px 12px; color: #525252;">The user can browse a list of all subjects.</td></tr><tr><td valign="top" style="border: 1px solid #d7d7d7; background: #fff; padding: 6px 6px 6px 12px; color: #525252;">Find Author </td><td valign="top" style="border: 1px solid #d7d7d7; background: #fff; padding: 6px 6px 6px 12px; color: #525252;">The user can search for a specific author by name.</td></tr><tr><td valign="top" style="border: 1px solid #d7d7d7; background: #fff; padding: 6px 6px 6px 12px; color: #525252;">Find Subject </td><td valign="top" style="border: 1px solid #d7d7d7; background: #fff; padding: 6px 6px 6px 12px; color: #525252;">The user can search for a subject by name.</td></tr></table><br  /><table width="430"><tr><th scope="col" colspan="2" style="font-size: 11px; font-weight: bold; color: #525252; border: 1px solid #d7d7d7; letter-spacing: 2px;text-transform: uppercase; text-align: left; padding: 6px 6px 6px 12px; background-color: #f2f2f2;">Table 2: administrator Use Cases </th></tr><tr><th scope="col" style="font-size: 11px; font-weight: bold; color: #525252; border: 1px solid #d7d7d7; letter-spacing: 2px;text-transform: uppercase; text-align: left; padding: 6px 6px 6px 12px; background-color: #f2f2f2;">USE CASE NAME </th><th scope="col" style="font-size: 11px; font-weight: bold; color: #525252; border: 1px solid #d7d7d7; letter-spacing: 2px;text-transform: uppercase; text-align: left; padding: 6px 6px 6px 12px; background-color: #f2f2f2;">DESCRIPTION</th></tr><tr><td valign="top" style="width: 40%; border: 1px solid #d7d7d7; background: #fff; padding: 6px 6px 6px 12px; color: #525252;">Create, Update, Delete Subjects </td><td valign="top" style="width: 60%; border: 1px solid #d7d7d7; background: #fff; padding: 6px 6px 6px 12px; color: #525252;">Administrators can manage all the subjects in the system.</td></tr><tr><td valign="top" style="border: 1px solid #d7d7d7; background: #fff; padding: 6px 6px 6px 12px; color: #525252;">Create, Update, Delete Books </td><td valign="top" style="border: 1px solid #d7d7d7; background: #fff; padding: 6px 6px 6px 12px; color: #525252;">Administrators can manage all the books in the system. This includes assigning the book, author, and subject.</td></tr><tr><td valign="top" style="border: 1px solid #d7d7d7; background: #fff; padding: 6px 6px 6px 12px; color: #525252;">Create, Update, Delete Authors </td><td valign="top" style="border: 1px solid #d7d7d7; background: #fff; padding: 6px 6px 6px 12px; color: #525252;">Administrators can manage all the authors in the system.</td></tr><tr><td valign="top" style="border-left: 1px solid #d7d7d7;border: 1px solid #d7d7d7; background: #fff; padding: 6px 6px 6px 12px; color: #525252;">Create, Update, Delete Users </td><td valign="top" style="border: 1px solid #d7d7d7; background: #fff; padding: 6px 6px 6px 12px; color: #525252;">Administrators can manage all the users in the system.</td></tr><tr><td valign="top" style="border: 1px solid #d7d7d7; background: #fff; padding: 6px 6px 6px 12px; color: #525252;">Check Books Out </td><td valign="top" style="border: 1px solid #d7d7d7; background: #fff; padding: 6px 6px 6px 12px; color: #525252;">Administrators can manage the outstanding reservations and mark them checked out as they&rsquo;re picked up.</td></tr><tr><td valign="top" style="border-left: 1px solid #d7d7d7;border: 1px solid #d7d7d7; background: #fff; padding: 6px 6px 6px 12px; color: #525252;"> Check Books In </td><td valign="top" style="border: 1px solid #d7d7d7; background: #fff; padding: 6px 6px 6px 12px; color: #525252;">Administrators can manage a list of checked out books, and check them in as they&rsquo;re dropped off.</td></tr></table>

<p><br />
This is a nice, small project with just a few use cases, which should let us get a sense of the process and use the tools we&#8217;ve learned without dealing with a lot of technical details. Each section that follows discusses a &#8220;layer" of the application. The layers build from the database to the data model to the service interaction to the user interface of the application, giving you a chance to study the technology used at each layer.</p>

<p>Next installment we'll start to break the project down and show how we'll use Maven to automate the process of building the project's code.  You can always find the entire series <a href="http://www.insideria.com/series-anatomy-flex.html">here</a>.</p>]]>

</content>
</entry>

<entry>
<title>Anatomy of an Enterprise Flex RIA Part 1: The Tools You&#8217;ll Want</title>
<link rel="alternate" type="text/html" href="http://www.insideria.com/2008/01/anatomy-of-an-enterprise-flex.html" />
<id>tag:blogs.oreilly.com,2008:/insideria//34.22660</id>

<published>2008-01-15T15:19:29Z</published>
<updated>2008-01-28T10:51:05Z</updated>

<summary>In this series, we&#8217;ll look at a small application that integrates the technologies of LCDS and EJB 3.0, and we&#8217;ll cover some timesaving tools as well as discuss how to use them to achieve a lightweight development environment for integrating an RIA with an enterprise environment.   Ready to get started?  First, a look at the tools a developer needs to follow along at home&#133;</summary>
<author>
<name>Tony Hillerson</name>

</author>

<category term="Development" scheme="http://www.sixapart.com/ns/types#category" />

<category term="features" scheme="http://www.sixapart.com/ns/types#category" />

<category term="flex" label="flex" scheme="http://www.sixapart.com/ns/types#tag" />
<category term="howto" label="how-to" scheme="http://www.sixapart.com/ns/types#tag" />
<category term="livecycledataservices" label="livecycle data services" scheme="http://www.sixapart.com/ns/types#tag" />
<category term="maven" label="maven" scheme="http://www.sixapart.com/ns/types#tag" />

<content type="html" xml:lang="en" xml:base="http://www.insideria.com/">
<![CDATA[<div class="ap_r" style="margin: 16px;"><a href="http://www.insideria.com/upload/2008/01/anatomy_of_an_enterprise_flex/riaseries_part1.jpg" class="highslide" onclick="return hs.expand(this)"><img src="http://www.insideria.com/upload/2008/01/anatomy_of_an_enterprise_flex/riaseries_part1.jpg" alt="riaseries_part1.jpg" title="Click to enlarge" width="148"/></a></div>In this installment of the series Anatomy of an Enterprise Flex RIA we're doing a little grunt work and installing some tools we'll be using later. Download them and read up a bit on what they do. These tools are some common &#8220;enterprise software&#8221; development tools that we'll need to get the example software up and running.

<p>In this series, we&#8217;ll look at a small application that integrates the technologies of LCDS and EJB 3.0, and we&#8217;ll cover some timesaving tools as well as discuss how to use them to achieve a lightweight development environment for integrating an RIA with an enterprise environment.   Ready to get started?  </p>

<p><br />
<strong>Tools</strong></p>

<p>In this section, I&#8217;ll list the tools we&#8217;ll be using. Follow along and install them (or the listed alternatives) if you don&#8217;t have them already.</p>

<p><br />
<strong>MySQL</strong></p>

<p>MySQL is an open source, cross-platform, enterprise-quality, database server. I suggest that you use MySQL as your database server for these examples, although you can use another one if you prefer.</p>

<p>To install MySQL, go to <span class="redinlinecode"><a href="http://dev.mysql.com/downloads/mysql/" target="_blank">http://dev.mysql.com/downloads/mysql/</a></span>, download, and follow the instructions there. A few additional tools you may want are available at <span class="redinlinecode"><a href="http://dev.mysql.com/downloads/gui-tools/" target="_blank">http://dev.mysql.com/downloads/gui-tools/</a></span>.</p>

<p><br />
<strong>Java</strong></p>

<p>Java is a language and platform tailored to writing business applications. It was the first popular object-oriented language to gain almost ubiquitous support in the business community because of its powerful platform features, its virtual machine approach to platform independence, and its relatively easy-to-learn C-like syntax. Java is a prerequisite of most of these other tools.</p>

<p>To install Java go to <span class="redinlinecode"><a href="http://www.java.com/en/download/" target="_blank">http://www.java.com/en/download/</a></span>, download, and follow the instructions there for your platform. Make sure Java is in your path by typing <span class="redinlinecode">`java -version`</span> at a command line.</p>

<p><br />
<strong>Ant</strong></p>

<p>Ant is a Java-based build and automation tool. With Ant, it&#8217;s easy to quickly describe a set of tasks that perform such jobs as compilation, system execution, or simply copying or moving of files on the system.<br />
To install Ant go to http://ant.apache.org/, download, and follow the site&#8217;s instructions for your platform. Make sure you follow the instructions to put Ant in your path. Test by calling <span class="redinlinecode">`ant -version`</span>.</p>

<p><br />
<strong>Maven</strong></p>

<p>Maven is like Ant in some ways, but with a lot of other features and some philosophy thrown in. Maven&#8217;s creators felt that projects have many aspects which make them the same from a build process perspective; therefore, why should you have to write common tasks or processes every time you start a new project? Maven is a build process management tool, not just a tool for automating a build. Maven is also a code project management tool, and it has some good ideas about how our project should be structured.</p>

<p>Maven also has a good dependency management system for Java. That means all you have to do is list which JARs your project depends on, and Maven will find those JARs online, as well as any dependencies those JARs have. All of those will be available at compile time and, if needed, will be packaged with any artifacts your project produces.</p>

<p>Maven does a lot of what we need, but for some specific tasks, we&#8217;ll use Ant to quickly script parts of the process as well. Luckily, it&#8217;s easy to extend Maven with Ant.</p>

<p>To install Maven go to <span class="redinlinecode"><a href="http://maven.apache.org/download.html" target="_blank">http://maven.apache.org/download.html</a></span>, download, and follow the site&#8217;s instructions for your platform. Make sure Maven is in your path, and test by calling <span class="redinlinecode">`mvn -v`</span> from a command line.</p>

<p><br />
<strong>DDLUtils and DBUnit</strong></p>

<p>We will use DDLUtils and DBUnit to help us manage the structure of our database, as well as the data it contains. DDLUtils is a project that will let us define our database schema in a database-agnostic form, and automate the updates to the schema across our team as part of the build process.</p>

<p>DBUnit is a test framework for data. It will allow us to define data sets in XML, load them during testing, and make sure the data ends up in our process where we think it should be.<br />
DBUnit will be fetched by Maven. </p>

<p>The DDLUtils libraries are included with the Maven library package.</p>

<p><br />
<strong>TestNG</strong></p>

<p>TestNG is a Java test framework. It will allow us to write unit tests for the Java code we&#8217;re going to write.</p>

<p>Maven will also fetch TestNG for us. Why, thanks, Maven!</p>

<p><br />
<strong>EJB 3.0</strong> </p>

<p>EJB 3.0 is one of the stars of our project. It&#8217;s going to let us persist Java objects to the database quickly and easily with a minimum of configuration.</p>

<p>The EJB 3.0 libraries are included with the Maven library package.</p>

<p><br />
<strong>JBoss and Embedded JBoss</strong></p>

<p>JBoss is an open source J2EE application server that supports the EJB 3.0 spec. We&#8217;ll also use a JBoss project, called Embedded JBoss, to run the persistence tests without having to run them in the server along with the extra hassle that causes.</p>

<p>To install JBoss go to <span class="redinlinecode"><a href="http://labs.jboss.com/jbossas/downloads" target="_blank">http://labs.jboss.com/jbossas/downloads</a></span>, download, and follow the site&#8217;s instructions for your platform. </p>

<p>The Embedded JBoss libraries are under the source code installation instructions.</p>

<p><br />
<strong>Eclipse and Flex Builder</strong></p>

<p>Eclipse is an industry-standard IDE platform that offers powerful Java development features. Adobe&#8217;s Flex Builder is a plug-in for the platform, and it is the easiest way to develop with Flex. It&#8217;s not required, though, because the Flex SDK has command-line tools for compiling Flex. We&#8217;ll discuss developing with both, using Ant and Maven to automate the compilation of Flex resources.</p>

<p>To install Eclipse go to <span class="redinlinecode"><a href="http://www.eclipse.org/downloads/ " target="_blank">http://www.eclipse.org/downloads/ </a></span> and get the latest Eclipse SDK, not a bundle. Download and follow the site&#8217;s instructions for your platform.</p>

<p>To install Flex Builder (a 30-day trial), go to <span class="redinlinecode"><a href="http://www.adobe.com/products/flex/flexbuilder/ " target="_blank">http://www.adobe.com/products/flex/flexbuilder/ </a></span> and follow the instructions to download, then follow the instructions to install the Flex Builder plug-in, not the standalone version. This will allow you to work with Flex alongside Java.</p>

<p><br />
<strong>Flex</strong></p>

<p>The other star of our project, Flex is a declarative language for Flash interface design. In my opinion, it is the language and platform that offer the best balance between power, ease of use, and platform independence for developing RIAs.</p>

<p>You don&#8217;t need the SDK if you have Flex Builder installed. If you don&#8217;t have Flex Builder, go to <span class="redinlinecode"><a href="http://www.adobe.com/products/flex/sdk/" target="_blank">http://www.adobe.com/products/flex/sdk/</a></span>, follow the download and installation instructions, and test by calling <span class="redinlinecode">`mxmlc --version`</span> from a command line. </p>

<p><br />
<strong>LiveCycle Data Services</strong></p>

<p>LCDS is a Java and Flex library that works with a J2EE application to provide Flex with a powerful and easy way to connect to and communicate with an enterprise system. It provides services such as data management, which allows Flex to automatically send changes to data on the frontend to the backend for possible persistence; conflict management, to govern and help synchronize changes from occasionally connected clients; and support for connecting to document services provided by LCDS.</p>

<p>The LCDS libraries are available in the Maven library package.</p>

<p><br />
<strong>Cairngorm</strong></p>

<p>Cairngorm is the hard-to-pronounce but easy-to-use micro-framework for Flex. Cairngorm provides a number of patterns to help architect your Flex application in a manner that promotes modularity and a standard application design. When a developer is familiar with Cairngorm, it&#8217;s easy for him to come up to speed on any other Cairngorm project. The modularity also makes it easy for a team to work on Flex projects together.</p>

<p>Cairngorm is included with the source code for the sample application.</p>

<p><br />
<strong>Cairngen</strong></p>

<p>Cairngorm has been accused of being verbose by some. Each command requires an event class, a command class, and a modification of the controller class. I think Cairngorm is hardly verbose compared to, say, EJB 2.1, but it is tedious to build all those classes by hand, especially if you&#8217;re doing a lot of commands at once, as you will in the beginning of a project. A code generator such as Eric Feminella&#8217;s Cairngen (<span class="redinlinecode"><a href="http://www.ericfeminella.com/blog/cairngen/" target="_blank">http://www.ericfeminella.com/blog/cairngen/</a></span>) is an easy way to cut down on the tedium. </p>

<p>Cairngen is included with the sample application.</p>

<p><br />
<strong>FlexUnit and FlexUnit Ant Tasks</strong></p>

<p>FlexUnit is a test framework for Flex, available at <span class="redinlinecode"><a href="http://code.google.com/p/as3flexunitlib/" target="_blank">http://code.google.com/p/as3flexunitlib/</a></span>. Peter Martin of Adobe Consulting has some <span class="redinlinecode"><a href="http://weblogs.macromedia.com/pmartin/archives/2006/06/new_flexunit_an.cfm" target="_blank">Ant tasks</a></span> that make it possible to run FlexUnit tests with Ant, provided there&#8217;s a way to run a <span class="yellowinlinecode">.swf</span> file from the command line, such as with a browser. We&#8217;ll use the Ant tasks to run FlexUnit tests during the test phase of the sample project&#8217;s Maven build.</p>

<p>FlexUnit is included with the source code, and the Ant tasks library is available with the Maven library package.</p>

<p><a href="http://www.insideria.com/2008/01/running-the-sample-code-last.html">In the next installment</a>  we'll have a look at the sample code we'll be covering throughout this series.  You can always find the entire series <a href="http://www.insideria.com/series-anatomy-flex.html">here</a>.</p>]]>

</content>
</entry>

</feed>