Rob Brooks-Bilson
Tech, Photography, Stuff
Tech, Photography, Stuff
January 14, 2010
You'll have to bear with me here because this is a long one. A few months ago we ran into a problem after upgrading some of our servers to ColdFusion 8.0.1 CHF3 from CHF1. We had an application that integrates with a web service running on a remote .Net/IIS server that started throwing a "Connection Failure" message for code that worked fine pre-upgrade. It turns out that in CF 8.0.1, CHF 2/3 there was a "bug" that was fixed for cfhttp:
72744 Fix for CFHTTP making disable deflate as true by default in the header when CF sends an HTTP request, since compression is not handled by CFHTTP client.
Problem for us is that this fix actually broke code we had previously running. Here are the test cases:
Here we have a CF 8.0.1 server running CHF 3:

Execute this code, where we tell CF to pass in two headers:
Wireshark shows CF appending deflate;q=0 to the * which we told CF to pass. This is what was added in CHF 2/3.

IIS 6 gets this and decides to return the data compressed as you can see in the Content-Encoding:

This time, take out the accept-encoding header:
When you run this, notice that ColdFusion appends all sorts of stuff for the Accept-Encoding header:

The result coming back to CF is again compressed by IIS 6:

Let's try this now with CF 8.0.1 with no CHF (works the same with CHF 1):

Run the code passing in both headers:
Wireshark shows ColdFusion passing in only the accept-encoding value we specified. For the TE trailer, we pass in deflate;q=0 which is supposed to tell IIS not to return deflated (compressed data):

What you see next is what we expect to see. IIS is returning the correct data uncompressed:

Now go ahead and take out the accept-encoding like we did last time:
Notice how CF just passes along deflate, gzip, x-gzip, etc?

IIS gets this and returns the content deflated, which CFHTTP can't handle and we get our error:

One last time. Now for CF 9:

Run the code passing in both headers:
What we see in wireshark is the same thing we just saw for CF 8.0.1 up to CHF1:

Data comes back uncompressed as we expect:

Remove the accept-encoding header:
Same values passed as for CF 8.0.1:

And we get compressed data back (and the error again), as expected:

