<?xml version="1.0" encoding="utf-8"?>

			<rss version="2.0" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://web.resource.org/cc/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">

			<channel>
			<title>nil desperandum - BlazeDS</title>
			<link>http://nil.checksite.co.uk/index.cfm</link>
			<description>ColdFusion, CFML and web development related stuff</description>
			<language>en-us</language>
			<pubDate>Wed, 22 Feb 2012 21:06:28 -0800</pubDate>
			<lastBuildDate>Wed, 11 May 2011 21:44:00 -0800</lastBuildDate>
			<generator>BlogCFC</generator>
			<docs>http://blogs.law.harvard.edu/tech/rss</docs>
			<managingEditor>stephen@checksite.co.uk</managingEditor>
			<webMaster>stephen@checksite.co.uk</webMaster>
			<itunes:subtitle></itunes:subtitle>
			<itunes:summary></itunes:summary>
			<itunes:category text="Technology" />
			<itunes:category text="Technology">
				<itunes:category text="Podcasting" />
			</itunes:category>
			<itunes:category text="Technology">
				<itunes:category text="Tech News" />
			</itunes:category>
			<itunes:keywords></itunes:keywords>
			<itunes:author></itunes:author>
			<itunes:owner>
				<itunes:email>stephen@checksite.co.uk</itunes:email>
				<itunes:name></itunes:name>
			</itunes:owner>
			
			<itunes:explicit>no</itunes:explicit>
			
			<item>
				<title>My SOTR 2011 Presentation : AJAX Longpolling with BlazeDS</title>
				<link>http://nil.checksite.co.uk/index.cfm/2011/5/11/My-SOTR-2011-Presentation--AJAX-Longpolling-with-BlazeDS</link>
				<description>
				
				I&apos;m rubbish I know...  Takes me forever to actually post anything on my blog. Let me throw you a small bone.

Scotch on the Rocks 2011 was a marvelous event, even if I did manage to trash my ankle stepping off the train on the Wednesday night. Not that you care, but if you saw me hopping around, it turns out that I actually chipped a bit of bone off my ankle when I twisted my ankle. I&apos;m sure you&apos;ll be ecstatic to know that after two and a half month I&apos;m finally back to biking to work again. Anyway....Andy Allan, the lovely Leanne and the ColdFusion Monkeh, Matt Gifford, as always, put on a grand event.  Some top class ColdFusion developers and speakers from around the globe. While I enjoyed every presentation I went to, Robert Rawlins presentation &quot;The Pen Is Mightier Than The Keyboard&quot; sticks in my mind as one of the most entertaining and inspirational of the two days.

Enough about them though!  What about me!?
Quite frankly I nearly had kittens! Its the first time in a very long time that I&apos;ve done a presentation of this nature. I was in the smallest presentation room and it was overflowing even before it had started.  I was afraid that when I hopped off for a minute or two that I&apos;d come back to find someone had pinched my seat! Thankfully my seat was still there when I got back.

A fair percentage of my presentation was actually based around live coding a small chat application. Amazingly it all went perfectly to plan!  Code worked because I remembered to start my ColdFusion server and there were no dodgy porn sites in background web pages. (If you were there you&apos;ll know what I&apos;m alluding to. ;) )

You can find my presentation on SlideSix :

&lt;img style=&quot;visibility:hidden;width:0px;height:0px;&quot; border=0 width=0 height=0 src=&quot;http://c.gigcount.com/wildfire/IMP/CXNID=2000002.0NXC/bT*xJmx*PTEzMDUxNDcwMTU2MDcmcHQ9MTMwNTE*ODY3MDgwMyZwPTEwMDA3NTImZD*mZz*yJm89ZTdkNDVhNjEwOTgwNGQ*N2Fl/MDIyMDdmMGQ3OWIyZDkmb2Y9MA==.gif&quot; /&gt;&lt;object height=&quot;400&quot; width=&quot;490&quot;&gt;
	&lt;param name=&quot;movie&quot; value=&quot;http://slidesix.com/viewer/SlideSixViewer.swf?alias=AJAX-Longpolling-with-ColdFusion-9-and-BlazeDS&quot;/&gt;
	&lt;param name=&quot;menu&quot; value=&quot;false&quot;/&gt;
	&lt;param name=&quot;scale&quot; value=&quot;noScale&quot;/&gt;
	&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;/&gt;
	&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot; /&gt;
	&lt;embed src=&quot;http://slidesix.com/viewer/SlideSixViewer.swf?alias=AJAX-Longpolling-with-ColdFusion-9-and-BlazeDS&quot; allowscriptaccess=&quot;always&quot; allowFullScreen=&quot;true&quot; height=&quot;400&quot; width=&quot;490&quot; type=&quot;application/x-shockwave-flash&quot;  FlashVars=&quot;gig_lt=1305147015607&amp;gig_pt=1305148670803&amp;gig_g=2&quot;/&gt;
 &lt;param name=&quot;FlashVars&quot; value=&quot;gig_lt=1305147015607&amp;gig_pt=1305148670803&amp;gig_g=2&quot; /&gt;&lt;/object&gt;

The code I used throughout my presentation is also attached to the slide show on SlideSix. The code is in the state it was at the end of my presentation, but you can find the bits that I used to build the application up step-by-step in the &quot;Bits&quot; folder.  You&apos;ll also find the updated FABridge.js so that the Flex-AJAX bridge will also work in Chrome in the ChromeFix folder.  

You&apos;ll also find a &quot;BluePeter&quot; folder. If you&apos;re British you&apos;ve probably already guessed what is in this folder. &quot;Here&apos;s one I prepared earlier&quot; is a well known phrase from the children&apos;s program Blue Peter when they are making or baking anything on the show. My BluePeter folder is just that.  A complete working application, one I prepared earlier, just in case anything didn&apos;t go quite to plan.

I got some great comments and compliments from those that attended my presentation and for that I thank all of you that attended. Here&apos;s hoping I can come up with something to talk about at the next one.
				</description>
				
				<category>Scotch on the Rocks</category>
				
				<category>BlazeDS</category>
				
				<category>Conference</category>
				
				<category>AJAX</category>
				
				<pubDate>Wed, 11 May 2011 21:44:00 -0800</pubDate>
				<guid>http://nil.checksite.co.uk/index.cfm/2011/5/11/My-SOTR-2011-Presentation--AJAX-Longpolling-with-BlazeDS</guid>
				
				
			</item>
			
			<item>
				<title>Getting the Flex-AJAX Bridge (FABridge) working in Chrome</title>
				<link>http://nil.checksite.co.uk/index.cfm/2011/1/19/Getting-the-FlexAJAX-Bridge-FABridge-working-in-Chrome</link>
				<description>
				
				Very brief blog post.

