Son of a Beach or ColdFusion Sucks
17 Aug 2006I'm taking a couple days off from work and heading up to the beach for the day with some folks. Should be a nice break from the ColdFusion-rich days I've been spending at work. We're working on a project to take ColdFusion users from being spread out across our Windows servers and move them to their own Windows servers, where poorly written code can't take down other, non-ColdFusion pages.
I'm not a big fan of ColdFusion. I can understand why people would use it if they're not particularly skilled developers, but once you know enough to use ColdFusion well, it seems like you'd want to use ASP, Perl, Python, Ruby, PHP ... something .... anything else. ColdFusion runs through Java, so it tends to be slow when you're running it through IIS. Making things worse, we've discovered that ColdFusion's default JDBC-ODBC bridge is pretty much crap. When you get 12 concurrent database queries, the ColdFusion ODBC service dies. But not gracefully, it gets stuck in a state where it can't be stopped or started. The box has to be rebooted.
Why does this suck royally? First, because ColdFusion users (at least those using our service) tend to write really crappy code without closing their queries and sometimes running queries within queries, and they can hit that 12 concurrent database queries pretty quickly. But the bigger gotcha, the bigger kick in the junk, is that ColdFusion is installed as a wildcard script map in IIS. That is every single page request, ColdFusion or not, goes through ColdFusion for ColdFusion to decide whether or not it wants to handle it. So when ColdFusion dies, NO PAGES GET SERVED FROM THAT BOX AT ALL. It's really quite annoying.
Yes, there are some things we could do to mitigate it. The logical one would be to remove the wildcard script map, but that actually breaks ColdFusion (some wonderful work you've done their, Macromedia/Adobe).
So, we've actually decided to segment ColdFusion users and use a native JDBC driver rather than the ColdFusion JDBC-ODBC bridge. I've spent the last few weeks of my life on this, moving customer sites, testing, writing Perl code to automate the process. It's been fun taking existing ColdFusion DSNs and recreating them in the new format. It's been more fun finding out the various little things that the new JDBC Microsoft Access driver doesn't support that the traditional ODBC driver does. (Hey, for some ridiculous reason you've got an Access replicated table? Fantastic, the JDBC driver won't read it. Hey, you're using RND in your query? Fantastic, the JDBC driver doesn't support it. Hey, you're using a raw 'Yes' in your query to match a checkbox column. Fantastic, change your query to != 0 to pick up the positive values.)
It's been a long few weeks, but it's gone pretty smoothly, all things considered. But I hate ColdFusion, and I hate Access.
Thus, I'm off to the beach. Where there will be no ColdFusion. And no Access. Just my iPod, newly loaded up with all of the episodes of the Band in Boston podcast, as pointed out by Bostonist. I'll be back soon feeling refreshed and ready to deal with more ColdFusion fun.