Terry Ryan


13 July 2010

User level: All
Adobe ColdFusion 9.0.1 is a giant release of enhancements along with a few important bug fixes. The enhancements run the gamut from small tweaks to near full-fledged features. The ColdFusion team fixed over 170 individual bugs in this release, in addition to the enhancements the team added.
Amazon S3 integration
One of the most exciting enhancements added in this updater is support for Amazon S3 as the location for both storing and consuming files in your ColdFusion applications. You use your S3 bucket as the file location in ColdFusion tags that interact with the file system. Then, you can configure your S3 instance in your Application.cfc file, setting your access key and secret for authentication, and to specify your starting location within your S3 bucket. This makes interacting with the bucket easy within a cffile tag, for instance:
<cffile action="write" output="S3 Specification" file="s3://testbucket/sample.txt"/>
ColdFusion takes care of interacting with your S3 bucket securely. In addition to writing and reading to the S3 space, you will also be able to delete files, set permissions, and add S3 specific metadata to your files.
ORM enhancements
ORM is the runaway hit feature of ColdFusion 9. It’s no surprise that in ColdFusion 9.0.1, the team would add number of features around it: The first being multiple data sources. ColdFusion 9.0.1 will allow for multiple data sources in the same application. This enhancement affects many of the ORM functions: You can now specify an optional data source argument. Additionally, in ORM settings, you can specify structures that define ORM properties for all of your application data sources. Finally, the Application.datasource property has been updated to accept either a string or a structure. This enhancement allows you to set username and passwords in code, rather than in the Administrator.
Another enhancement is the ability to specify HQL as a dbtype in the cfquery tag. This functionality returns an array of ORM entities, much like an ORMExecuteQuery call. This enhancement allows you to write out long complex SQL in the familiar setting of a cfquery tag instead of within a function call.
The EntityNew() function has been updated to allow you to pass a struct of properties to be passed in. For instance, you can now take a form posting and pass it into an ORM entity on creation, allowing you to populate it without having to call all of the setters in sequence.
Finally, a significant bug in ORM transactions has been fixed. In ColdFusion 9, transactions caused the underlying ORM session to close before and after transactions. This caused ORM objects to become unusable both inside and outside of a transaction on these pages. The default behavior has been changed to reuse sessions before and after transactions.
Server enhancements
The ColdFusion Server Monitor gives a great amount of information, but has one Achilles heel: It runs on the ColdFusion server, so if the server becomes unresponsive so does the monitor. In ColdFusion 9.0.1 the monitor has been upgraded to run as a separate server.
Logging has been added to many of the protocols that handle communication between ColdFusion and another server. Now in addition to server logs for mail, administrators have access to logs about the following:
  • cfhttp or http object
  • cfftp or ftp object
  • webservice calls
  • Portlet calls
  • Derby databases calls
  • RSS feeds
These logs are optional and you can turn them off in the administrator.
ColdFusion 9.0.1 adds support for IIS 7 on Windows server. It no longer requires that the IIS 6 metabase compatibility features of IIS 7 be turned on to work with ColdFusion. The IIS 6 Compatibilty mode is still supported however, and upgrading ColdFusion does not require altering your already-configured IIS server setup.
Finally for the security conscious, the team has added a feature called "Configurable seed for password encryption". Before ColdFusion 9.0.1, data source username and passwords were encrypted using a common key, meaning that if someone grabbed the data source configuration file from your server, he could place the file that on to his own ColdFusion server and have access to your database. Now you can set a seed in your Administrator that will cause your encryption routine to be unique to that seed.
Flash Platform integration
ColdFusion is the perfect server to provide a back end for client applications written using other products in the Adobe Flash Platform. However, we can always improve on perfection--thus we have added features to achieve that.
First, in ColdFusion 9, we added features that made it easy to synchronize local databases in AIR applications with ColdFusion data sources. To do that, our engineers basically built an ORM for SQLite as AIR applications. In 9.0.1 many features in this ORM have been improved. ORM tables can self-join in either one-to-many or many-to-many relationships. Additionally, you can set operations against the SQLite store to autocommit, forcing changes to the back-end database immediately upon saving to prevent data collisions. This is especially important in the new automatically-generating primary key feature that allows you to use SQLite on AIR like a more traditional database that can automatically generate unique keys for your records. Finally, you can log all of these operations to see all of the SQL that SQLite ORM generates.
To connect with the rest of the Flash Platform, ColdFusion 9.0.1 is compatible with LiveCycle Data Services 3 and BlazeDS 4. Flash Remoting has been updated to allow control over the serialization of arrays from ColdFusion to either Arrays or ArrayCollections on the Flash Remoting client. This will allow for easier manipulation of related records in the client. Finally, the exposed service for the CFPDF tag in Flex has been updated to allow for service clients to use the extracttext and extractimages action attributes.
Language enhancements
The second most popular feature in ColdFusion 9 has been the expansion of the cfscript tag to allow for much less verbose back-end code. While it was a huge expansion, there were some language constructs that we missed. ColdFusion 9.0.1 fills in some of those gaps.
We’ve added the ability to loop through arrays with the for-in construct. Meaning that instead of the following code:
for (i=1;i > ArrayLen(myArray); i++){ writeOutput(myArray[i]); }
One can write the following instead:
for (var item in myArray){ writeOutput(item); }
This is less verbose and in line with other languages. You may have also noticed the var statement in the for-in loop within my second code snippet. This is because var statements are now allowed in loop conditions, which means I could have also written the following for the loop:
for (var i=1;i > ArrayLen(myArray); i++){ writeOutput(myArray[i]); }
In addition to syntax changes in the cfscript tag, we also added certain tag features to the cfscript tag using objects instead of sets of functions. A good example of this was the cfquery tag, which was enabled in a query CFC that could then be called in script. We’ve expanded the scriptable objects to include:
  • dbinfo
  • imap
  • pop
  • ldap
  • feed
Finally, the cffile tag’s action attributes of fileupload and fileuploadall now have corresponding functions for use in the cfscript tag.
Ajax enhancements
In addition to improving client applications made with the Flash Platform, ColdFusion 9.0.1 improves several features of ColdFusion Ajax components. The team has updated the CFGrid tag to allow for multiple selections and features that better control look and feel. The CFMap tag has been updated to support easily hiding the map, as the developer chooses. Finally, the plumbing of ORM objects passed to Ajax features through remote web services has been improved to handle complex objects and relationships properly.
Spreadsheet enhancements
ColdFusion’s ability to interact with Spreadsheets also got a boost in ColdFusion 9.0.1. The SpreadsheetRemoveSheet() function allows you to remove individual worksheets from a spreadsheet. As well, the SpreadsheetFormatCellRange function allows you to target a rectangle of cells using starting and ending columns and rows. Finally the performance of applying formatting to large numbers of columns and rows has been significantly improved.
Other enhancements
There are enhancements that don’t fit into neat categories. For instance, the Lucen SOLR search engine has been updated, bringing a few extra small options to search. Finally, EhCache has been upgraded, and the ability to directly access the cache object for native access to EhCache features has been added.
ColdFusion 9.0.1 is a monster update with an enormous amount of enhancements and fixes. Go get it today and enjoy the plethora of new goodies. Both the ColdFusion 9.0.1 New Feature Notes, and ColdFusion 9.0.1 Release Notes go into more details about the various enhancements and bug fixes.