Yahoo Maps Collaboration using Flex and BlazeDS

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 application also illustrated Flex/Ajax integration using External Interface.

Two recent events prompted me to revisit this sample:

  1. Yahoo recently released an ActionScript 3 API for Yahoo Maps.
  2. Adobe recently released the Remoting and Messaging features of LiveCycle Data Services as an Open Source project named BlazeDS.

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.

Testing the hosted version

Disclaimer: I’m currently hosting the application on the server I use to host this blog (basic PHP and Tomcat hosting plan). I don’t know much about the characteristics of my server, but I’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’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 “Local installation instructions”). The hosted version tries to connect using RTMP by default (available only as part of LCDS) and falls back to “long AMF polling” or regular AMF polling if the RTMP connection fails.

  1. Access http://coenraets.org/maprooms/maprooms.html on two different machines or in two browser windows on the same machine.
  2. Make sure you logon with two different user names and the same room name.
  3. Move the map in one browser and notice that the position of the map is synchronized in the other browser.
  4. You can also search an address in one browser and the resulting map position will appear in the two browsers.
  5. The zoom level and the map type are also synchronized between users.
  6. Click the Map Sharing button in one browser, pick a color to draw on the map (upper left corner), and start drawing.

Note: you can right-click the application and select View Source or click here to see the source code of the application.

Local installation instructions:

  1. Install BlazeDS. You can download the BlazeDS turnkey server (a version of Tomcat with BlazeDS preinstalled) here.
  2. Open {blazeds-install-dir}/tomcat/webapps/samples/WEB-INF/flex/services-config.xml and add an AMF long polling channel defined as follows:
    <channel-definition id="my-longpolling-amf" class="mx.messaging.channels.AMFChannel">
    	<endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amflongpolling" class="flex.messaging.endpoints.AMFEndpoint"/>
    	<properties>
    		<polling-enabled>true</polling-enabled>
    		<polling-interval-seconds>5</polling-interval-seconds>
    		<wait-interval-millis>60000</wait-interval-millis>
    		<client-wait-interval-millis>1</client-wait-interval-millis>
    		<max-waiting-poll-requests>200</max-waiting-poll-requests>
    	</properties>
    </channel-definition>
    
  3. Open WEB-INF/messaging-config.xml and add the following destination:
    <destination id="flexmaps">
    	<properties>
    		<server>
    			<allow-subtopics>true</allow-subtopics>
    			<subtopic-separator>.</subtopic-separator>
    		</server>
    	</properties>
    	<channels>
    		<channel ref="my-longpolling-amf"/>
    		<channel ref="my-polling-amf"/>
    	</channels>
    </destination>
    
  4. (Re)start the BlazeDS turnkey server.
  5. Download the source code of the Yahoo Maps Application here.
  6. Create a Flex Builder project for the Flex application (maprooms). Make sure you configure your Flex Builder project to work with BlazeDS. 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 here.
  7. Download the Yahoo Maps ActionScript 3 API here, and add YahooMap.swc in the libs folder of your project.
  8. Get a Yahoo API key here and assign it to the appid variable in MapArea.mxml.
  9. Compile the application.
  10. Open the Flex application in two browser windows (to simulate two users in different locations) and test the application as described above (in “Testing the hosted version”).



  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • DZone
  • LinkedIn
  • StumbleUpon
  • Twitter
This entry was posted in BlazeDS, Collaboration, Flex, LCDS. Bookmark the permalink. Post a comment or leave a trackback: Trackback URL.

