Welcome!

You will be redirected in 30 seconds or close now.

ColdFusion Authors: Yakov Fain, Jeremy Geelan, Maureen O'Gara, Nancy Y. Nee, Tad Anderson

Related Topics: ColdFusion

ColdFusion: Article

component.cfc: The Mother of All Components

component.cfc: The Mother of All Components

Yes, that's right, components have mommies and daddies. Well, not really, but that statement isn't too far from the truth. This article explains "component.cfc", a hidden gem in the ColdFusion Component architecture that is part of ColdFusion MX.

By now, everybody knows that the introduction of the component framework in ColdFusion MX was one of the most radical changes to CFML since its inception. Their introduction was significant for three primary reasons. First, they allow developers to expose functionality to the Flash Gateway and to any other Web service-enabled environment. Second, they offer a level of abstraction far superior to that of custom tags and user-defined functions. The third reason CFCs have made such an impact on CFML is that they offer ColdFusion developers the ability to implement object-oriented features.

These object-oriented features include new variable scopes with varying degrees of exposure outside the component; the "packaging" of functionality, introspection, and the generation of meta data; objectinstance- based programming; and inheritance. In traditional object-oriented programming languages, all objects inherit from a parent "Object" class. What many developers don't realize is that components, too, have a parent "class". Its name is "component.cfc" and it can be a very valuable tool when developing applications.

Where Can I Find component.cfc?
If you create a CFC that does not inherit from any other CFC and you view its meta data, you'll notice that the value for the "hierarchy" meta information defaults to "WEB-INF.cftags.component". You will find this file in the "CfusionMXWWWRootWEBINFcftags" directory if you're running the standalone version of ColdFusion, and in "JRun4servers{your_server_name}cfusion-earcfusion-warWEBINF cftags" if you're running the J2EE version (on top of JRun4). You can view the meta data for component.cfc on a server by browsing http://{server_domain}/CFIDE/componentutils/cfcexplorer.cfc?method=getcf cinhtml&name=WEB-INF.cftags.component, replacing "{server_domain}" with "localhost:8500" or whatever other URL you use to browse to that machine.

What Does component.cfc Do?
Well, nothing really. Not out of the box, anyway. The component.cfc file is empty by default in ColdFusion MX 6.1. In ColdFusion MX it had a tiny bit of encrypted data at the top of the file. As already discussed, all components inherit from component. cfc by default. Think of it as the Application.cfm of components - a place to put code that is implicitly included. The difference is that the code outside of any method in component.cfc is executed only when a ColdFusion Component is first initialized, and that its methods and meta data are inherited by other components. It gives you a single place to put code that must be common to all CFCs on your server.

Why Would I Want to Do That?
Having one place to put functionality and initialization code that will be available to all server components has two important uses. As already mentioned, you can think of it as similar to Application.cfm, which means that if you're running a server that's dedicated to hosting one application and the application is using CFCs for its business logic (as every application should be), it's a very good place to put functionality that all components need to have.

For example, if your server is hosting your company's public Web site, all of your components might need to have access to the current company catalog of products. Creating a method in component.cfc that retrieves the current catalog information from a database and returns it to the caller would ensure that all components have the ability to retrieve the catalog by calling that method. While this is a neat trick, it's not always terribly useful or desirable, especially when your application is running on a server that hosts other completely separate ColdFusion applications.

There's another use for component.cfc though - when wielded properly, it can be a powerful development tool. More than anything else, I like to put debugging methods in my component.cfc file so that they are available in any application I happen to be working on. Extending the component framework with development tools can make a developer's life a little bit easier, as we will soon see.

Coding with component.cfc
It's a little known fact that ColdFusion Components don't technically require a start and end <cfcomponent> tag… they will work without them. That said, without the <cfcomponent> tag, a CFC will not properly inherit from the base component. cfc file nor will it allow the use of <cfproperty> tags if you are defining meta information, so as a best practice, follow the standard recommended practices when creating components.

