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

<channel>
	<title>Christophe Coenraets &#187; Collaboration</title>
	<atom:link href="http://coenraets.org/blog/category/collaboration/feed/" rel="self" type="application/rss+xml" />
	<link>http://coenraets.org/blog</link>
	<description>Rich Internet Applications, Flex, AIR, Java, Android</description>
	<lastBuildDate>Fri, 23 Jul 2010 14:45:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Adobe Collaborates with SpringSource for Enhanced Flex / Spring Integration</title>
		<link>http://coenraets.org/blog/2008/12/adobe-collaborates-with-springsource-for-enhanced-flex-spring-integration/</link>
		<comments>http://coenraets.org/blog/2008/12/adobe-collaborates-with-springsource-for-enhanced-flex-spring-integration/#comments</comments>
		<pubDate>Mon, 08 Dec 2008 17:52:21 +0000</pubDate>
		<dc:creator>Christophe Coenraets</dc:creator>
				<category><![CDATA[Collaboration]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://coenraets.org/blog/?p=95</guid>
		<description><![CDATA[I have written several times about the Flex / Spring integration on this blog. Now things are about to get even simpler and more integrated. This is very exciting news! From the press release: Adobe Systems Incorporated today announced that it is working with SpringSource to simplify the development and deployment of rich enterprise Java(TM) [...]]]></description>
			<content:encoded><![CDATA[<p>I have written several times about the Flex / Spring integration on this blog. Now things are about to get even simpler and more integrated. This is very exciting news!</p>
<p>From the press release:</p>
<p>Adobe Systems Incorporated today announced that it is working with SpringSource to simplify the development and deployment of rich enterprise Java(TM) applications through a collaboration that will provide integration between the Adobe(R) Flash(R) and SpringSource platforms. This collaboration will make it easy for Java developers to create enterprise-class rich Internet applications (RIAs) using Adobe Flex(R) software, a cornerstone of the Adobe Flash Platform, and Spring, the de facto standard for enterprise Java.</p>
<p>With support from Adobe, SpringSource is introducing Spring BlazeDS Integration, a new open source project to provide tight integration between Spring and BlazeDS, Adobe&#8217;s open source server-based Java remoting and Web messaging technology. A beta version of the Spring BlazeDS Integration will be available from SpringSource in mid-December.<br />
Also in development for early next year is the SpringSource Adapter for Adobe(R) LiveCycle(R) Data Services ES(TM) which will provide integration with Adobe LiveCycle Data Services ES, enabling the creation of server push-based applications based on Adobe Flex for real-time and near real-time solutions.</p>
<p>Read the press release <a href="http://eon.businesswire.com/portal/site/eon/permalink/?ndmViewId=news_view&#038;newsId=20081207005032&#038;newsLang=en">here</a> or <a href="http://www.marketwatch.com/news/story/Adobe-Collaborates-SpringSource-Enhanced-Integration/story.aspx?guid={E06D4525-831D-4718-AA6F-39FD519C28F3}">here</a></p>
]]></content:encoded>
			<wfw:commentRss>http://coenraets.org/blog/2008/12/adobe-collaborates-with-springsource-for-enhanced-flex-spring-integration/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</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 Coenraets</dc:creator>
				<category><![CDATA[Air]]></category>
		<category><![CDATA[Collaboration]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[LiveCycle Data Services]]></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 [...]]]></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 install the new version and download the source code <a href="http://www.adobe.com/devnet/air/flex/samples.html#salesbuilder">here</a>.</p>
<p>A basic script explaining how to use the application is available <a href="http://www.adobe.com/devnet/air/flex/articles/salesbuilder_demo.html">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://coenraets.org/blog/2008/11/salesbuilder-15-with-new-air-15-database-encryption/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</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 Coenraets</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 class="brush: xml;">
&lt;channel-definition id=&quot;my-longpolling-amf&quot; class=&quot;mx.messaging.channels.AMFChannel&quot;&gt;
	&lt;endpoint url=&quot;http://{server.name}:{server.port}/{context.root}/messagebroker/amflongpolling&quot; class=&quot;flex.messaging.endpoints.AMFEndpoint&quot;/&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;
