<?xml version="1.0" encoding="utf-8"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="en">
<title>Peter Martin</title>
<link rel="alternate" type="text/html" href="http://weblogs.macromedia.com/pmartin/" />
<modified>2008-07-31T18:13:17Z</modified>
<tagline></tagline>
<id>tag:weblogs.macromedia.com,2008:/pmartin//64</id>
<generator url="http://www.movabletype.org/" version="3.16">Movable Type</generator>
<copyright>Copyright (c) 2008, pmartin</copyright>
<entry>
<title>*New* FlexAntTask - fails build if test suite doesn&apos;t execute</title>
<link rel="alternate" type="text/html" href="http://weblogs.macromedia.com/pmartin/archives/2008/07/new_flexanttask.html" />
<modified>2008-07-31T18:13:17Z</modified>
<issued>2008-07-31T18:07:21Z</issued>
<id>tag:weblogs.macromedia.com,2008:/pmartin//64.15035</id>
<created>2008-07-31T18:07:21Z</created>
<summary type="text/plain">The FlexAntTask will now fail the build if there is an error executing the test suite e.g. a socket timeout. In the past the error was swallowed as the server socket runs in a separate thread - any errors are...</summary>
<author>
<name>pmartin</name>
<url>http://weblogs.macromedia.com/pmartin</url>
<email>pmartin@adobe.com</email>
</author>
<dc:subject>Tooling</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.macromedia.com/pmartin/">
<![CDATA[<p>The FlexAntTask will now fail the build if there is an error executing the test suite e.g. a socket timeout. In the past the error was swallowed as the server socket runs in a separate thread - any errors are now passed back to the task and re-thrown.</p>

<h2>Binary distribution </h2>
<ul>
  <li><a href="http://weblogs.macromedia.com/pmartin/tooling/flexunit/FlexAntTasks.jar">FlexAntTasks.jar</a></li>
  <li><a href="http://weblogs.macromedia.com/pmartin/tooling/flexunit/FlexUnitOptional.swc">FlexUnitOptional.swc</a></li>
</ul>
<p>&nbsp;</p>
<h2>Source Distribution</h2>
<ul>
  <li><a href="http://weblogs.macromedia.com/pmartin/tooling/flexunit/FlexAntTasks-src.zip">FlexAntTasks.zip</a></li>
  <li><a href="http://weblogs.macromedia.com/pmartin/tooling/flexunit/FlexUnitOptional.zip">FlexUnitOptional.zip</a></li>
</ul>
<p>&nbsp;</p>
<h2>Example Project</h2>
<ul>
  <li><a href="http://weblogs.macromedia.com/pmartin/tooling/flexunit/FlexUnitExample.zip">FlexUnitExample.zip</a></li>
</ul>
<p>&nbsp;</p>
<h2>Ant Task Parameters </h2>
<table width="477" border="1">
  <tr>
    <th width="95" scope="col"><div align="left">Attribute</div></th>
    <th width="298" scope="col"><div align="left">Description</div></th>
    <th width="62" scope="col">Required</th>
  </tr>
  <tr>
    <td>swf</td>
    <td>The name of <span class="caps">SWF </span>containing the tests to execute. </td>
    <td>Yes</td>
  </tr>
  <tr>
    <td>port</td>
    <td>The port to receive the test results on from FlexUnit. The default port is 1024. </td>
    <td>No</td>
  </tr>
  <tr>
    <td>timeout</td>
    <td>The time in milliseconds to wait for  results from FlexUnit before stopping the building process. The default is 60 seconds. You need to allow enought time for your tests to run as the socket is opended prior to the test execution. </td>
    <td valign="top">No</td>
  </tr>
  <tr>
    <td>toDir</td>
    <td>The output directory for the test resutlts. The default is the working directory. </td>
    <td>No</td>
  </tr>
  <tr>
    <td>haltonfailure</td>
    <td>Stop the build process if a test fails. The default is true. </td>
    <td>No</td>
  </tr>
  <tr>
    <td>failureproperty</td>
    <td>The name of the property to set in the event of a failure. The default is 'flexunit.failed''. </td>
    <td>No</td>
  </tr>
  <tr>
    <td>verbose</td>
    <td>Causes the flexunit tasks to print status messages. The default is false. </td>
    <td>No</td>
  </tr>
</table>]]>

</content>
</entry>
<entry>
<title>Delivery of a Mission-Critical RIA for NATO</title>
<link rel="alternate" type="text/html" href="http://weblogs.macromedia.com/pmartin/archives/2008/07/delivery_of_a_m.html" />
<modified>2008-07-29T20:50:33Z</modified>
<issued>2008-07-23T16:07:34Z</issued>
<id>tag:weblogs.macromedia.com,2008:/pmartin//64.15019</id>
<created>2008-07-23T16:07:34Z</created>
<summary type="text/plain">At MAX 2008 North America I will co-presenting Delivery of a Mission-Critical RIA for NATO with Mansour Raad of ESRI. We will presenting on Tuesday @ 4:30PM in Moscone West 2011 so come along and see us. The session will...</summary>
<author>
<name>pmartin</name>
<url>http://weblogs.macromedia.com/pmartin</url>
<email>pmartin@adobe.com</email>
</author>

<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.macromedia.com/pmartin/">
<![CDATA[<p>At <span class="caps">MAX</span> 2008 North America I will co-presenting <strong><a href="http://max.adobe.com/na/sessions/browser/#548">Delivery of a Mission-Critical <span class="caps">RIA </span>for <span class="caps">NATO</span></a></strong> with <a href="http://thunderheadxpler.blogspot.com/">Mansour Raad</a> of <span class="caps">ESRI.</span></p>

<p>We will presenting on Tuesday @ 4:30PM in Moscone West 2011 so come along and see us.</p>

<p>The session will take a look at a mission critical application developed for the <a href="http://www.e3a.nato.int/"><span class="caps">NATO</span> E-3a Component</a> to plan missions flown by their <span class="caps">AWAC </span>aircraft.</p>

<p>The <span class="caps">MSS </span>application has been developed using Flex 3 and LiveCycle Data Services and makes heavy use of Data Management Services, which enables users to collaborate on mission planning.</p>

<p>A key element of the <span class="caps">MSS </span>application is the world map, which allows users to visualize and work with geo-spatial data. The map has been developed using <a href="http://api.arcwebservices.com/devguide/awx/v4/index_Left.htm#StartTopic=flex/getting_started.htm#|SkinName=aws"><span class="caps">ESRI'</span>s <span class="caps">AWX</span> Flex <span class="caps">API</span></a>. The map is driven using managed data so a change to a geo object is immediately pushed to all users currently working with that geo object!</p>

<p>During the session will take an extensive look at the application and how it has been engineered using <span class="caps">AWX </span>and LiveCycle Data Services.</p>]]>

</content>
</entry>
<entry>
<title>Scotch on the Rocks: Introduction to Data Mangement</title>
<link rel="alternate" type="text/html" href="http://weblogs.macromedia.com/pmartin/archives/2008/06/scotch_on_the_r.html" />
<modified>2008-06-05T08:52:59Z</modified>
<issued>2008-06-04T20:39:15Z</issued>
<id>tag:weblogs.macromedia.com,2008:/pmartin//64.14962</id>
<created>2008-06-04T20:39:15Z</created>
<summary type="text/plain">Today I spoke at Scotch on the Rocks. My presentation provided an introduction to Data Management. You can download my slides from here and the demo app from here. The demo provides 5 applications: Main - vanilla DataMangement application -...</summary>
<author>
<name>pmartin</name>
<url>http://weblogs.macromedia.com/pmartin</url>
<email>pmartin@adobe.com</email>
</author>
<dc:subject>LC DS</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.macromedia.com/pmartin/">
<![CDATA[<p>Today I spoke at Scotch on the Rocks. My presentation provided an introduction to Data Management. You can download my slides from <a href="http://weblogs.macromedia.com/pmartin/scotch08/Scotch08.pdf">here</a> and the demo app from <a href="http://weblogs.macromedia.com/pmartin/scotch08/Scotch08.zip">here</a>.</p>

<p>The demo provides 5 applications:</p>

<p>Main - vanilla DataMangement application - it doesn't get any simpler than this :)<br />
Main1 - adds autoCommit="false" and revertChanges()<br />
Main2 - adds createItem()<br />
Main3 - adds deleteItem()<br />
Main4 - adds conflict handling</p>

<p>Thanks to everyone who attended.</p>]]>