By default, component.cfc is an empty file. Because it does not inherit from any other component (after all, it is the mother of all components), you can code methods in the file without adding any <cfcomponent> tags. You can optionally add <cfcomponent> tags to component.cfc in order to generate meta data about the component or to enable the use of <cfproperty> tags before your methods. Like inheritence with other CFCs, any meta information, methods, and variables in the component are inherited by all other components on the server.

As you may have guessed, creating a method in one component with the same name as a method in component.cfc will override the method. The original method defined in component.cfc can be accessed with the "super" keyword as "super.methodName()", provided that the component you are in does not inherit from any other component. Let's examine one very practical use for this master component file.

Component.cfc Uses
If you're anything like me, you use <cfscript> a lot. As wonderful as <cfscript> is, it is not without limitations. In particular, the use of tags is strictly forbidden within a <cfscript> block. It is often necessary during the development process to view data in order to determine what's happening in your code. The <cfdump> tag is perfect for this, but wait - you cannot <cfdump> within a <cfscript> block. What to do?

Developers like me who use <cfscript> often, have made it a standard practice to create a function using <cffunction> that accepts a single argument of any data type, <cfdump> that variable, then <cfabort> the page. That function can then be called from <cfscript>, thus giving developers the ability to "see what's happening" within their <cfscript> code.

Here's the code I wrote inside of my component.cfc file so that I can dump a value from any ColdFusion Component <cfscript> block:

<cfcomponent displayname="Root" hint="Root CFC">
<!---:: function to dump then abort ::--->
<cffunction name="dumpIt" output="true" displayname="Dump It" hint="A
debugging tool" access="private" returntype="void">
<cfargument name="it" displayname="It" hint="The Thing To Dump"
required="true" type="any">
<cfdump var="#arguments.it#">
<cfabort>
</cffunction>
</cfcomponent>

You'll notice that the method is private because I do not need nor want to expose it to cfm pages that are instantiating my components. It also means that the method does not display along with the other methods of a component that's inherited it when that component's meta data is browsed.

The "dumpIt()" method is useful for developers who do not use <cfscript> as well. It is generally considered a best practice to encapsulate business logic with components. This means passing a value to a component method, operating on that value, and returning a value to the caller page or application. With this in mind, it's a safe assumption that the components in your application(s) aren't directly outputting anything to the HTTP output stream.

Pretty much every component I create not only uses <cfscript> heavily, but never outputs anything. To make sure nothing is output, I always set my <cffunction> tag "output" attributes to "false". This is definitely a best practice in most scenarios, but not being able to output directly from a component method also means you cannot <cfdump> the value of variables within the component when you're debugging your application. Once again, the "dumpIt()" method is a very handy tool, as from within a "silent" component, you can pass the suspicious variable to this method (which has the "output" attribute set to "true") in order to see what's going on in your code.

Where Do We Go from Here?
Component.cfc is a very practical debugging tool for developers and can also be a powerful part of your applications as well. We have looked at just one way that it can be used as an effective development tool. You could create variations of the "dumpIt()" function so that you have one method to dump and abort and another to dump and allow processing to continue. It wouldn't be difficult to add methods to your component.cfc that allow you to do other useful things such as time blocks of code using the getTickCount() function, for example.

Be forewarned that there are two major drawbacks to placing code, especially application rather than debugging/development code, in component.cfc. One is that from an architectural point of view, you are physically separating your code from the rest of your application business logic. The other is that you are making your code less portable - it's no longer a simple matter of copying a directory structure from one server to another in order to move your application when some of the logic is housed in component. cfc. Other than that, have fun and take advantage of it! The sky's the limit.

More Stories By Simon Horwith

Simon Horwith is the CIO at AboutWeb, LLC, a Washington, DC based company specializing in staff augmentation, consulting, and training. Simon is a Macromedia Certified Master Instructor and is a member of Team Macromedia. He has been using ColdFusion since version 1.5 and specializes in ColdFusion application architecture, including architecting applications that integrate with Java, Flash, Flex, and a myriad of other technologies. In addition to presenting at CFUGs and conferences around the world, he has also been a contributing author of several books and technical papers.

