cf.Objective 2014 - Slides and Demo Code (Ehcache, BigMemory, Terracotta)

cf.Objective 2014 is in full swing. I was fortunate enough this year to give my presentation in the second slot on the first full day of the conference. This marks something of a milestone for me. I've now been giving presentations on caching in one form or another for the better part of the past 7 years. I went into my session thinking I would "retire" my caching presentations after the conference. However, after polling the attendees, turns out that many people were attending one of my talks for the first time and are interested in digging in deeper. Several attendees mentioned that this was their 3rd or 4th time attending my caching session and each time they learned something new. So... Looks like there may still be value in developing and delivering content on caching in ColdFusion.

That said, here's a link to my presentation slides (they'll also be available from the cf.Objective website at some point. As I mentioned in my talk, I'm also including a lot of sample code that I didn't cover in the presentation, but I think is useful in illustrating all of ColdFusion's caching tags and functions.

Advanced Caching Techniques with Ehcache, BigMemory, Terracotta, and ColdFusion

Slides and Demo Code from Scotch on the Rocks 2013 (Caching)

I had a great time attending and presenting at Scotch on the Rocks 2013 in Edinburgh. For the past several years now, I've been talking about the importance of caching as part of an overall application architecture consideration. Although I've presented on the topic a dozen or so times now, each presentation I give is different from the last.

If you would like a copy of the slides, along with demo code that illustrates all of the points I covered during the talk, you can download it here:

Caching for Performance and Scalability in ColdFusion 10 (zip) - Scotch on the Rocks 2013

Any questions about the content, please leave a comment!

Adobe ColdFusion 10 Web Application Construction Kit Ships

The wait is over - you were waiting, weren't you? The much anticipated book, Adobe ColdFusion Web Application Construction Kit: ColdFusion 10 Enhancements and Improvements, is now available and shipping from Amazon. I had the pleasure of working on the book along with Ben Forta, Chandan Kumar, Charlie Arehart, Hemant Khandelwal, Kenneth Fricklas, and Ray Camden.

If you're looking for the difinitive guide on what's new in ColdFusion 10, this is the book for you.

Help Test the Next Version of ColdFusion

Interested in helping to test the next version of ColdFusion (code name: Splendor) and/or ColdFusion Builder (code name Thunder)? If so, Adobe wants to hear from you. To sign up to be considered for the pre-release programs, simply fill out the ColdFusion Splendor Pre-release Survey.

There's no official word on the exact start date of the pre-release program, but this post on the official Adobe CF Blog indicates "soon".

Slides and Demo Code from My ColdFusion 10 Developer Week 2012 Presentation on Caching

I had a great turnout for my ColdFusion 10 Developer Week 2012 presentation "Speed Your Websites using Caching in ColdFusion 10". It's always hard to take such a vast subject and distill it into a one hour presentation. I had a little more material to cover than I could comfortably fit into an hour, and things got a bit rushed toward the end. Overall I think the presentation went well, and I hope everyone who turned up for it learned something new. As promised, I'm attaching my slides and all of the demo code I used in the presentation. The presentation recording should be posted by Adobe shortly. As soon as I have the link, I'll blog it as well.

As always, if you have questions about Caching in ColdFusion, hit me up via email or twitter (see my Contact page).

Speed Your Websites using Caching in ColdFusion 10 (zip)

Slides from my cf.Objective 2012 Talk: Ten Steps to Move your Use of Caching Beyond the Basics

Thanks to everyone who came out to hear my presentation on Ten Steps to Move your Use of Caching Beyond the Basics at cf.Objective 2012. As promised, here are the slides, demo code, and ehcache.xml config file from the session.

Ten Steps to Move your Use of Caching Beyond the Basics (zip)

Slides from my cf.Objective 2012 Presentation: Maintaining Healthy ColdFusion Servers

Below you'll find a link to the slides from my cf.Objective 2012 presentation on Maintaining Healthy ColdFusion Servers. Thanks to all those who came out to see the talk!

Maintaining Healthy ColdFusion Servers (zip)

Fixing 404 Errors When Trying to Implement REST in ColdFusion 10 with Apache

If you're working with ColdFusion 10's new REST implementation and experiencing 404 errors with Apache when trying to call your services, chances are your server is misconfigured. See this blog post for a complete step-by-step on how to configure multiple instances of ColdFusion 10 with Apache virtual hosts. It's relevant even if you only have a single instance of ColdFusion 10.

To the specific problem at hand, is how ColdFusion 10 and Tomcat handle mappings between services such as REST and ColdFusion (Tomcat) instances. There's a properties file called that handles this:

