CF 9 - A Feature Review
I'll begin by saying I have mixed feelings about this release... and warn my readers that if you're hoping for an evangelical overview about the majesty of CF 9, then I'm probably about to disappoint you. With every release there are new features that don't matter to me personally (as a developer) but will matter to my clients, new features that I don't care for at all, and new features that I really like. CF 9 is no different. What is different with CF 9 is that with this release I keep going back and forth as to whether or not I feel that that the new features are compelling enough to spend money on to upgrade from CF 8 (if you already have a free upgrade you are well-advised to use it). More than ever, I think the decision whether or not to upgrade is really going to depend on what you need your applications to do. Anyway, here is a bulleted list of some of the new features (in no particular order) and how I feel about them:
- Integrated ORM
- Of all the hyped features, this is the one I'm least excited about. What made ColdFusion popular in the begining is how easy it makes it to talk to databases. SQL is a very easy simple language. Put those two facts together and personally, I feel like the ORM support is just taking something that's already easy to do and adding a layer of complexity on top of it. I'm not a big fan of ORMs to begin with, as a large percentage of application performance bottlenecks can be traced to the database, and I prefer very granular control over that. I do know the benefits and scenarios where you might benefit greatly from having an ORM - I just feel like we don't need this and the engineering hours could have been spent on something more useful.
- Virtual File System
- This is a feature I was especially excited about originally. I still like the feature but the more I've thought about it the more I question just how often it will be useful for the average application. I do see it being very useful for use within the core codebase of frameworks, and I like that it kind of makes lexical closure more possible or, better put, better performing.
- MS Office Support/Integration
- This is a feature I know will be extremely popular with developers... and with myclients. I personally spend far more time on the business logic side of things (not the display side) so I'm not excited about as a programmer, but it's definitely one of the features that will make spending money for CF 9 compelling.
- CFScript Enhancements
- Anyone who's ever worked with me or read my code knows that I'm a CFScript maniac - and have been since the tag was introduced. That said, I'm not as crazy about the CFScript enhancements as I thought I'd be. The addition of 'throw' is a bug fix in my opinion (how can you have 'try' and 'catch' without 'throw'?) but in general I don't like what the syntax becomes when you implement many of the other CFML tags as functions in a script block. I've used CFSCRIPT exclusively for about 10 years or so, and the limitations before this release haven't been a huge issue for me and are very easy to get around. I should also mention that although I thoroughly embrace CFScript, the last thing I want to see is CF supporting a syntax that is anything more like Java than it already is. I know Java, I don't like Java, and if I ever want to write Java code, I'll use pure Java. That's not why I use CFScript and I wouldd hate to see it go that route. I know that's an exhagerated reaction to the CFScript enhancements, but more and more we see Java creeping in where once only CF roamed... and writing everything in CFScript is a part of that. This is a feature that was obviously driven by developer (not client) requests and not surprisingly, is not a reason to pay to upgrade in any event.
- CF Services
- A while ago I wrote (I believe in a comment on Tim Buntel's blog) about the need for ColdFusion to be able to position itself as a COTS product if it is ever going to be taken seriously for use in very large projects (I'm talking about projects that cost 100's of millions or more dollars). For mom and pop shops this feature means little (unless they're building Flex/AIR apps) but in the large enterprise, this is a very significant selling point for CF 9.
- Flex/AIR Integration
- The Flex/AIR integration doesn't allow you to do anything that you couldn't already achieve with a little CF code, but it will probably make life easier for a lot of (Flex and ColdFusion) developers, and I do think that good integration between ActionScript based applications and the CF Server is integral to keeping CF competitive and to ensuring ColdFusion's longevity. If you're developing business applications with Flex Builder, er... Flash Builder, this is a feature that could very well be the deciding factor in choosing to use ColdFusion 9 as your server-side technology.
- AJAX Enhancements
- The AJAX widgets in CF 8 are a sore point for me - they're great until you hit some limitation where you need them to do something just a little different, and then you have to write hacks to make them behave exactly how you need them to. Then, somewhere in the middle of it all you think to yourself "Why didn't I just use JQuery?". I feel like a lot of the new AJAX stuff in CF 9 should have been in CF 8... and I'm not 100% sure if it's really what I'd call 100% complete yet, but like I said earlier I'm also not a big UI Guy. I do think the Google Maps integration was a great idea and I'm sure that it'll be a big hit with developers - though again, it's not something you couldn't do before CF 9 with just a tiny bit of work.
- Lucene Integration
- I was glad to see Lucene integration, as Verity has performance and functional limitations, and I've always liked Lucene. It's not a feature I think anyone's going to buy CF over, but definitely a good feature.
- Serialization Improvements
- The ability to serialize objects is rarely used but has a place, especially in the enterprise. I'm glad they took the time to add this, but I should mention that this is really more of a bug fix - when serialization support was first introduced, everything should have been serializable. In fact, to be honest serialization of all variables should have been there from day one of CF running on Java.
- Server Manager
- If you never administer, install, or troubleshoot servers then this feature won't matter to you. Speaking as someone who does, this is one of the more useful things added in CF 9 and it will make life much easier for server admins everywhere. Ease and robustness of deployment, management, and monitoring is something you look for when you're thinking about deploying on the enterprise, and this application will definitely help in that arena. Aside from actualy being very useful, it makes CF look "all grown up" to certain-minded decision makers.
- Access to local variable scope in functions
- This is a good thing to have, by all means, though I do think it's something that should have been there from day one in CFMX (it half-feels like a bug fix). Again, it's not a feature I think anyone's going to buy CF over, but I'm definitely glad to see it.
- Performance Improvements
- Performance improvements in CF 8 were probably the best "feature" in my mind - it was the one reason to spend money to upgrade that almost nobody could argue with and that everyone can use. I haven't personally run any performance comparisons, but faster is always better... and always a reason to upgrade.
- Sharepoint Integration
- There's not much to say about this except that if you use sharepoint or have clients who uses sharepoint and you need to integrate with it, this feature is going to save you a lot of time. Like any other feature based on integrating with a 3rd party product, if you don't use that 3rd party product then it's obviously not an impressive feature for you (and vice versa). Like some other features I've mentioned, this feature may also help get CF into large enterprise environments.
- Caching Enhancements
- I like that less experienced developers now have an easy built in way to cache content and code. Like many other developers, I've grown so used to implementing my own caching strategies in the applications I build. I'm curious about whether or not it performs better than "home grown" caching implementations. I have a tiny fear that if I use this feature, I won't like having the same level of access to what's going on that I have when I write my own caching code, but if it performs better, it may be worth it.
- PDF Improvements
- This feels a lot like improvements that make up for what should have been there from the begining, but the PDF support definitely needs improving and I'm glad to see it being improved.
- Portlet Specifications
- Similar to sharepoint integration, if you use portals this feature is great... and this will definitely be one of those features that comes up when large organizations are evaluating software for massive scale enterprise applications.
- Datasource Optional
- I'm not excited about this feature at all. It was easy enough to have a variable hold the value of your datasource name - so now you change it in one place instead of another. I also worry that it makes code a little less self-documenting, especially in applications that use more than one datasource. It doesn't really save me any time or effort and isn't a reason to upgrade, but I'm sure some folks will love it.
- 64 Bit Support for CF Standard and Enterprise
- I don't know how many companies are running CF in a 64 bit environment now (since it was only officially supported with 8.01) nor how many that are running in a 32 bit environment are ready and willing to move to 64 bit. I can tell you that whatever either of those numbers is, they're not big enough. After several initial hiccups I've come to be quite impressed with 64 bit JVM performance and with the performance of 64 bit OS' including Windows Server. I will say that I have a feeling that some admins will install CF Standard on a 64 bit OS, set the JVM to as much memory as they can (knowing that the 64 bit JVM supports it), and then stare dumbfounded when their CF Server pegs the CPU and renders the box useless. Hopefully, Adobe will release some sound JVM configuration suggestions when deploying on a 64 bit OS. Still - if you use CF Standard then in my opinion being able to run it on a 64 bit OS is a reason to upgrade (if you're running CF 8 Enterprise, you can already move to 64 bit).
- ColdFusion Builder (Bolt IDE)
- I have grown accustomed to using a free IDE (CF Eclipse) for ColdFusion development and so I am naturally hesitant to say I like this shiny new IDE that Adobe is going to charge for. If CFEclipse had good introspection (most including dot operator support) and had refactoring capabilities, I honestly probably wouldn't consider this new IDE. The refactoring support in ColdFusion Builder still isn't as robust as I'd like to see, so until I see that feature fully implemented and I see the final pricing points, I'm on the fence. I know it has some other nice features, but the productivity gains I'd get from the two features I just mentioned are what would make it an easy decision for me. If Adobe decided to make it free it would be a no-brainer, as I'm sure they'll continue to add terrific new features. I'll have to remain undecided about whether it's worth the price tag (whatever that may ultimately be) for now.
If you ask me today whether or not you should spend money to upgrade when CF 9 comes out, I'd tell you to read the feature list, think about your needs and the needs of your clients, and then decide. I know that for those of you who are used to reading my editorials and reviews of CF releases in the past, this may have seemed like a negative review. To be honest, I suppose compared to some of my prior reviews it is but my intention was simply to give a 5 minute overview of each notable feature from an unbiased "on the fence" point of view. There are some great things in there and some things I could live without. As a programmer CF 9 has very little "wow factor" for me, but as an IT Manager there definitely are some compelling reasons to move to the new platform. For many of our client applications these features will be very useful and I do plan to upgrade some of our servers when CF 9 is released.

Simon, CF Builder does have refactoring support. You can search/rename functions and variables.
Similarly you can find references to UDFs and variables. In the editor, select a variable/UDF and right click. Select refactor->rename.
Note that you can also rename functions from runtime calls, all references will be changed.
We have not yet implemented refactoring package name.
ILast time I looked at the IDE refactoring wasn't working how you describe. There's still more work to be done on the refactoring capabilities for sure, but I'm glad to hear it's getting there now. I've updated the entry to reflect this.
Thanks!
http://www.maxgamegold.com/Runescape-II-10.html http://www.archlord-gold.com archlord gold