So, what this long exercise shows me is two things:
I filed a bug report on this and verified the problem with Adobe (there's a bug number but for some reason it isn't showing up in the bug base). They've stated they'll be releasing a fix for it in CHF4 for CF 8.0.1. Just a reminder that this issue does not affect ColdFusion 9.
Thanks go to my coworker Adam Crump for helping to troubleshoot and diagnose the issue.
July 16, 2008
Just a quick note that I'll be speaking at Adobe MAX 2008 in San Francisco. My topic this year is Advanced ColdFusion Caching Strategies. I'll be covering ways to improve application performance and scaling using both ColdFusion's built-in caching mechanisms as well as distributed caching systems such as Memcached JCS, and EHCache.
It's been a while since I've spoken at a ColdFusion conference. The last time was at MAX 2004 in New Orleans where I presented 5 sessions on Coding for Scalability. I'm hoping that this year's presentation on Advanced ColdFusion Caching Strategies will be something people find both interesting and useful as I think it's a topic that's often overlooked but can play a big part in both performance and scalability.
April 3, 2008
Hot news flash. ColdFusion 8.0.1 has been released with support for 64-bit operating systems. Also included in the release are a slew of bug fixes as well as some tasty new features including:
There is much more to the updater than what I've mentioned here. For the full list of fixes and enhancements, see the release notes.
You can learn more as well as download the update from Adobe's website.
March 24, 2008
I've been working up a few demos lately that make use of the new layout tags in ColdFusion 8, and while I think they really do make Ajax based layouts much easier than using the Ext js and YUI libraries on their own, there are a couple of issues I've bumped into that have me thinking that their potential may be limited. Let me explain.
Today I was working on a dashboard mock-up to show to some of my colleagues. I wanted to show them how simple it is to do a dashboard in ColdFusion, and I wanted to do it using the new cfwindow, cflayout, and cflayoutarea tags. Things were moving along well until I wanted to add an accordion pane on the left-hand side of the layout. Try as I might, I couldn't find the attribute or value in any of the new tags to make it happen. That's when I realized that accordion panes are only available as part of the Flash based cfform controls. Doh! I don't want to use any Flash in my dashboard demo (I'll leave that to a Flex based demo), just straight HTML/Ajax. There are several options for adding an accordion panel outside of ColdFusion (Spry, Ext js, etc.), but I wasn't expecting that the control wasn't going to be included as part of ColdFusion 8.
This led me to more carefully consider the new UI controls in ColdFusion 8. For many layout tasks, they may be sufficient. However, what really has me concerned is situations like this. I still want an accordion control, and in order to get it, I'll have to mix and match the ColdFusion UI controls with another solution. What I'm strongly considering right now is abandoning the new UI controls all together in favor of a custom tag based approach. It turns out that there are two ColdFusion custom tag libraries that each wrap the Ext js library: cfExt by Dan Vega and ColdExt by Justin Carter. I like the custom tag based approach for a number of reasons:
I hope I don't come off as bashing the new UI tags in ColdFusion 8. I really do like how easy they are to use and will be very beneficial to a lot of developers. If, however, you require more flexibility, you may want to consider implementing UI controls natively in JavaScript, or looking into one of the Custom Tag Libraries mentioned previously.
I'd love to hear what others have to say about this topic.
March 6, 2008
I realize that this is another "me too" post as the news has already been widely reported. However, it's good news, and it's too good to pass up. Just in case you haven't heard yet, Adobe ColdFusion 8 just won the 2008 Jolt Product Excellence Award for Web Development, presented by Dr. Dobb's Journal.
What makes this particularly nice is that the winners are "selected by a panel of judges consisting of industry insiders, columnists, and technology leaders.", lending much more credibility to the award.
Congratulations to the ColdFusion Engineering team and to Adobe!
October 9, 2007
In a previous entry I talked about a problem I was having with my laptop blue screening every time I tried to install/run ColdFusion 8 with the default 1.6 jvm. At the time, I believed the issue might be with java 1.6 and some drivers on my machine. It turns out I was only partially right.
I though others in my group had been successful at installing CF8 on their machines, but it turns out that they all had the same BSOD problem I did. After a little more digging, Adam Crump was able to determine that the fault was taking place with a file called fslx.sys. It turns out that this file is used by the Altiris Software Virtualization System that was installed on all of our laptops. We use Altiris for lifecycle management, helpdesk, patch management, and more. The software virtualization wasn't being actively used, but something about it is causing the BSOD. Removing the Altiris virtualization program and reverting back to the 1.6 jvm solved the problem.
We're planning to submit the issue to Symantec (they recently bought Altiris) so they can hopefully issue a fix. Their virtualization software is actually pretty cool, so I'd like to be able to have it reinstalled on my machine again at some point.
September 25, 2007
I've been having problems getting ColdFusion 8 installed on my laptop for months now. No matter how I tried installing it (stand alone, multi-server, j2ee), it caused my computer to Blue Screen during the install process. Everything would go ok right up until I launched the ColdFusion Administrator to complete the install process. After launching the CF Administrator, the computer would continue on for between 1 and 30 seconds before it would blue screen with a BAD_POOL_HEADER error.
I know others are having the problem as well as a Google search turns up several others with the problem but no satisfactory solution.
After a lot of off and on troubleshooting, I finally had a chance to sit down over the past two days and have figured out what the problem is and have come up with a workaround. It turns out that the issue is the JVM. More specifically, Java 6 (and on my machine Java 5 as well) causes the problem. I can cause the BSOD with Java 6 using both ColdFusion 8 and JBoss (without ColdFusion).
Since the ColdFusion 8 installer lays down the 1.6.0_01 jvm, you need a way to install ColdFusion 8 with an earlier jvm. Here's the workaround I've come up with. In my case, I chose to use the 1.4.2_14 version of the jdk:
At this point, you should be good to go. I should point out that the BSOD problem is most likely a problem with Java 6 and either my video card, or my NIC. I have an IBM T60 with an Intel Nic. Others in my office have the same laptop and nic, but aren't having the BSOD problem. They do, however have a different video card than I do (I have an ATI Mobility Radeon X1400). IBM OEM's the card in my case, so any resolution is going to have to come from them on my end. I have no idea if they will ever resolve the issue, so all I can do is continue to test new JVM versions with my setup as they come out to see if the problem has been resolved.