6 Oct 2009

ColdFusion 9 is out. Upgrade? Not this time.

After nearly a year of alpha and beta testing the latest release has hit the streets. It’s available to download as a 30 day trial or as a free developer edition (limited to 2 IP addresses as per usual). The new features are listed on the Adobe site.

The license has changed for the better which allows you to run the full version of CF on your development and test environments for free providing you’ve bought a new CF9 license for your production environment. Therefore if you were previously limiting your dev and test systems to 2 pesky IPs you can lift that restriction, but the new license only applies to CF9, it cannot be retrospectively applied if you own CF8 and earlier editions. Well done Adobe!

The question everyone is asking is shall I upgrade our existing servers to CF9? I made the decision a while ago to skip this edition. You have to ask yourself what business benefits it will bring to the table and if that will enhance your apps sufficiently to pay for itself. Here’s my take on the new features. Obviously it’s different for every app and every business, but needless to say our new apps being launched in the months to come will be using CF9, but our existing ones will not.

  • cfspreadsheet: Let’s you read from Excel files and update them too. Good if you work with xls files. I can see benefits for intranet apps. Previously to create xls files you had to create data as an HTML table but CF8 was unable to read or update existing Excel created files.
  • Word to PDF: I really like this conversion facility but it does not officially support Office 2007 or 2010 docx files which is somewhat of an oversight. However, it will make a reasonable attempt at converting them but chokes on the more elaborate docx files as explained in this blog. OpenOffice needs to be installed for this feature to work. (While OpenOffice is free I’m not comfortable installing a bloaty desktop app onto production servers)
  • ColdFusion as a service: Access CF features such as cfhart, cfdocument, cfimages, etc, as a web service. Perfect for offloading tasks to other servers or opening up CF features to .NET or PHP apps.
  • Adobe AIR database synchronisation: If you’re into AIR this sounds like a useful addition.
  • Virtual file system: Save files to RAM as if it were an ordinary hard drive. Good if you have a load of files that need to be regularly written to or read from or if your network drives are already a bottleneck for performance. Don’t forget all files in the virtual file system are wiped when the server is rebooted or crashes.
  • Integration with CF Builder: If you’ve tried the beta of Builder (the new IDE from Adobe) then it will work better if you have CF9. I don’t like Builder. Sorry. I wish they had enhanced Dreamweaver instead because I also need access to design tools as well as coding tools, plus DW has a very good GUI.
  • ORM: It sounds clever – CF will interface with your database without having to write a single line of SQL. Admittedly I haven’t got into this too deeply but I fail to see how it can write SQL as intelligently as a human or work with the many complexities of our stored procedures and data intricacies. I like to know exactly what’s happening at the CF<>SQL layer so ORM would worry me. Maybe ORM is for non-enterprise apps and RAD? I’m sure someone will enlighten me.
  • New AJAX controls: I have a real problem  with this. Why are Adobe wasting their time adding a CF layer for JavaScript when the JavaScript library becomes outdated within a matter of months? If developers use a highly flexible JavaScript framework such as jQuery (which is really easy to learn and oh so sexy) then they can always keep their apps up to date with the latest features instead of having to wait a year or two for the next CF update (which also updates the built-in Ext JS library). jQuery is less bloaty and give developers much finer control over ajaxy things, ready-to-go menus, slick UI panels and interactive data tables etc.
  • SharePoint integration: This is fantastic if your business or client uses SharePoint. It makes it so much easier for CF apps to take part or become the hub of new SharePoint apps. My biggest client has made a massive move to SharePoint which would have got me excited if they hadn’t banished all non-Microsoft technology from their organisation. Doh.
  • Server Manager: Administrate multiple CF servers from a central console. Very useful if you have a large server farm or regularly tinker with the Administrator on a couple of servers. Definitely good for rolling out new CF servers. Otherwise check out Merlin, an AIR based administrator for managing multiple servers running CF 7, 8 or 9.
  • Enhanced Flash Remoting: Never used Flash Remoting or Flex, I am not a Flash developer as I find using DHTML/jQuery fast and effective for enhancing the user experience, but obviously this is welcomed by those who use Flash Remoting. (I wonder what percentage of CF developers do use it?)
  • Speed enhancements: Other blogs have run tests to show that CF9 is faster than CF8. So if your current server is under strain maybe you can buy it some breathing room by upgrading? But realistically, new server hardware may be cheaper than a CF upgrade and if your server is 3+ years old a new Intel 55xx based server could quadruple your server’s speed and/or capacity. (We’re going down the hardware upgrade route)
  • 64 bit Edition for CF Standard: Yay!
  • Cache enhancements: The popular Ehcache technology is now integrated into CF. Rob Brooks-Bilson talks about this in detail over 4 blog entries so I’ll leave him to explain since he’s done such a fantastic job. Part 1. Part 2. Part 3. Part 4.