I&apos;ve been working on my longpolling blog posts trying to resolve why I&apos;m having problems with the dynamic channel creation with ColdFusion 9.0.1. 

I&apos;ve been trying to call my application from Firefox and Chromium on the same laptop.  Firefox has been working beautifully, but Chromium 10 has not been playing nice. 

Finally (I can be a stubborn fool sometimes) I decided to check from Internet Explorer, Safari and Firefox from my desktop all of which work first time, but Chrome just wasn&apos;t working. 

So brain engages and I google &quot;FABridge Chrome&quot;.  The very first entry that turns up is this one on Tim&apos;s Blog called &lt;a href=&quot;http://www.timothyhuertas.com/blog/2010/11/30/fabridgejs-play-nice-with-chrome/&quot; target=&quot;_blank&quot;&gt;FABridge plays nice with chrome&lt;/a&gt;. In it Tom points out a bug in the javascript of FABridge.js, specifically the FABridge__bridgeInitialized function. This function does a browser test, but doesn&apos;t include Chrome. Add a check for Chrome and everything starts working just as it should!

For the record this is the change : 

&lt;quote&gt;
In FABridge.js if you change:
if (/Explorer/.test(navigator.appName) || /Konqueror|Safari|KHTML/.test(navigator.appVersion))
to:
if((!(/Chrome/.test(navigator.appVersion))) &amp;&amp; ((/Explorer/.test(navigator.appName) || /Konqueror|Safari|KHTML/.test(navigator.appVersion))))
&lt;/quote&gt;

Thank you Tom!  Much appreciated!  Only wish I&apos;d looked sooner!
				</description>
				
				<category>BlazeDS</category>
				
				<category>CFML</category>
				
				<pubDate>Wed, 19 Jan 2011 23:59:00 -0800</pubDate>
				<guid>http://nil.checksite.co.uk/index.cfm/2011/1/19/Getting-the-FlexAJAX-Bridge-FABridge-working-in-Chrome</guid>
				
				
			</item>
			
			<item>
				<title>AJAX Longpolling with ColdFusion and BlazeDS - Subtopics and building a messaging app</title>
				<link>http://nil.checksite.co.uk/index.cfm/2010/6/24/CF-BlazeDS-AJAX-LongPolling-Part3</link>
				<description>
				
				I&apos;m sorry to say that I&apos;ve been  putting this post off.  Why?  Well to be honest I&apos;ve been struggling with getting my head around how to actually use longpolling. Its all very well understanding the mechanics, but how can you use it effectively.

Part of the problem I&apos;ve been having is the nature of sending messages and filtering them with BlazeDS.  What I keep forgetting is that long poll messaging is &quot;fire and forget&quot;. You don&apos;t send a message and expect an immediate response. You send a message and a response might be broadcast to all event listeners with a specific filter. 
If you want a request and response, call a webservice or a make an ajax request. Don&apos;t use long polling and event gateways.Remembering this is pretty important.  If you try to get long polling with FDMS, BlazeDS and ColdFusion event gateways to work like Ajax XHR then you&apos;re going to end up in a mess.

There are two places you will need to filter messages. Fairly obviously these are in the javascript consumers/event listeners on the client side and in the onIncomingMessage function in your ColdFusion event gateway.

I&apos;m going to start with the client side as this also forms the basis of filtering messages on the server side.

There are two methods for filtering messages; selectors and sub-topics. 
There is essentially no difference between selectors and sub-topics. They are both a string of characters that the consumer looks for in a broadcast message to see if it should grab that message and trigger a client-side event. 
The difference comes in flexibility.

Selectors are a single &quot;word&quot;, whereas sub-topics have delimited values to which you can apply wildcards. 
Selectors are available to use without any additional configuration. 
Sub-topics require a little additional configuration in the destination set up.
 
I&apos;ve been using sub-topics, so I&apos;m going to cover sub-topics here, but the basic premise is the same for selectors. 

Starting at the beginning, the additional configuration is actually only a couple of extra lines in the server setting for the destination.
&lt;code&gt;
	ss.setAllowSubtopics(true);
	ss.setSubtopicSeparator(&apos;.&apos;);
&lt;/code&gt;
As it happens, these lines are already in the code from way back when I wrote part 2 of this series.  These two lines should be fairly self-explantory.  The first setAllowSubtopics tells the destination to allow subtopics to be used in the Producers and Consumers that use it as a destination.  The second, setSubtopicSeparator, defines the character that will be used as a domain seperator.

So having set the destination to allow subtopics we now need to update a Consumer/Listener that can listen for specific topics.
Lets start with something simple and listen for a specific three part subdomain.  The three parts are going to be &quot;app&quot; for the full application, &quot;user&quot; for user related events and a &quot;hello&quot; event. 

&lt;code&gt;
	consumer = new Consumer(); 
	consumer.setDestination(&apos;dispatcher&apos;); 
	consumer.addEventListener(&quot;message&quot;, messageHandler); 
	consumer.setChannelSet(cs);
	consumer.setSubtopic(&apos;app.user.hello&apos;); 
	consumer.subscribe();
&lt;/code&gt;

So that&apos;s the updated consumer from part two.  The only difference is that we&apos;ve set a subtopic that it will listen for of &quot;app.user.hello&quot;.
Having updated the listener we need to update the simple sender that I created in part 2 to also use subtopics. This is done by adding a subtopic to the message headers.  The name for the subtopic field in the header is &quot;DSSubtopic&quot;. This field names in the header of client messages are case sensitive, so make sure that the &quot;DSS&quot; on the front is capitalised and the rest is lower case.  

&lt;code&gt;
&lt;cfscript&gt;
clientMsg = {Destination=&apos;dispatcher&apos;,body={text=&apos;The answer to life, the universe and everything&apos;}};
clientMsg[&apos;headers&apos;][&apos;DSSubtopic&apos;] = &apos;app.user.hello&apos;;

sendGatewayMessage(&apos;myGateway&apos;,  clientMsg);
&lt;/cfscript&gt;
&lt;/code&gt;