</pre>
</p>
</li>
<li>Open WEB-INF/messaging-config.xml and add the following destination:
<p><pre class="brush: xml;">
&lt;destination id=&quot;gmaprooms&quot;&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=&quot;my-longpolling-amf&quot;/&gt;
		&lt;channel ref=&quot;my-polling-amf&quot;/&gt;
	&lt;/channels&gt;
&lt;/destination&gt;
</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>
		<slash:comments>69</slash:comments>
		</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 Coenraets</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 [...]]]></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.
<p><pre class="brush: xml;">
&lt;destination id=&quot;ticket-service&quot;&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=&quot;my-rtmp&quot;/&gt;
        &lt;channel ref=&quot;my-amf&quot;/&gt;
    &lt;/channels&gt;
&lt;/destination&gt;
</pre>
</p>
<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.
<p><pre class="brush: xml;">
&lt;destination id=&quot;callcenter&quot;&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=&quot;my-rtmp&quot;/&gt;
        &lt;channel ref=&quot;my-longpolling-amf&quot;/&gt;
    &lt;/channels&gt;
&lt;/destination&gt;
</pre>
</p>
<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>
<p><pre class="brush: xml;">
&lt;channel-definition id=&quot;my-longpolling-amf&quot; class=&quot;mx.messaging.channels.AMFChannel&quot;&gt;
	&lt;endpoint url=&quot;http://{server.name}:{server.port}/{context.root}/messagebroker/amflongpolling&quot; class=&quot;flex.messaging.endpoints.AMFEndpoint&quot;/&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;
