<?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"
	>

<channel>
	<title>Christophe Coenraets</title>
	<atom:link href="http://coenraets.org/feed" rel="self" type="application/rss+xml" />
	<link>http://coenraets.org/blog</link>
	<description></description>
	<pubDate>Thu, 20 Nov 2008 20:34:05 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>My MAX LCDS/BlazeDS Sessions Materials Available</title>
		<link>http://coenraets.org/blog/2008/11/my-max-lcdsblazeds-sessions-materials-available/</link>
		<comments>http://coenraets.org/blog/2008/11/my-max-lcdsblazeds-sessions-materials-available/#comments</comments>
		<pubDate>Thu, 20 Nov 2008 20:28:11 +0000</pubDate>
		<dc:creator>christophe</dc:creator>
		
		<category><![CDATA[Air]]></category>

		<category><![CDATA[BlazeDS]]></category>

		<category><![CDATA[Flex]]></category>

		<category><![CDATA[LCDS]]></category>

		<category><![CDATA[MAX]]></category>

		<guid isPermaLink="false">http://coenraets.org/blog/?p=89</guid>
		<description><![CDATA[Many of you have asked me for the materials I used in my LCDS/BlazeDS  hands-on sessions at MAX. 
Here are the links:

Lab instructions PDF (Powering Flex Applications with BlazeDS and Data Services)
Lab files (including final solutions)

If you didn&#8217;t have a chance to attend, you should be able to use this as a BlazeDS/LCDS tutorial [...]]]></description>
			<content:encoded><![CDATA[<p>Many of you have asked me for the materials I used in my LCDS/BlazeDS  hands-on sessions at MAX. </p>
<p>Here are the links:</p>
<ul>
<li><a href="http://coenraets.org/downloads/max2008/flex-dataservices-tutorial.pdf">Lab instructions PDF</a> (Powering Flex Applications with BlazeDS and Data Services)</li>
<li><a href="http://coenraets.org/downloads/max2008/flex-dataservices-tutorial.zip">Lab files (including final solutions)</a></li>
</ul>
<p>If you didn&#8217;t have a chance to attend, you should be able to use this as a BlazeDS/LCDS tutorial as well.</p>
<p>It was great to see all of you at MAX. I hope to see you next year in Los Angeles.</p>
<p>Christophe</p>
]]></content:encoded>
			<wfw:commentRss>http://coenraets.org/blog/2008/11/my-max-lcdsblazeds-sessions-materials-available/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Salesbuilder 1.5 with new AIR 1.5 Database Encryption</title>
		<link>http://coenraets.org/blog/2008/11/salesbuilder-15-with-new-air-15-database-encryption/</link>
		<comments>http://coenraets.org/blog/2008/11/salesbuilder-15-with-new-air-15-database-encryption/#comments</comments>
		<pubDate>Mon, 17 Nov 2008 14:22:25 +0000</pubDate>
		<dc:creator>christophe</dc:creator>
		
		<category><![CDATA[Air]]></category>

		<category><![CDATA[Flex]]></category>

		<category><![CDATA[MAX]]></category>

		<guid isPermaLink="false">http://coenraets.org/blog/?p=88</guid>
		<description><![CDATA[As you probably already know, AIR 1.5 is now available. New features include database encryption, Flash Player 10 support, and an updated version of WebKit.

I updated my Salesbuilder sample application to leverage the AIR 1.5 capabilities. Salesbuilder 1.5 leverages the new database encryption feature to allow you to secure your local database.
The first time you [...]]]></description>
			<content:encoded><![CDATA[<p>As you probably already know, <a href="http://www.adobe.com/devnet/logged_in/rchristensen_lpolanco_air_1.5.html">AIR 1.5</a> is now available. New features include database encryption, Flash Player 10 support, and an updated version of WebKit.</p>
<p><img src='http://coenraets.org/salesbuilder/salesbuilder15.jpg' alt='' class='alignnone' /></p>
<p>I updated my Salesbuilder sample application to leverage the AIR 1.5 capabilities. Salesbuilder 1.5 leverages the new database encryption feature to allow you to secure your local database.</p>
<p>The first time you start Salesbuilder, the application will generate the encrypted database on your local file system. Salesbuilder implements the key generation approach described in the section <a href="http://help.adobe.com/en_US/AIR/1.5/devappsflex/WS8AFC5E35-DC79-4082-9AD4-DE1A2B41DAAF.html">Using encryption with SQL databases in the manual Developing Adobe AIR Applications</a>. The encryption key is based on a password provided by you and a SALT generated by the system. </p>
<p>You can download the new version here: <a href="http://www.adobe.com/devnet/air/flex/articles/salesbuilder_demo.html">http://www.adobe.com/devnet/air/flex/articles/salesbuilder_demo.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://coenraets.org/blog/2008/11/salesbuilder-15-with-new-air-15-database-encryption/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Sneak Peak of LiveCycle Data Services &#8220;Next&#8221; Tomorrow at MAX</title>
		<link>http://coenraets.org/blog/2008/11/sneak-peak-of-livecycle-data-services-next-tomorrow-at-max/</link>
		<comments>http://coenraets.org/blog/2008/11/sneak-peak-of-livecycle-data-services-next-tomorrow-at-max/#comments</comments>
		<pubDate>Mon, 17 Nov 2008 07:24:41 +0000</pubDate>
		<dc:creator>christophe</dc:creator>
		
		<category><![CDATA[BlazeDS]]></category>

		<category><![CDATA[Flex]]></category>

		<category><![CDATA[LCDS]]></category>

		<category><![CDATA[LiveCycle Data Services]]></category>

		<category><![CDATA[MAX]]></category>

		<guid isPermaLink="false">http://coenraets.org/blog/?p=87</guid>
		<description><![CDATA[I will demonstrate some new and really exciting features of LiveCycle Data Services &#8220;Next&#8221; tomorrow (Monday), as part of my session called &#8220;Introduction to BlazeDS and LiveCycle Data Services ES&#8221;. I hope to see you there if you are interested in Data Services for Flex.
Introduction to BlazeDS and LiveCycle Data Services ES
Moscone West 2007
5:00pm to [...]]]></description>
			<content:encoded><![CDATA[<p>I will demonstrate some new and really exciting features of LiveCycle Data Services &#8220;Next&#8221; tomorrow (Monday), as part of my session called &#8220;Introduction to BlazeDS and LiveCycle Data Services ES&#8221;. I hope to see you there if you are interested in Data Services for Flex.</p>
<p>Introduction to BlazeDS and LiveCycle Data Services ES<br />
Moscone West 2007<br />
5:00pm to 6:00pm</p>
]]></content:encoded>
			<wfw:commentRss>http://coenraets.org/blog/2008/11/sneak-peak-of-livecycle-data-services-next-tomorrow-at-max/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Anil Channappa, Product Manager for BlazeDS and LCDS is Blogging</title>
		<link>http://coenraets.org/blog/2008/11/anil-channappa-product-manager-for-blazeds-and-lcds-is-blogging/</link>
		<comments>http://coenraets.org/blog/2008/11/anil-channappa-product-manager-for-blazeds-and-lcds-is-blogging/#comments</comments>
		<pubDate>Sat, 15 Nov 2008 14:59:37 +0000</pubDate>
		<dc:creator>christophe</dc:creator>
		
		<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://coenraets.org/blog/?p=86</guid>
		<description><![CDATA[Anil is now blogging about LiveCycle Data Services and BlazeDS at http://anilchannappa.org.
]]></description>
			<content:encoded><![CDATA[<p>Anil is now blogging about LiveCycle Data Services and BlazeDS at <a href="http://anilchannappa.org">http://anilchannappa.org</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://coenraets.org/blog/2008/11/anil-channappa-product-manager-for-blazeds-and-lcds-is-blogging/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Speaking at FlexCamp Boston on December 12</title>
		<link>http://coenraets.org/blog/2008/11/speaking-at-flexcamp-boston-on-december-12/</link>
		<comments>http://coenraets.org/blog/2008/11/speaking-at-flexcamp-boston-on-december-12/#comments</comments>
		<pubDate>Sat, 15 Nov 2008 14:53:37 +0000</pubDate>
		<dc:creator>christophe</dc:creator>
		
		<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://coenraets.org/blog/?p=85</guid>
		<description><![CDATA[I will be speaking at FlexCamp Boston on December 12 at the Bentley College in Waltham. Last year&#8217;s edition was a big hit and I&#8217;m looking forward to speaking there again.
The title of my Session is &#8220;Liberate your Data with AIR, BlazeDS and LCDS&#8221;. I will be showing some of the new and exciting features [...]]]></description>
			<content:encoded><![CDATA[<p>I will be speaking at <a href="http://www.flexcampboston.com">FlexCamp Boston</a> on December 12 at the Bentley College in Waltham. Last year&#8217;s edition was a big hit and I&#8217;m looking forward to speaking there again.</p>
<p>The title of my Session is &#8220;Liberate your Data with AIR, BlazeDS and LCDS&#8221;. I will be showing some of the new and exciting features in Flex Builder 4 and LCDS &#8220;Next&#8221; to build data-driven applications. Hope to see you there!</p>
]]></content:encoded>
			<wfw:commentRss>http://coenraets.org/blog/2008/11/speaking-at-flexcamp-boston-on-december-12/feed/</wfw:commentRss>
		</item>
		<item>
		<title>&#8220;Zero Code&#8221; Data Access using LiveCycle Data Services Runtime Configuration</title>
		<link>http://coenraets.org/blog/2008/09/zero-code-data-access-using-livecycle-data-services-runtime-configuration/</link>
		<comments>http://coenraets.org/blog/2008/09/zero-code-data-access-using-livecycle-data-services-runtime-configuration/#comments</comments>
		<pubDate>Fri, 12 Sep 2008 17:26:35 +0000</pubDate>
		<dc:creator>christophe</dc:creator>
		
		<category><![CDATA[Flex]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[LiveCycle Data Services]]></category>

		<guid isPermaLink="false">http://coenraets.org/blog/?p=82</guid>
		<description><![CDATA[When using the LCDS data management service, developers usually create a custom assembler for each destination, or use the Hibernate assembler if they happen to use Hibernate as their persistence framework. Other developers don&#8217;t use the data management service at all because of its perceived complexity.
The Data Management Service provides a set of low level [...]]]></description>
			<content:encoded><![CDATA[<p>When using the LCDS data management service, developers usually create a custom assembler for each destination, or use the Hibernate assembler if they happen to use Hibernate as their persistence framework. Other developers don&#8217;t use the data management service at all because of its perceived complexity.</p>
<p>The Data Management Service provides a set of low level APIs on top of which you can build your own higher level / higher productivity framework. The Hibernate assembler provides an example of a &#8220;generic assembler&#8221;, but you can also create your own. When used in this fashion, the Data Management Service can provide, by far, the most productive way to build data-driven applications.</p>
<p>To illustrate this point, I have been showing a demo at a few conferences this year, and I finally decided to package it. The demo combines a generic assembler and the runtime configuration feature of LCDS to provide a zero (server-side) code, zero configuration strategy to build data-driven applications. The demo goes like this:</p>
<p><span id="more-82"></span></p>
<ol>
<li>Create a table in MySQL Query Browser&#8230; just to show that I was starting from scratch.</li>
<li>Add a few rows in the new table (still in MySQL Query Browser)</li>
<li>Create a new project in Flex Builder, and with the help of a DynamicDataService class, build a data maintenance application in literally three lines of code.</li>
</ol>
<p>The key point of the demo was that I didn’t have to write any server-side code, or even configure anything (no XML) at the server-side&#8230; a table was all I needed.</p>
<p>Here is a quick and rough version of the demo:</p>
<p><embed src="http://blip.tv/play/Ac2GbgA" type="application/x-shockwave-flash" width="640" height="480" allowscriptaccess="always" allowfullscreen="true"></embed></p>
<p>Follow the instruction below to try it on your system:</p>
<ol>
<li>Download <a href="/downloads/flex-dynamic-data.zip">flex-dynamic-data.zip</a> and unzip it on your local file system.</li>
<li>
<p>Copy bin/flex-dynamic-data.jar in /tomcat/webapps/lcds-samples/WEB-INF/lib.</p>
<p>flex-dynamic-data.jar includes two classes: DestinationService and DynamicJDBCAssembler. DestinationService creates data management destinations on the fly. Each destination created by DestinationService uses an instance of DynamicJDBCAssembler to dynamically generate the appropriate SQL statements for the fill, getItem, createItem, updateItem and deleteItem operations.  You never have to directly work with or configure these two classes: they are automatically invoked by the client-side DynamicDataService component. The source code is available in /flex-dynamic-data/src/java.</p>
</li>
<li>
<p>Open remoting-config.xml in lcds-samples\WEB-INF\flex and add the following destination:</p>
<pre>
<code>    &lt;destination id="destination-factory"&gt;
        &lt;properties&gt;
            &lt;source&gt;flex.dynamic.data.DestinationService&lt;/source&gt;
        &lt;/properties&gt;
    &lt;/destination&gt;</code>
</pre>
</li>
<li>
<p>Copy flex-dynamic-data.properties in /tomcat/webapps/lcds-samples/WEB-INF/classes.</p>
<p>Open the file. Notice that the default database is set to the HSQLDB sample database (flexdemodb) shipping with the product.</p>
</li>
<li>
<p>Create a new Flex Builder project. Specify J2EE as the application server type, check the &#8220;Use remote object access service&#8221; checkbox, uncheck the &#8220;Create a combined Java/Flex project using WTP&#8221; checkbox, and point to the lcds-samples web application:</p>
<ul>
<li>Root folder: c:\lcds26\tomcat\webapps\lcds-samples</li>
<li>Root URL: http://localhost:8400/lcds-samples</li>
<li>Context root: /lcds-samples</li>
</ul>
</li>
<li>
<p>Add flex_dynamic_data.swc to your build path.</p>
<p>flex_dynamic_data.swc includes the DynamicDataService class. The source code is available in /flex-dynamic-data/src/as.</p>
</li>
<li>Code the application as follows.
<pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:data="flex.dynamic.data.*"&gt;

	&lt;mx:ArrayCollection id="items"/&gt;

	&lt;data:DynamicDataService id="ds" destination="dynamic.company"
		ready="ds.fill(items)" /&gt;

	&lt;mx:DataGrid dataProvider="{items}" width="100%" height="100%" editable="true"/&gt;

&lt;/mx:Application&gt;</code></pre>
</li>
<li>Run the application.</li>
<li>Modify data (not the primary key)</li>
<li>Click the refresh button and notice that the data has been persisted.</li>
<li>Open a second browser and access the same URL. Modify data in one browser and notice that changes are automatically being pushed to the other browser.</li>
</ol>
<p>Disclaimer: The mini framework provided with this sample is for demo purpose only. The goal is not to provide a production quality solution: I took many shortcuts and although it may be good for rapid prototyping, the specific strategy implemented here has serious limitations (single table, no support for associations, etc.). The goal is to illustrate what’s possible when building generic assemblers and runtime configuration, and hopefully generate a few ideas.</p>
]]></content:encoded>
			<wfw:commentRss>http://coenraets.org/blog/2008/09/zero-code-data-access-using-livecycle-data-services-runtime-configuration/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Google Maps Collaboration Using Google&#8217;s New ActionScript API, Flex, and BlazeDS</title>
		<link>http://coenraets.org/blog/2008/05/google-maps-collaboration-using-googles-new-actionscript-api-and-blazeds/</link>
		<comments>http://coenraets.org/blog/2008/05/google-maps-collaboration-using-googles-new-actionscript-api-and-blazeds/#comments</comments>
		<pubDate>Fri, 23 May 2008 20:00:06 +0000</pubDate>
		<dc:creator>christophe</dc:creator>
		
		<category><![CDATA[BlazeDS]]></category>

		<category><![CDATA[Collaboration]]></category>

		<category><![CDATA[Flex]]></category>

		<category><![CDATA[LCDS]]></category>

		<guid isPermaLink="false">http://coenraets.org/blog/?p=81</guid>
		<description><![CDATA[
Google recently released the Google Maps API for Flash. I took the opportunity to create a Google version of the MapRooms sample application I posted recently. MapRooms works like Chat Rooms. You can create a room, or join an existing one. In addition to chatting, MapRooms allows you to collaborate on a map: the application [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://coenraets.org/apps/gmaprooms/gmaprooms.gif"/><br />
Google recently released the <a href="http://code.google.com/apis/maps/documentation/flash/">Google Maps API for Flash</a>. I took the opportunity to create a Google version of the MapRooms sample application <a href="http://coenraets.org/blog/2008/04/yahoo-maps-collaboration-using-flex-and-blazeds/">I posted recently</a>. MapRooms works like Chat Rooms. You can create a room, or join an existing one. In addition to chatting, MapRooms allows you to collaborate on a map: the application leverages the real time capabilities of BlazeDS or LCDS to provide map synchronization between users in the room, and allow you to &#8220;whiteboard&#8221; on top of a map.<br />
<span id="more-81"></span></p>
<h3>Testing the hosted version</h3>
<p>Disclaimer: I&#8217;m currently hosting the application on the server I use to host this blog (basic PHP and Tomcat hosting plan). I don&#8217;t know much about the characteristics of my server, but I&#8217;m probably sharing it with a few dozens of other domains and the resources allocated to me are obviously limited in that shared environment. This is clearly not the ideal environment to host a potentially large scale real time application and I&#8217;m investigating other hosting solutions. In the meantime, if you experience difficulties running the app, you can install it locally using the instructions provided below (in &#8220;Local installation instructions&#8221;). The hosted version tries to connect using RTMP by default (available only as part of LCDS) and falls back to &#8220;long AMF polling&#8221; or regular AMF polling if the RTMP connection fails.</p>
<ol>
<li>Access <a href="http://coenraets.org/apps/gmaprooms/gmaprooms.html">http://coenraets.org/apps/gmaprooms/gmaprooms.html</a> on two different machines or in two browser windows on the same machine.</li>
<li>Make sure you logon with two different user names and <strong>the same room name</strong>.</li>
<li>Move the map in one browser and notice that the position of the map is synchronized in the other browser.</li>
<li>You can also search an address in one browser and the resulting map position will appear in the two browsers.</li>
<li>The zoom level and the map type are also synchronized between users.</li>
<li>Click the &#8220;Whiteboard&#8221; button in one browser, pick a color to draw on the map (upper left corner), and start drawing.</li>
</ol>
<p>Note: you can right-click the application and select View Source or click <a href="http://coenraets.org/apps/gmaprooms/srcview/index.html">here</a> to see the source code of the application.</p>
<h3>Local installation instructions:</h3>
<ol>
<li>Install BlazeDS. You can download the BlazeDS turnkey server (a version of Tomcat with BlazeDS preinstalled) <a href="http://opensource.adobe.com/wiki/display/blazeds/Release+Builds">here</a>.</li>
<li>Open {blazeds-install-dir}/tomcat/webapps/samples/WEB-INF/flex/services-config.xml and add an AMF long polling channel defined as follows:
<p>
<pre><code>&lt;channel-definition id="my-longpolling-amf" class="mx.messaging.channels.AMFChannel"&gt;
	&lt;endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amflongpolling" class="flex.messaging.endpoints.AMFEndpoint"/&gt;
	&lt;properties&gt;
		&lt;polling-enabled&gt;true&lt;/polling-enabled&gt;
		&lt;polling-interval-seconds&gt;5&lt;/polling-interval-seconds&gt;
		&lt;wait-interval-millis&gt;60000&lt;/wait-interval-millis&gt;
		&lt;client-wait-interval-millis&gt;1&lt;/client-wait-interval-millis&gt;
		&lt;max-waiting-poll-requests&gt;200&lt;/max-waiting-poll-requests&gt;
	&lt;/properties&gt;
&lt;/channel-definition&gt;</code></pre>
</p>
</li>
<li>Open WEB-INF/messaging-config.xml and add the following destination:
<p>
<pre><code>&lt;destination id="gmaprooms"&gt;
	&lt;properties&gt;
		&lt;server&gt;
			&lt;allow-subtopics&gt;true&lt;/allow-subtopics&gt;
			&lt;subtopic-separator&gt;.&lt;/subtopic-separator&gt;
		&lt;/server&gt;
	&lt;/properties&gt;
	&lt;channels&gt;
		&lt;channel ref="my-longpolling-amf"/&gt;
		&lt;channel ref="my-polling-amf"/&gt;
	&lt;/channels&gt;
&lt;/destination&gt;</code></pre>
</p>
</li>
<li>(Re)start the BlazeDS turnkey server.</li>
<li>Download the source code of the Google Maps Application <a href="http://coenraets.org/apps/gmaprooms/srcview/gmaprooms.zip">here</a>.</li>
<li>Create a Flex Builder project for the Flex application (gmaprooms). <strong>Make sure you configure your Flex Builder project to work with BlazeDS.</strong> To read instructions on how to set up a Flex Builder project that works with BlazeDS, make sure your BlazeDS turnkey server is started, and click <a href="http://localhost:8400/samples/fb-project-setup.htm">here</a>.</li>
<li>Download the Google Maps ActionScript 3 API <a href="http://code.google.com/apis/maps/documentation/flash/">here</a>, and add the swc file in the libs folder of your project.</li>
<li>Get a Google Maps API key and assign it to map.key in the initMap() function in MapArea.mxml.</li>
<li>Compile the application.</li>
<li>Open the Flex application in two browser windows (to simulate two users in different locations) and test the application as described above (in &#8220;Testing the hosted version&#8221;).</li>
</ol>
<p><br/><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://coenraets.org/blog/2008/05/google-maps-collaboration-using-googles-new-actionscript-api-and-blazeds/feed/</wfw:commentRss>
		</item>
		<item>
		<title>InSync: Automatic Offline Data Synchronization in AIR using LCDS 2.6</title>
		<link>http://coenraets.org/blog/2008/05/insync-automatic-offline-data-synchronization-in-air-using-lcds-26/</link>
		<comments>http://coenraets.org/blog/2008/05/insync-automatic-offline-data-synchronization-in-air-using-lcds-26/#comments</comments>
		<pubDate>Tue, 20 May 2008 03:31:15 +0000</pubDate>
		<dc:creator>christophe</dc:creator>
		
		<category><![CDATA[Air]]></category>

		<category><![CDATA[Flex]]></category>

		<category><![CDATA[LCDS]]></category>

		<category><![CDATA[SQLite]]></category>

		<category><![CDATA[Offline]]></category>

		<guid isPermaLink="false">http://coenraets.org/blog/?p=80</guid>
		<description><![CDATA[

LCDS 2.6 allows you to build AIR applications with automatic offline data synchronization. This feature leverages the SQLite relational database system embedded in the AIR runtime, but the advantage is that the data synchronization process is entirely automatic: you don’t have to write SQL statements or synchronization logic to keep your local database in sync [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://coenraets.org/apps/insync/insync1.png" alt="" /></p>
<p><img src="http://coenraets.org/apps/insync/insync2.png" alt="" /></p>
<p>LCDS 2.6 allows you to build AIR applications with automatic offline data synchronization. This feature leverages the SQLite relational database system embedded in the AIR runtime, but the advantage is that the data synchronization process is entirely automatic: you don’t have to write SQL statements or synchronization logic to keep your local database in sync with your central database.</p>
<p>I have been getting a number of questions related to this feature, so I decided to build a sample application that demonstrates how it works.<br />
<span id="more-80"></span><br />
In this application the synchronization process is implicit. When you are online, the cache (a SQLite database) is automatically updated along with the server database to make sure the user can go offline with the latest data without explicitly triggering a synchronization process. When you are offline, the changes are saved in the local cache. If the network becomes available while working in the application, the application will detect the network status change and automatically synchronize data (send your offline changes to the server, and get changes made by other users while you were offline).</p>
<h3>Installation Instructions</h3>
<ol>
<li>If you haven&#8217;t already done so, <a href="http://labs.adobe.com/technologies/livecycle_dataservices2_6/">install LCDS 2.6</a>.</li>
<li>Unzip <a href="http://coenraets.org/apps/insync/insync.zip">insync.zip</a></li>
<li>Copy the content of the sampledb folder in the sampledb folder of your existing LCDS directory</li>
<li>Copy the content of the tomcat folder in the tomcat folder of your existing LCDS directory</li>
<li>Add the following destination to data-management-config.xml
<pre><code>&lt;destination id="insync"&gt;
    &lt;adapter ref="java-dao" /&gt;
    &lt;properties&gt;
        &lt;source&gt;lcds.samples.contact.ContactAssembler&lt;/source&gt;
        &lt;scope&gt;application&lt;/scope&gt;
        &lt;metadata&gt;
            &lt;identity property="contactId" undefined-value="0"/&gt;
        &lt;/metadata&gt;
    &lt;/properties&gt;
&lt;/destination&gt;</code></pre>
</li>
<li>Restart the sample database: run sampledb.bat (Windows) or sampledb.sh (Unix) in the sampledb directory</li>
<li>Restart your application server</li>
</ol>
<h3>Quick Tour</h3>
<ol>
<li>Install and run the AIR application. Notice the green light in the status bar indicating that the application is in online mode.
<p><div id="flashcontent2101" style="width:215px; height:180px;"><strong>Please upgrade your Flash Player</strong> This is the content that would be shown if the user does not have Flash Player 9.0.115 or higher installed.</div><script type="text/javascript">
// <![CDATA[
var so = new SWFObject("http://coenraets.org/blog/wp-content/plugins/air-badge/AIRInstallBadge.swf", "Badge", "215", "180", "9.0.115", "#FFFFFF");
so.useExpressInstall("http://coenraets.org/blog/wp-content/plugins/air-badge/expressinstall.swf");
so.addVariable("airversion", "1.0");
so.addVariable("appname", "sqliteadmin");
so.addVariable("appurl", "http://coenraets.org/apps/insync/insync.air");
so.addVariable("appid", "sqliteadmin");
so.addVariable("pubid", "");
so.addVariable("appversion", "v1.0");
so.addVariable("imageurl", "http://coenraets.org/apps/insync/insync1.png");
so.addVariable("appinstallarg", "installed from web");
so.addVariable("applauncharg", "launched from web");
so.addVariable("helpurl", "help.html");
so.addVariable("hidehelp", "true");
so.addVariable("skiptransition", "false");
so.addVariable("titlecolor", "#00AAFF");
so.addVariable("buttonlabelcolor", "#00AAFF");
so.addVariable("appnamecolor", "#00AAFF");
so.addVariable("str_err_airswf", "<u>Running locally?</u><br/><br/>The AIR proxy swf won't load properly when this demo is run from the local file system.");
so.write("flashcontent2101");
// ]]&gt;
</script>

</p>
</li>
<li>Double click a contact to view the contact details.</li>
<li>Modify the data in a few fields and click Save. Your server console indicates that the contact has been updated.</li>
<li>Click the + button in the application title bar. Enter a first name, last name, etc and click Save. Your server console indicates that the contact has been updated.</li>
<li>Shut down the server</li>
<li>Notice that the green light turns grey to indicate that the application is now working in offline mode.</li>
<li>Repeat steps 2 to 4 above: changes are saved locally. Notice that the offline status (not modified, created, or updated is displayed in the contact form (bottom left corner)</li>
<li>Restart the server.</li>
<li>The green light appears in that status bar as soon as the server is up and running. Notice that LCDS automatically detects the offline changes and sends them to the server.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://coenraets.org/blog/2008/05/insync-automatic-offline-data-synchronization-in-air-using-lcds-26/feed/</wfw:commentRss>
		</item>
		<item>
		<title>&#8220;LiveHelp / Call Center&#8221; Application Source Code</title>
		<link>http://coenraets.org/blog/2008/05/livehelp-call-center-application-source-code/</link>
		<comments>http://coenraets.org/blog/2008/05/livehelp-call-center-application-source-code/#comments</comments>
		<pubDate>Fri, 16 May 2008 20:27:20 +0000</pubDate>
		<dc:creator>christophe</dc:creator>
		
		<category><![CDATA[BlazeDS]]></category>

		<category><![CDATA[Collaboration]]></category>

		<category><![CDATA[Flex]]></category>

		<category><![CDATA[LCDS]]></category>

		<category><![CDATA[LiveCycle Data Services]]></category>

		<guid isPermaLink="false">http://coenraets.org/blog/?p=77</guid>
		<description><![CDATA[I recently posted an example of a “Live Help / Call Center” application built with Flex and BlazeDS. A number of you have asked me for the source code. So here it is&#8230;

Installation instructions

Install BlazeDS or LCDS.
Download the client-side of the application. The end-user application is mortgageapp.mxml, and the support representative application is callcenter.mxml.
Download and [...]]]></description>
			<content:encoded><![CDATA[<p>I recently posted an example of a <a href="http://coenraets.org/blog/2008/04/live-help-call-center-application-with-flex-and-blazeds/">“Live Help / Call Center” application</a> built with Flex and BlazeDS. A number of you have asked me for the source code. So here it is&#8230;<br />
<span id="more-77"></span></p>
<h3>Installation instructions</h3>
<ol>
<li>Install <a href="http://opensource.adobe.com/wiki/display/blazeds/BlazeDS">BlazeDS</a> or <a href="http://labs.adobe.com/technologies/livecycle_dataservices2_6/">LCDS</a>.</li>
<li><a href="http://coenraets.org/blog/wp-content/uploads/2008/05/livehelp-client.zip">Download</a> the client-side of the application. The end-user application is mortgageapp.mxml, and the support representative application is callcenter.mxml.</li>
<li><a href="http://coenraets.org/blog/wp-content/uploads/2008/05/livehelp-server.zip">Download</a> and deploy the server-side of the application.</li>
<li>Add the following destination in WEB-INF/flex/remoting-config.xml.
<pre><code>&lt;destination id="ticket-service"&gt;
    &lt;properties&gt;
        &lt;source&gt;flex.samples.livehelp.TicketService&lt;/source&gt;
        &lt;scope&gt;application&lt;/scope&gt;
    &lt;/properties&gt;
    &lt;channels&gt;
        &lt;channel ref="my-rtmp"/&gt;
        &lt;channel ref="my-amf"/&gt;
    &lt;/channels&gt;
&lt;/destination&gt;</code></pre>
<p>NOTE: If you are using BlazeDS, remove the line that defines the &#8220;my-rtmp&#8221; channel.
</li>
<li>Add the following destination in WEB-INF/flex/messaging-config.xml.
<pre><code>&lt;destination id="callcenter"&gt;
    &lt;properties&gt;
        &lt;server&gt;
            &lt;allow-subtopics&gt;true&lt;/allow-subtopics&gt;
            &lt;subtopic-separator&gt;.&lt;/subtopic-separator&gt;
        &lt;/server&gt;
    &lt;/properties&gt;
    &lt;channels&gt;
        &lt;channel ref="my-rtmp"/&gt;
        &lt;channel ref="my-longpolling-amf"/&gt;
    &lt;/channels&gt;
&lt;/destination&gt;</code></pre>
<p>NOTE: If you are using BlazeDS, remove the line that defines the &#8220;my-rtmp&#8221; channel in the above destination, and add the following channel definition in WEB-INF/flex/services-config.xml:</p>
<pre><code>&lt;channel-definition id="my-longpolling-amf" class="mx.messaging.channels.AMFChannel"&gt;
	&lt;endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amflongpolling" class="flex.messaging.endpoints.AMFEndpoint"/&gt;
	&lt;properties&gt;
		&lt;polling-enabled&gt;true&lt;/polling-enabled&gt;
		&lt;polling-interval-seconds&gt;3&lt;/polling-interval-seconds&gt;
		&lt;wait-interval-millis&gt;60000&lt;/wait-interval-millis&gt;
		&lt;client-wait-interval-millis&gt;1&lt;/client-wait-interval-millis&gt;
		&lt;max-waiting-poll-requests&gt;200&lt;/max-waiting-poll-requests&gt;
	&lt;/properties&gt;
&lt;/channel-definition&gt;</code></pre>
</li>
<li>Follow the instructions in my <a href="http://coenraets.org/blog/2008/04/live-help-call-center-application-with-flex-and-blazeds/">original post</a> to experience the application.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://coenraets.org/blog/2008/05/livehelp-call-center-application-source-code/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Live Help / Call Center Application with Flex and BlazeDS</title>
		<link>http://coenraets.org/blog/2008/04/live-help-call-center-application-with-flex-and-blazeds/</link>
		<comments>http://coenraets.org/blog/2008/04/live-help-call-center-application-with-flex-and-blazeds/#comments</comments>
		<pubDate>Tue, 29 Apr 2008 21:02:05 +0000</pubDate>
		<dc:creator>christophe</dc:creator>
		
		<category><![CDATA[BlazeDS]]></category>

		<category><![CDATA[Collaboration]]></category>

		<category><![CDATA[Flex]]></category>

		<category><![CDATA[LiveCycle Data Services]]></category>

		<guid isPermaLink="false">http://coenraets.org/blog/2008/04/live-help-call-center-application-with-flex-and-blazeds/</guid>
		<description><![CDATA[
I recently posted a number of examples (Yahoo Maps Collaboration and Collaborative Data Entry) showing how to use the BlazeDS / LCDS Message Service to build collaborative applications. In this post, I’m extending the Collaborative Forms application to provide an example of a more complete and real life &#8220;Live Help / Call Center&#8221; application.

The use [...]]]></description>
			<content:encoded><![CDATA[<p><a href='http://coenraets.org/apps/livehelp/customer.html'><img src='http://coenraets.org/blog/wp-content/uploads/2008/04/customer3.jpg' alt='customer3.jpg' /></a><a href='http://coenraets.org/apps/livehelp/callcenter.html'><img src='http://coenraets.org/blog/wp-content/uploads/2008/04/callcenter.jpg' alt='callcenter.jpg' /></a>
<p>I recently posted a number of examples (<a href="http://coenraets.org/blog/2008/04/yahoo-maps-collaboration-using-flex-and-blazeds/">Yahoo Maps Collaboration</a> and <a href="http://coenraets.org/blog/2008/04/collaborative-data-entry-with-flex-and-blazeds/">Collaborative Data Entry</a>) showing how to use the BlazeDS / LCDS Message Service to build collaborative applications. In this post, I’m extending the Collaborative Forms application to provide an example of a more complete and real life &#8220;Live Help / Call Center&#8221; application.</p>
<p><span id="more-72"></span></p>
<p>The use case goes like this: a customer tries to complete a task (in this case: apply for a mortgage) on a web site, gets in trouble, and starts a “Live Help” session with a support representative. Among other things, the support representative can remotely drive the customer’s application, enter data collaboratively with the customer, chat with the customer using a text-based and/or a video-chat session, close the support ticket, etc.</p>
<p>To make it easier for you to experience the application, I’m hosting it on my server. You can test it using the instructions below. </p>
<h3>Testing the application:</h3>
<ol>
<li>
<p>Open a browser and access <a href="http://coenraets.org/apps/livehelp/customer.html">http://coenraets.org/apps/livehelp/customer.html</a>. Enter your email address and click Start.</p>
<p>Note: Your email address is used as a unique identifier to allow you to test the application in your own sandbox: your experiments are isolated from the experiments of other users testing the application.</p>
</li>
<li>
<p>Open another browser window (on the same computer or on a different computer) and access <a href="http://coenraets.org/apps/livehelp/callcenter.html">http://coenraets.org/apps/livehelp/callcenter.html</a>. Enter your email address and click “Start”. <strong>Make sure you use the same email address you used in the customer application.</strong></p>
</li>
<li>
<p>In the customer application, enter some data in different tabs.</p>
</li>
<li>
<p>Click “Start session” to initiate a Live Help session with a support rep.</p>
</li>
<li>
<p>Notice that a new ticket appears in the call center application.</p>
</li>
<li>
<p>In the call center application select the new ticket, and click “Handle Ticket” (upper right corner). A message should appear in the chat window of the customer application. Notice that the data you typed in the customer application automatically appears in the support rep application.</p>
</li>
<li>
<p>Type a chat message in the support rep app: the message appears in the customer app.</p>
</li>
<li>
<p>The support rep can remotely drive the customer application: in the support rep application, change the selected Accordion tab, and notice that the customer application’s user interface is automatically synchronized. This works in both directions: you can change the Accordion tab in the customer app and the support rep’s user interface will be automatically synchronized as well.</p>
</li>
<li>
<p>The application supports collaborative data entry (collaborative form filling): Enter some data in the support rep application: notice that the data automatically appears in the customer application. This works in both directions as well.</p>
</li>
<li>
<p>On the Employment History tab, add a few companies (including start date, end date, and salary) and notice that the employment history list is automatically synchronized in the other browser.</p>
</li>
<li>
<p>If you have a webcam attached to your system, click the “Start webcam” button in one of the applications.</p>
<p>Note: Live video streaming is powered by Flash Media Server. Since I don’t have access to a hosted instance of Flash Media Server, live video streaming is not enabled in this hosted version.</p>
</li>
</ol>
<p>I will post the source code in the coming days.</p>
]]></content:encoded>
			<wfw:commentRss>http://coenraets.org/blog/2008/04/live-help-call-center-application-with-flex-and-blazeds/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