You should now be able to load the listener page, load the sender page in another broswer or rbowser window or tab and you&apos;ll recieve an alert of &quot;The answer to life, the universe and everything&quot; on the listener page. 

A word of warning here, and one I should have raised before now. If you load the sender page first and haven&apos;t previously loaded any of the listener pages from this or previous posts, you will get an error.  The error is because the destination has yet to be created by the listener and the sender has no idea where to send the message.  [TODO ERROR HANDLING THIS : CREATING THE DESTINATION FROM THE SERVER SIDE]

So fine. I can send a message directly to a listener of a specific name.  Whoop de doo. Its no different to what we were doing previously! Change the subtopic in the consumer to &quot;app.user.*&quot;, reload the listener page and then refresh the sender page. You should still get the alert. OK, next change the sender subtopic in the sender page to &quot;app.user.owtornowt&quot;.  To be honest you can change the last part of the subtopic to &quot;asdf&quot; or the name of your wife&apos;s mother&apos;s brother for this next bit and it will still work. Having changed the subtopic to a &quot;word&quot; of your choice, reload the sender page to get it to send the client message.  Once again you should get the alert on the client with out message text in it.

What&apos;s happening here is that the listener is now listening for any subtopic that starts with &quot;app.user&quot;. It doesn&apos;t matter what comes after this stub of the subtopic the listener will pick it up and handle it. What this means is you can send out a broadcast to everyone that is listening.  The data that you send from the server will then be processed by the handler. 

You can do the reverse of this and send subtopic to the server in exactly the same way.
&lt;code&gt;
function send(subtopic,msg){
	var message = new AsyncMessage();
	message.setBody(msg);
	
	producer.setSubtopic(subtopic);
	producer.send(message);
}
&lt;/code&gt;
This updated send() function allows you to set the subtopic of the message you want to send the server. As you can see its as simple as &quot;setSubtopic(&apos;mytopic.here&apos;)&quot;.

Lets put this to the test and build a little app that uses subtopics on both the client and server side.
This app will send a message from the server to a &quot;app.user.message&quot; and will only be displayed by a randomly selected available client.

To start with we need to register the client with the server when we open the page.

First I&apos;m adding in a couple of javascript functions from http://note19.com/2007/05/27/javascript-guid-generator/ to create a UUID that I can send to the server. NOTE: I could just hard code a createuuid() into the javascript, but I&apos;m trying to always seperate client side code from server side code. I could do something like create a web service that I could call from javascript to register and return a clientID and this would be a better solution in the long term, but for simplicity and for the sake of this demo I&apos;m just going to create GUIDs on the client side and send them to the server.

&lt;code&gt;
function S4() {
   return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
}
function guid() {
   return (S4()+S4()+&quot;-&quot;+S4()+&quot;-&quot;+S4()+&quot;-&quot;+S4()+&quot;-&quot;+S4()+S4()+S4());
}
&lt;/code&gt;

I&apos;m going to get rid of the sendTest function and replace it with a &quot;register&quot; function. This function will grab a globally available ClientID and send it to the server under the subtopic of &quot;app.user.register&quot;.
&lt;code&gt;
function register() {
	regData = new Object();
	regData.clientid = ClientID;
	send(&apos;app.user.register&apos;,regData);
}
&lt;/code&gt;

The register function can&apos;t be called until the polling has been initialised, so I&apos;m going to add the creation of &quot;ClientID&quot; and a call to the register() function into the initPolling function.

&lt;code&gt;
	ClientID = guid();
	register();
&lt;/code&gt;

Now over to the server side. We&apos;re going to be storing the client ids in the application scope, so we&apos;re going to need an Application.cfc. The one over on Ben Nadel&apos;s blog is as good as any and I&apos;ve just dropped that into this demo code with a change of application name. I&apos;m also going to create an empty array in the application scope called &quot;clientregister&quot;. This is where I&apos;m going to store my client ids when they register.

Next we need to update the onIncomingMessage function in the gateway.cfc. I&apos;m not going to go nuts with this, so I&apos;m just going to assume that there will always be a DSSubtopic in the header of any message and I&apos;ll put the data from the body section of the message into a variable for easy access. 

Next I&apos;ll set up a simple switch to look at the subtopic and do &quot;something&quot; based on that subtopic. In this case I&apos;m going to add the client id to the end of the array and send back a quick response. To do this I&apos;ve also added a &quot;sender&quot; method based on the code in our sender.cfm file.
So here&apos;s what my gateway looks like now
&lt;code&gt;
&lt;cfcomponent name=&quot;eventgateway handler&quot; output=&quot;false&quot;&gt;
	&lt;cffunction name=&quot;onIncomingMessage&quot; access=&quot;remote&quot; returntype=&quot;any&quot;&gt;
		&lt;cfargument name=&quot;event&quot; required=&quot;true&quot; type=&quot;struct&quot;&gt;
		&lt;cfset var SubTopic = arguments.event.data.headers.dssubtopic&gt;
		&lt;cfset var data = arguments.event.data.body&gt;

		&lt;cfswitch expression=&quot;#SubTopic#&quot;&gt;
			&lt;cfcase value=&quot;app.user.register&quot;&gt;
				&lt;cfset ArrayAppend(application.clientregister,data[&apos;clientid&apos;])&gt;
				&lt;cfset dataPacket = {text=&apos;registration complete&apos;,clientid=data[&apos;clientid&apos;]}&gt;
				&lt;cfset sender(dataPacket,&quot;app.user.hello&quot;)&gt;
			&lt;/cfcase&gt;
		&lt;/cfswitch&gt;

		&lt;cfreturn&gt;
	&lt;/cffunction&gt;
	
	&lt;cffunction name=&quot;sender&quot; access=&quot;private&quot;&gt;
		&lt;cfargument name=&quot;body&quot; required=&quot;true&quot; type=&quot;struct&quot;&gt;
		&lt;cfargument name=&quot;subtopic&quot; require=&quot;false&quot; type=&quot;string&quot; default=&quot;app&quot;&gt;
		
		&lt;cfscript&gt;
		clientMsg = {Destination=&apos;dispatcher&apos;,body=arguments.body};
		clientMsg[&apos;headers&apos;][&apos;DSSubtopic&apos;] = arguments.subtopic;
		
		sendGatewayMessage(&apos;myGateway&apos;,  clientMsg);	
		&lt;/cfscript&gt;
	&lt;/cffunction&gt;
&lt;/cfcomponent&gt;
&lt;/code&gt;

