Thursday, February 18, 2010

ColdFusion Commons Project Released

Over the past few months I've been involved with a new project called the ColdFusion Common Modules Project. Inspired by Java's Spring framework, Apache Commons, and ColdFusion's Quicksilver framework. What exactly is it? 

ColdFusion Common Modules Project

The ColdFusion Common Modules project (CFCommons) is a collection of initiatives intended on producing reusable, stable, object oriented ColdFusion component libraries.

What's in it for you?

This project is intended to provide ColdFusion developers with highly scalable, reusable components. Components that are created for YOU, by YOU.

You as a CFCommons developer will make an effort to ensure that your components/plugins  play nicely with other plugins and that your interfaces are extremely stable and reusable by implementing proper object orientation techniques and interfaces. This ensures that any developer using a CFCommons component can rest easy knowing that installing a new component won't break ten other CFCommon components.

In its first release, CFCommons offers a handful of features and Context plugins that range from simple MVC to layout management, from automatic dependency injection to ReST web services, from templating to service level transactionality.  CFCommon's plug and play architecture allows you to produce decoupled plugins by utilizing the CFCommon Context and Reflection API. The sky is the limit on what you can create.

Let's take a look at the CFCommons modules...

CFCommons Modules

  • Context - The CFCommons Context is a reflective, pluggable application platform. This is the heart of CFCommons.
  • Reflection - The Reflection API is a small set of components that wrap the standard structure output of the native CF reflection methods, getMetaData() and getComponentMetaData() and provide an object-oriented and enhanced view into ColdFusion component (.cfc) meta-data.
  • AOP - The AOP module brings full-featured stand-alone Aspect Oriented Programming facilities to ColdFusion with an API that is both easy to understand and implement and that is not dependent upon any other libraries or frameworks.
    • Leverages ColdFusion dynamic language features to provide a programmatic join point model which supports before, after and around join points.
    • Fast and easy applicaiton of advice to pointcuts.
    • Advice types are custom function references, or methods that exist on object instances. No need to have advice implement an interface or extend another AOP API specific type.
  • Templating - The cfcommons templating module promotes fixed content reuse by providing a means to inject variable content at specified locations within given text. Perfect for the implementation of semi-mutable views such as form-letters or email templates, this module provides an object-oriented set of Components that promote effective templating.
  • Faceplait - Faceplait is a stand-alone, framework agnosting layout manager.
  • HTTP- This module provides library components who's purpose it is to make working with common HTTP tasks, easy.
  • Chimera - A Java/CF based code coverage and cyclomatic complexity tool. (Built to place nicely with MXUnit.) MXUnit peeps, we'll be reaching out soon so stay tuned!
Here's a quick screen of chimera:

Want a test drive? Take Weyland out for a spin.

To get up and running quickly install Weyland along with the CFCommons core. Weyland is a simple HTTP Context with MVC, automatic dependency injection, layout and security support.
  1. Drop the org directory in cfcommons into your web root.
  2. Drop the weyland directory inside of root as well.
The directory structure should look like so:

And after visiting http://localhost/weyland you shuold see this:

From that screen you can try out the secure login example and dive right into the code using the documentation. Download them both here!

Interested in learning more or contributing?

Please visit the CFCommons site, poke around, read some documentation and try it out.

Are you interested in becoming a CFCommons developer? Contact us to submit yourself as a contributor.



tonyg said...

This stuff looks really great, Mickey. I can really see how useful this can be and many thanks to you and Brian for your work on it. Though I am a BIT bummed by the fact that it's only CF9 compatible because of all the script-based cfc's. But in any case, I think that should be made clear in the documentation.

Micky Dionisio said...


While not an easy decision, it was a calculated and purposeful one. Part of the undocumented charter of the cfcommons project is to feature the best the Adobe CF API has to offer. CF9's enhanced script API is one of those feature sets in our opinion. We know that this might limit adoption initially, but we're hoping that it will be less of an issue over time as CF9 adoption increases and other CF runtimes (Railo, ODB) mature.