Lately I have been itching to build something with BlazeDS. I have seen a couple presentations on it and am very intrigued by what one could do with it. After doing some reading and a presentation on it I decided to jump in and just build something.
I grabbed the code that Aaron West created for his BlazeDS / ColdFusion 9/ Flex presentation to use as a reference. I read though his presentation docs and configured ColdFusion in just a few minutes. The rest was a snap and I had the code from his demo running in little under 30 minutes.
I then started to expand the code to do more advanced things with it. The main thing I wanted to accomplish was to send a message to a specific consumer. I found out that had to inject a custom header that the consumers could filter on. This seemed very straightforward to do. Especially since the sample code from Aaron showed how to set a header var. This simple task ended up taking me 2 days to figure out.
The following chain of events started because the custom header I was trying to add was not there. I also noticed that the error created by the demo code didn't exist. At this point I had no reason to believe the code was bad because Aaron has used this same code in many presentations. I assumed that if the code had an issue someone would have pointed it out by now.
I first thought I discovered a bug that prevented the custom headers from being created. I first thought it was a bug in ColdFusion. Then I thought my issue was a bug in BlazeDS. Both of these panned out to be false. I then thought my altering of the original code was causing it.
I reverted my code back to the default state from Aaron's demo and added one line of debug code to it. This debug code appeared to have no affect on anything. I tried to get ColdFusion to write a log dump out some data but it wouldn't write anything. It started seeming that it was just skipping the debug code.
I then put in some 100% bogus code that would have thrown an error. What ended up happening was the exact opposite. The code still ran and there was no error. I checked every log file that ColdFusion creates and found nothing. I was still getting messages sent to BlazeDS. This is the point where I about pulled the rest of my hair out.
My next step was to alter the gateway. I changed it from a DataServicesMessaging gateway to an Asynchronous CFML gateway. I was trying to see if the gateway type for BlazeDS caused the error. With this gateway my intentionally bad code failed. I was then able to write dump data out and validate the data being generated. I started inspecting caching and turning off all cache settings in the ColdFusion administrator.
I then started swapping the gateway back and forth to figure out what was going wrong... or right. Mind you, I am no rookie when it comes to gateways. I have written a couple articles on them and use them on a daily basis to build clientless applications.
I again, went back to the docs to see if I had missed something. I combed the docs and the interwebs for hours. I was unable to discover anything relevant to my issue. On a whim I changed the name of the onIncomingMessage function to get ColdFusion to throw an error. To my amazement no error was thrown and the message was sent to BlazeDS.
This is a rather long winded story on how I found out that the gateway for BlazeDS does not use the onIncomingMessage function of the gateway cfc like other gateways do. I now have the ColdFusion gateway for BlaseDS pointing at a blank cfm file. Yep that is right.. a CFM not a CFC. It still works. Apparently when a message is sent to the gateway it is passed to BlazeDS and no CFM code is ran at all.
In part 2 I will be sharing the code I wrote to send messages to specific clients.
Till next time...
--Dave
#1 by Marko Simic on 3/1/10 - 3:20 AM
Nice to see more and more people from CF world are working with Blaze. When I start my adventure with Blaze while working on my "Best of CF9" submition I faced with the same problem you did: lack of docs and non-Flex examples. My agony increased with the fact I chose to use AJAX bridge. Since end of October few tutorials/blogs were written (including yours) on this subject and what made CFers life easer :)
Do not know have you already written Part 2, and found a way to send a message to specific user, but have you checked "subtopic"?
http://www.mail-archive.com/flexcoders@yahoogroups...
I used that approach on Collyba (not part of submited code for contest). if you want I can send you a code sample, but post I linked had more or less everything you need.
#2 by Dave Ferguson on 3/3/10 - 5:25 PM