54 Comments

  1. Mete Atamel
    Posted April 2, 2008 at 6:19 pm | Permalink

    Very cool!

  2. Posted April 3, 2008 at 1:38 am | Permalink

    Christophe,

    Thank you so much for publishing the source for your projects I have learned so much from them, especially your sqlAdmin and salesBuilder applications!

    I look forward to learning more with your Yahoo maps project.

  3. milan
    Posted April 3, 2008 at 12:36 pm | Permalink

    my firefox (2.0.0.13) is crashing every time I want to test it.

  4. Posted April 3, 2008 at 10:18 pm | Permalink

    Well, I’ve done something wrong. I’m trying to get this to work with ColdFusion and LCDS. It gets the map, but the two windows don’t talk to each other. How do I tell that LCDS is running and getting the data?

  5. Jamie
    Posted April 4, 2008 at 1:09 pm | Permalink

    Cool !
    I’ve found a similar app a couple of days ago. It’s Google Maps Collaboration using Flex and BlazeDS.
    http://www.banana-systems.com/MyFlight/view/Flight.html

  6. Posted April 4, 2008 at 8:10 pm | Permalink

    Gee, it was such an easy fix. I had to add the ref to the destination in the WEB-INF/messaging-config.xml file.

  7. Roger
    Posted May 4, 2008 at 4:47 am | Permalink

    Hi, I’m writing an article about Flex and Java for a commercial magazine and I was wondering whether can I use your Flex Test Drive Server (which is already configured) and put it on the magazine’s CD. Of course I can remove all .mxml files (and .java and rest of sources) you created for Flex Test Drive. I just neead a server working out-of-box.
    Sorry for leaving this question on your blog. I didn’t found your e-mail address.

  8. Dean
    Posted May 7, 2008 at 12:31 pm | Permalink

    I can not get this working locally, I have successfully created the little chart example from the Blazeds dev doc.
    I have followed letter by letter, but the two windows don’t talked to each other. What debugging tools do we have with Blazeds
    Thanks

  9. Dean
    Posted May 7, 2008 at 12:51 pm | Permalink

    Little more insight, I getting a sandbox error too yahoo.

    *** Security Sandbox Violation ***
    Connection to http://us.maps2.yimg.com/us.tile.yimg.com/tl?x=4940&y=2112&z=4&v=4.1&locale=en&s=256 halted – not permitted from http://localhost:8400/maprooms//maprooms.swf

  10. Dean
    Posted May 7, 2008 at 1:26 pm | Permalink

    Sorry to flame your blog, great app, I got the demo to work on an external server (my production) any help or links on setting this up in dev environment with localhost, I assume proxy is needed

    Thanks in advance

  11. Jason
    Posted May 11, 2008 at 7:43 pm | Permalink

    Thanks for the wonderful example.

    One quick question: What is the right way to compile the codes with command line tools? I used “mxmlc maprooms.mxml” and got a swf file that does not run correctly. This swf file is different from the one compiled under Eclipse.

  12. Megharaja
    Posted May 12, 2008 at 7:36 am | Permalink

    This is really nice example to communication between flex,Yahoo Map API and BlazeDS

    It is perfectly working in Internet Explorer but in firefox when i run this firefox unexpectedly closing the browser.

    Thanks,
    Megharaja S.H.

  13. Posted June 9, 2008 at 6:24 am | Permalink

    I Want JAVA FLEX Meterial

  14. Posted June 12, 2008 at 12:45 pm | Permalink

    excellent A+

  15. Posted June 30, 2008 at 8:04 am | Permalink

    Too Good example. Thanks

  16. Posted July 30, 2008 at 12:32 am | Permalink

    Hi thanks for the post.Nice blog.Now this blog is in my favourite bookmark pages.
    http://www.squidoo.com/papershredderarticles

  17. Posted August 22, 2008 at 5:28 am | Permalink

    Yahoo Maps Collaboration using Flex and BlazeDS

  18. Posted September 6, 2008 at 9:32 am | Permalink

    Thank you very much for this information.

  19. Posted December 23, 2008 at 10:42 am | Permalink

    Too Good example. Thanks

  20. James
    Posted December 23, 2008 at 4:57 pm | Permalink

    Your tested on the hosted version doesn’t sync up the maps between 2 browser instances.

    I set it up on my local computer and it behaves the same way, no sync between sessions.

    Got any ideas?

  21. Posted January 7, 2009 at 1:08 pm | Permalink

    How do I tell that LCDS is running and getting the data?

  22. Posted January 7, 2009 at 1:08 pm | Permalink

    maskable scattered,Clio counteractive!…

  23. Posted January 16, 2009 at 5:40 pm | Permalink

    I set it up on my local computer and it behaves the same way, no sync between sessions.

  24. Posted March 17, 2009 at 4:59 pm | Permalink

    I getting a sandbox error too yahoo.

  25. Posted March 29, 2009 at 7:31 am | Permalink

    Вообще, когда читаешь такое, посещает мысль, а ведь это ж так просто, ну почему я это не смог придумать

  26. Posted April 11, 2009 at 6:53 pm | Permalink

    Ну, как сказать, понравилось :) Хотя я все равно практически ничего не понял. :)

  27. Posted May 18, 2009 at 8:34 am | Permalink

    ulen rus sitesi olmuş burası bende az türkçe yazıyımda türklerinde varlğı belli olsun :D
    selametle :D:D:D

  28. Posted July 12, 2009 at 3:33 am | Permalink

    Well, I’ve done something wrong. I’m trying to get this to work with ColdFusion and LCDS. It gets the map, but the two windows don’t talk to each other.

  29. Posted July 23, 2009 at 9:27 am | Permalink

    Christophe,

    Thank you so much for publishing the source for your projects I have learned so much from them, especially your sqlAdmin and salesBuilder applications!

    I look forward to learning more with your Yahoo maps project

  30. Posted July 23, 2009 at 11:45 am | Permalink

    Sorry to flame your blog, great app, I got the demo to work on an external server (my production) any help or links on setting this up in dev environment with localhost, I assume proxy is needed

    Thanks in advance

  31. Posted August 20, 2009 at 8:17 pm | Permalink

    Добротно сделано, контент порадовал, сам на многие блоги и не зашёл бы никогда…

  32. Posted August 21, 2009 at 5:08 am | Permalink

    красиво, сделал! Благодарю!!!

  33. Posted September 2, 2009 at 3:55 am | Permalink

    Распечатываю… на стенку в самое видное место!!!

  34. Posted September 2, 2009 at 10:37 am | Permalink

    Спасибо.

  35. Posted September 2, 2009 at 11:02 am | Permalink

    На сайте можно скачать последние фильмы бесплатно, на высокой скорости. Все фильмы разбиты по удобным категориям, а также по году выпуска.

  36. Posted September 4, 2009 at 8:31 am | Permalink

    This is great work. I add this my site.thanks

  37. Posted September 9, 2009 at 6:59 am | Permalink

    Спасибо!
    Отличная информация!

  38. Posted September 9, 2009 at 3:53 pm | Permalink

    Основная задача Яндекса — давать ответы на вопросы пользователей!

  39. Posted September 16, 2009 at 10:19 am | Permalink

    Thanks for this article…

  40. Posted September 29, 2009 at 2:26 pm | Permalink

    thanks very good page and cool page

  41. Posted October 5, 2009 at 3:34 pm | Permalink

    Привет. Образовалась проблема – купил я электродрель на магазин ру
    А она сломалась у меня в тот ведь день – гарантии практически никакой не дали. Просто почта пришла с коробкой, а там все на китайском. Написал в магазин этот, дали ответ, что обращайтесь в сервис центр, хотя у меня ни документов на руках нет, ничего. Как можно приструнить данный интернет магазин? Есть ли какие-то компетентные органы, что писать. Куда писать, кому писать. Ошибся, да, нужно было в магазине нормальном прикупить, хотя необходимой мне модели просто не было, да и дешевле в интернет-магазине. А вот теперь сижу у разбитого корыта. Подскажите, что делать.

  42. Posted October 6, 2009 at 5:44 am | Permalink

    Кому это важно?

  43. Posted October 6, 2009 at 4:13 pm | Permalink

    Интересно – случайно наткнулся на статью – не плохо.

  44. Posted October 7, 2009 at 11:24 pm | Permalink

    Бе-е-е((( ну и мазня. По-другому назвать нельзя. Ушол в себя от такого занудства((((

  45. Posted October 8, 2009 at 12:23 am | Permalink

    Классная статья – спасибо!

  46. Posted October 9, 2009 at 8:49 am | Permalink

    Готов перечитать статью ещё раз. Хороший матерьял и написанно просто! ТО что надо.

  47. Posted October 22, 2009 at 12:34 am | Permalink

    В современной экономической ситуации все это рпеобретает несколько иной смысл – весьма смешной я бы сказал

  48. Posted October 22, 2009 at 3:23 am | Permalink

    Мне это пригодится.

  49. Posted October 22, 2009 at 2:18 pm | Permalink

    рпеобретает несколько иной смысл – весьма смешной я бы сказал

  50. Posted October 22, 2009 at 2:19 pm | Permalink

    locations) and test the application as described above (in “Testing the hosted version”).

16 Trackbacks

  1. [...] Yahoo Maps Collaboration using Flex and BlazeDS [...]

  2. [...] up, Cristophe Coenraets, re-releases his collaborarative mapping tool: The Flex application listened to Google Maps events to synchronize maps between different users. [...]

  3. [...] Yahoo Maps Collaboration using Flex and BlazeDS [...]

  4. By links for 2008-04-08 « M@’s Blog on April 7, 2008 at 9:32 pm

    [...] Yahoo Maps Collaboration using Flex and BlazeDS : Christophe Coenraets An good example of flex collaboration. [...]

  5. [...] Yahoo Maps collaboration, here is another example of enabling collaboration in a Flex application using the [...]

  6. By Niko & Java » Karten Kollaboration in Flex on April 13, 2008 at 5:42 pm

    [...] Coenraets hat seine interaktive Karten-Demo mit Flex nun auf die ActionScript 3 fähige Yahoo API upgedated, so dass man nun ohne AJAX auskommt (zuvor hatte die Demo Google Maps verwendet). Dadurch bleibt [...]

  7. [...] recently posted a number of examples (Yahoo Maps Collaboration and Collaborative Data Entry) showing how to use the BlazeDS / LCDS Message Service to build [...]

  8. [...] 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 [...]

  9. By Ibuprofen. on July 7, 2008 at 3:29 pm

    Old ibuprofen….

    Ibuprofen recall….

  10. By gambling odd on October 11, 2008 at 10:02 am

    gambling odd…

    maskable scattered,Clio counteractive!…

  11. By Bookmark: 60+ Adobe Flex reference websites on January 11, 2009 at 12:33 pm

    [...] Tour De Flex Application – insideria.com Developing .NET class – themidnightcoders.com Yahoo Maps Collaboration using Flex and BlazeDS – coenraets.org Integrating Flex into Ajax applications – ibm.com AOL Pictures and Flex – [...]

  12. [...] Yahoo Maps Collaboration using Flex and BlazeDS – coenraets.org [...]

  13. [...] Yahoo Maps Collaboration using Flex and BlazeDS – coenraets.org [...]

  14. [...] Yahoo Maps [...]

  15. [...] Yahoo Maps Collaboration using Flex and BlazeDS – coenraets.org [...]

  16. By 16 » January » 2010 » 博兮博客 on January 16, 2010 at 12:40 am

    [...] Yahoo Maps Collaboration using Flex and BlazeDS – coenraets.org [...]

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>