</pre>
</p>
</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>
		<slash:comments>63</slash:comments>
		</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 Coenraets</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 [...]]]></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>
		<slash:comments>73</slash:comments>
		</item>
		<item>
		<title>Yahoo Maps Collaboration using Flex and BlazeDS</title>
		<link>http://coenraets.org/blog/2008/04/yahoo-maps-collaboration-using-flex-and-blazeds/</link>
		<comments>http://coenraets.org/blog/2008/04/yahoo-maps-collaboration-using-flex-and-blazeds/#comments</comments>
		<pubDate>Wed, 02 Apr 2008 22:34:09 +0000</pubDate>
		<dc:creator>Christophe Coenraets</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/2008/04/yahoo-maps-collaboration-using-flex-and-blazeds/</guid>
		<description><![CDATA[Two years ago, I wrote a simple Google Maps collaboration example. The Flex application listened to Google Maps events to synchronize maps between different users. It also added nice collaboration features such as videoconferencing and a collaborative whiteboard overlaid on top of the map. In addition to demonstrating the real-time messaging capabilities of Flex, this [...]]]></description>
			<content:encoded><![CDATA[<p><img src="/maprooms/maprooms.png"/></p>
<p>Two years ago, I wrote a simple <a href="http://coenraets.org/blog/2006/06/google-maps-collaboration-using-flex-flash-media-server-and-ajax-updated-for-flex-2-ga/">Google Maps collaboration example</a>. The Flex application listened to Google Maps events to synchronize maps between different users. It also added nice collaboration features such as videoconferencing and a collaborative whiteboard overlaid on top of the map. In addition to demonstrating the real-time messaging capabilities of Flex, this application also illustrated Flex/Ajax integration using External Interface.</p>
<p>Two recent events prompted me to revisit this sample:</p>
<ol>
<li>Yahoo recently released an <a href="http://developer.yahoo.com/flash/maps/">ActionScript 3 API for Yahoo Maps</a>.</li>
<li>Adobe recently released the Remoting and Messaging features of LiveCycle Data Services as an <a href="http://opensource.adobe.com/blazeds">Open Source project named BlazeDS</a>.</li>
</ol>
<p>So, I updated the sample to work with the Yahoo Maps ActionScript API and BlazeDS (or LCDS). No need to communicate between Ajax and Flex in this version since the rendering of the map is entirely done within the Flex application.</p>
<p><span id="more-70"></span></p>
<p><strong>Testing the hosted version</strong></p>
<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/maprooms/maprooms.html">http://coenraets.org/maprooms/maprooms.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 Map Sharing 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/maprooms/srcview/index.html">here</a> to see the source code of the application.</p>
<p><strong>Local installation instructions:</strong></p>
<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:
<pre class="brush: xml;">
&lt;channel-definition id=&quot;my-longpolling-amf&quot; class=&quot;mx.messaging.channels.AMFChannel&quot;&gt;
	&lt;endpoint url=&quot;http://{server.name}:{server.port}/{context.root}/messagebroker/amflongpolling&quot; class=&quot;flex.messaging.endpoints.AMFEndpoint&quot;/&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;
</pre>
</li>
<li>Open WEB-INF/messaging-config.xml and add the following destination:
<pre class="brush: xml;">
&lt;destination id=&quot;flexmaps&quot;&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=&quot;my-longpolling-amf&quot;/&gt;
		&lt;channel ref=&quot;my-polling-amf&quot;/&gt;
	&lt;/channels&gt;
&lt;/destination&gt;
</pre>
</li>
<li>(Re)start the BlazeDS turnkey server.</li>
<li>Download the source code of the Yahoo Maps Application <a href="http://coenraets.org/maprooms/srcview/maprooms.zip">here</a>.</li>
<li>Create a Flex Builder project for the Flex application (maprooms). <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 Yahoo Maps ActionScript 3 API <a href="http://developer.yahoo.com/flash/maps/">here</a>, and add YahooMap.swc in the libs folder of your project.</li>
<li>Get a Yahoo API key <a href=http://developer.yahoo.com/wsregapp/index.php">here</a> and assign it to the appid variable 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/04/yahoo-maps-collaboration-using-flex-and-blazeds/feed/</wfw:commentRss>
		<slash:comments>72</slash:comments>
		</item>
		<item>
		<title>Flex Test Drive Server for Java Developers (Tomcat-based)</title>
		<link>http://coenraets.org/blog/2007/01/flex-test-drive-server-for-java-developers-tomcat-based/</link>
		<comments>http://coenraets.org/blog/2007/01/flex-test-drive-server-for-java-developers-tomcat-based/#comments</comments>
		<pubDate>Fri, 12 Jan 2007 17:53:48 +0000</pubDate>
		<dc:creator>Christophe Coenraets</dc:creator>
				<category><![CDATA[Collaboration]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[hibernate]]></category>

		<guid isPermaLink="false">http://coenraets.org/blog/2007/01/flex-test-drive-server-for-java-developers-tomcat-based/</guid>
		<description><![CDATA[I have been working on a Tomcat-based “Flex Test Drive Server”. The Test Drive Server is a minimal and ready-to-use version of Tomcat (currently version 5.5.20) in which the Flex Data Services (version 2.0.1) WAR file has already been deployed and configured along with a variety of tutorials and sample applications. It allows you to [...]]]></description>
			<content:encoded><![CDATA[<p>I have been working on a Tomcat-based “Flex Test Drive Server”. The Test Drive Server is a minimal and ready-to-use version of Tomcat (currently version 5.5.20) in which the Flex Data Services (version 2.0.1) WAR file has already been deployed and configured along with a variety of tutorials and sample applications. It allows you to get up and running integrating Flex with Java back-ends in a matter of minutes. Download fds-tomcat.zip, expand the file, and run&#8230;</p>
<p>The Test Drive Server includes:</p>
<ol>
<li>An updated version of my 30 minutes Test drive for Java developers</li>
<li>A brand new Flex Data Management Services tutorial</li>
<li>Flex/Spring integration samples running &#8220;out-of-the-box&#8221;</li>
<li>Flex/Hibernate integration samples running &#8220;out-of-the-box&#8221;</li>
<li>Flex/JMS integration samples (JMS powered by ActiveMQ) running &#8220;out-of-the-box&#8221;</li>
<li>A new version of my Real Time Market Data application with advanced messaging features: Java API (no JMS in this version), subtopics, etc.</li>
<li>Collaboration Dashboard</li>
</ol>
<p><span id="more-19"></span></p>
<h5>Installation Instructions</h5>
<ol>
<li>Proceed to the Test Drive Server <a href="/download/fds-tomcat.zip">download page</a></li>
<li>Expand fds-tomcat.zip
<p>NOTE: The instructions in the documentation assume that you expand fds-tomcat in your root directory. You can expand fds-tomcat anywhere else. Just make sure you adjust the path in the samples and tutorial instructions accordingly.
</li>
<li>Open install.htm in the fds-tomcat directory for information on running the Test Drive Server.</li>
</ol>
<p>Disclaimer: The Test Drive Server is currently not an officially supported product. I’ll of course do my best to answer your questions, and your feedback is very much appreciated. It is intended to allow Java Developers to quickly evaluate or/and get started with Flex in a Java environment.</p>
<p>ERRATA: On page 4 in the tutorial PDF: “On the Java Settings page, specify fdms-tomcat/classes as the Default output folder, and click Finish”. The name of the folder is incorrect: it should read: Specify “fds-tomcat/classes” as the Default output folder (The screen shot is correct).</p>
<h5>More Info</h5>
<p>The Flex Test Drive Server includes the following products, frameworks, and libraries (All these products are configured to work together “out-of-the-box” when you install the Test Drive Server) :</p>
<ul>
<li><a href="http://tomcat.apache.org/">Tomcat</a> 5.5.20</li>
<li><a href="http://www.adobe.com/products/flex/dataservices/">Flex Data Services</a> (FDS 2.0.1)</li>
<li><a href="http://jotm.objectweb.org/">JOTM</a> (JTA implementation)
<p>The Flex Data Management Services leverage the Java Transaction API (JTA). Because<br />
      Tomcat doesn&rsquo;t provide a JTA implementation, the Test Drive Server includes JOTM (an open source implementation of the Java Transaction API).  You don&#8217;t need JOTM if your application server implements the full Java EE stack.</p>
</li>
<li><a href="http://www.activemq.org">ActiveMQ</a> (JMS implementation)
<p>The Flex Data Services integrate with JMS (see integration examples in the Test Drive Server). Because Tomcat doesn&#8217;t provide a JMS implementation, we use ActiveMQ (an open-source JMS provider) as part of this Test Drive Server. You don&#8217;t need ActiveMQ if your application server implements the full Java EE stack, or if your application doesn&#8217;t use JMS.</p>
</li>
<li><a href="http://www.springframework.org/">Spring</a> 2
<p>Flex integrates with the Spring framework through the Flex SpringFactory (see integration examples in the Test Drive Server). Spring 2 is part of the Flex Test Drive Server to demonstrate this Flex/Spring integration.</p>
</li>
<li><a href="http://www.hibernate.org/">Hibernate</a> 3.2
<p>Flex integrates with the Hibernate through the Flex HibernateAssembler(see integration examples in the Test Drive Server). Hibernate is part of the Flex Test Drive Server to demonstrate this Flex/Hibernate integration.</p>
</li>
<li><a href="http://hsqldb.org/">HSQLDB</a> 1.8
<p>To allow you to run the tutorial &ldquo;out-of-the-box&rdquo; without setting up a database, the Test Drive server<br />
      includes an HSQLDB database. HSQLDB is a lightweight Java RDBMS that is particularly well<br />
      suited to run samples. hsqldb.jar (in [tomcat_root]\webapps\ROOT\WEB-INF\lib) includes both<br />
      the RDBMS engine and the JDBC driver. The HSQLDB database server is automatically started as part of the Tomcat startup process.</p>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://coenraets.org/blog/2007/01/flex-test-drive-server-for-java-developers-tomcat-based/feed/</wfw:commentRss>
		<slash:comments>156</slash:comments>
		</item>
		<item>
		<title>Building Collaborative Applications with Flex Data Services and Flash Media Server</title>
		<link>http://coenraets.org/blog/2006/10/building-collaborative-applications-with-flex-data-services-and-flash-media-server/</link>
		<comments>http://coenraets.org/blog/2006/10/building-collaborative-applications-with-flex-data-services-and-flash-media-server/#comments</comments>
		<pubDate>Tue, 31 Oct 2006 03:59:08 +0000</pubDate>
		<dc:creator>Christophe Coenraets</dc:creator>
				<category><![CDATA[Collaboration]]></category>
		<category><![CDATA[Flash Media Server]]></category>
		<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://coenraets.org/blog/2006/10/building-collaborative-applications-with-flex-data-services-and-flash-media-server/</guid>
		<description><![CDATA[<p>I presented a session called “Building Collaborative Applications with Flex Data Services and Flash Media Server” at MAX (the Adobe developer conference) last week. Beyond the basics of the Flex pub/sub messaging infrastructure, the session provided techniques to build real life collaborative applications. I started with a simple chatroom, and then incrementally added features to end up with an IM client supporting presence and videoconferencing.</p>

<p>Many people have asked me to make my code available. So here it is. If you didn’t attend MAX, I added a brief description for each version of the application.</p>]]></description>
			<content:encoded><![CDATA[<p><img src="http://coenraets.org/blog/wp-content/uploads/2006/10/flex-collab.jpg"/></p>
<p>I presented a session called “Building Collaborative Applications with Flex Data Services and Flash Media Server” at MAX (the Adobe developer conference) last week. Beyond the basics of the Flex pub/sub messaging infrastructure, the session provided techniques to build real life collaborative applications. I started with a simple chatroom, and then incrementally added features to end up with an IM client supporting presence and videoconferencing.</p>
<p>Many people have asked me to make my code available. So here it is. If you didn’t attend MAX, I added a brief description for each version of the application.</p>
<p><span id="more-14"></span></p>
<p>To run these samples, you need to install the Flex Data Services. If you haven’t already done so, you can download the Flex Data Services <a href="http://www.adobe.com/go/flex_trial">here</a>, and follow the installation instructions.</p>
<h6>Install the samples</h6>
<ol>
<li>Download flex-collaboration.zip <a href="http://coenraets.org/downloads/flex-collaboration.zip">here</a> and expand it on your local file system</li>
<li>Copy the flexchat directory in the context root of your web application</li>
<li>Copy the WEB-INF\src and WEB-INF\classes directories in the corresponding directory structure of your web application</li>
</ol>
<h6>Install the flexchat database</h6>
<p>Starting with chat3.mxml, you will need a MySQL database.</p>
<ol>
<li>Create a new MySQL database or use an existing one</li>
<li>Import the flexchat database using the flexchat.sql script</li>
<li>Make sure a MySQL JDBC driver is available to your web application</li>
<li>Edit flexchat.properties in WEB-INF\classes, and make sure the connection properties match your configuration</li>
</ol>
<h6>Install Flash Media Server</h6>
<p>chat6.mxml requires Flash Media Server to enable videoconferencing.</p>
<ol>
<li>Install the Flash Media Server: you can download a free developer edition <a href="http://www.adobe.com/go/tryflashmediaserver">here</a> (click free developer edition)</li>
<li>In C:\Program Files\Macromedia\Flash Media Server 2\applications, create a directory called flex_videoconference and copy the main.asc file in that directory</li>
</ol>
<h5>Samples Walkthrough</h5>
<h6>chat1.mxml</h6>
<p>chat1.mxml is a minimal chat application showing how to use the pub/sub messaging capabilities of Flex with just a couple of lines of code.</p>
<p>In this version, messages posted to the &#8220;chat&#8221; destination go to all the clients who subscribed to it. This is appropriate for a multi-user chatroom use case, but not for instant messaging applications where you want private conversations with individual users.</p>
<p>To run this sample, define a &#8220;chat&#8221; destination in messaging-config.xml as follows:</p>
<pre class="brush: xml;">
    &lt;destination id=&quot;chat&quot;&gt;

        &lt;properties&gt;
            &lt;network&gt;
                &lt;session-timeout&gt;0&lt;/session-timeout&gt;
            &lt;/network&gt;
            &lt;server&gt;
                &lt;max-cache-size&gt;1000&lt;/max-cache-size&gt;
                &lt;message-time-to-live&gt;0&lt;/message-time-to-live&gt;
                &lt;durable&gt;false&lt;/durable&gt;
            &lt;/server&gt;
        &lt;/properties&gt;

        &lt;channels&gt;
            &lt;channel ref=&quot;my-rtmp&quot;/&gt;
        &lt;/channels&gt;

    &lt;/destination&gt;
</pre>
<p>You may need to restart your server after modifying messaging-config.xml.</p>
<h6>chat2.mxml</h6>
<p>In this version, we use subtopics to enable private conversations between users. If you want to send a message to a user named Joe, you publish your message to the “Joe” subtopic of the chat destination (chat.Joe). Similarly, if Joe only needs to receive the messages that are sent to him, his client application can subscribe to the &#8220;Joe&#8221; subtopic.</p>
<p>Subtopics don&#8217;t need to be declared. All you need to do is configure your destination to support subtopics as shown below (allow-subtopics and subtopic-separator tags):</p>
<pre class="brush: xml;">
    &lt;destination id=&quot;chat&quot;&gt;

        &lt;properties&gt;
            &lt;network&gt;
                &lt;session-timeout&gt;0&lt;/session-timeout&gt;
            &lt;/network&gt;
            &lt;server&gt;
                &lt;max-cache-size&gt;1000&lt;/max-cache-size&gt;
                &lt;message-time-to-live&gt;0&lt;/message-time-to-live&gt;
                &lt;durable&gt;false&lt;/durable&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=&quot;my-rtmp&quot;/&gt;
        &lt;/channels&gt;

    &lt;/destination&gt;
</pre>
<p><br/></p>
<h6>chat3.mxml</h6>
<p>In this version, we add a buddy list using a DataService. The buddy list is displayed after the user logs on. You need to install the MySQL database to run this application.</p>
<p>To run this sample, add a &#8220;chat-buddies&#8221; destination in data-management-config.xml as follows:</p>
<pre class="brush: xml;">
    &lt;destination id=&quot;chat-buddies&quot;&gt;

        &lt;adapter ref=&quot;java-dao&quot; /&gt;

        &lt;properties&gt;
            &lt;source&gt;flex.samples.chat.BuddyAssembler&lt;/source&gt;
	    &lt;scope&gt;application&lt;/scope&gt;

            &lt;metadata&gt;
                &lt;identity property=&quot;userId&quot;/&gt;
                &lt;identity property=&quot;buddyId&quot;/&gt;
            &lt;/metadata&gt;

            &lt;network&gt;
                &lt;session-timeout&gt;20&lt;/session-timeout&gt;
                &lt;paging enabled=&quot;false&quot; pageSize=&quot;10&quot; /&gt;
                &lt;throttle-inbound policy=&quot;ERROR&quot; max-frequency=&quot;500&quot;/&gt;
                &lt;throttle-outbound policy=&quot;REPLACE&quot; max-frequency=&quot;500&quot;/&gt;
            &lt;/network&gt;
        &lt;/properties&gt;

    &lt;/destination&gt;
</pre>
<p><br/></p>
<h6>chat4.mxml</h6>
<p>In chat4.mxml, we add a custom adapter (ChatAdapter.java) to the chat destination to support basic presence information. ChatAdapter implements the <strong>FlexSessionListener</strong> interface and uses the <strong>sessionCreated</strong> and <strong>sessionDestroyed</strong> callback methods to keep track of when users connect and disconnect, and notify interested parties.</p>
<p>The client application uses separate consumers to subscribe to a “status” subtopic for each buddy in the buddy list (chat.status.jane, chat.status.eric, chat.status.susan, etc.). See the dsBuddiesResult() method for the implementation details.</p>
<p>To run this sample, add our simple ChatAdapter in the list of configured adapters in messaging-config.xml. Th list of configured adapters should look like this:</p>
<pre class="brush: xml;">
    &lt;adapters&gt;
        &lt;adapter-definition id=&quot;actionscript&quot; class=&quot;flex.messaging.services.messaging.adapters.ActionScriptAdapter&quot; default=&quot;true&quot; /&gt;
        &lt;adapter-definition id=&quot;jms&quot; class=&quot;flex.messaging.services.messaging.adapters.JMSAdapter&quot;/&gt;
        &lt;adapter-definition id=&quot;chat&quot; class=&quot;flex.samples.chat.ChatAdapter&quot;/&gt;
    &lt;/adapters&gt;
</pre>
<p>Next, specify that you want to use the chat adapter in the chat destination by adding the adapter reference as follows:</p>
<pre class="brush: xml;">
    &lt;destination id=&quot;chat&quot;&gt;

        &lt;properties&gt;
            &lt;network&gt;
                &lt;session-timeout&gt;0&lt;/session-timeout&gt;
            &lt;/network&gt;
            &lt;server&gt;
                &lt;max-cache-size&gt;1000&lt;/max-cache-size&gt;
                &lt;message-time-to-live&gt;0&lt;/message-time-to-live&gt;
                &lt;durable&gt;false&lt;/durable&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=&quot;my-rtmp&quot;/&gt;
        &lt;/channels&gt;

        &lt;adapter ref=&quot;chat&quot;/&gt;

    &lt;/destination&gt;
</pre>
<p>The unresolved issue in this version is that when you log on, you still don’t know which of your buddies are *already* online, and what their status is.</p>
<h6>chat5.mxml</h6>
<p>In this version, we use a DataService (&#8220;chat-sessions&#8221;) to keep track of the active user sessions along with presence information. Just like we did in ChatAdaper, the UserSessionAssembler class implements the FlexSessionListener interface and uses the sessionCreated and sessionDestroyed callback methods to create and remove user sessions. Using a DataService to keep track of presence information is convenient because changes (i.e. status information) are automatically pushed to all interested clients.</p>
<p>To run this sample, add a &#8220;chat-sessions&#8221; destination in data-management-config.xml as follows:</p>
<pre class="brush: xml;">
    &lt;destination id=&quot;chat-sessions&quot;&gt;

        &lt;adapter ref=&quot;java-dao&quot; /&gt;

        &lt;properties&gt;
            &lt;source&gt;flex.samples.chat.UserSessionAssembler&lt;/source&gt;
	        &lt;scope&gt;application&lt;/scope&gt;

            &lt;metadata&gt;
                &lt;identity property=&quot;userId&quot;/&gt;
            &lt;/metadata&gt;

            &lt;network&gt;
                &lt;session-timeout&gt;20&lt;/session-timeout&gt;
                &lt;paging enabled=&quot;false&quot; pageSize=&quot;10&quot; /&gt;
                &lt;throttle-inbound policy=&quot;ERROR&quot; max-frequency=&quot;500&quot;/&gt;
                &lt;throttle-outbound policy=&quot;REPLACE&quot; max-frequency=&quot;500&quot;/&gt;
            &lt;/network&gt;

        &lt;/properties&gt;

    &lt;/destination&gt;
</pre>
<p><br/></p>
<h6>chat6.mxml</h6>
<p>This version is the same as chat5.mxml with the addition of videoconferencing features enabled by Flash Media Server. Start your webcam in one session. in the buddy list of another session, click the name of the user who is broadcasting to see the video feed.</p>
]]></content:encoded>
			<wfw:commentRss>http://coenraets.org/blog/2006/10/building-collaborative-applications-with-flex-data-services-and-flash-media-server/feed/</wfw:commentRss>
		<slash:comments>107</slash:comments>
		</item>
	</channel>
</rss>