At the minute the message from the sender is going to display for every client hooked into the gateway, so we&apos;ll need to update the handler on the client side. First though, take a quick look at the data packet I&apos;m sending back. I&apos;ve included the clientid that I was sent in the packet I&apos;m sending out. This means that I&apos;ll be able to see this on the client side when I get a message to handle, so lets update the handler to look at this value.

&lt;code&gt;
function messageHandler(event){
	var eventBody =  event.getMessage().getBody();
	var subTopic = event.getMessage().getHeaders().DSSubtopic;
	if (eventBody.CLIENTID != undefined &amp;&amp; eventBody.CLIENTID === ClientID) {
		alert(subTopic+&quot;: &quot;+eventBody.TEXT); 
	} else {
		if (subTopic == &apos;app.user.hello&apos;) alert(&apos;Someone just registered!&apos;);
	}
}
&lt;/code&gt;

In the function I grab the event body and, as the handler is for a wild card subtopic, I also grab the subtopic from the message header. I&apos;m going to quickly check that CLIENTID does exist in the event body and check to see if it is the same as this client&apos;s global &quot;ClientID&quot;. If it is I&apos;m going to display the subtopic and the message.  If its not then I&apos;ll display a message on all the other connected clients of &quot;Someone just registered!&quot;.

Its 2am and I&apos;ve just realised how huge this post is, so I&apos;m going to leave this application build here and continue on with it in the next post.

Have fun with the attached code!
				</description>
				
				<category>Web Development</category>
				
				<category>BlazeDS</category>
				
				<category>CFML</category>
				
				<pubDate>Thu, 24 Jun 2010 01:56:00 -0800</pubDate>
				<guid>http://nil.checksite.co.uk/index.cfm/2010/6/24/CF-BlazeDS-AJAX-LongPolling-Part3</guid>
				
				
				<enclosure url="http://nil.checksite.co.uk/enclosures/longpolling-part3.rar" length="190891" type="application/octet-stream"/>
				
			</item>
			
			<item>
				<title>Blog Roundup 30 April 2010</title>
				<link>http://nil.checksite.co.uk/index.cfm/2010/5/1/Blog-Roundup-30-April-2010</link>
				<description>
				
				I&apos;m rubbish!  I really am... I promise and I promise to keep on top of Blog Round-ups, but I never seem to quite manage it. 

I would really like to keep writing this round-ups ever week, but its quite an effort.  Can I persuade anyone to co-author these posts with me? Leave me a comment.  Drop me an email.  Shout me on Twitter.

Anyway, on with the round-up.Who says there are no ColdFusion jobs?! Ricardo Parente&apos;s &lt;a href=&quot;http://ricardo.parente.us/category/jobs/&quot; title=&quot;ColdFusion Developer Network&quot; target=&quot;_blank&quot;&gt;ColdFusion Developer Network&lt;/a&gt; posts several jobs a day from across the globe everyday, so I&apos;m not going to post them all here. Check them out for yourself. Ricardo also post the jobs to his twitter account &lt;a href=&quot;http://twitter.com/cfdevelopers&quot; title=&quot;cfdevelopers : Twitter&quot; target=&quot;_blank&quot;&gt;http://twitter.com/cfdevelopers&lt;/a&gt;.  If you&apos;re from the UK, while you&apos;re on Twitter you should probably add &lt;a href=&quot;http://twitter.com/aqualimeblue&quot; title=&quot;aqualimeblue : Twitter&quot; target=&quot;_blank&quot;&gt;http://twitter.com/aqualimeblue&lt;/a&gt;. Amber seems to always be looking for ColdFusion developers from the UK and around the globe to fill ColdFusion positions.

If you hadn&apos;t noticed Adobe&apos;s Creative Suite 5 is now available as Marcos Placona points out on his newly refurbished blog with his &lt;a href=&quot;http://www.placona.co.uk/319/adobe/adobe-cs5-cracked/&quot; title Adobe CS5 Cracked : Marcos Placona&quot; target=&quot;_blank&quot;&gt;Adobe CS5 Cracked&lt;/a&gt; post. If I didn&apos;t know better I&apos;d think Marcos was trying for a &lt;a href=&quot;http://cyrilhanquez.com/blog/2010/04/26/sotr2010-reachie-awards-emea-entries-only/&quot; title=&quot;SOTR2010 Reachie Awards : Cyril Jamquez&quot; target=&quot;_blank&quot;&gt;Reachie Award&lt;/a&gt; at &lt;a href=&quot;http://www.scotch-on-the-rocks.co.uk/index.cfm?do=sessions.view&quot; title=&quot;Scotch on the Rocks 2010 sessions&quot; target=&quot;_blank&quot;&gt;Scotch on the Rocks&lt;/a&gt; at the end of the month. ;) While I&apos;m mentioning Scotch on the Rocks, &lt;a href=&quot;http://www.andyallan.com/&quot; title=&quot;AndyAllan.com&quot; target=&quot;_blank&quot;&gt;Andy Allan&lt;/a&gt; is asking for help with a &lt;a href=&quot;http://www.scotch-on-the-rocks.co.uk/blog/index.cfm/2010/4/26/Scotch-on-the-Rocks-2011&quot; title=&quot;SOTR 2011 Survey&quot; target=&quot;_blank&quot;&gt;survey for SOTR2011!&lt;/a&gt;

John Whish has an interesting little post on &lt;a href=&quot;http://www.aliaspooryorik.com/blog/index.cfm/e/posts.details/post/259&quot; title=&quot;Why Shared Hosting is Bad&quot; target=&quot;_blank&quot;&gt;Why Shared Hosting is Bad&lt;/a&gt;. I&apos;ve always known that it was possible to pick up data from other applications, but you forget how easy it is to abuse that and that you need to protect your clients and your applications.

I really haven&apos;t been paying attention... I never noticed that ColdSpring 2.0 is in development and has a &lt;a href=&quot;http://www.compoundtheory.com/?action=displayPost&amp;ID=478&quot; title=&quot;ColdSpring 2.0 - Now On SourceForge&quot; target=&quot;_blank&quot;&gt;home on SourceForge&lt;/a&gt;. I didn&apos;t even realise that Mark Mandel was leading the development!

Pass by value and pass by reference can often catch developers out; Here&apos;s a &lt;a href=&quot;http://www.coldfusionjedi.com/index.cfm/2010/4/28/Interesting-arraySet-Behavior&quot; title=&quot;Interesting arraySet Behavior&quot; target=&quot;_blank&quot;&gt;sneaky one using ArraySet&lt;/a&gt; that one of Ray Camden&apos;s readers brought to him thinking it might be a bug.