</content>
</entry>
<entry>
<title>FlexUnit for Ant now supports Mac OS X</title>
<link rel="alternate" type="text/html" href="http://weblogs.macromedia.com/pmartin/archives/2007/09/flexunit_for_an_2.html" />
<modified>2007-09-27T21:47:34Z</modified>
<issued>2007-09-27T21:45:31Z</issued>
<id>tag:weblogs.macromedia.com,2007:/pmartin//64.14343</id>
<created>2007-09-27T21:45:31Z</created>
<summary type="text/plain">A big thank you to Tom Sugden who has added support for Mac OS X. For more details on how to use FlexUnit for Ant please see my earlier blog. There is also documentation on the flexunit Ant task parameters...</summary>
<author>
<name>pmartin</name>
<url>http://weblogs.macromedia.com/pmartin</url>
<email>pmartin@adobe.com</email>
</author>
<dc:subject>Tooling</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.macromedia.com/pmartin/">
<![CDATA[<p>A big thank you to Tom Sugden who has added support for Mac OS X.</p>
<p>For more details on how to use FlexUnit for Ant please see my earlier <a href="http://weblogs.macromedia.com/pmartin/archives/2006/06/flexunit_ant.cfm" target="_blank">blog</a>. There is also documentation on the flexunit Ant task parameters at the end of this blog. You can <a href="http://labs.adobe.com/wiki/index.php/ActionScript_3:resources:apis:libraries#FlexUnit" target="_blank">download</a> FlexUnit from Adobe Labs.</p>]]>
<![CDATA[<h2>Binary distribution </h2>
<ul>
  <li><a href="http://weblogs.macromedia.com/pmartin/tooling/flexunit/FlexAntTasks.jar">FlexAntTasks.jar</a></li>
  <li><a href="http://weblogs.macromedia.com/pmartin/tooling/flexunit/FlexUnitOptional.swc">FlexUnitOptional.swc</a></li>
</ul>
<p>&nbsp;</p>
<h2>Source Distribution</h2>
<ul>
  <li><a href="http://weblogs.macromedia.com/pmartin/tooling/flexunit/FlexAntTasks.zip">FlexAntTasks.zip</a></li>
  <li><a href="http://weblogs.macromedia.com/pmartin/tooling/flexunit/FlexUnitOptional.zip">FlexUnitOptional.zip</a></li>
</ul>
<p>&nbsp;</p>
<h2>Example Project</h2>
<ul>
  <li><a href="http://weblogs.macromedia.com/pmartin/tooling/flexunit/FlexUnitExample.zip">FlexUnitExample.zip</a></li>
</ul>
<p>&nbsp;</p>
<h2>Ant Task Parameters </h2>
<table width="477" border="1">
  <tr>
    <th width="95" scope="col"><div align="left">Attribute</div></th>
    <th width="298" scope="col"><div align="left">Description</div></th>
    <th width="62" scope="col">Required</th>
  </tr>
  <tr>
    <td>swf</td>
    <td>The name of <span class="caps">SWF </span>containing the tests to execute. </td>
    <td>Yes</td>
  </tr>
  <tr>
    <td>port</td>
    <td>The port to receive the test results on from FlexUnit. The default port is 1024. </td>
    <td>No</td>
  </tr>
  <tr>
    <td>timeout</td>
    <td>The time in milliseconds to wait for  results from FlexUnit before stopping the building process. The default is 60 seconds. You need to allow enought time for your tests to run as the socket is opended prior to the test execution. </td>
    <td valign="top">No</td>
  </tr>
  <tr>
    <td>toDir</td>
    <td>The output directory for the test resutlts. The default is the working directory. </td>
    <td>No</td>
  </tr>
  <tr>
    <td>haltonfailure</td>
    <td>Stop the build process if a test fails. The default is true. </td>
    <td>No</td>
  </tr>
  <tr>
    <td>failureproperty</td>
    <td>The name of the property to set in the event of a failure. The default is 'flexunit.failed''. </td>
    <td>No</td>
  </tr>
  <tr>
    <td>verbose</td>
    <td>Causes the flexunit tasks to print status messages. The default is false. </td>
    <td>No</td>
  </tr>
</table>]]>
</content>
</entry>
<entry>
<title>MAXchalking on Client-side Data Modelling in Flex with Data Management Services</title>
<link rel="alternate" type="text/html" href="http://weblogs.macromedia.com/pmartin/archives/2007/09/maxchalking_on.html" />
<modified>2007-09-27T21:14:57Z</modified>
<issued>2007-09-27T21:10:42Z</issued>
<id>tag:weblogs.macromedia.com,2007:/pmartin//64.14342</id>
<created>2007-09-27T21:10:42Z</created>
<summary type="text/plain">At MAX myself an Tom Sugden will be doing a &quot;chalk-and-talk&quot; session. The &quot;chalking&quot; will last for 10-20 minutes. During this time we hope to bang a few heads together to help us answer three questions we have with the...</summary>
<author>
<name>pmartin</name>
<url>http://weblogs.macromedia.com/pmartin</url>
<email>pmartin@adobe.com</email>
</author>
<dc:subject>MAX 2007</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.macromedia.com/pmartin/">
<![CDATA[<p>At <span class="caps">MAX </span>myself an Tom Sugden will be doing a "<a href="http://weblogs.macromedia.com/swebster/archives/2007/09/acmax_chalk_and.cfm">chalk-and-talk</a>" session. The "chalking" will last for 10-20 minutes. During this time we hope to bang a few heads together to help us answer three questions we have with the design of our client-side model.</p>
<p>We will start by providing you with some context, not much mind you as the clock is ticking. We will quickly move to draw up our design pattern for the managed-model and talk you through the problems it solves.</p>]]>

</content>
</entry>
<entry>
<title>AC will be lurking in the corridors of MAX</title>
<link rel="alternate" type="text/html" href="http://weblogs.macromedia.com/pmartin/archives/2007/09/ac_will_be_lurk.html" />
<modified>2007-09-27T20:26:21Z</modified>
<issued>2007-09-27T20:00:02Z</issued>
<id>tag:weblogs.macromedia.com,2007:/pmartin//64.14341</id>
<created>2007-09-27T20:00:02Z</created>
<summary type="text/plain">Adobe Consulting will be holding a series of &quot;chalk and talk&quot; sessions at MAX this year. These include: Client-side Data Modelling in Flex with Data Management Services with Peter Martin and Tom Sugden eForms architectures with Venkata Adidam and Herve...</summary>
<author>
<name>pmartin</name>
<url>http://weblogs.macromedia.com/pmartin</url>
<email>pmartin@adobe.com</email>
</author>
<dc:subject>MAX 2007</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.macromedia.com/pmartin/">
<![CDATA[<p>Adobe Consulting will be holding a series of "<a href="http://weblogs.macromedia.com/swebster/archives/2007/09/acmax_chalk_and.cfm">chalk and talk</a>" sessions at <span class="caps">MAX </span>this year. These include:</p>
<ul>
  <li><a href="http://weblogs.macromedia.com/swebster/archives/2007/09/acmax_chalk_and_4.cfm">Client-side Data Modelling in Flex with Data Management Services</a> with Peter Martin and Tom Sugden</li>
  <li><a href="http://weblogs.macromedia.com/swebster/archives/2007/09/acmax_chalk_and_3.cfm">eForms architectures</a> with Venkata Adidam and Herve Dupriez</li>
  <li><a href="http://weblogs.macromedia.com/swebster/archives/2007/09/acmax_chalk_and_2.cfm">Combining Flex and LiveCycle ES</a> with Danny Saikaly</li>
  <li><a href="http://weblogs.macromedia.com/swebster/archives/2007/09/acmax_chalk_and_1.cfm">LiveCycle Data Services</a> with Brian <span class="caps">O'C</span>onnor</li>
</ul>
<p>The idea behind "chalk and talk" is to reflect what goes on in the "war room" of any project, when the developers gather around the whiteboard to discuss their ideas on how the software will be designed. I am sure these sessions will be fun and informal and gives us all the opportunity to put our ideas forward.</p>]]>

