Viewing By Entry / Main
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:

  1. tag for spawning multiple threads for asynch processing
  2. 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
  3. 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
  4. 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
  5. 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
  6. Add interfaces to CFCs
  7. cfconstructor tag for use in CFCs and deprecate the pseudo constructor area
  8. 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
  9. Overloading for functions and CFCs
  10. 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
  11. Build stronger partnerships with companies like IBM, Actuate, etc to get support for CF into their products
  12. 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
  13. Add IMAP, NNTP, and SMTP tags
  14. Functions/tags for image manipulation
  15. 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.
  16. 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.
  17. Add the Lotus Notes JDBC driver, free from IBM to the list of native drivers
  18. Tags/functions for dealing with Zip files
  19. Fix reFind() and reFindNoCase() to return the positions for all matched subexpressions
  20. Spell check tag
  21. 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
  22. JDO support if you can think of a way to do this
  23. 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
  24. 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.
  25. 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
  26. 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
  27. cfsocket tag (like in DRK5)
  28. 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.
  29. In the CF Admin (and programmatically), give us a way to see and admin (expire) cached queries.
  30. 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.
  31. More metadata in the cfquery result set. I'd like to see the size (bytes) of the returned record set, column types, etc
  32. Official framework for unit testing CFCs
  33. 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.
  34. Make the cfproperty tag actually define properties for CFCs as opposed to just for web services and meta data.
  35. 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.
  36. Add XML validation against a DTD
  37. Integrate with JMS
  38. 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.
  39. Within a CFC method (and a UDF), allow us to VAR variables anywhere, not just at the beginning of the method. I often need to var a variable with a value that is dependant upon another condition (such as a conditional based on an argument being passed in). Because I have to var before any other cfml statements, I first have to var the variable and set it to empty (var=""), then do the conditional later. I'd like to see VAR implemented like in JavaScript. It would be great to var a loop variable inline, as opposed to at the top of the page for example
  40. Make the installer for deploying multiple instances of CFMX easier
  41. 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
  42. Make it easier to tie a different jvm classpath to each instance of CFMX when using multiple instances.

Comments
Nathan Strutz's Gravatar Rob, I love your list. It's a good read. Let's hope it's not fictional.
# Posted By Nathan Strutz | 5/13/04 9:53 AM
Ryan's Gravatar Wow, that is a good list. For the PDF generation, something as simple & easy as CFXpdf Generator (www.easel2.com) would be nice. I haven't had a chance to look at the FOP project that Apache.org has, but it might work too.
# Posted By Ryan | 5/13/04 11:55 AM
Choop's Gravatar Deprecating CFScript would devastate nearly all of my applications. There's nothing handier IMHO than the built-in whitespace control, the simple UDF declarations, and the while() loops that make more sense than <cfloop condition... />.

I agree on adding ActionScript support, but please don't suggest that they remove the ECMA-style CF scripting! I counter with a request to add *more* tag functionality into scripting methods.

qname = Query(dsn, sqlStmnt);
include(path);
abort();
throw(type, message, detail, "params");

...etc.
# Posted By Choop | 5/13/04 12:52 PM
Kurt Wiersma's Gravatar This is an excellent list. It contains everything I that I am hoping for. At MAX I was really excited to see the PDF generation they demoed. It was exactly the solution I am looking for without having to pay a ton more $$$ or spend more development time with something like JasperReports which is what we are doing for now. (Not that JasperReports is bad.)

The cfform with qForms is a great suggestion too.
# Posted By Kurt Wiersma | 5/13/04 1:56 PM
Michael J. Dyer's Gravatar How about an additional scope that's visible across a cluster of machines (eg cfset cluster.varname = whatever)...

# Posted By Michael J. Dyer | 5/13/04 4:33 PM
barry.b's Gravatar re: events:

how boring! that's little more than what was in ASP classic - and it was hardly adequate then (how do you _reliably_ know when a session has ended?)

how about onRequest(), onPageLoad(), onPageRender(), just to name a few (already in ASP.NET). I could use events like these.

C'mon, think bigger!