There&apos;s a new ColdFusion podcast kicking about. &lt;a href=&quot;http://www.cfbrew.com/&quot; title=&quot;CFBrew&quot; target=&quot;_blank&quot;&gt;CFBrew&lt;/a&gt; is brought to you by a team of developers in an organisation talking about their experiences in development.  The second episode deals with starting developing in an Agile environment and using scrums. As this is something that we are just starting to try out I&apos;m very interested to hear how they get on and the problems they encounter and how they solve them.

A couple of other small post from Ray to finish up this round up. Ray dropped a &lt;a href=&quot;http://www.coldfusionjedi.com/index.cfm/2010/4/22/ColdFusion-901-Sneaks&quot; title=&quot;ColdFusion 9.0.1 Sneaks&quot; target=&quot;_blank&quot;&gt;very short blog post&lt;/a&gt; on new features in ColdFusion 9.0.1 Terry Ryan mentioned at cf.Objective. He also mentions a &lt;a href=&quot;http://www.coldfusionjedi.com/index.cfm/2010/4/20/Ouch--this-cookie-bug-has-teeth&quot; title=&quot;Ouch - this cookie bug has teeth&quot; target=&quot;_blank&quot;&gt;cookie bug in ColdFusion 9&lt;/a&gt; that needs voting up to get fixed.

Ooo I nearly forgot!!  Pete Freitag has updated &lt;a href=&quot;http://www.petefreitag.com/item/749.cfm&quot; title=&quot;HackMyCF.com Now Detects BlazeDS Vulnerability&quot; target=&quot;_blank&quot;&gt;HackMyCF to detect a vulnerability in BlazeDS&lt;/a&gt;. This is a vulnerability that affects ColdFusion versions 7 through 9, so definitely worth making sure you are patched up. Using John Mason&apos;s Merlin Manager or &lt;a href=&quot;http://www.codfusion.com/blog/page.cfm/projects/cfUpdater&quot; title=&quot;cfUpdater : CodFusion&quot; target=&quot;_blank&quot;&gt;cfUpdater&lt;/a&gt; project can help you make sure that your ColdFusion instances are correctly patched.

And that concludes 3 hours of reading and writing to bring you this round-up. I hope you find it useful.
				</description>
				
				<category>Web Development</category>
				
				<category>Blog Round Up</category>
				
				<category>Scotch on the Rocks</category>
				
				<category>BlazeDS</category>
				
				<category>CFML</category>
				
				<category>Conference</category>
				
				<category>Twitter</category>
				
				<pubDate>Sat, 01 May 2010 00:13:00 -0800</pubDate>
				<guid>http://nil.checksite.co.uk/index.cfm/2010/5/1/Blog-Roundup-30-April-2010</guid>
				
				
			</item>
			
			<item>
				<title>AJAX Longpolling with ColdFusion and BlazeDS - Connecting and Messaging</title>
				<link>http://nil.checksite.co.uk/index.cfm/2010/2/13/CF-BlazeDS-AJAX-LongPolling-Part2</link>
				<description>
				
				In my last post on long polling I went through the basic set up of ColdFusion and BlazeDS before getting into too much code.

This part I want to get a basic connection and a couple of simple messages being sent and received.Before I go on, I should say that this is all done in ColdFusion 9, as BlazeDS is installed by default, but running &lt;a href=&quot;http://opensource.adobe.com/wiki/display/blazeds/Installation+Guide#InstallationGuide-IntegratingBlazeDSwithaColdFusion8installation&quot; title=&quot;Integrateing BlazeDS with a CF8 installation&quot; target=&quot;_blank&quot;&gt;BlazeDS on ColdFusion 8&lt;/a&gt; is actually pretty simple to do. 

First things first.  You need to add a function to the gateway.cfc that will handle any incoming messages, cunningly named &quot;&lt;a href=&quot;http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec1650b-7ff9.html&quot; target=&quot;_blank&quot; title=&quot;DSM : Handling incoming messages&quot;&gt;onIncomingMessage&lt;/a&gt;&quot;. At this point it doesn&apos;t actually need to do a whole lot, so I&apos;ve simply got a dump of the event to a file and return the data back to the caller.

&lt;code&gt;
&lt;cffunction name=&quot;onIncomingMessage&quot; access=&quot;remote&quot; returntype=&quot;any&quot;&gt;
	&lt;cfargument name=&quot;event&quot; required=&quot;true&quot; type=&quot;struct&quot;&gt;

	&lt;cfdump var=&quot;#arguments#&quot; format=&quot;html&quot; output=&quot;d:/dumps/incomingEvent_#dateformat(now(),&quot;yyyymmdd&quot;)#_#timeformat(now(),&quot;HHMMSS&quot;)#.html&quot;&gt;

	&lt;cfreturn arguments.event.data&gt;
&lt;/cffunction&gt;
&lt;/code&gt;

That is it... Next...

In order to be able to connect to a BlazeDS channel, you need a destination. Like the channel definition I created in the previous post, you can manually create a destination in &quot;messaging-config.xml&quot;, but I worked this all out from code from Joao&apos;s blog and Marko&apos;s Best of CF9 application, both of which use dynamic destinations. 

Creating a destination is a little convoluted.  To be able to create destinations dynamically you need to get to the Message Service via java.  To get to the Message Service you need to go through the Message Broker.

NOTE : all of the code below is intended to be in a cfscript block (see attached files)

&lt;code&gt;
brokerClass = createObject(&apos;java&apos;,&apos;flex.messaging.MessageBroker&apos;);
broker = brokerClass.getMessageBroker( javacast(&apos;null&apos;,&apos;&apos;) );
brokerControl = createObject(&apos;java&apos;,&apos;flex.management.runtime.messaging.MessageBrokerControl&apos;).init(broker);
service = broker.getService(&apos;message-service&apos;);
&lt;/code&gt;

Having got the message service we can now create the destination, but we need three bits of information and lets do a bit of validation. 

The three bit of information we need are the name of the channel and gateway created in the previous part and the name of the destination we want to create. In this case I&apos;m going to call my destination &quot;dispatcher&quot;, my channel was &quot;longpolling-amf&quot; and the gateway id was &quot;myGateway&quot;.

