Navigation
  • Home
  • Recent
  • Most Active
  • Popular
  • Blog
  • Credits
  • RSS
  •   Interaction
  • Register
  • Statistics
  •   Help
  • Suggestions
  • Contact Us
  • How to Edit
  • Help



  • [Edit]


    : This article is about the computer programming language. For the nuclear reactions, see Cold fusion.


    ColdFusion is an application server and software development framework used for the development of computer software in general, and dynamic web sites in particular. In this regard, ColdFusion is a similar product to ASP.NET or Java Enterprise Edition.

    The primary feature of ColdFusion is its associated scripting language, ColdFusion Markup Language (CFML), which compares to JSP, C#, or PHP and resembles HTML in syntax. "ColdFusion" is often used synonymously with "CFML", but it should be noted that there are additional CFML application servers besides ColdFusion, and that ColdFusion supports programming languages other than CFML, such as server-side Actionscript.

    Originally a product of Allaire, in 2001 the company was purchased by Macromedia, who subsequently merged with Adobe Systems in 2005.

    ColdFusion is most often used for data-driven web sites or intranets. More advanced users can use ColdFusion as a productivity layer above a J2EE platform or use ColdFusion as middleware in a service oriented architecture (SOA), generating SOAP or RESTful web services or Flash remoting.

    ColdFusion can also handle asynchronous events such as SMS and instant messaging via its gateway interface, available in ColdFusion MX 7 Enterprise Edition.

    ColdFusion provides a number of value-added services out of the box:
      client-side form validation including rich forms using Flash
      platform-independent database querying via ODBC or JDBC
      client and server cache management
      session, client, and application management
      file indexing and searching service based on Verity K2 (Enterprise Edition only)
      XML parsing, querying, and validation
      Server clustering
      GUI administration
      Task scheduling

    Other implementations of CFML offer similar or enhanced functionality, such as running in a .NET environment or image manipulation.


        ColdFusion
            History
                Early Versions
                ColdFusion MX
            Current Version
            Future
            Coding Style Caveat
            Rich Forms
            PDF and FlashPaper Generation
            Object Oriented Coding In ColdFusion
            Mixing ColdFusion and Java
            Custom Tags
            Query of Queries
            Alternative Server Environments
            Acronyms
            Code example
            Syntax
                Tag-based Syntax
                CFSCRIPT Syntax
            Criticism
            Development Aides
                Development Tools / Environments
                Code Frameworks
            Monitoring & Testing Tools
            Training and Certification
            ColdFusion-Focused Podcasts
            ColdFusion-Focused Blog Syndications
            ColdFusion-Focused Magazines
            Technical Mailing Lists
            See also

    top

    History






    top

    Early Versions
    The first version of ColdFusion (then called Cold Fusion) was released in 1995. The first version was written almost entirely by one man, JJ Allaire. Primitive by modern standards, the early versions of CF did little more than database access.*

    All versions of ColdFusion prior to 6.0 were written using Microsoft Visual C++. This meant that ColdFusion was largely limited to running on Microsoft Windows, although Allaire did manage to port CF to Sun Solaris starting with version 3.1.

    top

    ColdFusion MX
    Prior to 2000, Allaire began work on rewriting the basis of ColdFusion using Java, codenamed "Neo", which would allow for greater portability among different platforms.

    On January 16, 2001, Allaire announced that it would be merging with Macromedia. Shortly after the merger, Macromedia continued with the incremental release of ColdFusion 5.00 and in June 2002, Macromedia released Macromedia ColdFusion MX (6.0), extending the naming convention of Macromedia's line of products. ColdFusion MX was completely rebuilt from the ground up and was based on the Java 2 Platform, Enterprise Edition (J2EE) platform. ColdFusion MX was also designed to integrate well with Macromedia Flash using Macromedia Flash Remoting MX.

    Starting from the MX (6.0) release, ColdFusion is compiled to bytecode, like JSP and ASP.NET. The compiled .class files are readily accessible, and are cached until their source changes, like JSPs.

    With the release of ColdFusion MX, the CFML language was also extended to support basic OOP. Apart from the tag-based CFML syntax, ColdFusion supports embedded scripts that can be written in a JavaScript-like language, known as CFScript.

    top

    Current Version
    With the release of ColdFusion 7.0, the naming convention was amended, rendering the product name "Macromedia ColdFusion MX 7". CFMX 7 added Flash-based web forms and a report builder that output in Adobe PDF as well as Flash Paper, RTF and Excel. The Adobe PDF output is also available as a wrapper to any HTML page, converting that page to a quality printable document. The enterprise edition also added Gateways. These provide interaction with non-HTTP request services such as IM Services, SMS, Directory Watchers, and an asynchronous execution. XML support was boosted in this version to include native schema checking.

    ColdFusion MX 7.0.2, codenamed "Mystic" includes advanced features for working with Adobe Flex 2.

    top

    Future

    Development is underway at Adobe to get a version 8 of ColdFusion, codenamed "Scorpio", scheduled to be released by the second half of 2007. The focus for Scorpio is innovation. Confirmed new features for Scorpio are the cfpdfform tag, which enables integration with Adobe PDF forms, some image manipulation functions, Microsoft .Net integration, and the cfpresentation tag, which appears to allow creating and integrating with live Macromedia Breeze presentations. The CF Administrator is also reported to have a new Flex 2 interface, and there will be built-in server monitoring. These features were demonstrated at CFUnited 2006 and MAX conferences.

    top

    Coding Style Caveat
    ColdFusion is NOT an XML based language and any usage of a trailing slash in code is almost always optional. In fact, the use of a trailing slash in some code constructs (CFELSE, CFELSEIF) will cause an error. The community is split on this style with some desiring its usage because it looks more standardised to XHTML while others feeling it's more confusing than useful. The code samples below are altered time and again between the two styles based on these feelings.

    top

    Rich Forms
    With its newest release, Macromedia included a subset of its Macromedia Flex 1.5 technology. Its stated purpose is to allow for rich forms in HTML pages using CFML to generate Flash movies. These Flash forms can actually be used to implement rich internet applications, but with limited efficacy due to the ActionScript restrictions in place on Flash forms by Macromedia.

    Flash forms also provide additional widgets for data input, such as date pickers and data grids.

    In previous versions of ColdFusion, some form validation and additional widgets were available using a combination of Java applets and JavaScript. This option persists for those who do not wish to use Flash, however not all features are supported.

    An example:








    ColdFusion also includes some XForms capability, and the ability to "skin" forms using XSLT.

    top

    PDF and FlashPaper Generation
    ColdFusion can generate PDF or FlashPaper documents using standard HTML (i.e. no additional coding is needed to generate documents for print). CFML authors simply place HTML and CSS within a pair of cfdocument tags and specify the desired format (FlashPaper or PDF). The generated document can then either be saved to disk or sent to the client's browser.

    top

    Object Oriented Coding In ColdFusion
    ColdFusion was originally not an object-oriented programming language, and even today lacks some OO features. With the MX release (6+), ColdFusion introduced the component language construct which resembles classes in OO languages. Each component may contain any number of properties and methods. One component may also extend another (inheritance). Components only support single inheritance. ColdFusion does not currently support Java-style interfaces. ColdFusion components use the file extension cfc to differentiate them from ColdFusion templates (.cfm).

    Unlike other object-oriented languages, ColdFusion does not support constructors as a first-class language concept. Rather, all constructors must be factory methods. The ColdFusion convention is to name your default factory method init. The stems from the ColdFusion-enforced required for created Java object instances with the init function (since new is not a keyword in ColdFusion).

    Example factory method:






    Component methods may be made available as web services with no additional coding and configuration. All that is required is for a method's access to be declared 'remote'. ColdFusion automatically generates a WSDL at the URL for the component thusly: http://path/to/components/Component.cfc?wsdl. Aside from SOAP, the services are offered in Flash Remoting binary format.

    Methods which are declared remote may also be invoked via a HTTP GET request. Consider the GET request as shown.


    http://path/to/components/Component.cfc?method=search&query=your+query&mode=strict
    This will invoke the component's search function, passing "your query" and "strict" as arguments.

    This type of invocation is well-suited for AJAX-style applications.

    The ColdFusion server will automatically generate documentation for a component if you navigate to its URL and insert the appropriate code within the component's declarations. This is an application of component introspection, available to developers of ColdFusion components. Access to a component's documentation requires a password. A developer can view the documentation for all components known to the ColdFusion server by navigating to the ColdFusion URL. This interface resembles the Javadoc HTML documentation for Java classes.

    top

    Mixing ColdFusion and Java
    ColdFusion runs as a web application and can be deployed in a number of supported servlet containers, including Jakarta Tomcat, Macromedia JRun, and IBM WebSphere.

    Because of ColdFusion's Java code-base, it is possible to mix Java classes with ColdFusion code to create a variety of applications and utilize existing Java libraries. ColdFusion has access to all the underlying Java classes. ColdFusion also supports JSP custom tag libraries alongside CFML, and JSP functions, accessible after retrieving the JSP page context (GetPageContext()).

    Prior to ColdFusion 7.0.1, ColdFusion components could only be used by Java or .NET by declaring them as web services. However, beginning in ColdFusion MX 7.0.1, it is now possible to utilize ColdFusion components directly within Java classes using the CFCProxy class.

    top

    Custom Tags
    ColdFusion provides several ways to implement custom tags, i.e. those not included in the core ColdFusion language. The traditional and most common way is using CFML. A standard CFML page can be interpreted as a tag, with the tag name corresponding to the file name prefixed with "cf_". For example, the file IMAP.cfm can be used as the tag "cf_imap". Attributes used within the tag are available in the ATTRIBUTES scope of the tag implementation page. CFML pages are accessible in the same directory as the calling page, via a special directory in the ColdFusion web application, or via a CFIMPORT tag in the calling page. The latter method does not necessarily require the "cf_" prefix for the tag name.

    A second way is the development of CFX tags using Java or C++. CFX tags are prefixed with "cfx_", for example "cfx_imap". Tags are added to the ColdFusion runtime environment using the ColdFusion administrator, where JAR or DLL files are registered as custom tags. Third-Party ColdFusion custom tags can be found on ColdFusion Resource Sites such as CFTagStore

    Finally, ColdFusion supports JSP tag libraries from the JSP 2.0 language specification. JSP tags are included in CFML pages using the CFIMPORT tag.

    top

    Query of Queries
    ColdFusion uniquely supports query of queries, alternatively known as queries in memory. Given a variable of QUERY data type, ColdFusion can sort and retrieve selected rows from the result set using standard SQL. Note than in ColdFusion, a query datatype can be generated by methods other than standard database queries. For example, ColdFusion returns a query from a request to list the contents of a directory. For example:





    SELECT
    FROM dirListing
    WHERE name LIKE '%.xml'



    SELECT
    FROM dirListing
    WHERE (name LIKE '%.jpg' OR name LIKE '%.gif' OR name LIKE '%.png')



    Queries in memory often result in a performance improvement as the ColdFusion server does not have to query the database server multiple times. In the above example, only a single query of the file system was needed, saving processing overhead.

    top

    Alternative Server Environments
    ColdFusion originated as proprietary technology based on Web technology industry standards. However, it is becoming a less closed technology through the availability of competing products. Products include New Atlanta's BlueDragon, IgniteFusion, Railo, Coral Web Builder and DigitalLattice Orange.

    In fact, one could now make the argument that ColdFusion is even less platform bound than say raw J2EE or .NET, simply because ColdFusion will run on top of a .NET app server (New Atlanta), or on top of any servlet container or J2EE application server (JRun, WebSphere, JBoss, Geronimo, Tomcat etc.) In theory, you could move a ColdFusion app unchanged from a J2EE app server to a .NET app server.

    Currently, alternative server platforms generally support ColdFusion MX 6.1 functionality, with minor changes or feature enhancements.

    top

    Acronyms
    The acronym for the ColdFusion Markup Language is CFML. When ColdFusion templates are saved to disk, they are traditionally given the extension .cfm or .cfml. The .cfc extension is used for ColdFusion Components. The original extension was DBM or DBML, which stood for Database Markup Language.
    When talking about ColdFusion, most users use the Acronym CF and this is used for numerous ColdFusion resources such as user groups (CFUGs) and sites.

    CFMX is the common abbreviation for ColdFusion versions 6 and 7 (aka ColdFusion MX).

    top

    Code example
    Query your database:

    SELECT
    FROM table
    WHERE field = 'foo'


    Loop through your records:

      field_from_query



    Set and display a variable:

    Here is the contents of the variable:
      sMyVar

    Define and use a function:






      AddTwoNumbers(2, 2)

    Define a component (class):

















    Instantiate a Java class:




    Dump the results of a query (for debugging):

    dsn
      " name="myQuery">
    SELECT
      FROM myTable

    myQuery
      ">


    Consume a web service:




    or




    top

    Syntax
    CFML provides two different syntax formats for you to use, each with their own pros and cons.

    top

    Tag-based Syntax
    CFML follows an XML/HTML-like syntax in that all commands are written in the format:

    Some text


    Note that ColdFusion is not strictly XML because not all attributes have name value pairs and tags need not be well-formed. CFML more closely resembles HTML 4.0 syntax than XML. Since ColdFusion 6.0, the CFML syntax can almost entirely be expressed using XML format, with the key exception of CFIF/CFELSEIF/CFELSE tags.

    top

    CFSCRIPT Syntax
    An additional syntax format is available that is similar to Javascript:


    command('argument 1', 'argument 2');


    This second format provides a cleaner migration path for people with experience in C-style languages: C, C++, Java, Javascript, etc. One thing to remember is that to use this syntax you must include the cfscript command around the code block -- you can't just launch into cfscript. Almost everything that can be done in tags can be done using CFSCRIPT. Some exceptions are:

      SQL queries, which require the CFQUERY tag. Note that in ColdFusion, QUERY is a type which can be created in CFSCRIPT.
      Throwing and rethrowing exceptions. (Since ColdFusion MX 6.0, try and catch() are available to cfscript.)
      Most protocol-based client functionality, such as FTP, HTTP, POP, and LDAP. These are exposed via tags.

    Since the introduction of UDFs (User Defined Functions), however, it is possible to define a UDF using tag-based syntax that can be called from within cfscript blocks:






    arguments.dsn
      " result="rslt">
    select
    from tblUser
    where userId = arguments.userId
      " cfsqltype="cf_sql_integer">




    userData = readUserData(110, "myDataSource");


    This allows the passing of arguments to tag-based constructs within cffunction blocks. Also, since ColdFusion MX 6.0 extended createObject() to include CFCs, it is possible to use both custom CFCs and Java objects in CFSCRIPT. Using Java objects to obtain access to protocol-based client functionality often defeats the whole purpose of using ColdFusion. Obviously, using CFCs or cffunction-based UDFs to provide script-style code access to the tag-based language features of ColdFusion is the preferred method.

    Generally, CFSCRIPT is used to perform simple statements–such as multiple assignments–in lieu of multiple CFSET tags.

    CFSCRIPT can also be used to define UDFs:


    function addTwoNumbers(a,b)


    In this case, however, it is impossible to define the content type detection that ColdFusion provides for arguments (string, numeric, query, struct, array, etc.), access restrictions on the UDF (public, private, package, remote), whether or not the UDF is allowed to generate output, or the return value content type (as with arguments). Using CFSCRIPT to define UDFs is handy for smaller tasks or simple things that aren't reliant on the various attributes that the CFFUNCTION and CFARGUMENT tags provide.

    top

    Criticism
    Choices of scripting languages for any task are subject to much debate in the IT community. Criticisms of ColdFusion include:
      ColdFusion is expensive, especially compared to its competitors, which are almost always free. Even Microsoft-based scripting solutions such as ASP.NET are technically free if you own a PC or server running some version of Windows. It can be argued that the rapid deployment of ColdFusion applications negates the cost of the server, since most applications can be built at manpower savings that significantly make up for the cost of the server. Nevertheless, the initial cost of a project remains relatively high.
      Many scripting languages such as PHP, Ruby, Perl and Python are open-source. While the language of CFML itself is well-documented, ColdFusion's server code is not readily viewable or modifiable. Applications built using ColdFusion are viewable and modifiable unless they were deployed as a binary CAR file (similar to a JAR file).
      CFML syntax is much different from traditional programming languages, which use a C-style syntax. Although CFScript offers this alternative, ColdFusion code is often written in CFML.
      Although CFML is certainly not alone in using tag-based syntax (ASP.NET and JSP also uses them to render some UI elements), it is the only language that wraps core application logic in a tag-based syntax.
      ColdFusion libraries and extensions are few, and rarely free, although there are sites dedicated to open-source ColdFusion code and many open-souce frameworks have emerged (see below).
      ColdFusion lacks features present in other scripting languages. A significant omission from ColdFusion's tag library, for example, is the ability to manipulate common image formats. Another of note is a client IMAP tag. Missing features are often available as extensions, with the caveat on extensions as above.
      ColdFusion lacks advanced object-oriented features such as multiple inheritance. ColdFusion supports single inheritance only, and makes little distinction between instance and class (virtual and static) properties and methods. ColdFusion doesn't offer constructor syntax per se, but rather forces an object factory pattern to return object instances. A common idiom is to use init to indicate a method which is the constructor for each component. Methods are implicitly virtual if they reference the THIS scope. There are several techniques available to provide mixin functionality.
      CFScript is similar to but incompatible with the ECMAScript specification. ColdFusion does include some server-side Actionscript functionality (which is ECMA-script compliant), however this feature is rarely used .
      Certain features of ColdFusion such as event gateways, caching settings and classpath additions are not readily configurable for usage in a shared hosting environment.

    top

    Development Aides
    The following tools and frameworks are available:

    top

    Development Tools / Environments
      ColdFusion Studio, the original ColdFusion IDE, based on Allaire's HomeSite and subsequently replaced by Dreamweaver and Homesite+ after the Macromedia takeover.

    top

    Code Frameworks
      Coldbox - event-driven CFC based ColdFusion framework
      Fusebox - created in 1998, this was the first framework for use with ColdFusion. Fusebox 5 is the current version.
      Mach-II - the first ColdFusion OO framework based on the MVC pattern.
      Model-Glue - an OO framework based on the MVC pattern.
      onTap - a feature-rich framework for rapid application development (MVC controller, SQL language abstraction, form automation, i18n internationalization, etc.)

    top

    Monitoring & Testing Tools
      SeeFusion - Web based monitoring tool written in Java and implemented as a servlet filter in the JVM to monitor page requests. Also includes wrapper for database drivers to monitor/control database calls. Metrics can be logged to a database for review, or aggregated trending reports. SeeFusion provides an API (XML via HTTP request) to programmatically access its data. The newest version (SeeFusion 4) uses Flex 2, a Flash-based interface which is also a product of Adobe.
      Fusion Reactor - Similar in implementation to SeeFusion above with html front end.
      The next version of ColdFusion (Scorpio) will include some built-in monitoring similiar to portions of SeeFusion and FusionReactor's functionality. Scorpio will also include an API (CFC's) for programmatically accessing the data.

    top

    Training and Certification

    top

    ColdFusion-Focused Podcasts

    top

    ColdFusion-Focused Blog Syndications
      MXNA - Official Adobe blog aggregator

    top

    ColdFusion-Focused Magazines

    top

    Technical Mailing Lists
      ColdFusion Technical Talk at House of Fusion - A high-volume list that tends to be on or around the topic of ColdFusion and web development. For CFML developers of all skill levels. There is also a jobs list available, and an off-topic community list.
      CFCDev at CFCZone - A medium-volume list largely discussing object-oriented development practices and frameworks. For advanced CFML developers and those applying OOP principles in ColdFusion.
      CFDJ at Sys-Con (defunct).

    top

    See also
      BlueDragon - Alternative to ColdFusion for running CFML
     
    Search more:
     

       
    Source Privacy License Download Contact Us Atlas
    Scientus.org Dictionary (Yet Another Wiki) RC : 1.39
    MIT OpenCourseWare
    This article is licensed under the GNU Free Documentation License [copyleft]. It uses material from the Wikipedia article "ColdFusion". link