view plain print about
1/cfformgateway/* = cfusion
2/CFFormGateway/* = cfusion
3/flex2gateway/* = cfusion
4/flex2gateway = cfusion
5/cffileservlet/* = cfusion
6/CFFileServlet/* = cfusion
7/cfform-internal/* = cfusion
8/flashservices/gateway/* = cfusion
9/flex-internal/* = cfusion
10/rest/* = cfusion
11/*.cfml/* = cfusion
12/*.mxml = cfusion
13/*.as = cfusion
14/*.cfm = cfusion
15/*.cfm/* = cfusion
16/*.swc = cfusion
17/*.cfml = cfusion
18/*.cfc = cfusion
19/*.cfc/* = cfusion
20/*.cfr = cfusion
21/*.cfswf = cfusion
22/*.sws = cfusion
23/*.jsp = cfusion
24/*.hbmxml = cfusion

What you can see here is all the mappings between the various ColdFusion services and the default cfusion instance. The crux of the issue is that you must explicitly declare the file in each Apache virtual host, including the default via a directive called JkMountFile. It looks like this:

view plain print about
1JkMountFile "C:\ColdFusion10\config\wsconfig\1\"

Here's an example of what that looks like for the default virtual host in Apache:

view plain print about
1# Load mod_jk module
2LoadModule jk_module "C:\ColdFusion10\config\wsconfig\1\"
3# Where to find
4JkWorkersFile "C:\ColdFusion10\config\wsconfig\1\"
5# Where to put jk logs
6JkLogFile "C:\ColdFusion10\config\wsconfig\1\mod_jk.log"
7# Where to put jk shared memory
8JkShmFile "C:\ColdFusion10\config\wsconfig\1\jk_shm"
9# Set the jk log level [debug/error/info]
10JkLogLevel info
11# Select the timestamp log format
12JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
14AddHandler jakarta-servlet .cfm .cfml .cfc .cfr .cfswf
16<Files ~ ".hbmxml$">
17Order allow,deny
18Deny from all
21<VirtualHost *:80>
22ServerName localhost
23DocumentRoot C:/_web/cf10/cfusion/localhost/wwwroot
24ErrorLog c:/_web/logs/cfusion-localhost.log
26JkMountFile "C:\ColdFusion10\config\wsconfig\1\"
28<Directory "C:/_web/cf10/cfusion/localhost/wwwroot">
29 Options Indexes FollowSymLinks
30 AllowOverride None
31 Order allow,deny
32 Allow from all
35 Alias /CFIDE "C:\ColdFusion10\cfusion\wwwroot\CFIDE"
37 <Directory "C:\ColdFusion10\cfusion\wwwroot\CFIDE">
38 Options Indexes FollowSymLinks
39 AllowOverride None
40 Order allow,deny
41 Allow from all
42 </Directory>

Note that this is done in the mod_jk.conf file by default. This is the file that CF 10 creates and includes via your httpd.conf file by default. You don't have to use mod_jk.conf if you don't want to, but you must make sure that the various mod_jk directives are called and that JkMountFile is specified for each virtual host you setup.

Ensuring a JkMountFile directive for each virtual host should resolve the majority of your 404 errors when configuring ColdFusion 10 rest services with Apache.

Installing ColdFusion 10 with Apache on Windows

Here's a quick visual walk through for installing ColdFusion 10 in Server Configuration with Apache as the web server on Windows.

Launch the installer, click next.

Accept the license terms, then click next.

Enter your serial number, choose the 30-Day Trial or Developer Edition. Click next.

Choose Server configuration. If you've installed other versions of ColdFusion in the past, you'll notice that there's no longer a Multi-Server option. This is because ColdFusion 10 has standardized the install/directory structure. The Server configuration creates a single, stand-alone instance of ColdFusion with Tomcat embedded as the JEE server. From there, you can create and configure additional instances of ColdFusion from withing the ColdFusion Administrator. To proceed, click Next.

Select the services you want installed and click next.

Enter a username and password for the remote server administration account. Click next.

A new feature in ColdFusion 10 will check the strength of the password you entered and make recommendations if it's found to be weak. Click yes if you want to modify the password you entered. If you want to ignore the warning and proceed, click No.

If you are installing ColdFusion 10 alongside a previous version, you may get a screen telling you that a previous version of the .Net service has been detected. Click next.

Select the directory where you want ColdFusion to install and click next.

It's now time to configure Apache as our web server. Click Add.

Select Apache as the web server.

Find the location of your Apache /conf directory:

Find the location of your Apache httpd.exe file:

Make sure everything is correct and click OK.

You should now have the configuration setup for Apache. Click next.

Enter a password to restrict access to the ColdFusion Administrator. Click next.

The password strength dialog may appear again. Click Yes to change your password or No to accept the one you just entered.

Choose whether or not you want to enable RDS. If you do enable it, provide a password. Click next when you are done.

You may get the password strength dialog again. Click Yes to change your password or No to accept the one you just entered.

If you want ColdFusion to automatically check for updates, check this box. This is a new feature in ColdFusion 10 and I highly recommend it. The check only occurs when you log into the ColdFusion Administrator. When you are done, click Next to proceed.

Review the information for the install. Click Install when you're ready to go.

The installer will now move through a series of screens highlighting features as the program installs.

You'll be greeted with a success message when the installer has completed. Click on the Done button to launch the ColdFusion Administrator and complete the install process.

You should now see the Configuration and Settings Migration Wizard in your browser. This step will completely your server configuration and migrate settings from any previous versions of ColdFusion the wizard detects. You'll need to enter the password you provided for the ColdFusion Administrator. Once you're ready, click Login.

You'll see a screen letting you know configuration is proceeding. The process can take several minutes.

When the process is complete, you can click Ok to launch the ColdFusion Administrator.

Congratulations, you've successfully installed ColdFusion 10 with Apache as your web server.

To see what changes ColdFusion 10 made to your Apache configuration, open your Apache http.conf file. You should see the following at the bottom of the file:

view plain print about
1# Load mod_jk module
2Include "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\mod_jk.conf"

This directive tells Apache to load up the ColdFusion Tomcat/Apache connector configuration from an external file called mod_jk.conf. Go ahead and take a look at that file (I've added spacing to make it easier to read):

view plain print about
1# Load mod_jk module
2LoadModule jk_module "C:\ColdFusion10\config\wsconfig\1\"
4# Where to find
5JkWorkersFile "C:\ColdFusion10\config\wsconfig\1\"
7JkMountFile "C:\ColdFusion10\config\wsconfig\1\"
9# Where to put jk logs
10JkLogFile "C:\ColdFusion10\config\wsconfig\1\mod_jk.log"
12# Where to put jk shared memory
13JkShmFile "C:\ColdFusion10\config\wsconfig\1\jk_shm"
15# Set the jk log level [debug/error/info]
16JkLogLevel info
18# Select the timestamp log format
19JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
21AddHandler jakarta-servlet .cfm .cfml .cfc .cfr .cfswf
23Alias /CFIDE "C:\ColdFusion10\cfusion\wwwroot\CFIDE"
25<Directory "C:\ColdFusion10\cfusion\wwwroot\CFIDE">
26Options Indexes FollowSymLinks
27AllowOverride None
28Order allow,deny
29Allow from all
32<Files ~ ".hbmxml$">
33Order allow,deny
34Deny from all

This file sets up various mapping and configuration options as well as maps the location for ColdFusion's /CFIDE directory. Note that it places /CFIDE inside of ColdFusion 10's default webroot. It's generally not a good idea to expose your /CFIDE directory to everyone. There are many ways to secure your /CFIDE directory. For specifics, see Pete Freitag's ColdFuion Lockdown Guide.

That's about it for the install. In my next post, I'll be showing how you can extend this installation to include multiple instances of ColdFusion, each with multiple Apache virtual hosts.

ColdFusion 10 Enters Public Beta

The title says it all. The much anticipated ColdFusion 10 (Zeus) has entered public beta and is available for download from Adobe Labs.

ColdFusion 10 represents a leap forward for ColdFusion with a nice combination of updated infrastructure and libraries as well as lots and lots of improvements to existing features. While they were at it the engineering team went ahead and added a slew of new features and language enhancements as well. Here's a small sampling of what's new:

  • Apache Tomcat replaces JRun - I was almost tempted to put a blink tag here.
  • Overhauled scheduler - Quartz scheduler under the hood. Lots and lots of new functionality.
  • Security - Adobe implemented the OWASP ESAPI library under the covers and it's now pervasive throughout ColdFusion.
  • AXIS2 upgrade - Much improved support for SOAP web services.
  • RESTful web services
  • HTML5 WebSockets
  • HTML5 Charting
  • ORM Search
  • Caching updates (updated ehcache, caching functions, query & login cache moved to ehcache).
  • Hotfix Updater - Keeping up with and installing hotfixes and updates has never been so easy.

This is just the tip of the iceberg. For a really nice overview of what's new from engineering team member Sagar Ganatra, check out his site.