&lt;code&gt;
channelName = &quot;longpolling-amf&quot;;
gatewayID = &apos;myGateway&apos;;
destinationName = &apos;dispatcher&apos;;
&lt;/code&gt;

If the destination already then you don&apos;t need to create it again.  Destinations are created at a server level and persist, so only the first person accessing the application needs to create it. 

&lt;code&gt;
destinations = service.getDestinations();
if (!structKeyExists(destinations,destinationName)){ //check if destination already exist

}
&lt;/code&gt;

getDestinations() returns a struct of all the destinations on the server and their properties. The destination name is the key to the struct entries at the top level, so we just check to see if the destination we want to create already exists in our &quot;destinations&quot; struct.

If there&apos;s no destination, then you&apos;ll need to create it.
&lt;code&gt;
//Create the destination and connect it to the ColdFusion adapter defined in the flex/messaging-config.xml file.        
destination = service.createDestination(destinationName);
destination.createAdapter(&apos;cfgateway&apos;);

// Now apply some settings to the destination - these are the same one&apos;s you&apos;d see in 
// the flex/remoting-config.xml file
ss = createObject(&quot;java&quot;,&quot;flex.messaging.config.ServerSettings&quot;);
ss.setAllowSubtopics(true);
ss.setDurable(true);
ss.setSubtopicSeparator(&apos;.&apos;);
destination.setServerSettings(ss);


//Initializes the adapter with the gateway properties.
adapter = destination.getAdapter();
configMap = createObject(&apos;java&apos;,&apos;flex.messaging.config.ConfigMap&apos;).init();
configMap.addProperty(&apos;gatewayid&apos;,gatewayID);
adapter.initialize(&apos;cfgateway&apos;,configMap);

// connect the destination to the channel/endpoint we&apos;re using and start the destination
destination.addChannel(channelName);
destination.start();
&lt;/code&gt;

Congratulations you now have a destination to which you can connect your javascript/flex bridge.

In the previous post I added a load function which had a call back to a initPolling function. This is where we need to look next. Now, before I do I should say that this is going to be a _really_ simple example. The creation of the producer/consumer (broadcaster/listener) should be done somewhere more appropriate, but for the purposes of this series of posts my init function will suffice.  Lets crack on...

Loaded the FDMSBridge.swf flex object on to the page triggers an external call to a set of initialisation function in the two javascript libraries that come with the bridge.  These calls create javascript facades to the flex equivalent objects. Take a look in the FDMSLib.js file and the BlazeDS docs for the objects that are available to you. 

The objects we are going to use now are ChannelSet, Producer and Consumer.
First up connect to your endpoint using a ChannelSet().