barry.b
# Posted By barry.b | 5/13/04 8:19 PM
Randy D.'s Gravatar Great list, I was just discussing at work today how great an official MM test harness for CFC's would be. Listen up MM!
# Posted By Randy D. | 5/13/04 8:28 PM
feiy's Gravatar jdo is good!
# Posted By feiy | 5/14/04 1:59 AM
Steve Bosworth's Gravatar I'd like to se an end to the excessive whitespace. Forget about using cfsilent/cfprocessingdirective and the getpagecontext() options available. Really, this should be built into the server to kill all unnecessary whitespce!!!
# Posted By Steve Bosworth | 5/16/04 11:40 PM
Stacy Young's Gravatar Cluster scope, yes!
# Posted By Stacy Young | 5/18/04 5:57 AM
ike's Gravatar I can't see deprecating CFSCRIPT which uses 1-based math in favor of ActionScript which uses 0-based math no matter how good (or how much better) you think ActionScript is, as long as CF tags use 1-based math. Adding ActionScript as an _alternative_ while _not_ deprecating CFSCRIPT I think is a viable option, although imho not an enormous plus.

re: events - You reliably determine when a session ends by associating the function as a listener to the CF Server's internal Java object wich expires the session. Internally the session must be expired by some object in Java. Also - the onRequest() event would already be handled by Application.cfm, onPageLoad() and onPageRender() are no more than javascript handles. You can easily do the same by firing a url in a hidden iframe or frame using the page's DOM onLoad() event or the like. The onTap framework already includes a fair amount of this sort of thing.
# Posted By ike | 5/18/04 9:02 AM
Dan P's Gravatar #25 can be done or have been done. I would like to more about JDO CF however.

http://www.geocities.com/Empiricallyspeaking/
# Posted By Dan P | 5/19/04 12:45 AM
dan's Gravatar Whoops make that #35 not #25
# Posted By dan | 5/19/04 1:00 AM
joel's Gravatar And a better, world-class graphing engine would be nice.
# Posted By joel | 5/19/04 7:40 AM
cp's Gravatar I think it's a stretch to assert that Crystal is "supported". The tag is hardly useful, if at all, and only for a handful of the most simple reports that would likely be waste of Crystal resources. Do something practical with Crystal, or give us native reporting functionality!
# Posted By cp | 5/21/04 6:17 AM
Tim Archambault's Gravatar How about making CFCACHE actually work!
# Posted By Tim Archambault | 5/25/04 12:35 AM
Brian Bray's Gravatar I'm on a crusade to get the extends attribute of <cfcomponent> enhanced a bit. Here are some forum posts regarding it:

http://www.macromedia.com/cfusion/webforums/forum/...

http://www.macromedia.com/cfusion/webforums/forum/...

http://www.macromedia.com/cfusion/webforums/forum/...
# Posted By Brian Bray | 6/1/04 9:29 AM
David Knapik's Gravatar #36 is good, but how about also adding support for validating against XSD documents (XML Schemas)? I'd love to see it.
# Posted By David Knapik | 6/3/04 10:27 AM
Left out in the cold...'s Gravatar Support for OS X.... please!
# Posted By Left out in the cold... | 6/5/04 11:16 PM
Erik's Gravatar How about improving Query of Queries-
-Inner Joins (the syntax, at least), LEFT and RIGHT Outer Joins
-Support for more than one 2 join tables
-SQL functions such as CAST, CONVERT, LTRIM, RTRIM, REPLACE, ISNULL, ISDATE, ISNUMERIC, CASE, various date functions, etc...
# Posted By Erik | 6/10/04 9:15 AM
Ben Shelden's Gravatar Would like support for XPath 2.0 or at least for XQuery
# Posted By Ben Shelden | 8/4/04 2:24 PM
Marcantonio Silva's Gravatar Talking about qoq, I´d like MM to fix all the annoying cast problems that we have to face when using it hard.
It would be great to have LEFT and RIGHT joins too.

I agree with the portlets stuff, having wsrp and jsr 168/170 would really increase CF penetration in the corporative environment.

I'd would ask for the ability to call CFCs as Java classes from inside Java code, don't know how difficult this could be, but would help us to deploy CF apps in the "Java" world.

# Posted By Marcantonio Silva | 10/20/04 9:32 AM



Copyright 1995-2008 Rob Brooks-Bilson. All rights reserved.
Aura skin for Raymond Camden's BlogCFC inspired by Joe Rinehart & Steven Erat. This blog is running version 5.5.1.