Comments (0)

Share your thoughts on this story.

Add your comment
You must be signed in to add a comment. Sign-in | Register

In accordance with our Comment Policy, we encourage comments that are on topic, relevant and to-the-point. We will remove comments that include profanity, personal attacks, racial slurs, threats of violence, or other inappropriate material that violates our Terms and Conditions, and will block users who make repeated violations. We ask all readers to expect diversity of opinion and to treat one another with dignity and respect.


@ThingsExpo Stories
I wanted to gather all of my Internet of Things (IOT) blogs into a single blog (that I could later use with my University of San Francisco (USF) Big Data “MBA” course). However as I started to pull these blogs together, I realized that my IOT discussion lacked a vision; it lacked an end point towards which an organization could drive their IOT envisioning, proof of value, app dev, data engineering and data science efforts. And I think that the IOT end point is really quite simple…
With 15% of enterprises adopting a hybrid IT strategy, you need to set a plan to integrate hybrid cloud throughout your infrastructure. In his session at 18th Cloud Expo, Steven Dreher, Director of Solutions Architecture at Green House Data, discussed how to plan for shifting resource requirements, overcome challenges, and implement hybrid IT alongside your existing data center assets. Highlights included anticipating workload, cost and resource calculations, integrating services on both sides...
"We are a well-established player in the application life cycle management market and we also have a very strong version control product," stated Flint Brenton, CEO of CollabNet,, in this SYS-CON.tv interview at 18th Cloud Expo, held June 7-9, 2016, at the Javits Center in New York City, NY.
The IoT has the potential to create a renaissance of manufacturing in the US and elsewhere. In his session at 18th Cloud Expo, Florent Solt, CTO and chief architect of Netvibes, discussed how the expected exponential increase in the amount of data that will be processed, transported, stored, and accessed means there will be a huge demand for smart technologies to deliver it. Florent Solt is the CTO and chief architect of Netvibes. Prior to joining Netvibes in 2007, he co-founded Rift Technologi...
Unless your company can spend a lot of money on new technology, re-engineering your environment and hiring a comprehensive cybersecurity team, you will most likely move to the cloud or seek external service partnerships. In his session at 18th Cloud Expo, Darren Guccione, CEO of Keeper Security, revealed what you need to know when it comes to encryption in the cloud.
We're entering the post-smartphone era, where wearable gadgets from watches and fitness bands to glasses and health aids will power the next technological revolution. With mass adoption of wearable devices comes a new data ecosystem that must be protected. Wearables open new pathways that facilitate the tracking, sharing and storing of consumers’ personal health, location and daily activity data. Consumers have some idea of the data these devices capture, but most don’t realize how revealing and...
What are the successful IoT innovations from emerging markets? What are the unique challenges and opportunities from these markets? How did the constraints in connectivity among others lead to groundbreaking insights? In her session at @ThingsExpo, Carmen Feliciano, a Principal at AMDG, will answer all these questions and share how you can apply IoT best practices and frameworks from the emerging markets to your own business.
Basho Technologies has announced the latest release of Basho Riak TS, version 1.3. Riak TS is an enterprise-grade NoSQL database optimized for Internet of Things (IoT). The open source version enables developers to download the software for free and use it in production as well as make contributions to the code and develop applications around Riak TS. Enhancements to Riak TS make it quick, easy and cost-effective to spin up an instance to test new ideas and build IoT applications. In addition to...
You think you know what’s in your data. But do you? Most organizations are now aware of the business intelligence represented by their data. Data science stands to take this to a level you never thought of – literally. The techniques of data science, when used with the capabilities of Big Data technologies, can make connections you had not yet imagined, helping you discover new insights and ask new questions of your data. In his session at @ThingsExpo, Sarbjit Sarkaria, data science team lead ...
Extracting business value from Internet of Things (IoT) data doesn’t happen overnight. There are several requirements that must be satisfied, including IoT device enablement, data analysis, real-time detection of complex events and automated orchestration of actions. Unfortunately, too many companies fall short in achieving their business goals by implementing incomplete solutions or not focusing on tangible use cases. In his general session at @ThingsExpo, Dave McCarthy, Director of Products...
Ask someone to architect an Internet of Things (IoT) solution and you are guaranteed to see a reference to the cloud. This would lead you to believe that IoT requires the cloud to exist. However, there are many IoT use cases where the cloud is not feasible or desirable. In his session at @ThingsExpo, Dave McCarthy, Director of Products at Bsquare Corporation, will discuss the strategies that exist to extend intelligence directly to IoT devices and sensors, freeing them from the constraints of ...
WebRTC is bringing significant change to the communications landscape that will bridge the worlds of web and telephony, making the Internet the new standard for communications. Cloud9 took the road less traveled and used WebRTC to create a downloadable enterprise-grade communications platform that is changing the communication dynamic in the financial sector. In his session at @ThingsExpo, Leo Papadopoulos, CTO of Cloud9, discussed the importance of WebRTC and how it enables companies to focus...
The best-practices for building IoT applications with Go Code that attendees can use to build their own IoT applications. In his session at @ThingsExpo, Indraneel Mitra, Senior Solutions Architect & Technology Evangelist at Cognizant, provided valuable information and resources for both novice and experienced developers on how to get started with IoT and Golang in a day. He also provided information on how to use Intel Arduino Kit, Go Robotics API and AWS IoT stack to build an application tha...
With an estimated 50 billion devices connected to the Internet by 2020, several industries will begin to expand their capabilities for retaining end point data at the edge to better utilize the range of data types and sheer volume of M2M data generated by the Internet of Things. In his session at @ThingsExpo, Don DeLoach, CEO and President of Infobright, discussed the infrastructures businesses will need to implement to handle this explosion of data by providing specific use cases for filterin...
Is your aging software platform suffering from technical debt while the market changes and demands new solutions at a faster clip? It’s a bold move, but you might consider walking away from your core platform and starting fresh. ReadyTalk did exactly that. In his General Session at 19th Cloud Expo, Michael Chambliss, Head of Engineering at ReadyTalk, will discuss why and how ReadyTalk diverted from healthy revenue and over a decade of audio conferencing product development to start an innovati...
So, you bought into the current machine learning craze and went on to collect millions/billions of records from this promising new data source. Now, what do you do with them? Too often, the abundance of data quickly turns into an abundance of problems. How do you extract that "magic essence" from your data without falling into the common pitfalls? In her session at @ThingsExpo, Natalia Ponomareva, Software Engineer at Google, provided tips on how to be successful in large scale machine learning...
Early adopters of IoT viewed it mainly as a different term for machine-to-machine connectivity or M2M. This is understandable since a prerequisite for any IoT solution is the ability to collect and aggregate device data, which is most often presented in a dashboard. The problem is that viewing data in a dashboard requires a human to interpret the results and take manual action, which doesn’t scale to the needs of IoT.
What does it look like when you have access to cloud infrastructure and platform under the same roof? Let’s talk about the different layers of Technology as a Service: who cares, what runs where, and how does it all fit together. In his session at 18th Cloud Expo, Phil Jackson, Lead Technology Evangelist at SoftLayer, an IBM company, spoke about the picture being painted by IBM Cloud and how the tools being crafted can help fill the gaps in your IT infrastructure.
"delaPlex is a software development company. We do team-based outsourcing development," explained Mark Rivers, COO and Co-founder of delaPlex Software, in this SYS-CON.tv interview at 18th Cloud Expo, held June 7-9, 2016, at the Javits Center in New York City, NY.
"C2M is our digital transformation and IoT platform. We've had C2M on the market for almost three years now and it has a comprehensive set of functionalities that it brings to the market," explained Mahesh Ramu, Vice President, IoT Strategy and Operations at Plasma, in this SYS-CON.tv interview at @ThingsExpo, held June 7-9, 2016, at the Javits Center in New York City, NY.