&lt;code&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
function initPolling (){
	var server = &apos;&lt;cfoutput&gt;#cgi.http_host#&lt;/cfoutput&gt;&apos;;
	var cs = new ChannelSet();
	cs.addChannel(new AMFChannel(&quot;longpolling-amf&quot;,&quot;http://&quot;+server+&quot;/flex2gateway/cfamflongpolling&quot;));
}
&lt;/script&gt;
&lt;/code&gt;

I&apos;ve been moving this code around between a few servers where I know that the end point is on the same server as my code, so I&apos;ve &quot;hacked&quot; in a cgi.http_host, but equally I could use document.domain in javascript to specify my server.  Set this anyway you wish, hardcode it, use my hack, whatever. Do be aware that you&apos;ll need to make sure that your calling domain is in the crossdomain.xml file if you are accessing different domain. I&apos;m not going to go into this here.

What this javascript does is creates an AMFChannel from javascript, through the flex bridge to the channel/endpoint in BlazeDS on your ColdFusion server.  Impressed?  You should be.  If you&apos;ve written any flex or flash listeners that talk to coldfusion through the flash remoting or flex2 gateway you now have a reasonably complete set of objects that you would use there available to you in javascript. 

Lets extend this. We need to be able to send messages to our event gateway to do this we need a broadcaster. &quot;Producer&quot; is the proper term in this case.

&lt;code&gt;
producer = new Producer();
producer.setDestination(&apos;dispatcher&apos;);
producer.setChannelSet(cs);
&lt;/code&gt;

This goes in the initPolling function after the addChannel function. It creates your Producer object, hooks it up to the destination we created and tells it to use the ChannelSet to our endpoint. This allows our javascript to send a message to our event gateway on ColdFusion.

Any message sent head down the channel set, through the flex bridge, to the endpoint, to the destination that routes the message to our ColdFusion event gateway, where it will be handled by the onIncomingMessage method in our cfc.

Sending a message is done using the AsyncMessage object from the FDMSLib. Its pretty simple; you create an AsyncMessage object, set the message body and then use the producer to send the message.

&lt;code&gt;
function send(msg){ 
	var message = new AsyncMessage(); 
	message.setBody(msg); 
	producer.send(message); 
}
&lt;/code&gt;

A message can be any data you wish to send. In this example I&apos;m just sending some random strings and numbers. 

&lt;code&gt;
function sendTest() { 
	testData = new Object(); 
	testData.andnow=&apos;for&apos;; 
	testData.something=&apos;completely&apos;;
        testData.different=42;
	send(testData); 
	return false; 
} 
&lt;/code&gt;

Jury rig a link to call the sendTest function in the HTML body and we&apos;re all set to send our test message to the server. 
&lt;code&gt;
&lt;a href=&quot;&quot; onclick=&quot;sendTest();&quot;&gt;
	Send the Test
&lt;/a&gt;
&lt;/code&gt;
For the purposes of this simple example the gateway.cfc in the attached zip has a cfdump in it that writes to a file. When you click on the &quot;send&quot; link a dump of the data received by the gateway will be written to the dumps folder.

&lt;img src=&quot;http://nil.checksite.co.uk/images/eventData.PNG&quot; alt=&quot;long polling event gateway data&quot; /&gt;

In there you should be able to see the message we sent along with information about how the message was sent to the server and a unique identifier for where the message came from (originator).  All this information can be used when replying to a message sent to the event gateway.  

For the minute I&apos;m going to skip over replies and just start with a simple broadcast from the server to all connected clients.  Sending messages back to the client from the server requires a listener or consumer. Add the following to your initPolling function to create a consumer:

&lt;code&gt;
consumer = new Consumer(); 
consumer.setDestination(&apos;dispatcher&apos;); 
consumer.addEventListener(&quot;message&quot;, messageHandler); 
consumer.setChannelSet(cs); 
consumer.subscribe(); 
&lt;/code&gt;

Consumer() is another object available in the FDMSLib.  The code above connects a consumer to our destination and end point, adds a event listener of &quot;message&quot; and then tells the event gateway its ready and waiting by &quot;subscribing&quot;. 

The data I&apos;m going to send back to the server will contain a string in a variable called &quot;TEXT&quot; and my handler is simply going to alert() that that text.

&lt;code&gt;
function messageHandler(event){ 
	alert(event.getMessage().getBody().TEXT); 
} 
&lt;/code&gt;

I strongly recommend using something like firebug to have a dig around in the event object to see all the data that is available in the event and message.

To send a message to all connected clients I need another template with 2 lines of cfscript in it.

&lt;code&gt;
&lt;cfscript&gt;
clientMsg = {Destination=&apos;dispatcher&apos;,body={text=&apos;The answer to life, the universe and everything&apos;}};
sendGatewayMessage(&apos;myGateway&apos;,  clientMsg);
&lt;/cfscript&gt;
&lt;/code&gt;

The first line is a structure for my message to the client. Its made up of destination and body. Destination is the same destination we created previously and body is the data of the message.
The second line is the ColdFusion function sendGatewayMessage(). You simply specify the gateway it will be sending the message through and the message it needs to send.

With your main index.cfm loaded and listening, load the page that you put this bit of cfscript into in another browser window.  Within a few moments, if all your code is correct, you should get an alert appearing the first window.

And that is it for this post. 

This is a very crude server-side sender. If you were to have more than one window open with the index.cfm in it, all of those windows would display the alert message. This isn&apos;t especially useful, so in the next post I&apos;ll cover replying to messages received by the event gateway and routing messages based on subtopics on both the client and server.

Attached to this post is the complete code for this blog post. Enjoy!

*UPDATE*
I&apos;ve sorted out the two issues that Anthony raised with the file path for dumps and the erroneous messages.
				</description>
				
				<category>BlazeDS</category>
				
				<category>CFML</category>
				
				<category>AJAX</category>
				
				<pubDate>Sat, 13 Feb 2010 00:13:00 -0800</pubDate>
				<guid>http://nil.checksite.co.uk/index.cfm/2010/2/13/CF-BlazeDS-AJAX-LongPolling-Part2</guid>
				
				
				<enclosure url="http://nil.checksite.co.uk/enclosures/longpolling-part2.rar" length="189631" type="application/octet-stream"/>
				
			</item>
			
			<item>
				<title>AJAX Longpolling with ColdFusion and BlazeDS - Getting set up</title>
				<link>http://nil.checksite.co.uk/index.cfm/2010/1/28/CF-BlazeDS-AJAX-LongPolling-Part1</link>
				<description>
				
				I&apos;ve spent some of my week this week fighting with JavaScript, BlazeDS and ColdFusion to get a working model for some ExtJS functionality that I&apos;m currently building at work.

One of several pieces of functionality we&apos;d like is to have is real time notifications of workflow changes.  The way it was described was &quot;we want to push alerts to the users&quot;.  

I decided to have a look at how we actually addressed this &quot;problem&quot;.  
We didn&apos;t really need to &quot;push&quot; alerts to users, so the solution was traditional polling or long polling.Traditional polling will hit Apache and ColdFusion via a timed ajax call over and over. Any &quot;messages&quot; that are sent to a client will wait on the server until the request is made.

Long polling opens a connection to the server and keeps that connection open until a timeout limit is reached and then reconnect.  If a &quot;message&quot; is made available for the client, then the open connection will send it to the client immediately.

After reading the &lt;a href=&quot;http://www.coldfusionjedi.com/index.cfm/2010/1/12/Best-of-CF9-Collyba&quot; target=&quot;_blank&quot; title=&quot;Best of CF9: Collyba&quot;&gt;Best of CF9 Entry from Marko Simic&lt;/a&gt; on Ray Camden&apos;s blog and talking to a bunch of people, but specifically &lt;a href=&quot;http://www.onflexwithcf.org&quot; title=&quot;Jo&#xe3;o on Flex with CF&quot; target=&quot;_blank&quot;&gt;Jo&#xe3;o Fernandes&lt;/a&gt; I decided to go with long polling using BlazeDS.

If you don&apos;t know what &lt;a href=&quot;http://opensource.adobe.com/wiki/display/blazeds/BlazeDS/&quot; title=&quot;Adobe OpenSource BlazeDS&quot; target=&quot;_blank&quot;&gt;BlazeDS&lt;/a&gt; is, its the default messaging server used in ColdFusion 9, in place of Live Cycle Data Services. Given that I basically needed a messaging service between ColdFusion and ExtJS it seems logical that I should use this, particularly as it has the ability to create long poll connections.

As with all the thing i seem to be doing at the minute, they are actually pretty simple, but there&apos;s no concise idiots guide for the likes of me to be able to put these things together. Hopefully this blog post will help others.

There are a number of things that we are going to use and need to know in order to get started.
 
Firstly, you cannot simply create a javascript long polling connection to BlazeDS. This has to be done through a bridge mechanism. Fortunately, there is a Flex-AJAX Bridge available for just this purpose.

We need a service channel definition in the services-config.xml and a ColdFusion event gateway.

We&apos;ll have an HTML/Javascript interface that will sit on the browser. This will include the Flex-Ajax Bridge. 

On the server side we&apos;ll have BlazeDS handling the messaging and ColdFusion Event Gateways handling the messages that are sent.

This is kind of how I visualise how everything fits together.

&lt;img src=&quot;/images/mockup_2.png&quot; style=&quot;align:left;clear:left&quot; alt=&quot;Stephen&apos;s visualisation of how the elements of long polling fit together&quot; /&gt;

Hopefully this diagram will make some kind of sense later on when all the pieces of code and technology are put together.

Ok, so lets get started with the two easiest bits of set up.  The event gateway and the service channel.

If you&apos;ve looked at Marko&apos;s Best of CF9 entry, you&apos;ll have seen in the INSTALL text that he has a bit of config that you need to insert into the services-config.xml file on your ColdFusion Server. This is the service channel and we&apos;ll be inserting the exact same piece of config. (I copied it from there - thanks Marko ;) )

Find services-config.xml under the Flex folder in your ColdFusion Server.  I always use &lt;a href=&quot;http://nil.checksite.co.uk/index.cfm/2006/5/2/cfmx-multiserver-set-up&quot; target=&quot;_blank&quot; title=&quot;CFMX MultiServer Set up&quot;&gt;Multi Server installs&lt;/a&gt; and I always expand the cfusion.ear file out to folders, so on my local blog server I can find the flex folder here : C:\JRun4\servers\blog\cfusion-ear\cfusion-war\WEB-INF\flex

Open up the service-config.xml file and find the &lt;channels&gt; section. In this section insert the following channel definition :
&lt;code&gt;
      &lt;channel-definition id=&quot;longpolling-amf&quot; class=&quot;mx.messaging.channels.AMFChannel&quot;&gt;
            &lt;endpoint uri=&quot;http://{server.name}:{server.port}{context.root}/flex2gateway/cfamflongpolling&quot; class=&quot;coldfusion.flash.messaging.CFAMFEndPoint&quot;/&gt;
            &lt;properties&gt;
            	 &lt;!--no-cache response headers on HEEPS-based endpoints--&gt;
				&lt;add-no-cache-headers&gt;false&lt;/add-no-cache-headers&gt;
				&lt;!--
				Enabling of the small message removes those from the header and only 
				passes the minimum that Flex needs to communicate with the server. 
				If you need to pass information via the header in 
				BlazeDS or LiveCycle just add this to your channel defintion
				--&gt;
				&lt;serialization&gt;
					&lt;enable-small-messages&gt;false&lt;/enable-small-messages&gt;
				&lt;/serialization&gt;
				
				&lt;polling-enabled&gt;true&lt;/polling-enabled&gt;

				&lt;client-wait-interval-millis&gt;1&lt;/client-wait-interval-millis&gt;

				&lt;!--polling-interval-millis is the time interval between polling requests. Since we no longer need to pace the requests, we could safely set the interval to 0.--&gt;
				&lt;polling-interval-millis&gt;0&lt;/polling-interval-millis&gt; 

				&lt;!--dictates how long the server should wait before returning a polling request. The default is 0. By setting it to -1, we are telling it to wait indefinitely until a message is to be routed to the client.--&gt;
				&lt;wait-interval-millis&gt;120000&lt;/wait-interval-millis&gt; 

				&lt;!--max-waiting-poll-requests caps the number of long polling clients. Since the server is not ackowleging right away during long polling, each client hogs one server thread. Once the cap is reached, any new clients fall back to simple polling clients.--&gt;
				&lt;max-waiting-poll-requests&gt;100&lt;/max-waiting-poll-requests&gt; 				
				
            &lt;/properties&gt;
        &lt;/channel-definition&gt;	
&lt;/code&gt;

This is the BlazeDS channel that we&apos;ll be connecting too.  The comments in there should help you understand what its doing. The important part to understand is that the wait-interval-millis is how long a connection will stay open for before BlazeDS drops the connection. This is what will allow us to create a messaging connection that will remain open.

For now I&apos;m manually creating this channel and endpoint in the services-config.xml. Later I want to remove this and dynamically create an end point, so that we don&apos;t have to do any manual configuration and for one other reason I&apos;ll come to later.

Next go into the ColdFusion administrator, find the the event gateways section and the Gateway instances under that.  Add a new data services messaging gateway : 

&lt;img src=&quot;/images/pollingeventgateway.PNG&quot; alt=&quot;ColdFusion Event Gateway for Polling&quot; /&gt;

In this case I&apos;ve just called it myGateway and I&apos;ve pointed it at an empty cfc called gateway. This CFC will handle the messages that are sent from the browser to the server.

The last bit of set up, and the end of this blog post, is the initial set up of the Flex-AJAX Bridge.

The bridge is made up of 2 javascript files and a swf.  The swf does actually exist you have to compile this yourself. The javascript files and the actionscript files can be found in the download of the source for BlazeDS or from the SVN repository here : http://opensource.adobe.com/svn/opensource/blazeds/branches/3.x/resources/fds-ajax-bridge/ 

There are also instructions on how to compile the bridge in the readme.txt file with the actionscript and javascript files.  You may find that when run the compile with the command line given in the readme.txt file it will throw an error about not knowing what the context root is. If you do add &quot;-context-root /&quot; to the end of the command line, or replace the &quot;/&quot; with your context root if its different eg. &quot;cfusion&quot; is a possibility. 

This compilation is the second reason why I would like to make the channels/endpoints dynamic. One of the attributes of the compile points to the services-config.xml file. If you change the services-config.xml file you will need to recompile the bridge swf. By compiling the bridge against a standard services-config.xml and dynamically generating the endpoint this will negate the need to recompile the bridge when ever you need a new endpoint.

So now we&apos;ve got a message channel/endpoint, an event gateway, an empty event handler and our Flex-AJAX bridge. Just to conclude this blog post create an basic index.cfm file with your standard html head and body. Include the two Flex-Ajax Bridge javascript files in the head of the page.  At the foot of the body insert :
&lt;code&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
 // load the blazeds bridge
FDMSLibrary.load(&quot;./blazeds/FDMSBridge.swf&quot;,initPolling);
&lt;/script&gt;
&lt;/code&gt;

This will load the bridge swf that you compile previously. 
&lt;b&gt;Note :&lt;/b&gt; The load function does a document.write() of a bunch of HTML to insert the swf into the page.  I found that if you try to run this &quot;onReady&quot; or at the head of the page it would lock up the processing of the rest of the page. It really needs a rewrite to be a bit more clever than simply injecting the object/embed html into page where ever this is called. Again something for later down the line, probably as an Ext.JS object of some kind.

Lastly, before I fall asleep at my laptop, back up in the head of your page, create an empty javascript function called &quot;initPolling&quot;.

I&apos;ve attached a rar file with this initial bit of code, as well as the bridge javascript and my compiled FDMSBridge.swf.  Whether you&apos;ll get any use out my bridge swf is really down to your set up.
				</description>
				
				<category>Web Development</category>
				
				<category>BlazeDS</category>
				
				<category>CFML</category>
				
				<category>AJAX</category>
				
				<pubDate>Thu, 28 Jan 2010 21:31:00 -0800</pubDate>
				<guid>http://nil.checksite.co.uk/index.cfm/2010/1/28/CF-BlazeDS-AJAX-LongPolling-Part1</guid>
				
				
				<enclosure url="http://nil.checksite.co.uk/enclosures/longpolling-part1.rar" length="188416" type="application/octet-stream"/>
				
			</item>
			</channel></rss>