Finally, Adobe have produced a useful product matrix showing the differences between CF7, 8 and 9 for both Standard and Enterprise editions of each version.

7 comments:

  1. I'm a pretty hard core jQuery fan, but I think you underestimate how difficult Ajax is for some developers. The UI stuff is incredibly easy and powerful and allows people to build great stuff. For them, they don't care if it uses an Ext version that is 2 minor dot releases behind. It just plain works, and that by itself is pretty powerful.

    ReplyDelete
  2. I had absolutely zero AJAX experience before CF8 was released and the cfajaxproxy along with the UI stuff really got me started with AJAX. Since then I've begun to learn jQuery but I have written many apps over the last 2 years for several clients who were all extrememly happy with the new level of interactivity we were able to provide to them by using the CF8 out of the box AJAX feature set.
    I pretty much started my career on the database side of things and I love to write SQL so I too am a bit cautious about diving full force into ORM but I'll probably give it a shot for less complex apps.
    Bottom line, some of my clients who do a lot of export to Excel type of routines as well as multi-file upload type of apps will probably have us upgrade them. We will definitely upgrade our hosted apps that we manage for folks just as soon as we go through a final round of testing. For less than 700 bucks (Standard Upgrade fee) you can't beat it.

    ReplyDelete
  3. Also, no, ORM is not for simple prototypes. Hibernate is used in absolutely gigantic systems. It does indeed "write SQL as intelligently as a human" for the class of problems that it solves, because the vast majority of SQL queries that developers write are boilerplate CRUD and list statements. There's absolutely no reason to write that. For complex reporting or data-mining queries, Hibernate probably isn't the right tool for the job. But for the bulk of day-to-day needs, it's an amazing time saver.

    ReplyDelete
  4. I agree with many of your points here, and many of my applications will not be upgraded to CF9. I do like the changes for CF9 a great deal, but I view it more as a good evolution of the product, rather than giving me something I need now. The ORM is great, and I think its inclusion will move a lot of developers to use it who might not have otherwise. However, I have all the ORM I need right now with Transfer. I also do not like the AJAX built in to ColdFusion. I like that they are including it, but I think that jQuery does a much better job, and if you can learn a skill that is transferable outside of the CF world, you are doing your self a favour.

    ReplyDelete
  5. Thanks for everyone's comments. I concede that CFAJAX stuff is very powerful for people new to web development. But for a few days of effort they can arm themselves with so much more, just as Chris says. Learning jQuery makes you a more useful commodity for working on projects that don't necessarily involve ColdFusion. I still build the odd static site where hosting costs $25/year and sometimes co-work on PHP/.NET sites where I look after the UI. How could I do the ajaxy/UI stuff if I only know how to do it with ColdFusion?

    ORM - since learning a lot of T-SQL my queries do a heck of a lot more than select columns and update rows. I've shifted a lot of the stuff the db is better at doing away from CF and reduced round trips between CF and SQL, so some queries also perform logical operations instead of coming back to CF for it to decide what to do next and fire of some more sql. I can't imagine how that can be done in ORM. I will investigate further when time allows.

    ReplyDelete
  6. I installed CF9 in my development environment and now I can't find a way to refresh the 2 cached IPs to be able to access and test my applications. In the past I could restart the CF service and it would clear up the IPs but now it just doesn't. Should I reinstall CF8? or is there a way to clear the IPs in CF9 Developer Edition?

    Great post BTW.

    ReplyDelete
  7. @Davide, I believe it's the first IPs to connect to your CF server that become stuck as the only IPs CF Developer Edition will serve. Restarting the service is supposed to reset it, but what happens when you reboot? Does that fix it?

    Something else to consider is that an unexpected user/client is hitting your CF pages before you have a chance to. Check your web logs.

    ReplyDelete