</content>
</entry>
<entry>
<title>I am bitterly disappointed with MAX</title>
<link rel="alternate" type="text/html" href="http://weblogs.macromedia.com/pmartin/archives/2007/09/i_am_bitterly_d.html" />
<modified>2007-09-27T20:01:40Z</modified>
<issued>2007-09-26T22:51:47Z</issued>
<id>tag:weblogs.macromedia.com,2007:/pmartin//64.14335</id>
<created>2007-09-26T22:51:47Z</created>
<summary type="text/plain">Today I have been scheduling the sessions I want to see while I am at MAX and I am bitterly disappointed. There is so much good stuff!! It has not been easy to prioritise and I wish we had more...</summary>
<author>
<name>pmartin</name>
<url>http://weblogs.macromedia.com/pmartin</url>
<email>pmartin@adobe.com</email>
</author>
<dc:subject>MAX 2007</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.macromedia.com/pmartin/">
<![CDATA[<p>Today I have been scheduling the sessions I want to see while I am at <span class="caps">MAX </span>and I am bitterly disappointed. There is so much good stuff!! It has not been easy to prioritise and I wish we had more time to see more. How about making <span class="caps">MAX </span>five days next year? My choices this year are leaning towards <span class="caps">AIR, </span>plus a few other things on the side. So here are my top picks for <span class="caps">MAX</span> 2007:</p>
<ul>
  <li>Working with Persistent Data in in Adobe Integrated Runtime (AIR)</li>
  <li>Customizing the Flex Framework</li>
  <li>Flex on Rails</li>
  <li>Advanced LiveCycle Data Services For Developers</li>
  <li>Adobe Integrated Runtime (AIR) Tips and Tricks</li>
  <li>Flex Roadmap</li>
  <li>Boot Camp for Adobe Integrated Runtime (AIR)</li>
  <li>Building Stunning Flex Applications with Flex Builder and Creative Suite 3</li>
  <li>Building Rich Internet Applications Cairngorm and LiveCycle Data Services - so good I am going to it twice</li>
  <li>Adobe Integrated Runtime (AIR) Security</li>
</ul>
<p>I will be speaking "Building Rich Internet Applications Cairngorm and LiveCycle Data Services". If you are interested in LiveCycle Data Services please make sure you also check out Jeff Vroom's talk on "Advanced LiveCycle Data Services For Developers" - I've seen his presentation and it looks good. Be warned though, Jeff is also presenting at the same time as me on the Wednesday (who did the scheduling?), so make sure you make it to his first session on the Tuesday (9:15am). Jeff is "Mr Data Services" to the point I have named a section in my presentation after him. So if you want hear some "Vroomisms" please make sure come along to both our sessions.</p>
<p>My final recommendation would be Steven's Webster's talk on "<a href="http://weblogs.macromedia.com/swebster/archives/2007/09/acmax_steven_we.cfm">Design-Led Innovation: Creating Disruptive Experiences</a>". I would go myself, but why go to Chicago to hear Steven speak when I see and hear him most days in Edinburgh (and I have heard it many times before)? Joking aside, this will be an engaging session and Steven will blend Flex, <span class="caps">AIR </span>and LiveCycle to show how you can deliver compelling solutions the Adobe Consulting way.</p>]]>

</content>
</entry>
<entry>
<title>Speaking at MAX 2007 on Cairngorm &quot;Enterprise&quot;</title>
<link rel="alternate" type="text/html" href="http://weblogs.macromedia.com/pmartin/archives/2007/08/speaking_at_max.html" />
<modified>2007-08-16T17:01:23Z</modified>
<issued>2007-08-16T16:57:40Z</issued>
<id>tag:weblogs.macromedia.com,2007:/pmartin//64.14172</id>
<created>2007-08-16T16:57:40Z</created>
<summary type="text/plain">I am going to be at MAX 2007 in Chicago speaking about our ideas and current thinking that is shaping the future release of Cairngorm &quot;Enterprise&quot;. The title of my session is &quot;Building Rich Internet Applications with Cairngorm and LiveCycle...</summary>
<author>
<name>pmartin</name>
<url>http://weblogs.macromedia.com/pmartin</url>
<email>pmartin@adobe.com</email>
</author>
<dc:subject>Cairngorm</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.macromedia.com/pmartin/">
<![CDATA[<p>I am going to be at <span class="caps">MAX</span> 2007 in Chicago speaking about our ideas and current thinking that is shaping the future release of Cairngorm "Enterprise". The title of my session is "Building Rich Internet Applications with Cairngorm and LiveCycle Data Services. My session is a case study on an Adobe Consulting project that has used Cairngorm "Enterprise". The session will focus on how we have used Data Management Services and take a look inside Cairngorm "Enterprise". I hope to see you there. <br />
 <br />
Alistair McLeod will be giving the same presentation in Barcelona.</p>]]>

</content>
</entry>
<entry>
<title>SOA Single Point of Entry Anti-Pattern</title>
<link rel="alternate" type="text/html" href="http://weblogs.macromedia.com/pmartin/archives/2007/05/soa_single_poin.html" />
<modified>2007-05-04T09:24:37Z</modified>
<issued>2007-05-04T09:18:42Z</issued>
<id>tag:weblogs.macromedia.com,2007:/pmartin//64.13728</id>
<created>2007-05-04T09:18:42Z</created>
<summary type="text/plain"><![CDATA[Contrary to the title of my blog post, my objective here is not to play a game of buzzword bingo or to talk in three-letter acronyms (TLAs) &ndash; although we may have some fun along the way and may even...]]></summary>
<author>
<name></name>


</author>
<dc:subject>Architecture</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.macromedia.com/pmartin/">
<![CDATA[<p>Contrary to the title of my blog post, my objective here is not to  play a game of buzzword bingo or to talk in three-letter acronyms (TLAs) &ndash;  although we may have some fun along the way and may even invent some new <span class="caps">TLA</span>s.</p>
<p>  My objective is to introduce you to an architecture we are  increasingly coming across and to set out a structured argument as to why I  consider this to be an anti-pattern. If you want a definition of an  anti-pattern take a look at <a href="http://en.wikipedia.org/wiki/Anti-pattern" target="_blank">Wikipedia</a>.</p>
<p>  It was during a conversation with <a href="http://weblogs.macromedia.com/amcleod/" target="_blank">Alistair   McLeod</a> that he termed this an &ldquo;SOA Single Point of Entry  Anti-Pattern&rdquo; so the credit or discredit must fall at Ali&rsquo;s feet :)]]>
<![CDATA[<p><strong>What is the &ldquo;SOA Single  Point of Entry Anti-Pattern&rdquo;?</strong></p>
<p>We are using   &ldquo;SOA Single Point of Entry Anti-Pattern&rdquo; to describe an  architecture that is built on LiveCycle Data Services (formerly known as Flex  Data Services) and uses a single <span class="caps">RPC </span>destination &ndash; we have termed this a Single  Point of Entry Architecture.</p>
<p>  The Single-Point-of-Entry (SPoE) Architecture typically passes  key-values pairs (a map) as data to the client, and requires the client to hold  a security token that must be passed with each and every request.</p>
<p>  The Single-Point-of-Entry (SPoE) Architecture fronts an internal  <span class="caps">SOA.</span> The SPoE proxies requests to back-end services. When a client sends its  request it must include the name of the back-end service to invoke. The SPoE  extracts the service name from map and invokes the service.<br />
  The motivation for doing this varies and on its own makes sense.  However, if we consider what we lose and what affect it has on the architecture  of our Flex client does it still make sense?</p>
I strongly believe not. If  you have made the decision to build a Rich Internet Application (RIA) why would  you not want to get the most out of the technology and build the application that  you can? It doesn&rsquo;t make sense to me to build an <span class="caps">RIA </span>that is constrained in the  users experience that it can deliver now or in the future.<br />
<p><strong>Why you should be using  LiveCycle Data Services?</strong></p>
<p>  LiveCycle Data Services offers a robust and scalable technology for  building rich user experiences. It allows the architect the choice of <span class="caps">RPC  </span>services, messaging and data management services.</p>
<p>  Using messaging we have the opportunity to build a real-time user  experience. When a new event occurs the server can notify the client.</p>
<p>  With data management services you can build a Data Orientated  Architecture (DOA). This offers endless possibilities from collaborative user  experiences to disconnected applications.&nbsp;  Data management services accept the responsibility for synchronising  data between the client and the server and across clients. It will also fetch  data-on-demand using paging and lazy loading. </p>
<p><strong>What are the arguments  against a SPoE Architecture?</strong></p>
<p><strong>A SPoE will impose on your  client-side architecture</strong>. You will require an  architecture that can compose a model from the map and decompose your model to  a map. Your architecture will be:</p>
<ol>
  <li>verbose</li>
  <li>un-necessarily complex</li>
  <li>difficult to debug</li>
  <li>costly to maintain</li>
</ol>
<p>If you don&rsquo;t build a <strong>strongly-typed</strong> client-side model, screen development will be harder  and data binding will not be as effective. This could lead to increased  development effort and more bugs.</p>
<p><strong>A SPoE will increase the  effort required to develop the client.</strong> Your project  must asses the impact on the:</p>
<ol>
  <li>budget</li>
  <li>timescales</li>
</ol>
<p><strong>A SPoE will not  future-proof your application. </strong>&nbsp;Consider the benefits of LiveCycle Data  Services and the effect it will have on the user experience. You will <u>not</u> be able to benefit from the following:</p>
<ol>
  <li>data push</li>
  <li>data synchronisation</li>
  <li>data paging</li>
  <li>lazy loading</li>
  <li>offline data synchronisation of Apollo applications</li>
</ol>
<p><strong>A SPoE will require you to  hold a security token on the client.</strong> You will <u>not</u> benefit from the security features built-in to LiveCycle Data Services, which  extend those offered by your underlying application server. You will need to  implement security features behind the boundary for:</p>
<ol>
  <li>authentication</li>
  <li>access control</li>
</ol>
<p><em>To avoid using a security  token we could configure a security constraint in LiveCycle Data Services for  our SPoE that forces authentication. This would use the baked in functionality  provided by the application server and we can identify the user via the user  principal. However, we still couldn&rsquo;t apply access control on the boundary nor  could we execute any public services e.g. forgotten password.</em></p>
<p><strong>A SPoE could compromise  the security of your application server.</strong> By not  using the security offered by LiveCycle Data Services and applying it behind  the application boundary your application server will open and more susceptible  to malicious attacks.</p>
<p><strong>A SPoE will not benefit  from the security provided by your application server.</strong> Security is baked in to most application servers and built-on by  LiveCycle Data Services. If you are managing your own security token it could  have an impact on:</p>
<ol>
  <li>clustering </li>
  <li>fail-over</li>
  <li>scalability</li>
</ol>
<p>&nbsp;<strong>A SPoE security token  could have an impact on performance.</strong> If you are  creating your own token you will need to protect the user identity. Relying on  <span class="caps">SSL </span>may not be enough &ndash; it doesn&rsquo;t protect the token when it is not travelling  over the wire. You should consider obfuscating the identity held in the token  and have the ability to verify you issued the token and known when it has  expired. All this typically involves cryptography. What impact will this have  on the size of the token and the bandwidth? In addition cryptography is  typically an expensive operation and will add an overhead to every single  request. If you don&rsquo;t apply these preventative measures you will leave your  application open to:</p>
<ol>
  <li>spoofing</li>
  <li>replay attacks</li>
</ol>
<p><strong>A SPoE security token will  increase the effort on your project.</strong> If you  roll-your-own security it will not be proven. Before your project goes live you  will have to conduct <strong>penetration testing</strong>,  which can be timely and costly. This will have an impact on your project:</p>
<ol>
  <li>budget</li>
  <li>timescales</li>
</ol>
<p><strong>What if I have no choice?</strong></p>
<p>  I appreciate there are circumstances when there is no option but to  use key-values pairs with back-end services. This is not unusual when building  a new application on top of a legacy system and the cost of re-architecting the  services is cost prohibitive.</p>
<p>  In such cases I still advocate using LiveCycle Data Services in the  manner it was intended. You can still surface multiple services to your Flex  client and you can still use messaging and data management services.</p>
<p>I  would encourage you  to build an abstraction layer behind your LiveCycle Data Services. The problem  of composing and decomposing your model doesn&rsquo;t go away it is just pushed  further down your architecture. However, it will probably be easier to build in  Java, keeping your client side architecture clean and, more importantly it  won&rsquo;t compromise security. </p>]]>
</content>
</entry>
<entry>
<title>FDS Plugin V2</title>
<link rel="alternate" type="text/html" href="http://weblogs.macromedia.com/pmartin/archives/2007/02/fds_plugin_v2.html" />
<modified>2007-02-16T08:51:47Z</modified>
<issued>2007-02-16T08:48:43Z</issued>
<id>tag:weblogs.macromedia.com,2007:/pmartin//64.13154</id>
<created>2007-02-16T08:48:43Z</created>
<summary type="text/plain">I am please to say V2 of my FDS Plugin is now available for download on the Flex Exchange. Thanks to all those who took the time to downloaded the BETA and for reporting the bugs you found. In particular...</summary>
<author>
<name></name>


</author>
<dc:subject>Tooling</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.macromedia.com/pmartin/">
<![CDATA[<p>I am please to say V2 of my <span class="caps">FDS</span> Plugin is now available for <a href="http://www.adobe.com/cfusion/exchange/index.cfm?view=sn102&amp;returnurl=sn101&amp;yourexid=uploads#view=sn611&amp;viewName=Flex%20Extension&amp;loc=en_us&amp;authorid=73948009&amp;page=0&amp;scrollPos=0&amp;subcatid=0&amp;snid=sn611&amp;itemnumber=24&amp;extid=1035666&amp;catid=0&amp;returnurl=sn101&amp;yourexid=uploads" target="_blank">download</a> on the Flex Exchange. Thanks to all those who took the time to downloaded the <span class="caps">BETA </span>and for reporting the bugs you found. In particular the following bugs have been fixed:</p>
<ul>
  <li>The plugin will now run with Java 1.4.</li>
  <li>The paths in the  project are correct on Mac OS X.</li>
  <li>The 'user_classes' folder is now included in the project classpath.</li>
  <li>If you compile locally the Web Tools Plaform <span class="caps">WAR </span>export will now include the Flex generated files (e.g. *.swf) and the Flex source files if selected.    </li>
</ul>]]>
<![CDATA[<h2>What's new?</h2>
<p> The dependancy on Flex Data Services (FDS) has now been externalized.  This means you need to have <span class="caps">FDS </span>installed on your  machine. You will find  a new preferences page in Eclipse (<strong>Window &gt; Preferences &gt; Flex Data Services &gt; <span class="caps">FDS</span> Installations</strong>) where you can configure the installation location of <span class="caps">FDS.</span></p>
<p><img src="http://weblogs.macromedia.com/pmartin/fds_preferences.gif" alt="FDS Preferences" width="400" height="363" /></p>
<p>The new project wizard now has a configuration page, which you can use to configure your <span class="caps">FDS </span>project.</p>
<p><img src="http://weblogs.macromedia.com/pmartin/project_config.gif" alt="Project Config" width="400" height="424" /> </p>
<p>In particular it adds an option to compile your application locally  in Flex Builder, which should help improve your development velocity.  In the past it only supported compile on server, which it continues to  support. However, I would strongly urge against using this option as I  have found it to be troublesome when you are debugging as Flex Builder  won't always find the source.</p>]]>
</content>
</entry>
<entry>
<title>Continuous Integration with CruiseControl + FlexUnit + XDoclet2</title>
<link rel="alternate" type="text/html" href="http://weblogs.macromedia.com/pmartin/archives/2007/01/continous_integ.html" />
<modified>2007-01-18T20:44:39Z</modified>
<issued>2007-01-17T18:34:23Z</issued>
<id>tag:weblogs.macromedia.com,2007:/pmartin//64.12904</id>
<created>2007-01-17T18:34:23Z</created>
<summary type="text/plain">Last year I blogged about XDoclet2 and FlexUnit and Ant . In this entry I am going to look at setting up CruiseControl for continuous integration. I have setup my CruiseControl server on Linux so I will do my best...</summary>
<author>
<name></name>


</author>
<dc:subject>Tooling</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.macromedia.com/pmartin/">
<![CDATA[<p>Last year I blogged about XDoclet2 and FlexUnit and Ant <a href="http://ant.apache.org/" target="_blank"></a>. In this entry I am going to look at setting up <a href="http://cruisecontrol.sourceforge.net/" target="_blank">CruiseControl</a> for continuous integration. I have setup my CruiseControl server on Linux so I will do my best to make sure these instruction also apply to Windows. I also used Perforce as my source control repository so I have included the extra steps that are required to get CruiseControl working with Perforce. CruiseControl supports many other repositories such as Subversion and CVS. Please refer the the CuriseControl <a href="http://ant.apache.org/" target="_blank">configuration reference</a> for more details.</p>]]>
<![CDATA[<h2><strong>What software do I need? </strong></h2>
<p>You will need to download the following software:</p>
<ul>
  <li><a href="http://cruisecontrol.sourceforge.net/download.html" target="_blank">Download</a> the CruiseControl binary distribution - I downloaded CruiseControl 2.6. </li>
  <li><a href="http://java.sun.com/javase/downloads/index.jsp" target="_blank">Download</a> a Java SE Development Kit (JDK) - I downloaded JDK 5.0 Update 10. </li>
  <li><a href="http://weblogs.macromedia.com/pmartin/tooling/flexunit/FlexAntTasks.jar">Download</a> FlexAntTasks.</li>
  <li>Download Flash Player 9 for <a href="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" target="_blank">Windows</a>, <a href="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" target="_blank">Macintosh</a> or <a href="http://www.adobe.com/go/getflashplayerlinux" target="_blank">Linux</a>. </li>
  <li><a href="http://www.adobe.com/products/flex/" target="_blank">Download</a> Flex SDK. </li>
</ul>
<p>If you are using Perforce you will also need the following:</p>
<ul>
  <li><a href="http://ant.apache.org/" target="_blank">Download</a> the Apache Ant binary distribution Don&rsquo;t use  the embedded copy of Ant that comes with CruiseControl as it doesn&rsquo;t contain  the Perforce tasks - I downloaded Apache Ant 1.7.0. </li>
  <li><a href="http://jakarta.apache.org/oro/" target="_blank">Download</a> the Jakarta ORO binary distribution.  Jakarta ORO is required by the Perforce Ant tasks - I downloaded Jakarta ORO 2.0.8. </li>
  <li><a href="http://www.perforce.com/perforce/loadprog.html" target="_blank">Download</a> the Perforce client (p4).</li>
</ul>
<h2><strong>Do I need anything else?</strong></h2>
<p>Yes - if you are running this on Linux you will need an X Server installed and you will probably want a virtual frame buffer. These are required by the Flash Player  - there is no headless version of the player. If you try and run the Flash Player without these you will probably get the following error:</p>
<p><em>Can't connect to X11 window server using ':0.0' as the value of the DISPLAY</em></p>
<p>The virtual frame buffer will allow the Flash Player to run in a virtual window without the need for a display plugged in to your server. I used <a href="http://www.xfree86.org/" target="_blank">XFree86</a>, which provides an X Server and a virtual frame buffer (Xvfb).</p>
<h2><strong>How do I install the software? </strong></h2>
<ul>
  <li>Extract  CruiseControl to a suitable location on your local machine.</li>
  <li>Install your JDK.</li>
  <li>Create a <strong>JAVA_HOME</strong> environment variable with the path to your JDK installation.</li>
  <li>Add <strong>$JAVA_HOME/bin</strong> (or <strong>%JAVA_HOME%\bin</strong> on Windows) to your path.</li>
  <li>Copy <strong>FlexAntTasks.jar</strong> to  <strong>&lt;ANT_HOME&gt;\lib</strong>, where &lt;ANT_HOME&gt; is the path to your Ant installation. If you are using the version of Ant that comes with CruiseControl you will find it under your CruiseControl instalaltion. The example config at the end of this blog shows how to configure an alternative Ant installation. </li>
  <li>Install Flash Player 9.</li>
  <li>Install Flex SDK. </li>
</ul>
<p>Note: if you are using Linux the FlexUnit Ant task will use the standalone player, please make sure the Flash Player executable (gflashplayer) is on your PATH. </p>
<p>To verify CruiseControl is working start is using <strong>cruisecontrol.sh</strong> or <strong>cruisecontrol.bat</strong>  (start CruiseControl from its home directory) and connect to the console through your browser using <strong>http://&lt;your_server&gt;:8080</strong>. You should see a test project called connectfour. Stop CruiseControl after you have connected sucessfully. </p>
<p>If you are using Perforce:</p>
<ul>
  <li>Extract  Apache Ant to a suitable location on your local machine. </li>
  <li>Extract  Jakarta ORO and copy the JAR (e.g. jakarta-oro-2.0.8.jar) to <strong>&lt;ANT_HOME&gt;\lib</strong>, where &lt;ANT_HOME&gt; is the path to your Ant installation.</li>
  <li>Make sure the Perforce client executable (p4) is on your PATH. </li>
</ul>
<p>You will also need to create a client workspace for Perforce, which is used by CruiseControl. You can do this using the P4V tool or on the command line using p4, for example you can do the following on Linux to create a client workspace:</p>
<ul>
  <li>mkdir ~/cruisecontrol</li>
  <li>cd ~/cruisecontrol</li>
  <li>p4 -p &lt;port&gt; -c &lt;client_workspace&gt; -u &lt;user&gt; -P &lt;password&gt; client</li>
</ul>
<p>The final command puts you in the editor, which you can just quit.</p>
<h2><strong>How do I run  CruiseControl</strong>?</h2>
<p>If you are running on Linux and using Xvfb execute the following commands: </p>
<ul>
  <li> export DISPLAY=:1.0</li>
  <li>/usr/X11R6/bin/Xvfb :1 -screen 0 1280x1024x8 &amp;</li>
  <li>cd &lt;CC_HOME&gt;, where &lt;CC_HOME&gt; is the parth to your CruiseControl installation.</li>
  <li>cruisecontrol.sh &amp;</li>
</ul>
<p>If you are on Windows:</p>
<ul>
  <li>Open a command prompt.</li>
  <li>cd &lt;CC_HOME&gt;, where &lt;CC_HOME&gt; is the parth to your CruiseControl installation.</li>
  <li>cruisecontrol.bat</li>
</ul>
<p>You can then connect to the console using your browser:<strong> http://&lt;your_server&gt;:8080</strong></p>
<h2><strong>How do I configure a project? </strong></h2>
<p>You must configure your projects in  <strong>&lt;CC_HOME&gt;\config.xml</strong>, where &lt;CC_HOME&gt; is the parth to your CruiseControl installation.</p>
<p>I have provided an example of <a href="http://weblogs.macromedia.com/pmartin/tooling/cruisecontrol/config.xml">config.xml </a>, which externalises its configuration parameters to <a href="http://weblogs.macromedia.com/pmartin/tooling/cruisecontrol/config.properties">config.properties</a>. This example uses my <a href="http://weblogs.macromedia.com/pmartin/tooling/flexunit/FlexUnitExample.zip">FlexUnitExample</a> project. </p>
<p>Note: use the latest version of <a href="http://weblogs.macromedia.com/pmartin/archives/2007/01/flexunit_for_an_1.cfm" target="_blank">FlexUnit for Ant</a> as it no longer requires you to create a FlashPlayerTrust configuration file.</p>]]>
</content>
</entry>
<entry>
<title>FlexUnit for Ant Update#4</title>
<link rel="alternate" type="text/html" href="http://weblogs.macromedia.com/pmartin/archives/2007/01/flexunit_for_an_1.html" />
<modified>2007-01-18T20:42:26Z</modified>
<issued>2007-01-17T16:11:37Z</issued>
<id>tag:weblogs.macromedia.com,2007:/pmartin//64.12903</id>
<created>2007-01-17T16:11:37Z</created>
<summary type="text/plain">You can download a new release of FlexUnit for Ant. This version fixes a bug with the toDir property and also removes the need to create a configuration file under the FlashPlayerTrust folder to allow the SWF to run in...</summary>
<author>
<name></name>


</author>
<dc:subject>Tooling</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.macromedia.com/pmartin/">
<![CDATA[<p>You can download a new release of  FlexUnit for Ant. This version fixes a bug with the <strong>toDir</strong> property and also removes the need to create a configuration file under the FlashPlayerTrust folder to allow the SWF to run in the local trusted sandbox. The Ant task will now send a policy file to the Flash Player to allow the data to be sent over the socket - should make life a little easier.</p>
<p>For more details on how to use FlexUnit for Ant please see my earlier <a href="http://weblogs.macromedia.com/pmartin/archives/2006/06/flexunit_ant.cfm" target="_blank">blog</a>. There is also documentation on the flexunit Ant task parameters at the end of this blog. You can <a href="http://labs.adobe.com/wiki/index.php/ActionScript_3:resources:apis:libraries#FlexUnit" target="_blank">download</a> FlexUnit from Adobe Labs.</p>]]>
<![CDATA[<p>&#160;</p>
<h2>Binary distribution </h2>
<ul>
  <li><a href="http://weblogs.macromedia.com/pmartin/tooling/flexunit/FlexAntTasks-bin.zip">FlexAntTasks-bin.zip</a></li>
  <li><a href="http://weblogs.macromedia.com/pmartin/tooling/flexunit/FlexUnitOptional-bin.zip">FlexUnitOptional-bin.zip</a></li>
</ul>
<p>&#160;</p>
<h2>Source Distribution</h2>
<ul>
  <li><a href="http://weblogs.macromedia.com/pmartin/tooling/flexunit/FlexAntTasks-src.zip">FlexAntTasks-src.zip</a></li>
  <li><a href="http://weblogs.macromedia.com/pmartin/tooling/flexunit/FlexUnitOptional-src.zip">FlexUnitOptional-src.zip</a></li>
</ul>
<p>&#160;</p>
<h2>Example Project</h2>
<ul>
  <li><a href="http://weblogs.macromedia.com/pmartin/tooling/flexunit/FlexUnitExample.zip">FlexUnitExample.zip</a></li>
</ul>
<p>&#160;</p>
<h2>Ant Task Parameters </h2>
<table width="477" border="1">
  <tr>
    <th width="95" scope="col"><div align="left">Attribute</div></th>
    <th width="298" scope="col"><div align="left">Description</div></th>
    <th width="62" scope="col">Required</th>
  </tr>
  <tr>
    <td>swf</td>
    <td>The name of SWF containing the tests to execute. </td>
    <td>Yes</td>
  </tr>
  <tr>
    <td>port</td>
    <td>The port to receive the test results on from FlexUnit. The default port is 1024. </td>
    <td>No</td>
  </tr>
  <tr>
    <td>timeout</td>
    <td>The time in milliseconds to wait for  results from FlexUnit before stopping the building process. The default is 60 seconds. You need to allow enought time for your tests to run as the socket is opended prior to the test execution. </td>
    <td valign="top">No</td>
  </tr>
  <tr>
    <td>toDir</td>
    <td>The output directory for the test resutlts. The default is the working directory. </td>
    <td>No</td>
  </tr>
  <tr>
    <td>haltonfailure</td>
    <td>Stop the build process if a test fails. The default is true. </td>
    <td>No</td>
  </tr>
  <tr>
    <td>failureproperty</td>
    <td>The name of the property to set in the event of a failure. The default is 'flexunit.failed''. </td>
    <td>No</td>
  </tr>
  <tr>
    <td>verbose</td>
    <td>Causes the flexunit tasks to print status messages. The default is false. </td>
    <td>No</td>
  </tr>
</table>]]>
</content>
</entry>
<entry>
<title>FDS Plugin 2 (Beta)</title>
<link rel="alternate" type="text/html" href="http://weblogs.macromedia.com/pmartin/archives/2007/01/fds_plugin_2_be.html" />
<modified>2007-01-18T20:35:14Z</modified>
<issued>2007-01-09T09:48:16Z</issued>
<id>tag:weblogs.macromedia.com,2007:/pmartin//64.12850</id>
<created>2007-01-09T09:48:16Z</created>
<summary type="text/plain"> A number of people of have been asking me when a new version of my FDS plugin will be released to support Flex 2.0.1, Eclipse 3.2 and the Mac. Now that Flex 2.0.1 is released I am happy to...</summary>
<author>
<name></name>


</author>
<dc:subject>Tooling</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.macromedia.com/pmartin/">
<![CDATA[  <p>A number of people of have been asking me when a new version of my FDS plugin will be released to support Flex 2.0.1, Eclipse 3.2 and the Mac. Now that <a href="http://weblogs.macromedia.com/flexteam/archives/2007/01/flex_201_is_her.cfm" target="_blank">Flex 2.0.1</a> is released I am happy to say I have made a beta version of the plugin available. So please install it and let me know what you think. More importantly if you find a bug send me an email, <a href="mailto:pmartin@adobe.com">pmartin@adobe.com</a>.</p>
  <p>This is a complete re-write and I have done my best to address the issues that I saw in the previous versions. In particular I have removed the dependency on Java 5 and externalized Flex Data Services (you now need to have FDS installed on your your local machine).</p>
]]>
<![CDATA[<h2>Prerequisites</h2>
  <p>To install the plugin you need the following already installed:</p>
  <ul>
    <li>Eclipse 3.2.x</li>
    <li>Eclipse Web Tools Platform 1.5.x</li>
    <li>Flex Builder 2.0.1    </li>
  </ul>
  <p>With regards to Eclipse + Eclipse Web Tools Platform I would recommend installing the all-in-one, which can be downloaded from <a href="http://download.eclipse.org/webtools/downloads/drops/R1.5/R-1.5.2-200610261841/" target="_blank">here</a>. </p>
  <h2><strong>Installation</strong></h2>
  <ol>
    <li>Download the plugin from <a href="http://weblogs.macromedia.com/pmartin/eclipse/com.adobe.flex.enterprise.site.zip">here</a>.</li>
    <li>Start Eclipse.</li>
    <li> Select <strong>Help &gt; Software Updates &gt; Find and Install</strong>.</li>
    <li> Select <strong>Search for new features to install</strong>.</li>
    <li> Click <strong>New Archived Site</strong>.</li>
    <li> Select the plugin ZIP file you downloaded.</li>
    <li> Click <strong>Finish</strong>.</li>
    <li> Check the feature.</li>
    <li> Complete the wizard.</li>
  </ol>
<h2>What's new?</h2>
<p>As mentioned above Flex Data Services (FDS) has been externalized. This means you need FDS installed on your local machine. You will find a new preferences page in Eclipse (<strong>Window &gt; Preferences &gt; Flex Data Services &gt; FDS Installations</strong>) where you can configure the installation location of FDS.</p>
<p><img src="http://weblogs.macromedia.com/pmartin/fds_preferences.gif" width="400" height="363" /></p>
<p>The new project wizard now has a configuration page, which you can use to configure your FDS project.</p>
<p><img src="http://weblogs.macromedia.com/pmartin/project_config.gif" width="400" height="424" /> </p>
<p>In particular it adds an option to compile your application locally in Flex Builder, which should help improve your development velocity. In the past it only supported compile on server, which it continues to support. However, I would strongly urge against using this option as I have found it to be troublesome when you are debugging as Flex Builder won't always find the source.</p>
<p>Other than that it should be business as usual. </p>
]]>
</content>
</entry>
<entry>
<title>Deploying Flex on WebSphere Application Server</title>
<link rel="alternate" type="text/html" href="http://weblogs.macromedia.com/pmartin/archives/2006/11/deploying_flex.html" />
<modified>2006-11-22T13:12:33Z</modified>
<issued>2006-11-22T13:03:21Z</issued>
<id>tag:weblogs.macromedia.com,2006:/pmartin//64.12569</id>
<created>2006-11-22T13:03:21Z</created>
<summary type="text/plain">Increasingly as we step further in to the depths of the enterprise we find more and more of our customers are using WebSphere Application Server (WAS). When it comes to using Flex Data Services (FDS) on WAS you must modify...</summary>
<author>
<name></name>


</author>
<dc:subject>LC DS</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.macromedia.com/pmartin/">
<![CDATA[<p>Increasingly  as we step further in to the depths of  the enterprise we find more and more of our customers are using WebSphere Application Server (WAS).</p>
<p>When it comes to using Flex Data Services (FDS) on <span class="caps">WAS </span>you must modify your Flex configuration if you want to use <span class="caps">RTMP.</span> I thought it would be beneficial to other developers  taking their first tentative steps with <span class="caps">FDS </span>and <span class="caps">WAS </span>to walk through the steps necessary to deploy your Flex-based application on <span class="caps">WAS.</span> I have written this blog entry against WebSphere Application Server Base <span class="caps">V6.</span> This is <span class="caps">IBM'</span>s grown-up application server for which you pay a license fee. I haven't used the community  edition of <span class="caps">WAS, </span>which is based on Apache Geronimo.  I hope to see Geronimo as a supported application server in the future.</p>]]>
<![CDATA[<p>&nbsp;</p>
<h2>So what's different?</h2>
<p>Very briefly, the intention behind the <span class="caps">J2EE </span>platform is to protect the developer from low-level coding such as multi-threading. As such, there are a number of restrictions in the <span class="caps">J2EE </span>programming model when it comes to multi-threading. For example, it is illegal to create your own threads in a <span class="caps">J2EE </span>container. This restriction  makes asynchronous processing difficult. When asynchronous processing is required developers normally turn to the Java Messaging Service (JMS). However, this is not ideal when you want concurrent processing. In this case <span class="caps">WAS </span>provides a  programming model extension (PME) for asynchronous   beans that allows developers to to create work items that execute out of a thread pool (work manager) managed by the application server. The concept of a work manager is being standardised under <a href="http://jcp.org/en/jsr/detail?id=237" target="_blank"><span class="caps">JSR</span> 237</a> (Work Managers for Application Servers) by <span class="caps">IBM </span>and <span class="caps">BEA.</span> It is also referred  to as the CommonJ Work Manager specification and is part of the <span class="caps">J2EE</span> 1.4 specification.</p>
<p>There are other benefits to this <span class="caps">PME, </span>but we won't cover them here. All I really wanted to say is the <span class="caps">RTMP </span>end-point is implemented using asynchronous  beans, which requires us to configure the work manager (thread pool) for the <span class="caps">RTMP </span>work items. </p>
<p>The work manager is configured under the <span class="caps">WAS </span>admin console and is accessed using <span class="caps">JNDI </span>- this is what we need to configure!</p>
<p>There are also a couple of bits of configuration in Flex that we need to un-comment. The Flex configuration uses a resource-ref, which is essentially  an alias that the code can use to refer to the resource - the work manager in our case. At deployment time we bind the resource-ref to the <span class="caps">JNDI </span>name of our resource. I won't delve in to the benefits of using resource references other than to say they are considered best-practice. Finally, just so the config makes sense, an application uses the<strong> java:comp/env</strong> namespace when it is using a resource-ref. </p>
<p>&nbsp;</p>
<h2>So what do we do?</h2>
<p>To start , I am going to assume you have WebSphere Application Server Base or higher installed. </p>
<p>Second, we need our resource-ref. Open the web desployment descriptor, <strong>web.xml,</strong> for your <span class="caps">FDS </span>application. At the bottom you will see the following commented out, which you need to un-comment: </p>
<p>


<pre>
&lt;resource-ref&gt;
   &lt;description&gt;Flex Messaging WorkManager&lt;/description&gt;
   &lt;res-ref-name&gt;wm/MessagingWorkManager&lt;/res-ref-name&gt;
   &lt;res-type&gt;com.ibm.websphere.asynchbeans.WorkManager&lt;/res-type&gt;
   &lt;res-auth&gt;Container&lt;/res-auth&gt;
   &lt;res-sharing-scope&gt;Shareable&lt;/res-sharing-scope&gt;
&lt;/resource-ref&gt;
</pre>


</p>
<p>This defines the resource-ref for our work manager with the name <strong>wm/MessagingWorkManager.</strong>  As I mentioned above the code looks up a resource-ref in the <strong>java:comp/env</strong> namespace.  Therefore the full name that will be used in the code is <strong>java:comp/env</strong>/<strong>wm/MessagingWorkManager</strong>. With this in mind lets move on to our third step.</p>
<p>Edit <strong>services-config.xml</strong> and fine the definition for <strong>my-rtmp</strong> and you will see the following commented out, again you need to un-comment it:</p>
<p>


<pre>
&lt;websphere-workmanager-jndi-name&gt;java:comp/env/wm/MessagingWorkManager&lt;/websphere-workmanager-jndi-name&gt;
</pre>


</p>
<p>This tells the <span class="caps">RTMP </span>end-point the name of the work manager to use, which is <strong>java:comp/env</strong>/<strong>wm/MessagingWorkManager</strong>.</p>
<p>Next start <span class="caps">WAS </span>and log in to the admin console (http://localhost:9060/ibm/console/). </p>
<p>From the admin  console navigate to <strong>Resources &gt;Asynchronous beans &gt; Work managers</strong>.</p>
<p>Click the <strong>New</strong> button and configure your work manager as follows:</p>
<table width="526" border="1">
  <tr>
    <th scope="col"><div align="left"><strong>Property</strong></div></th>
    <th scope="col"><div align="left"><strong>Value</strong></div></th>
  </tr>
  <tr>
    <td><div align="left">Name</div></td>
    <td><div align="left">MessagingWorkManager</div></td>
  </tr>
  <tr>
    <td><div align="left"><span class="caps">JNDI </span>name </div></td>
    <td><div align="left">wm/MessagingWorkManager</div></td>
  </tr>
  <tr>
    <td>Number of alarm threads </td>
    <td>5</td>
  </tr>
  <tr>
    <td>Minimum number of threads </td>
    <td>1</td>
  </tr>
  <tr>
    <td>Maximum number of threads </td>
    <td>10</td>
  </tr>
  <tr>
    <td>Thread Priority </td>
    <td>5</td>
  </tr>
  <tr>
    <td>Growable</td>
    <td>true</td>
  </tr>
</table>
<p>Tip: the Work Manager thread pool is definetly going to be something you want to monitor and tune  during performance and scalability testing (before your application goes in to production). You can monitor the work manager with the Tivoli Performance Viewer, which is included with WebSphere Application Server Base (this is why I like to start to like <span class="caps">WAS </span>- it's the value of the supporting tools and documentation). </p>
<p>Save your configuration and restart your server.</p>
<p>You can now deploy your application using the admin console where you will be required to bind your resource reference (i.e. wm/MessagingWorkManager) to the <span class="caps">JNDI </span>name of your work manager  (i.e. wm/MessagingWorkManager). Yes they are both called the same in our example, but they don't need to be. </p>
<p>&nbsp;</p>
<h2>What about deploying the application from the command line?</h2>
<p>If you want to deploy on the command line or genrally avoid specifying the binding at deploy time you can define your resource binding in <span class="caps">IBM'</span>s binding file (<strong>ibm-web-bnd.xmi</strong>). You will need an id on your resource-ref and an associated binding in <strong>ibm-web-bnd.xmi</strong>. The <strong>ibm-web-bnd.xmi</strong> file needs to live in the same directory as <strong>web.xml</strong> (i.e. under <span class="caps">WEB</span>-INF). </p>
<p><strong>web.xml - resource-ref</strong></p>
<p>


<pre>
&lt;resource-ref id=&quot;ResourceRef_1163934666921&quot;&gt;
   &lt;description&gt;Flex Messaging WorkManager&lt;/description&gt;
   &lt;res-ref-name&gt;wm/MessagingWorkManager&lt;/res-ref-name&gt;
   &lt;res-type&gt;com.ibm.websphere.asynchbeans.WorkManager&lt;/res-type&gt;
   &lt;res-auth&gt;Container&lt;/res-auth&gt;
   &lt;res-sharing-scope&gt;Shareable&lt;/res-sharing-scope&gt;
&lt;/resource-ref&gt;
</pre>


</p>
<p><strong>ibm-web-bnd.xmi</strong></p>
<p>


<pre>
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;webappbnd:WebAppBinding xmi:version=&quot;2.0&quot; xmlns:xmi=&quot;http://www.omg.org/XMI&quot; xmlns:webappbnd=&quot;webappbnd.xmi&quot; xmi:id=&quot;WebAppBinding_1163849897296&quot; virtualHostName=&quot;default_host&quot;&gt;
  &lt;webapp href=&quot;WEB-INF/web.xml#WebApp_ID&quot;/&gt;
  &lt;resRefBindings xmi:id=&quot;ResourceRefBinding_1163934666921&quot; jndiName=&quot;wm/MessagingWorkManager&quot;&gt;
    &lt;bindingResourceRef href=&quot;WEB-INF/web.xml#ResourceRef_1163934666921&quot;/&gt;
  &lt;/resRefBindings&gt;
&lt;/webappbnd:WebAppBinding&gt;
</pre>


</p>
<p>Tip: If you use the application server toolkit (AST), that comes with WebSphere it provides decent editors that do all the hard work for you :) </p>
<p>&nbsp;</p>
<h2>So what's next? </h2>
<p>I plan to write a few more blog entries surronding <span class="caps">WAS, </span>these include: </p>
<ul>
  <li>Developer workflow - looking at how we develop against <span class="caps">WAS </span>when we don't want to spend a bundle on <span class="caps">IBM </span>tooling. I will talk more about the <span class="caps">AST </span>here. </li>
  <li>Single Sign-on (SSO) - increasing we are being asked about <span class="caps">SSO </span>with Flex, the most common configuration being SiteMinder and <span class="caps">WAS.</span> I have already put together a <span class="caps">SSO </span>example (not using SiteMinder) that proves the concept. I will blog this when Flex 2.0.1 is released. If you want to know more in the mean time drop me a line. </li>
</ul>]]>
</content>
</entry>
<entry>
<title>FlexUnit for Ant Update#3</title>
<link rel="alternate" type="text/html" href="http://weblogs.macromedia.com/pmartin/archives/2006/11/flexunit_for_an.html" />
<modified>2007-01-18T20:43:37Z</modified>
<issued>2006-11-11T21:04:55Z</issued>
<id>tag:weblogs.macromedia.com,2006:/pmartin//64.12497</id>
<created>2006-11-11T21:04:55Z</created>
<summary type="text/plain">You can download a new release of FlexUnit for Ant, which fixes a few bugs people have experienced recently. For more details on how to use FlexUnit for Ant please see my earlier blog. There is also documentation on the...</summary>
<author>
<name></name>


</author>
<dc:subject>Tooling</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.macromedia.com/pmartin/">
<![CDATA[<p>You can download a new release of  FlexUnit for Ant, which fixes a few bugs people have experienced recently. For more details on how to use FlexUnit for Ant please see my earlier <a href="http://weblogs.macromedia.com/pmartin/archives/2006/06/flexunit_ant.cfm" target="_blank">blog</a>. There is also documentation on the flexunit Ant task parameters at the end of this blog. You can <a href="http://labs.adobe.com/wiki/index.php/ActionScript_3:resources:apis:libraries#FlexUnit" target="_blank">download</a> FlexUnit from Adobe Labs.</p>
<p>&#160;</p>]]>
<![CDATA[<h2>Binary distribution</h2>
<ul>
  <li><a href="http://weblogs.macromedia.com/pmartin/tooling/flexunit/FlexAntTasks-bin.zip">FlexAntTasks-bin.zip</a></li>
  <li><a href="http://weblogs.macromedia.com/pmartin/tooling/flexunit/FlexUnitOptional-bin.zip">FlexUnitOptional-bin.zip</a></li>
</ul>
<p>&#160;</p>
<h2>Source Distribution</h2>
<ul>
  <li><a href="http://weblogs.macromedia.com/pmartin/tooling/flexunit/FlexAntTasks-src.zip">FlexAntTasks-src.zip</a></li>
  <li><a href="http://weblogs.macromedia.com/pmartin/tooling/flexunit/FlexUnitOptional-src.zip">FlexUnitOptional-src.zip</a></li>
</ul>
<p>&#160;</p>
<h2>Example Project</h2>
<ul>
  <li><a href="http://weblogs.macromedia.com/pmartin/tooling/flexunit/FlexUnitExample.zip">FlexUnitExample.zip</a></li>
</ul>
<p>&#160;</p>
<h2>Ant Task Parameters </h2>
<table width="481" border="1">
  <tr>
    <th width="84" scope="col"><div align="left">Attribute</div></th>
    <th width="311" scope="col"><div align="left">Description</div></th>
    <th width="64" scope="col">Required</th>
  </tr>
  <tr>
    <td>swf</td>
    <td>The name of SWF containing the tests to execute. </td>
    <td>Yes</td>
  </tr>
  <tr>
    <td>port</td>
    <td>The port to receive the test results on from FlexUnit. The default port is 1024. </td>
    <td>No</td>
  </tr>
  <tr>
    <td>timeout</td>
    <td>The time in milliseconds to wait for  results from FlexUnit before stopping the building process. The default is 60 seconds. You need to allow enought time for your tests to run as the socket is opended prior to the test execution. </td>
    <td valign="top">No</td>
  </tr>
  <tr>
    <td>toDir</td>
    <td>The output directory for the test resutlts. The default is the working directory. </td>
    <td>No</td>
  </tr>
  <tr>
    <td>haltonfailure</td>
    <td>Stop the build process if a test fails. The default is true. </td>
    <td>No</td>
  </tr>
  <tr>
    <td>failureproperty</td>
    <td>The name of the property to set in the event of a failure. The default is 'flexunit.failed''. </td>
    <td>No</td>
  </tr>
  <tr>
    <td>verbose</td>
    <td>Causes the flexunit tasks to print status messages. The default is false. </td>
    <td>No</td>
  </tr>
</table>]]>
</content>
</entry>

</feed>