September 27, 2004
I'm not sure when Paul Kenney posted this, but I know a lot of people have been waiting for it... The CFCUnit web site has been updated with documentation on writing unit tests. If you aren't already writing unit tests for your CFCs, you should be. Paul's framework is the most complete I've seen for CF yet, and is definitely worth taking a look at. Now that there's documentation on how to write tests, there's no excuse!
August 25, 2004
My team has been doing a lot of work with the Mach-II framework lately, and we're extremely heavy users of CFCs. On top of this, we're busy making sure our SDLC complies with the requirements of the Sarbanes Oxley Act. One of the areas of special interest is documentation. The nice thing about CFCs is that they are [relatively] self documenting, provided you populate the various cfcomponent, cffunction, and cfproperty tag attributes. While ColdFusion MX comes with two tools for examining the CFCs on your system. The CFC Explorer can be invoked by entering the URL to any CFC accessible via a URL on your server. In our case, the majority of our CFCs are NOT accessible via URL as they are located in a directory outside of our web root. In this case, you can use the Component Browser that comes with ColdFusion MX. This tool can be accessed like this:
Using this tool, however, requires that you use either the RDS or CF Admin password to access the browser. This may or may not be an issue depending on your local setup and policies. In any case, the auto generated documentation created by the CFC Explorer and the Component Browser is identical. It's a good start, but there are an increasing number of third party tools that take the basic concepts in these tools and extend them. I'm going to share the three that I'm aware of and have used in various capacities to auto-generate documentation on my CFCs. If you are aware of other tools, let me know!
CFCRemoteDocumenter (Nathan Dintenfass)
CFC Explorer With Usage (Marcantonio da Silva)
CFC Documentation Tool (Spike Milligan)
Component Invoker & Browser (Brandon Purcell)
CFCDoc (Phil Cruz)
August 24, 2004
Two new CFCs have been posted to the site in the past few weeks. Check out checkEquality by Qasim Rasheed and queryTool by Joe Rinehart on the CFC page.
July 22, 2004
I didn't see an announcement on the Macromedia DevNet DRK site yet, but when I logged into my subscription tonight, DRK 8 was available for download. Here are the CF highlights incase you can't wait for the official release...
- New forums application by Ray Camden
- Assert API - Custom tags for adding special checks in your code.
- WSDLerator - Tool for discovering and testing Web Services for use within ColdFusion.
June 30, 2004
Darron Schall has the best summary I've seen so far of one of Ben Forta's Blackstone preview demos. You can read all about it on Darron's blog.
June 29, 2004
If you aren't familiar with testing frameworks, or why you should be considering one, Paul provides a good explanation here (an excerpt from an article published by Christian Cantrell).
Right now, there's basic setup instructions, with more detailed documentation on writing test cases to follow soon. A big thanks to Paul for creating the suite - it's going to go a long way in making development and testing of CFC based applications easier for ColdFusion developers.
Now, if only someone would create a cfcUnit plugin for integration with the CFEclipse!
May 21, 2004
With all the current buzz over Blackstone (the next version of ColdFusio MX), I decided to shoot an email over to my editor at O'Reilly to gauge their interest in having me write the 3rd edition of my book Programming ColdFusion MX.
Well, I heard back from him today, and it looks like they are going to pass on a new edition. I'd like to say that I was crushed by their decision, but honestly, I'm a little relieved. It was hard work turning out two books over the past few years, each as the sole author while maintaining a full-time job, National Guard service, and a marriage (maybe a bit of a social life too). The first edition of my book ended up selling about 9,000 copies after the majority of the returns were in. Given that an author pulls in 10% of what the publisher sells the book to retailers for, this translated to apprx $2 a copy. Do the math and $18k looks like a nice bit of pocket change - until you also realize that the taxes on that come to apprx 40%. Then take the 1500+ hours I put into the first edition and you can see it didn't amount to much more than minimum wage! I'm fine with that, though, as I didn't write the first edition to make money. I wrote it because I used ColdFusion every day, and I loved sharing my enthusiasm for web application development with CF.
When O'Reilly asked me to write the 2nd edition for CF MX, I was a little hesitant because of the amount of time it took to do the first edition (almost 2 years). I relented and managed to squeeze it out after the 6.1 release after investing about 1000 hours (yes, I'm rounding a bit). It was a fairly major rewrite as CFMX was a huge improvement over CF 5. Lots of new features and revisions added about 250 pages to the book, bringing it in at around 1100 pages.
That brings me to today. Programming ColdFusion MX, 2nd. edition is the second best selling ColdFusion MX book (at the register as it goes), behind Ben's CFMX WACK. Given that it's only sold around 5,000 copies or so in the past year, that's pretty sad, and I can see why O'Reilly isn't interested in doing a third edition. It isn't that the book isn't good (it's gotten many positive reviews), and I realize that the market for technical books is saturated and not in the best of shape, I guess I'm just a little sad (not bitter) that the ColdFusion community is losing the backing of O'Reilly given their reputation in the technical community. I always felt that having an O'Reilly book for a particular technology (even if I weren't the author) put some weight behind it.
So, it's on this note that I'd like to thank all of you who have purchased and read my book. I've recieved many kind emails over the years and have enjoyed corresponding with each and every one of you. I'd also like to take this opportunity to urge all ColdFusion developers to support the other authors of ColdFusion books out there. If we really want ColdFusion adoption to continue to spread, there has to be good material available for the developers who want to learn it.
May 12, 2004
I know several people have already blogged CF MX 7 (Blackstone) feature requests, but I figured I'd share the list of features I've been compiling. This list represents enhancements that I along with many other developers have been asking for, some of them going back several versions of CF. I've submitted this entire list to Macromedia, but I wanted to see what others out there think. I realize that some are much more doable than others, and that some of my requests fall within the category of "niche" feature, but I thought I would share nonetheless:
- tag for spawning multiple threads for asynch processing
- As mentioned by others, event based session/application/server functions: onSessionStart(), onSessionEnd(), onApplicationStart(), onApplicationEnd(), onServerStart() and onServerEnd(). Along these lines, I'd like to see an XML based config file that runs when the server is restarted. This XML file could contain info on queries to automatically run and default variables to be assigned for the server/applications
- Add functions to programmatically list all current sessions/applications on a server (without the Java workarounds we're currently using). Include info such as when the session/application was started, how long until expiration and whether or not it has already expired. Examples are getSessions(), getClients(), getApplications(), getSession(), getApplication(), etc
- Enhance the CF Scheduler so that it can operate in a cluster. I want to synchronize events between servers in a cluster so that you can setup a scheduled task on any server, and it would replicate out to all the other servers (similar to the buddy server concept), but the event would only fire on a single server, not on all of them at once
- Further enhance the cf scheduler to use its own thread count (as opposed to the one that's defined in the CF Admin now). This would allow the scheduler to use a different threading model than "active" applications on the server
- Add interfaces to CFCs
- cfconstructor tag for use in CFCs and deprecate the pseudo constructor area
- Deprecate cfscript and add ActionScript 2.0 support. You could easily do this by adding a new attribute called "language" to the cfscript tag where language="actionscript" or something like that. This way, existing cfscript would continue to work
- Overloading for functions and CFCs
- Mechanism for dealing with name conflicts (overriding) with native CF functions/tags in order to future proof. So, if I already have a UDF called wrap(), upgrading my version of CF won't break my app when CF get's its own wrap() function
- Build stronger partnerships with companies like IBM, Actuate, etc to get support for CF into their products
- Make CF's security framework more granular. I always need an additional level of security beyond roles. How about groups, roles, and permissions. While you are at it, give us a way to programatically get a list of users currently logged in, their roles/permissions, etc
- Add IMAP, NNTP, and SMTP tags
- Functions/tags for image manipulation
- Tags/functions for manipulating PDF. I saw the Max preview and was impressed with the cfdocument tag. I think this is a good start. I think for the report type, you also want to add Flash Paper in addition to HTML and PDF. Excel would rock.
- Since there is already support for Crystal Reports via cfreport, I'd like to see integration with Actuate too. It's J2EE based, so I would think that there are several integration points possible here.
- Add the Lotus Notes JDBC driver, free from IBM to the list of native drivers
- Tags/functions for dealing with Zip files
- Fix reFind() and reFindNoCase() to return the positions for all matched subexpressions
- Spell check tag
- Wrap up all hot fix in a Zero G installer so that they can easily be backed out. Also, when a hotfix is applied, log it in a server var available in the CF Admin so that an admin can tell what hot fixes have been applied
- JDO support if you can think of a way to do this
- Add a TRACE attribute to CFQUERY for debugging so that we can see what CF is doing with the underlying JDBC driver. Most drivers have a trace capability that can be logged to a text file, but I'd like to see what's happening from a CF's perspective so I can see exactly what calls to my drivers it is making
- Scrap the JS validation in CFFORM and implement the qForms JS API from PengoWorks. It's much more powerful, flexible, and extensible and works very well with CF.
- Add XMLDoc as a return types for methods in CFCs. Right now, you can't return a CF XML Document from a CFC as a native type
- Add an interface to the CF Admin to allow me to "reset" a datasource without having to restart the CF server. Right now, several of my iSeries DB2 data sources (JTOpen driver) occasionally hang. The rest of the CF server is fine as are the rest of my data sources. In order to free the hung data source, I have to restart my CF Application Server service. I would rather kill the connection to the hung data source and restart it (if that's how it works) without having to restart the server. It would be even better if I could to this programmatically, so I could call it from a cfcatch block if I detected the specific error a hang causes
- cfsocket tag (like in DRK5)
- Better caching than cfcache provides. See Brandon Purcel's CF_Accelerate. Not sure if you could replace cfcache with this or if it would be a new tag.
- In the CF Admin (and programmatically), give us a way to see and admin (expire) cached queries.
- Allow for mappings on an application level so that mappings defined in the CF Admin can apply to either the entire server, or a specific application.
- More metadata in the cfquery result set. I'd like to see the size (bytes) of the returned record set, column types, etc
- Official framework for unit testing CFCs
- Support for portlets as outlined in JSR 168 and JSR 170. I'd really like to see the ability to create a portlet in CFML, then have CF generate a WAR file for the portlet that can be deployed to any compliant portal server.
- Make the cfproperty tag actually define properties for CFCs as opposed to just for web services and meta data.
- Allow parameters for the JDBC URL to be passed dynamically at run time if possible. For example, right now, if I want to add an extra parameter to my data source just for testing, I can't do it from the cfquery tag. I have to go in and make the change in the CF Admin, and then change it back later if I want to "undo" it.
- Add XML validation against a DTD
- Integrate with JMS
- Allow sorting scheduled tasks within the CF Admin alphabetically by name, or time (interval). I have a server with 600+ scheduled tasks, and I'd like to group by time so I can tell whether I need to move any to a different time to avoid using too many of my server's available threads.
- Make the installer for deploying multiple instances of CFMX easier
- Make it possible to deploy a "clone" of an existing instance of a CFMX deployment right from within the CF Admin of that instance. Similar to your archive and deploy, but have the deploy actually create the new instance and then clone the original
- Make it easier to tie a different jvm classpath to each instance of CFMX when using multiple instances.
May 12, 2004
If you are interested in ColdFusion Components (CFCs), and aren't already a member, you might consider joinging the CFCDev mailing list. This moderately trafficed list (avg 35 posts per day) currently has 601 subscribers of varying skill levels. Topics tend toward more advanced subjects, but all discussion related to CFCs is welcome.
April 30, 2004
Adam Crump, one of the guys on my team has released a Dreamweaver MX extension he created called CFC Bean:
"CFC Bean is a command extension to generate a java style Bean implemented as a ColdFusion MX Component. You simply add the properties required for your bean, and CFC Bean will generate an init method, get and set methods for each property, and if selected getInstance, and setInstance methods. CFC Bean is very useful for creating beans for use with the MachII framework and bean work in general."
We've been using CFC Bean here for a few months now, and it's saved us a ton of time in the creation of our Mach-II beans.
If you don't use Dreamweaver, there is also a web based bean generator with similar functionality:
And a Homesite version by Christopher Bradford here: