<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://web.resource.org/cc/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

			<channel>
			<title>Rob Brooks-Bilson's Blog</title>
			<link>http://rob.brooks-bilson.com/index.cfm</link>
			<description>Tech, Photography, Stuff</description>
			<language>en-us</language>
			<pubDate>Fri, 24 Feb 2012 05:03:22 -0500</pubDate>
			<lastBuildDate>Thu, 23 Feb 2012 15:17:00 -0500</lastBuildDate>
			<generator>BlogCFC</generator>
			<docs>http://blogs.law.harvard.edu/tech/rss</docs>
			<managingEditor>rbils@yahoo.com</managingEditor>
			<webMaster>rbils@yahoo.com</webMaster>
			<itunes:subtitle />
			<itunes:summary />
			<itunes:category text="Technology" />
			<itunes:category text="Technology">
				<itunes:category text="Podcasting" />
			</itunes:category>
			<itunes:category text="Technology">
				<itunes:category text="Tech News" />
			</itunes:category>
			<itunes:keywords />
			<itunes:author />
			<itunes:owner>
				<itunes:email>rbils@yahoo.com</itunes:email>
				<itunes:name />
			</itunes:owner>
			
			<itunes:explicit>no</itunes:explicit>
			
			
			
			
			
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/styggiti" /><feedburner:info uri="styggiti" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
				<title>Configuring Multiple Instances of ColdFusion 10 with Apache Virtual Hosts</title>
				<link>http://feedproxy.google.com/~r/styggiti/~3/rMq9VgovwKU/Configuring-Multiple-Instances-of-ColdFusion-10-with-Apache-Virtual-Hosts</link>
				<description>In my &lt;a href="http://rob.brooks-bilson.com/index.cfm/2012/2/21/Installing-ColdFusion-10-with-Apache-on-Windows"&gt;last blog post&lt;/a&gt;, I walked through the steps of installing ColdFusion 10 on Windows with Apache as the web server.  I'm going to build on that in this post and show you how you can create additional ColdFusion instances and tie them to multiple virtual hosts in Apache (the multiple virtual hosts part is often referred to as multihoming).

For the purposes of this blog post, I'm going to assume that you've already installed ColdFusion 10 in the Server Configuration (Not EAR/WAR deployment).  I'm also going to assume you chose to install Apache as your web server during the install process.  This gives you a single instance of ColdFusion 10 (cfusion) with Apache connected to ColdFusion as localhost.  

Now let's suppose I want to do two things.  I want to have two instances of ColdFusion, cfusion (the default instance) and a new instance, cfusion2.  For the cfusion instance I want two virtual hosts, one for localhost and one for zeus1.foo.com.  For my cfusion2 instance, I want a single virtual host for zeus2.foo.com.  Here are the steps to create that configuration. I'm doing this on a Windows install, but the basic process is the same across platforms.  To visualize, the setup will look like this:

&lt;pre&gt;
cfusion (instance 1)
+--localhost
+--zeus1.foo.com

cfusion2 (instance 2)
+--zeus2.foo.com
&lt;/pre&gt;

The first thing we need to do is create our new ColdFusion instance (cfusion2).  To do this, we need to fire up the ColdFusion Administrator.  Once logged in, click on the Instance Manager link in the Enterprise Manager section.  Here you'll see a list of currently configured instances.  To create a new instance, click the Add New Instance button:

&lt;img src="http://rob.brooks-bilson.com/images/cf10avh1.png" /&gt;

Enter cfusion2 in the Server Name box.  Leave the Server Directory as-is, and make sure to check the Create Windows Service box.  When you're finished, click Submit.

&lt;img src="http://rob.brooks-bilson.com/images/cf10avh2.png" /&gt;

It generally takes a few minutes for ColdFusion to create the instance.  When it's finished, you'll see a screen with a link back to the Enterprise Manager. Go ahead and click the link once it appears:

&lt;img src="http://rob.brooks-bilson.com/images/cf10avh3.png" /&gt;

Once you're back in the Instance Manager, you should see the new cfusion2 instance.  Notice how the HTTP Port column shows 8500? This is because the new instance is setup to use Tomcat's built-in web server.  Don't worry about that right now, we'll get to fixing that in just a minute.  For now, just note the value in the Remote Port column for your cfusion2 instance as we'll be needing it shortly.

&lt;img src="http://rob.brooks-bilson.com/images/cf10avh4.png" /&gt;

If you're wondering where ColdFusion 10 physically puts the directory structure for your instances, it's directly in the /ColdFusion10 install root:

&lt;img src="http://rob.brooks-bilson.com/images/cf10avh5.png" /&gt;

With our two instances created, it's time to make some changes to ColdFusion's underlying Tomcat server configuration and Apache Tomcat connector configuration. We'll tackle the Tomcat configuration for the cfusion2 instance first.  Fire up your favorite text editor and open the server.xml file located in:

C:\ColdFusion10\cfusion2\runtime\conf

About halfway down the file, you should see a line of XML that looks like this:

&lt;code&gt;
&lt;Connector port="8013" protocol="AJP/1.3" redirectPort="8446" tomcatAuthentication="false"&gt;
&lt;/code&gt;

Verify that the Connector Port matches the Remote Port you noted earlier from the Instance Manager for the cfusion instance.

At the bottom of the file, you should see some additional XML that looks like this:

&lt;code&gt;
&lt;Connector port="8500" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443" executor="tomcatThreadPool"&gt;
&lt;/Connector&gt;
&lt;/code&gt;

This code is used to configure Tomcat's built-in web server.  Since we want to connect our ColdFusion instance to Apache, we need to disable this.  To do that, simply comment it out and save the file:

&lt;code&gt;
&lt;!--
&lt;Connector port="8500" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443" executor="tomcatThreadPool"&gt;
&lt;/Connector&gt;
--&gt;
&lt;/code&gt;

Now that we've disabled the built-in web server, we need to tell Tomcat we want to use Apache as our web server instead.  To do this, we have to make some changes to the Apache Tomcat connector ColdFusion previously installed.  The connector and its associated configuration files can be found here:

C:\ColdFusion10\config\wsconfig\1

The connector itself is compiled and named mod_jk.so.  There's not much to do with it other than to verify that it's there.  The two files that we're interested in for our instance configuration are workers.properties and uriworkermap.properties.

The workers.properties file is used to configure your server instances.  If you open it up in a text editor, you'll see that it's configured for your default cfusion instance:

&lt;code&gt;
worker.list=cfusion

worker.cfusion.type=ajp13
worker.cfusion.host=localhost
worker.cfusion.port=8012
&lt;/code&gt;

To add our additional cfusion2 instance, we simply have to make two changes:

&lt;code&gt;
worker.list=cfusion, cfusion2

worker.cfusion.type=ajp13
worker.cfusion.host=localhost
worker.cfusion.port=8012

worker.cfusion2.type=ajp13
worker.cfusion2.host=localhost
worker.cfusion2.port=8013
&lt;/code&gt;

worker.list should contain a comma delimited list of all of the server instances you have.  Below that, you need to configure the properties for each instance.  You only need to concern yourself with the port here.  Each ColdFusion instance gets its own port, which you can obtain from the Instance Manager in the ColdFusion Administrator.

Next, make a copy of your uriworkermap.properties file and name it uriworkermap_cfusion2.properties.  The ColdFusion 10 docs tell you to rename it to uriworkermap1.properties, but I don't like that convention - especially if you have a lot of instances.  Anyhow, change all of the mappings in the uriworkermap_cfusion2.properties file so that they apply to the cfusion2 instance.  Here's how that should look:

&lt;code&gt;
/cfformgateway/* = cfusion2
/CFFormGateway/* = cfusion2
/flex2gateway/* = cfusion2
/flex2gateway = cfusion2
/cffileservlet/* = cfusion2
/CFFileServlet/* = cfusion2
/cfform-internal/* = cfusion2
/flashservices/gateway/* = cfusion2
/flex-internal/* = cfusion2
/rest/* = cfusion2
/*.cfml/* = cfusion2
/*.mxml = cfusion2
/*.as = cfusion2
/*.cfm = cfusion2
/*.cfm/* = cfusion2
/*.swc = cfusion2
/*.cfml = cfusion2
/*.cfc = cfusion2
/*.cfc/* = cfusion2
/*.cfr = cfusion2
/*.cfswf = cfusion2
/*.sws = cfusion2
/*.jsp = cfusion2
/*.hbmxml = cfusion2
&lt;/code&gt;

That's it for the Apache Tomcat connector configuration.  All that's left to do now is to setup our Apache virtual hosts, restart all of our servers and verify everything's working as expected.

Open your Apache http.conf file and notice that ColdFusion has placed the following directive at the bottom of the file:

&lt;code&gt;
# Load mod_jk module
Include "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\mod_jk.conf"
&lt;/code&gt;

Personally, I don't like the absolute path, so I usually make mine relative. I also like it in a subdirectory for virtual hosts. You don't have to move yours, it's just a personal preference of mine:

&lt;code&gt;
# Load mod_jk module
Include conf/vhosts/mod_jk.conf
&lt;/code&gt;

This directive tells Apache to load the mod_jk.conf configuration file that ColdFusion created when you told it to configure Apache as your web server.

Open your mod_jk.conf file and create the virtual hosts.  Here's my mod_jk.conf file (I added some space and moved some things around to make it easier to read):

&lt;code&gt;
# Load mod_jk module
LoadModule    jk_module  "C:\ColdFusion10\config\wsconfig\1\mod_jk.so"
# Where to find workers.properties
JkWorkersFile "C:\ColdFusion10\config\wsconfig\1\workers.properties"
# Where to put jk logs
JkLogFile "C:\ColdFusion10\config\wsconfig\1\mod_jk.log"
# Where to put jk shared memory
JkShmFile "C:\ColdFusion10\config\wsconfig\1\jk_shm"
# Set the jk log level [debug/error/info]
JkLogLevel info
# Select the timestamp log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "

AddHandler jakarta-servlet .cfm .cfml .cfc .cfr .cfswf

&lt;Files ~ ".hbmxml$"&gt;
Order allow,deny
Deny from all
&lt;/Files&gt;

 &lt;VirtualHost *:80&gt;
   ServerName localhost
   DocumentRoot C:/_web/cf10/cfusion/localhost/wwwroot
   ErrorLog c:/_web/logs/cfusion-localhost.log
   
   JkMountFile "C:\ColdFusion10\config\wsconfig\1\uriworkermap.properties"

   &lt;Directory "C:/_web/cf10/cfusion/localhost/wwwroot"&gt;
		Options Indexes FollowSymLinks
		AllowOverride None
		Order allow,deny
		Allow from all
   &lt;/Directory&gt;

	Alias /CFIDE "C:\ColdFusion10\cfusion\wwwroot\CFIDE"

	&lt;Directory "C:\ColdFusion10\cfusion\wwwroot\CFIDE"&gt;
		Options Indexes FollowSymLinks
		AllowOverride None
		Order allow,deny
		Allow from all
	&lt;/Directory&gt;
&lt;/VirtualHost&gt;

 &lt;VirtualHost *:80&gt;
   ServerName zeus1.foo.com
   DocumentRoot C:/_web/cf10/cfusion/zeus1/wwwroot
   ErrorLog c:/_web/logs/cfusion-zeus1.log
   
   JkMountFile "C:\ColdFusion10\config\wsconfig\1\uriworkermap.properties"

   &lt;Directory "C:/_web/cf10/cfusion/zeus1/wwwroot"&gt;
		Options Indexes FollowSymLinks
		AllowOverride None
		Order allow,deny
		Allow from all
   &lt;/Directory&gt;

	Alias /CFIDE "C:\ColdFusion10\cfusion\wwwroot\CFIDE"

	&lt;Directory "C:\ColdFusion10\cfusion\wwwroot\CFIDE"&gt;
		Options Indexes FollowSymLinks
		AllowOverride None
		Order allow,deny
		Allow from all
	&lt;/Directory&gt;
&lt;/VirtualHost&gt;

 &lt;VirtualHost *:80&gt;
   ServerName zeus2.foo.com
   DocumentRoot C:/_web/cf10/cfusion2/zeus2/wwwroot
   ErrorLog c:/_web/logs/cfusion2-zeus2.log
   
   JkMountFile "C:\ColdFusion10\config\wsconfig\1\uriworkermap_cfusion2.properties"

   &lt;Directory "C:/_web/cf10/cfusion2/zeus2/wwwroot"&gt;
		Options Indexes FollowSymLinks
		AllowOverride None
		Order allow,deny
		Allow from all
   &lt;/Directory&gt;

	Alias /CFIDE "C:\ColdFusion10\cfusion2\wwwroot\CFIDE"

	&lt;Directory "C:\ColdFusion10\cfusion2\wwwroot\CFIDE"&gt;
		Options Indexes FollowSymLinks
		AllowOverride None
		Order allow,deny
		Allow from all
	&lt;/Directory&gt;
&lt;/VirtualHost&gt;
&lt;/code&gt;

Note that for my cfusion instance where I want to have two virtual hosts, one for localhost and one for zeus1.foo.com, I've added the same jkmountfile directive to each virtual host like so:

&lt;code&gt;
JkMountFile "C:\ColdFusion10\config\wsconfig\1\uriworkermap.properties"
&lt;/code&gt;

All virtual hosts on a single instance should point to the same uriworkermap.properties file since that file specifies the mapping at the instance level.

For my cfusion2 instance, the single virtual host points to uriworkermap_cfusion2.properties:

&lt;code&gt;
JkMountFile "C:\ColdFusion10\config\wsconfig\1\uriworkermap_cfusion2.properties"
&lt;/code&gt;

That's it for configuration.  Go ahead and stop and start both of your ColdFusion instances and your Apache web server just to make sure all changes are reflected.

Test out the URLs for each of your virtual hosts to make sure everything is pointing where it should be:

http://localhost
http://zeus1.foo.com
http://zeus2.foo.com
	
Now open the ColdFusion administrator on localhost:

&lt;code&gt;
http://localhost/CFIDE/administrator
&lt;/code&gt;

Everything should load up fine. In the Mappings section of the Administrator, /CFIDE and /gateway point to the correct locations:

&lt;code&gt;
C:/ColdFusion10/cfusion/wwwroot/CFIDE
C:/ColdFusion10/cfusion/gateway/cfc  
&lt;/code&gt;

Repeat the same process for your other virtual hosts, making sure the /CFIDE and /gateway mappings point to the correct locations for your instances.

That's it, you should now be configured for multiple instances of ColdFusion with multiple Apache virtual hosts.&lt;img src="http://feeds.feedburner.com/~r/styggiti/~4/rMq9VgovwKU" height="1" width="1"/&gt;</description>
				
				
				<category>Apache</category>
				
				<category>ColdFusion 10</category>
				
				<category>Tomcat</category>
				
				<category>Installation</category>
				
				<pubDate>Thu, 23 Feb 2012 15:17:00 -0500</pubDate>
				<guid isPermaLink="false">http://rob.brooks-bilson.com/index.cfm/2012/2/23/Configuring-Multiple-Instances-of-ColdFusion-10-with-Apache-Virtual-Hosts</guid>
				
				
			<feedburner:origLink>http://rob.brooks-bilson.com/index.cfm/2012/2/23/Configuring-Multiple-Instances-of-ColdFusion-10-with-Apache-Virtual-Hosts</feedburner:origLink></item>
			
		 	
			
			
			<item>
				<title>Installing ColdFusion 10 with Apache on Windows</title>
				<link>http://feedproxy.google.com/~r/styggiti/~3/o1Fs0TUBm4Y/Installing-ColdFusion-10-with-Apache-on-Windows</link>
				<description>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. &lt;br/&gt;
&lt;img src="/images/cf10install1.png" width="600" /&gt;

Accept the license terms, then click next. &lt;br/&gt;
&lt;img src="/images/cf10install2.png" width="600" /&gt;

Enter your serial number, choose the 30-Day Trial or Developer Edition. Click next. &lt;br/&gt;
&lt;img src="/images/cf10install3.png" width="600" /&gt;

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. &lt;br/&gt;
&lt;img src="/images/cf10install4.png" width="600" /&gt;

Select the services you want installed and click next. &lt;br/&gt;
&lt;img src="/images/cf10install5.png" width="600" /&gt;

Enter a username and password for the remote server administration account. Click next. &lt;br/&gt;
&lt;img src="/images/cf10install6.png" width="600" /&gt;

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. &lt;br/&gt;
&lt;img src="/images/cf10install7.png" /&gt;

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. &lt;br/&gt;
&lt;img src="/images/cf10install8.png" width="600" /&gt;

Select the directory where you want ColdFusion to install and click next. &lt;br/&gt;
&lt;img src="/images/cf10install9.png" width="600" /&gt;

It's now time to configure Apache as our web server.  Click Add. &lt;br/&gt;
&lt;img src="/images/cf10install10.png" width="600" /&gt;

Select Apache as the web server. &lt;br/&gt;
&lt;img src="/images/cf10install11.png" /&gt;

Find the location of your Apache /conf directory: &lt;br/&gt;
&lt;img src="/images/cf10install12.png" /&gt;

Find the location of your Apache httpd.exe file: &lt;br/&gt;
&lt;img src="/images/cf10install13.png" /&gt;

Make sure everything is correct and click OK. &lt;br/&gt;
&lt;img src="/images/cf10install14.png" /&gt;

You should now have the configuration setup for Apache. Click next. &lt;br/&gt;
&lt;img src="/images/cf10install15.png" width="600" /&gt;

Enter a password to restrict access to the ColdFusion Administrator. Click next. &lt;br/&gt;
&lt;img src="/images/cf10install16.png" width="600" /&gt;

The password strength dialog may appear again. Click Yes to change your password or No to accept the one you just entered. &lt;br/&gt;
&lt;img src="/images/cf10install17.png" /&gt;

Choose whether or not you want to enable RDS. If you do enable it, provide a password. Click next when you are done. &lt;br/&gt;
&lt;img src="/images/cf10install18.png" width="600" /&gt;

You may get the password strength dialog again. Click Yes to change your password or No to accept the one you just entered. &lt;br/&gt;
&lt;img src="/images/cf10install19.png" /&gt;

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. &lt;br/&gt;
&lt;img src="/images/cf10install20.png" width="600" /&gt;

Review the information for the install. Click Install when you're ready to go. &lt;br/&gt;
&lt;img src="/images/cf10install21.png" width="600" /&gt;

The installer will now move through a series of screens highlighting features as the program installs. &lt;br/&gt;
&lt;img src="/images/cf10install22.png" width="600" /&gt;

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. &lt;br/&gt;
&lt;img src="/images/cf10install23.png" width="600" /&gt;

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. &lt;br/&gt;
&lt;img src="/images/cf10install24.png" width="600" /&gt;

You'll see a screen letting you know configuration is proceeding.  The process can take several minutes. &lt;br/&gt;
&lt;img src="/images/cf10install25.png" width="600" /&gt;

When the process is complete, you can click Ok to launch the ColdFusion Administrator. &lt;br/&gt;
&lt;img src="/images/cf10install26.png" width="600" /&gt;

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:

&lt;code&gt;
# Load mod_jk module
Include "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\mod_jk.conf"
&lt;/code&gt;

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):

&lt;code&gt;
# Load mod_jk module
LoadModule    jk_module  "C:\ColdFusion10\config\wsconfig\1\mod_jk.so"

# Where to find workers.properties
JkWorkersFile "C:\ColdFusion10\config\wsconfig\1\workers.properties"

JkMountFile "C:\ColdFusion10\config\wsconfig\1\uriworkermap.properties"

# Where to put jk logs
JkLogFile "C:\ColdFusion10\config\wsconfig\1\mod_jk.log"

# Where to put jk shared memory
JkShmFile "C:\ColdFusion10\config\wsconfig\1\jk_shm"

# Set the jk log level [debug/error/info]
JkLogLevel info

# Select the timestamp log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "

AddHandler jakarta-servlet .cfm .cfml .cfc .cfr .cfswf

Alias /CFIDE "C:\ColdFusion10\cfusion\wwwroot\CFIDE"

&lt;Directory "C:\ColdFusion10\cfusion\wwwroot\CFIDE"&gt;
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
&lt;/Directory&gt;

&lt;Files ~ ".hbmxml$"&gt;
Order allow,deny
Deny from all
&lt;/Files&gt;
&lt;/code&gt;

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 &lt;a href="http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/products/coldfusion/pdfs/91025512-cf9-lockdownguide-wp-ue.pdf"&gt;ColdFuion Lockdown Guide&lt;/a&gt;.

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.&lt;img src="http://feeds.feedburner.com/~r/styggiti/~4/o1Fs0TUBm4Y" height="1" width="1"/&gt;</description>
				
				
				<category>ColdFusion 10</category>
				
				<category>ColdFusion</category>
				
				<category>Installation</category>
				
				<pubDate>Tue, 21 Feb 2012 14:06:00 -0500</pubDate>
				<guid isPermaLink="false">http://rob.brooks-bilson.com/index.cfm/2012/2/21/Installing-ColdFusion-10-with-Apache-on-Windows</guid>
				
				
			<feedburner:origLink>http://rob.brooks-bilson.com/index.cfm/2012/2/21/Installing-ColdFusion-10-with-Apache-on-Windows</feedburner:origLink></item>
			
		 	
			
			
			<item>
				<title>ColdFusion 10 Enters Public Beta</title>
				<link>http://feedproxy.google.com/~r/styggiti/~3/g2-2Zp4PztY/ColdFusion-10-Enters-Public-Beta</link>
				<description>The title says it all. The much anticipated ColdFusion 10 (Zeus) has entered public beta and is available for download from &lt;a href="http://labs.adobe.com/technologies/coldfusion10/"&gt;Adobe Labs&lt;/a&gt;.

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:

&lt;ul&gt;
&lt;li&gt;Apache Tomcat replaces JRun - I was almost tempted to put a blink tag here. &lt;/li&gt;
&lt;li&gt;Overhauled scheduler - Quartz scheduler under the hood. Lots and lots of new functionality.&lt;/li&gt;
&lt;li&gt;Security - Adobe implemented the OWASP ESAPI library under the covers and it's now pervasive throughout ColdFusion.&lt;/li&gt;
&lt;li&gt;AXIS2 upgrade - Much improved support for SOAP web services.&lt;/li&gt;
&lt;li&gt;RESTful web services&lt;/li&gt;
&lt;li&gt;HTML5 WebSockets&lt;/li&gt;
&lt;li&gt;HTML5 Charting&lt;/li&gt;
&lt;li&gt;ORM Search&lt;/li&gt;
&lt;li&gt;Caching updates (updated ehcache, caching functions, query &amp; login cache moved to ehcache).&lt;/li&gt;
&lt;li&gt;Hotfix Updater - Keeping up with and installing hotfixes and updates has never been so easy.&lt;/li&gt;
&lt;/ul&gt;

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 &lt;a href="https://nowshowingcoldfusionzeus.appspot.com/"&gt;his site&lt;/a&gt;.&lt;img src="http://feeds.feedburner.com/~r/styggiti/~4/g2-2Zp4PztY" height="1" width="1"/&gt;</description>
				
				
				<category>ColdFusion 10</category>
				
				<category>Announcements</category>
				
				<category>ColdFusion</category>
				
				<pubDate>Fri, 17 Feb 2012 16:57:00 -0500</pubDate>
				<guid isPermaLink="false">http://rob.brooks-bilson.com/index.cfm/2012/2/17/ColdFusion-10-Enters-Public-Beta</guid>
				
				
			<feedburner:origLink>http://rob.brooks-bilson.com/index.cfm/2012/2/17/ColdFusion-10-Enters-Public-Beta</feedburner:origLink></item>
			
		 	
			
			
			<item>
				<title>In Phoenix Next Week? Come See a Preview of My cf.Objective Caching Presentation</title>
				<link>http://feedproxy.google.com/~r/styggiti/~3/b2yFG__0RWc/In-Phoenix-Next-Week-Come-See-a-Preview-of-My-cfObjective-Caching-Presentation</link>
				<description>If you happen to be in the Phoenix area on Wednesday, January 25th, stop on by the &lt;a href="http://www.uat.edu/"&gt;University of Advancing Technology&lt;/a&gt; at 6:30 pm to catch a preview of my upcoming cf.Objective presentation: &lt;a href="http://www.cfobjective.com/sessions/ten-steps-to-move-your-use-of-caching-beyond-the-basics/"&gt;Ten Steps to Move Your Use of Caching Beyond the Basics&lt;/a&gt;. Here's a short description of the presentation:

&lt;quote&gt;
We all know that caching plays an important part of any performant and
scalable application architecture and that with ColdFusion 9 caching is
easier than ever. This session explores 10 steps you can take to move your
use of caching beyond what ColdFusion provides out of the box.
&lt;/quote&gt;

*Please note that this presentation won't be recorded/streamed. You have to be there in person to see it.  Normally I'm all for recording and streaming, but since this is a preview of a talk I'll be giving at an upcoming conference, I want to limit the audience out of respect to those attending the conference.&lt;img src="http://feeds.feedburner.com/~r/styggiti/~4/b2yFG__0RWc" height="1" width="1"/&gt;</description>
				
				
				<category>Caching</category>
				
				<category>Announcements</category>
				
				<category>Scalability</category>
				
				<category>ColdFusion 9</category>
				
				<category>Terracotta</category>
				
				<category>cfObjective</category>
				
				<category>Ehcache</category>
				
				<pubDate>Thu, 19 Jan 2012 13:02:00 -0500</pubDate>
				<guid isPermaLink="false">http://rob.brooks-bilson.com/index.cfm/2012/1/19/In-Phoenix-Next-Week-Come-See-a-Preview-of-My-cfObjective-Caching-Presentation</guid>
				
				
			<feedburner:origLink>http://rob.brooks-bilson.com/index.cfm/2012/1/19/In-Phoenix-Next-Week-Come-See-a-Preview-of-My-cfObjective-Caching-Presentation</feedburner:origLink></item>
			
		 	
			
			
			<item>
				<title>How I got Started with ColdFusion</title>
				<link>http://feedproxy.google.com/~r/styggiti/~3/J12Qhbo9t1s/How-I-got-Started-with-ColdFusion</link>
				<description>&lt;a href=" http://www.bryantwebconsulting.com/blog/index.cfm/2011/7/20/August-1-2011-is-How-I-Started-ColdFusion-Day"&gt;Steve Bryant&lt;/a&gt; started a meme encouraging those involved with ColdFusion to post their personal story of how they got involved with the language.  Here's mine.

I first fell in love with computers during the summer of 1982. I was 10 years old and my parents signed me up for a summer program to teach kids Basic programming. I spent that summer learning to hack Basic on a terminal connected to a mainframe.  The following year my elementary school got a dozen or so Apple IIe computers and I was hooked.  From there I got my first home computer – a Commodore Vic 20 with 2.5 k of RAM.  I still remember sitting in my room painstakingly typing in game code from the latest issue of Compute magazine.  I'd often leave the computer running for days as I didn't have any way to save the programs at the time and retyping everything would take me hours.  I'm pretty sure this is where my debugging skills were forged as I hunted through program code trying to find the typos I had made while transcribing from the magazines.  It wasn't long before I scraped enough money together to buy a tape drive, allowing me to save my programs. As technology marched forward, so did I.  My next home computer was a Commodore 64. I must have spent thousands of hours on that machine programming, playing games, and immersing myself in the world of computers.  

When I got to high school, Apple was out and IBM was in.  My high school didn't allow freshmen to take computer classes, so I had to wait until 10th grade for any more official instruction.  That year I learned Pascal.  In my junior year, my computers teach got me an after-school job with a local engineering firm.  They were looking for someone to build and maintain some applications for them.  I interviewed and got the job.  I still remember my first day – sitting down at the leased 286 with an orange monochrome screen.  My boss dropped off a big box of discs and manuals for something called Ashton Tate dBase IV.  He then said he wanted me to build them a database for all of their pumps and related devices.  After looking through the manuals the rest of the day, I stopped in to my boss's office to let him know that I thought I might be in over my head.  "Nonsense", he told me. "Why don't you take a few weeks to read the manuals and play around with the software, and if you still feel the same way, then I'll understand and we can part ways with no hard feelings."  Turns out dBase wasn't so hard to work with after all.  That job lasted me the rest of my time in high school and provided a lot of great programming experience as I built and maintained several networked client-server applications for the company.

As much as I enjoyed computers, I still couldn't see making a living working with them.  I had considered doing a degree in computer science, but everyone I knew who had gone that route hated it (granted most of my friends were only a year or two older than I was, so most of them were still working through the fundamental classes).  I had this idea of writing snippets of large programs as part of a team of people with little satisfaction. I'm not sure exactly where I got this idea from, but it's something that I just wasn't interested in doing.  Computers were always fun for me and I just couldn't bear the idea of taking all the passion out of something I loved by making it into a full-time job for the rest of my life.  So instead of computer science, I forgot all about computers for a few years and pursued a double major in political science and sociology.  I also enlisted in the Air National Guard as a means to pay my way through school.

Toward the end of my time at the University of Delaware (around 1993) I saw my first web page.  I was instantly hooked.  From there I started spending more and more time online and eventually started a small consulting company with two other guys I knew.  Our main focus was web design and development for nonprofits.  Looking back, we were way too early for the market we were primarily targeting.  Most of the nonprofits we talked to were just learning about the web and had no idea how to really take advantage of it, let alone a budget to work with.  Luckily we had a few small business clients that kept things going and allowed me to develop my skills. I was also working construction at the time to make ends meet.

By 1996 it was clear that the consulting company wasn't going anywhere. My two partners had full time jobs and families and the business just wasn't a high enough priority for them. My girlfriend at the time (now my wife), seeing that this was the case finally told me "you need to find a real job." I started looking in the newspaper the next day and found several promising leads for companies looking for someone to work on the web.  After several interviews I happened on an ad for a small electronics company in West Chester, PA looking for a Webmaster to build and manage their corporate web site and intranet. I applied, had an interview, and was hired shortly after.  This was early 1996.   

I got to work immediately building out their website and intranet with a combination of static HTML and Perl for handling basic tasks like emailing form content.  This worked well for a while, but it was only a matter of time before I was asked to add some dynamic content--the request was to "web enable" our corporate address book, which was stored in a Microsoft Access database.  My first reaction was to develop the application in Perl.  However, at the time, building an application like this in NT Perl (all of our web servers were NT based) wasn't feasible, so I began looking for other solutions.  

I first tried a product called DB Web, from a company named Aspect Software that had just been acquired by Microsoft.  After a bit of experimentation, I realized that DB Web wasn't what I was looking for.  It was more of a tool for querying data from Microsoft Access databases (it wrote VB code on the back end) than a real application development platform.  (As a side note, Microsoft stopped supporting DB Web shortly after I evaluated it and rereleased it as ASP (Active Server Pages) a few months later.)

Frustrated, I decided to look into another product I had been hearing about on a web development discussion list.  The product was Allaire's ColdFusion (Cold Fusion at the time), a rapid application development platform for creating and deploying dynamic server-based web applications.  Within hours of downloading the trial version of the software, I had created a proof-of-concept for the corporate address book application. 

Fast forward 15 years and it's almost funny to imagine that I fell in love with a programming language that had just over 30 tags and functions in the 1.5 release.  At the time, though, ColdFusion had enough power to handle any web programming task thrown my way.  And as the tasks have become more complex, ColdFusion has kept pace.  Although I no longer develop as part of my day-to-day responsibilities, I'm still heavily involved with ColdFusion and the ColdFusion community and I can honestly say that with each new release, ColdFusion contains features and functionality that seem to show up just as I find myself needing or wanting them.  

Beyond what I think of ColdFusion as a technology, though, is what ColdFusion has provided me personally.  Not only has it enabled me to earn a living, it's also been the catalyst for a lot of personal growth.  Because of ColdFusion I have had the opportunity to write two books (on ColdFusion, of course), speak at countless user groups and conferences around the world, and literally meet hundreds of passionate, smart people who share my love of technology.  Thanks ColdFusion!&lt;img src="http://feeds.feedburner.com/~r/styggiti/~4/J12Qhbo9t1s" height="1" width="1"/&gt;</description>
				
				
				<category>Misc</category>
				
				<category>ColdFusion</category>
				
				<pubDate>Mon, 01 Aug 2011 12:39:00 -0500</pubDate>
				<guid isPermaLink="false">http://rob.brooks-bilson.com/index.cfm/2011/8/1/How-I-got-Started-with-ColdFusion</guid>
				
				
			<feedburner:origLink>http://rob.brooks-bilson.com/index.cfm/2011/8/1/How-I-got-Started-with-ColdFusion</feedburner:origLink></item>
			
		 	
			
			
			<item>
				<title>User Defined Caches in Coldfusion 9.0 and 9.0.1</title>
				<link>http://feedproxy.google.com/~r/styggiti/~3/eTouEWVF4us/User-Defined-Caches-in-Coldfusion-90-and-901</link>
				<description>The &lt;a href="http://www.coldfusionjedi.com/index.cfm/2011/6/22/Using-ColdFusion-9s-Caching-Feature-Watch-your-keys"&gt;follow up discussion to a recent blog post by Ray Camden&lt;/a&gt; made me realize that there's a lot of misunderstanding (including the ColdFusion documentation) about how ColdFusion's user defined caches work.  In this blog post, I hope to clear up some of that confusion.

ColdFusion 9.0 completely overhauled CF's caching mechanism and replaced the old file based system with Ehcache.  Out of the box, ColdFusion made two default caches available to every ColdFusion application, an object cache and a template cache.   It was also possible to create additional user-defined caches at runtime, but only if you were using the cfcache tag, not the caching functions. Here's an example that puts and gets data from a user defined cache:

&lt;code&gt;
&lt;!--- attempt to get the artist query from the custom object cache ---&gt;
&lt;cfcache
    key="myCustomObjectCache"
    action="get"
    id="artistQuery"
    name="getArtists"
    metadata="myMeta"&gt;

&lt;!--- if the item isn't there, it'll return null.  In that case, run the query 
      and cache the results and rerun the data from the db instead ---&gt;
&lt;cfif isNull(getArtists)&gt;
    &lt;cfquery name="getArtists" datasource="cfartgallery"&gt;
        SELECT *
        from artists
    &lt;/cfquery&gt;

    &lt;cfcache
        key="myCustomObjectCache"
        action="put"
        id="artistQuery"
        value="#getArtists#"&gt;
&lt;/cfif&gt;

&lt;!--- dump the query from cache ---&gt;
&lt;cfdump var="#getArtists#"&gt;
&lt;/code&gt;

ColdFusion 9.0.1 added the ability to use user defined caches in many of the caching functions as well.  Here's our previous example written using cacheGet() and cachePut() instead of the cfcache tag:

&lt;code&gt;
&lt;!--- attempt to get the artist query from the custom object cache ---&gt;
&lt;cfset getArtists = cacheGet('artistQuery', 'myCustomObjectCache')&gt;

&lt;!--- if the item isn't there, it'll return null.  In that case, run the query 
      and cache the results and rerun the data from the db instead ---&gt;
&lt;cfif isNull(getArtists)&gt;
    &lt;cfquery name="getArtists" datasource="cfartgallery"&gt;
        SELECT *
        from artists
    &lt;/cfquery&gt;

	&lt;cfset cachePut('artistQuery', '#getArtists#', 15, 15, 'myCustomObjectCache')&gt;
&lt;/cfif&gt;

&lt;!--- dump the query from cache ---&gt;
&lt;cfdump var="#getArtists#"&gt;
&lt;/code&gt;

One thing to note here is that neither cacheGetProperties() nor cacheSetProperties() can be used to configure the properties for a custom cache in ColdFusion 9.0 or 9.0.1.  If you want the cache configuration to differ from ColdFusion's default cache configuration, you'll need to configure the cache in your ehcache.xml file:

&lt;code&gt;
&lt;cache 
     name="myCustomObjectCache"
     maxElementsInMemory="10000"
     eternal="false"
     timeToIdleSeconds="86400"
     timeToLiveSeconds="86400"
     overflowToDisk="false"
     diskSpoolBufferSizeMB="30"
     maxElementsOnDisk="10000000"
     diskPersistent="false"
     diskExpiryThreadIntervalSeconds="3600"
     memoryStoreEvictionPolicy="LRU"
     clearOnFlush="true"
/&gt;
&lt;/code&gt;

Obviously it's not always desirable or even possible (say in the case of a shared hosting environment) to hard code configuration settings in the ehcache.xml file. Besides that, anytime you make changes to the XML file you need to restart ColdFusion for them to take effect.   While I hope that Adobe adds the ability to set properties for custom caches in a future release of ColdFusion, there is a solution you can take advantage of today in the form of a small UDF I wrote called cacheCreate().

The cacheCreate() UDF allows you to create a new user defined cache at runtime and pass in configuration options that ColdFusion currently requires you to set in your ehcache.xml file.  It uses Java to call the underlying Ehcache API and do the heavy lifting for you.  Here's the code (you can also &lt;a href="http://www.cflib.org/udf/cacheCreate"&gt;get cacheCreate() at cflib.org&lt;/a&gt;:

&lt;code&gt;
&lt;cffunction name="cacheCreate" output="false" returntype="void" 
	hint="I create a new user defined cache region in Ehcache" 
	description="I create a new user defined cache region in Ehcache. This function
			     allows you to also configure the attributes for the custom cache, 
			     something you would normally have to hard code in the ehcache.xml 
			     file if you rely on ColdFusion's built in caching functions. I named
			     the function cacheCreate() and not cacheNew() in the hopes that a
			     future version of ColdFusion includes a cacheNew() function with
			     similar functionality."&gt;

	&lt;!--- this is what's configurable as of Ehcache 2.0 (CF 9.0.1). Only required
		  argument is Name ---&gt;
	&lt;cfargument name="name" type="string" required="true"&gt;
	&lt;cfargument name="maxElementsInMemory" type="numeric" default="10000"&gt;
	&lt;cfargument name="maxElementsOnDisk" type="numeric" default="10000000"&gt;  
	&lt;cfargument name="memoryStoreEvictionPolicy" type="string" default="LRU"&gt;
	&lt;cfargument name="clearOnFlush" type="boolean" default="true"&gt;
	&lt;cfargument name="eternal" type="boolean" default="false"&gt;
	&lt;cfargument name="timeToIdleSeconds" type="numeric" default="86400"&gt; 
	&lt;cfargument name="timeToLiveSeconds" type="numeric" default="86400"&gt;
	&lt;cfargument name="overflowToDisk" type="boolean" default="false"&gt;
	&lt;cfargument name="diskPersistent" type="boolean" default="false"&gt;
	&lt;cfargument name="diskSpoolBufferSizeMB" type="numeric" default="30"&gt;
	&lt;cfargument name="diskAccessStripes" type="numeric" default="1"&gt;
	&lt;cfargument name="diskExpiryThreadIntervalSeconds" type="numeric" default="120"&gt;
	
	&lt;!--- We need to do this in java because ColdFusion's cacheGetSession() returns
	      the underlying object for an EXISTING cache, not the generic cache manager ---&gt; 
	&lt;cfset local.cacheManager = createObject('java', 'net.sf.ehcache.CacheManager').getInstance()&gt;

	&lt;!--- constructor takes cache name and max elements in memory ---&gt;
	&lt;cfset local.cacheConfig = createObject("java", "net.sf.ehcache.config.CacheConfiguration").init("#arguments.name#", #arguments.maxElementsInMemory#)&gt;
	&lt;cfset local.cacheConfig.maxElementsOnDisk(#arguments.maxElementsOnDisk#)&gt;
	&lt;cfset local.cacheConfig.memoryStoreEvictionPolicy("#arguments.memoryStoreEvictionPolicy#")&gt;
	&lt;cfset local.cacheConfig.clearOnFlush(#arguments.clearOnFlush#)&gt;
	&lt;cfset local.cacheConfig.eternal(#arguments.eternal#)&gt;
	&lt;cfset local.cacheConfig.timeToIdleSeconds(#arguments.timeToIdleSeconds#)&gt;
	&lt;cfset local.cacheConfig.timeToLiveSeconds(#arguments.timeToLiveSeconds#)&gt;
	&lt;cfset local.cacheConfig.overflowToDisk(#arguments.overflowToDisk#)&gt;
	&lt;cfset local.cacheConfig.diskPersistent(#arguments.diskPersistent#)&gt;
	&lt;cfset local.cacheConfig.diskSpoolBufferSizeMB(#arguments.diskSpoolBufferSizeMB#)&gt;
	&lt;cfset local.cacheConfig.diskAccessStripes(#arguments.diskAccessStripes#)&gt;
	&lt;cfset local.cacheConfig.diskExpiryThreadIntervalSeconds(#arguments.diskExpiryThreadIntervalSeconds#)&gt;

	&lt;cfset local.cache = createObject("java", "net.sf.ehcache.Cache").init(local.cacheConfig)&gt;
	&lt;cfset local.cacheManager.addCache(local.cache)&gt;
&lt;/cffunction&gt;
&lt;/code&gt;

To create and configure a new user defined cache in your application, all you need to do is something like this:

&lt;code&gt;
&lt;!--- let's build a struct of arguments. It's much easier to pass this way ---&gt;
&lt;cfset myProps = structNew()&gt;
&lt;cfset myProps.name = "myCustomCache"&gt;
&lt;cfset myProps.maxElementsInMemory = 10&gt;
&lt;cfset myProps.maxElementsOnDisk = 10&gt;
&lt;cfset myProps.memoryStoreEvictionPolicy = "FIFO"&gt;
&lt;cfset myProps.clearOnFlush = true&gt;
&lt;cfset myProps.eternal = false&gt;
&lt;cfset myProps.timeToIdleSeconds = 86400&gt;
&lt;cfset myProps.timeToLiveSeconds = 86400&gt;
&lt;cfset myProps.overflowToDisk = false&gt;
&lt;cfset myProps.diskPersistent = true&gt;
&lt;cfset myProps.diskSpoolBufferSizeMB = 30&gt;
&lt;cfset myProps.diskAccessStripes = 1&gt;
&lt;cfset myProps.diskExpiryThreadIntervalSeconds = 120&gt;

&lt;!--- create the new custom cache region ---&gt;
&lt;cfset cacheCreate(argumentCollection=myProps)&gt;

&lt;!--- prove that it's there the CF way ---&gt;
&lt;cfdump var="#cacheGetSession('myCustomCache', 'true').getCacheManager().getCacheNames()#"&gt;
&lt;/code&gt;

While this won't work in all cases (say you want to cluster your cache or add in a Terracotta Server Array), it should get you thinking about other ways you can extend ColdFusion's ehcache implementation by utilizing some of the Ehcache Java API within CF.&lt;img src="http://feeds.feedburner.com/~r/styggiti/~4/eTouEWVF4us" height="1" width="1"/&gt;</description>
				
				
				<category>Caching</category>
				
				<category>ColdFusion 9</category>
				
				<category>Ehcache</category>
				
				<pubDate>Wed, 22 Jun 2011 16:36:00 -0500</pubDate>
				<guid isPermaLink="false">http://rob.brooks-bilson.com/index.cfm/2011/6/22/User-Defined-Caches-in-Coldfusion-90-and-901</guid>
				
				
			<feedburner:origLink>http://rob.brooks-bilson.com/index.cfm/2011/6/22/User-Defined-Caches-in-Coldfusion-90-and-901</feedburner:origLink></item>
			
		 	
			
			
			<item>
				<title>Thoughts on the Software AG Acquisition of Terracotta</title>
				<link>http://feedproxy.google.com/~r/styggiti/~3/QR-L73VsnN4/Thoughts-on-the-Software-AG-Acquisition-of-Terracotta</link>
				<description>As you might have heard, Terracotta -- the makers of Ehcache, the Terracotta Server Array, Quartz Scheduler and Big Memory recently announced their intent to be acquired by German software company Software AG.  If you're wondering who Software AG is, you're probably not alone.  Until recently, Software AG was a relatively little known company in the US.  Although they've been in business since the late 1960's, their main market had been Europe.  That all changed in 2007 when they acquired WebMethods, one of the largest providers of integration systems and services.  This more than doubled their North American customer base.  They continued to fuel their rapid growth from their mainly through acquisition.  After WebMethods came IDS Scheer in 2009, Data Foundations in 2010, and now Terracotta.  Each of their acquisitions has succeeded in growing their customer base, and in most cases, their revenue as well.  

So, why Terracotta when Software AG is known as a business process and SOA infrastructure company?  The first reason is for the technology itself, mainly Ehcache, Terracotta, and Big Memory.  Software AG has big plans for the cloud, and in-memory capability and scalability play a huge part in building out their PaaS infrastructure.   There are other potential benefits as well.  Open source Ehcache claims an install base of over 500,000 with a sizeable open source community to back it.  Although Software AG has little experience in the open source market, they've committed to the Ehcache and Quartz communities going forward.  There's also the opportunity to improve job scheduling within the existing WebMethods suite.  If you've ever used their existing scheduler, you know that it leaves much to be desired. 

The company I work for has been a Software AG customer for close to 7 years now. We started with their ESB (Crossvision Service Orchestrator) and Tamino XML database, upgraded to WebMethods Integration Server after the merger, and have added capabilities around Business Activity Monitoring and SOA Governance since then.  All along the way, Software AG has worked closely with us to meet our often challenging requirements.  I think in that respect, Terracotta customers are in good hands.  I've also spent considerable time working with Ehcache and Terracotta over the past 3 years now – writing articles and blog posts about their caching technology as well as speaking at several conferences.  Although I didn't see the acquisition coming, I think combining the passion and talent of the folks at Terracotta with the resources and track record of Software AG will be a win for everyone involved.

While that last statement might sound like rainbows and unicorns, there is one area where I hope Software AG can learn from Terracotta, and that's community.  Having been involved with various technology communities over the years, I feel that the Software AG community could use some help.  With the exception of a few sites, there's little evangelism that happens outside of Software AG branded properties.  Sure there are official Software AG blogs, and Software AG forums, but what I don't see is a vibrant community outside of Software AG writing about and talking about their products.  Contrast that with Terracotta, and especially the Ehcache community and you'll see exactly what I mean.  Let's hope that Software AG makes the most of the community they're getting along with the technology.&lt;img src="http://feeds.feedburner.com/~r/styggiti/~4/QR-L73VsnN4" height="1" width="1"/&gt;</description>
				
				
				<category>Misc</category>
				
				<category>Caching</category>
				
				<category>ESB</category>
				
				<category>Terracotta</category>
				
				<category>Ehcache</category>
				
				<category>Software AG</category>
				
				<pubDate>Tue, 24 May 2011 11:35:00 -0500</pubDate>
				<guid isPermaLink="false">http://rob.brooks-bilson.com/index.cfm/2011/5/24/Thoughts-on-the-Software-AG-Acquisition-of-Terracotta</guid>
				
				
			<feedburner:origLink>http://rob.brooks-bilson.com/index.cfm/2011/5/24/Thoughts-on-the-Software-AG-Acquisition-of-Terracotta</feedburner:origLink></item>
			
		 	
			
			
			<item>
				<title>Slides, Config and Code from my cf.objective() 2011 Presentation</title>
				<link>http://feedproxy.google.com/~r/styggiti/~3/sj09cE7Lb0g/Slides-Config-and-Code-from-my-cfobjective-2011-Presentation</link>
				<description>Slides, config files and code for my cf.objective() 2011 presentation, "Undocumented and Off Script: ColdFusion &amp; Ehcache" are now available.  You can view the slides inline, or download the attached zip file which contains the presentation and all files/code from the presentations.

As always, if you have questions or want to discuss, leave a comment or hit me up on twitter at @styggiti.

&lt;img style="visibility:hidden;width:0px;height:0px;" border=0 width=0 height=0 src="http://c.gigcount.com/wildfire/IMP/CXNID=2000002.0NXC/bT*xJmx*PTEzMDUzMTQyMTg5NjYmcHQ9MTMwNTMxNDIyNTc*MiZwPTEwMDA3NTImZD*mZz*yJm89NTQwZTFjMDkzNWYxNDMxMjk5/YTM4ZTg5NDU1MDg5MjUmb2Y9MA==.gif" /&gt;&lt;object height="425" width="550"&gt;
	&lt;param name="movie" value="http://slidesix.com/viewer/SlideSixViewer.swf?alias=Undocumented-and-Off-Script--ColdFusion-and-Ehcache"/&gt;
	&lt;param name="menu" value="false"/&gt;
	&lt;param name="scale" value="noScale"/&gt;
	&lt;param name="allowFullScreen" value="true"/&gt;
	&lt;param name="allowScriptAccess" value="always" /&gt;
	&lt;embed src="http://slidesix.com/viewer/SlideSixViewer.swf?alias=Undocumented-and-Off-Script--ColdFusion-and-Ehcache" allowscriptaccess="always" allowFullScreen="true" height="425" width="550" type="application/x-shockwave-flash"  FlashVars="gig_lt=1305314218966&amp;gig_pt=1305314225742&amp;gig_g=2"/&gt;
 &lt;param name="FlashVars" value="gig_lt=1305314218966&amp;gig_pt=1305314225742&amp;gig_g=2" /&gt;&lt;/object&gt;&lt;img src="http://feeds.feedburner.com/~r/styggiti/~4/sj09cE7Lb0g" height="1" width="1"/&gt;</description>
				
				
				<category>Caching</category>
				
				<category>ColdFusion 9</category>
				
				<category>Terracotta</category>
				
				<category>cfObjective</category>
				
				<category>Ehcache</category>
				
				<category>ColdFusion</category>
				
				<pubDate>Fri, 13 May 2011 14:10:00 -0500</pubDate>
				<guid isPermaLink="false">http://rob.brooks-bilson.com/index.cfm/2011/5/13/Slides-Config-and-Code-from-my-cfobjective-2011-Presentation</guid>
				
				
				<enclosure url="http://rob.brooks-bilson.com/enclosures/CFO2011.zip" length="13577070" type="application/x-zip-compressed" />
				
				
			<feedburner:origLink>http://rob.brooks-bilson.com/index.cfm/2011/5/13/Slides-Config-and-Code-from-my-cfobjective-2011-Presentation</feedburner:origLink></item>
			
		 	
			
			
			<item>
				<title>Speaking at cf.Objective 2011: Undocumented and Off Script: ColdFusion &amp; Ehcache</title>
				<link>http://feedproxy.google.com/~r/styggiti/~3/QjY9g5LThP4/Speaking-at-cfObjective-2011-Undocumented-and-Off-Script-ColdFusion--Ehcache</link>
				<description>Headed to cf.Objective 2011 and want to learn more about caching in ColdFusion with Ehcache? Stop by my session &lt;a href="http://www.cfobjective.com/index.cfm/sessions/undocumented-and-off-script-coldfusion-ehcache/"&gt;Undocumented and Off Script: ColdFusion &amp; Ehcache&lt;/a&gt; on Thursday, May 12th at 10:15 am.  I'll cover a broad range of topics including upgrading the version of Ehcache that ships with ColdFusion, clustered caching, distributed caching, cache search, cache monitoring, developer tools, and much, much more.  

I hope to see you there!&lt;img src="http://feeds.feedburner.com/~r/styggiti/~4/QjY9g5LThP4" height="1" width="1"/&gt;</description>
				
				
				<category>Caching</category>
				
				<category>ColdFusion 9</category>
				
				<category>cfObjective</category>
				
				<category>Ehcache</category>
				
				<category>ColdFusion</category>
				
				<pubDate>Wed, 27 Apr 2011 10:00:00 -0500</pubDate>
				<guid isPermaLink="false">http://rob.brooks-bilson.com/index.cfm/2011/4/27/Speaking-at-cfObjective-2011-Undocumented-and-Off-Script-ColdFusion--Ehcache</guid>
				
				
			<feedburner:origLink>http://rob.brooks-bilson.com/index.cfm/2011/4/27/Speaking-at-cfObjective-2011-Undocumented-and-Off-Script-ColdFusion--Ehcache</feedburner:origLink></item>
			
		 	
			
			
			<item>
				<title>Building High Performance Applications with ColdFusion 9 and Ehcache 2.4 on DZone</title>
				<link>http://feedproxy.google.com/~r/styggiti/~3/fv0A2c1OmWY/Building-High-Performance-Applications-with-ColdFusion-9-and-Ehcache-24-on-DZone</link>
				<description>My latest article on &lt;a href="http://www.dzone.com/links/r/building_high_performance_applications_with_coldf.html"&gt;Building High Performance Applications with ColdFusion 9 and Ehcache 2.4&lt;/a&gt; is out on DZone.  In addition to covering basic caching concepts, the article also walks you through the process of updating the version of Ehcache that ships with Coldfusion from 2.0 to 2.4 as well as installing and configuring a Terracotta server for distributed caching.&lt;img src="http://feeds.feedburner.com/~r/styggiti/~4/fv0A2c1OmWY" height="1" width="1"/&gt;</description>
				
				
				<category>Caching</category>
				
				<category>ColdFusion 9</category>
				
				<category>Ehcache</category>
				
				<category>ColdFusion</category>
				
				<pubDate>Tue, 26 Apr 2011 13:46:00 -0500</pubDate>
				<guid isPermaLink="false">http://rob.brooks-bilson.com/index.cfm/2011/4/26/Building-High-Performance-Applications-with-ColdFusion-9-and-Ehcache-24-on-DZone</guid>
				
				
			<feedburner:origLink>http://rob.brooks-bilson.com/index.cfm/2011/4/26/Building-High-Performance-Applications-with-ColdFusion-9-and-Ehcache-24-on-DZone</feedburner:origLink></item>
			
		 	
			
			
			<item>
				<title>A Little Friday IT Humor: It Happens to the Best of Us</title>
				<link>http://feedproxy.google.com/~r/styggiti/~3/0zefKV9KKBk/A-Little-Friday-IT-Humor-It-Happens-to-the-Best-of-Us</link>
				<description>Anyone who has ever presented at a conference will be able to appreciate this one.  Right in the middle of my Adobe MAX presentation on Configuring and Maintaining Healthy ColdFusion Servers. Thanks to Brian R. Detweiler for the photo ;-)

&lt;img src="http://rob.brooks-bilson.com/images/preso_bsod.jpg" width="600" height="338" /&gt;&lt;img src="http://feeds.feedburner.com/~r/styggiti/~4/0zefKV9KKBk" height="1" width="1"/&gt;</description>
				
				
				<category>AdobeMAX2010</category>
				
				<pubDate>Fri, 05 Nov 2010 16:33:00 -0500</pubDate>
				<guid isPermaLink="false">http://rob.brooks-bilson.com/index.cfm/2010/11/5/A-Little-Friday-IT-Humor-It-Happens-to-the-Best-of-Us</guid>
				
				
			<feedburner:origLink>http://rob.brooks-bilson.com/index.cfm/2010/11/5/A-Little-Friday-IT-Humor-It-Happens-to-the-Best-of-Us</feedburner:origLink></item>
			
		 	
			
			
			<item>
				<title>Slides from my Adobe MAX 2010 Presentation: Configuring and Maintaining Healthy ColdFusion Servers</title>
				<link>http://feedproxy.google.com/~r/styggiti/~3/e8OUMlxoFaU/Slides-from-my-Adobe-MAX-2010-Presentation-Configuring-and-Maintaining-Healthy-ColdFusion-Servers</link>
				<description>Here are the slides from my Adobe MAX 2010 conference session: Configuring and Maintaining Healthy ColdFusion Servers.

If you were in the session, there are about 6 or so slides we didn't make it to thanks to the BSOD I had mid-preso.

As always, if you have any questions, feel free to hit me up on Twitter (@styggiti) or via email at [rbils at amkor dot com].

&lt;img style="visibility:hidden;width:0px;height:0px;" border=0 width=0 height=0 src="http://counters.gigya.com/wildfire/IMP/CXNID=2000002.0NXC/bT*xJmx*PTEyODgzODMyODM4MzAmcHQ9MTI4ODM4MzI4OTA4NiZwPTEwMDA3NTImZD*mZz*yJm89ZGJhMzBkZTA*ODA1NDc1MWFi/NTdhNmJkMTBlYWU*ZjAmb2Y9MA==.gif" /&gt;&lt;object height="425" width="550"&gt;
	&lt;param name="movie" value="http://slidesix.com/viewer/SlideSixViewer.swf?alias=Configuring-and-Maintaining-Healthy-ColdFusion-Servers"/&gt;
	&lt;param name="menu" value="false"/&gt;
	&lt;param name="scale" value="noScale"/&gt;
	&lt;param name="allowFullScreen" value="true"/&gt;
	&lt;param name="allowScriptAccess" value="always" /&gt;
	&lt;embed src="http://slidesix.com/viewer/SlideSixViewer.swf?alias=Configuring-and-Maintaining-Healthy-ColdFusion-Servers" allowscriptaccess="always" allowFullScreen="true" height="425" width="550" type="application/x-shockwave-flash"  FlashVars="gig_lt=1288383283830&amp;gig_pt=1288383289086&amp;gig_g=2"/&gt;
 &lt;param name="FlashVars" value="gig_lt=1288383283830&amp;gig_pt=1288383289086&amp;gig_g=2" /&gt;&lt;/object&gt;&lt;img src="http://feeds.feedburner.com/~r/styggiti/~4/e8OUMlxoFaU" height="1" width="1"/&gt;</description>
				
				
				<category>AdobeMAX2010</category>
				
				<category>Security</category>
				
				<category>MAX</category>
				
				<category>ColdFusion</category>
				
				<pubDate>Fri, 29 Oct 2010 15:15:00 -0500</pubDate>
				<guid isPermaLink="false">http://rob.brooks-bilson.com/index.cfm/2010/10/29/Slides-from-my-Adobe-MAX-2010-Presentation-Configuring-and-Maintaining-Healthy-ColdFusion-Servers</guid>
				
				
			<feedburner:origLink>http://rob.brooks-bilson.com/index.cfm/2010/10/29/Slides-from-my-Adobe-MAX-2010-Presentation-Configuring-and-Maintaining-Healthy-ColdFusion-Servers</feedburner:origLink></item>
			
		 	
			
			
			<item>
				<title>Recording, Slides and Demo Code now Available from my ColdFusion/Ehcache Webinar</title>
				<link>http://feedproxy.google.com/~r/styggiti/~3/GsFpFA-O4XY/Recording-Slides-and-Demo-Code-now-Available-from-my-ColdFusionEhcache-Webinar</link>
				<description>The Webex recording, Powerpoint slides and example code I used in last week's Boosting Performance and Scale for ColdFusion Applications with Ehcache webinar are now available.  You can watch the recording here (note that registration is required):

&lt;a href="https://terracotta.webex.com/terracotta/lsr.php?AT=pb&amp;SP=EC&amp;rID=2609847&amp;rKey=ec138a33c369f8ca"&gt;Boosting Performance and Scale for ColdFusion Applications with Ehcach&lt;/a&gt;

Additionally, you can view the presentation slides:

&lt;object height="425" width="500"&gt;&lt;param name="movie" value="http://slidesix.com/viewer/SlideSixViewer.swf?alias=Boosting-Performance-and-Scale-for-ColdFusion-Applications-with-Ehcache" /&gt;&lt;param name="menu" value="false"/&gt;&lt;param name="scale" value="noScale"/&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;param value="transparent" name="wmode" /&gt;&lt;param value="quality" name="best" /&gt;&lt;embed src="http://slidesix.com/viewer/SlideSixViewer.swf?alias=Boosting-Performance-and-Scale-for-ColdFusion-Applications-with-Ehcache" allowscriptaccess="always" allowFullScreen="true" height="425" width="500" type="application/x-shockwave-flash" wmode="transparent" quality="best" /&gt;&lt;/object&gt;

Alternately, you can &lt;a href="http://www.brooks-bilson.com/blogs/rob/enclosures/cf_ehcache_8-2010.zip"&gt;download the slides&lt;/a&gt;.

You can also &lt;a href="http://www.brooks-bilson.com/blogs/rob/enclosures/ehcache_webinar.zip"&gt;download the sample code&lt;/a&gt;.

Please note that the examples created for blogCFC should only be considered a POC to demonstrate concepts and not production ready code.&lt;img src="http://feeds.feedburner.com/~r/styggiti/~4/GsFpFA-O4XY" height="1" width="1"/&gt;</description>
				
				
				<category>Caching</category>
				
				<category>ColdFusion 9</category>
				
				<category>Ehcache</category>
				
				<category>ColdFusion</category>
				
				<pubDate>Thu, 19 Aug 2010 18:50:00 -0500</pubDate>
				<guid isPermaLink="false">http://rob.brooks-bilson.com/index.cfm/2010/8/19/Recording-Slides-and-Demo-Code-now-Available-from-my-ColdFusionEhcache-Webinar</guid>
				
				
				<enclosure url="http://rob.brooks-bilson.com/enclosures/cf_ehcache_8-2010.zip" length="5711873" type="application/x-zip" />
				
				
			<feedburner:origLink>http://rob.brooks-bilson.com/index.cfm/2010/8/19/Recording-Slides-and-Demo-Code-now-Available-from-my-ColdFusionEhcache-Webinar</feedburner:origLink></item>
			
		 	
			
			
			<item>
				<title>Issue  with Ehcache and ColdFusion Query Objects</title>
				<link>http://feedproxy.google.com/~r/styggiti/~3/Ws6LzU2J1Zc/Bug-with-Ehcache-and-ColdFusion-Query-Objects</link>
				<description>I submitted a bug for this but the system seems to have swallowed it
up without giving me the bug number (probably because I submitted as
cf 9.0.1).

I've found &lt;strike&gt;what I consider to be a serious bug&lt;/strike&gt; an issue with ColdFusion's
ehache implementation and query objects that may bite you if you're not aware of how it works.  If I take a query object and stick it in cache, then perform an operation on the original query
object such as adding a column or performing certain query of query
operations, ColdFusion is treating the query object that's in cache as
if it were a copy by reference to the original query object.  That is,
if I make a change to the original query object, ColdFusion is also
applying the change to the version that's in cache.

&lt;strike&gt;As far as I'm concerned, cache represents a boundary that ColdFusion
should not implicitly cross.&lt;/strike&gt; With most caching systems I've worked with in the past (such as memcached), the cache always acted as a dumb key/value store.  Unless I perform an explicit cachePut(), I wouldn't expect that CF would update values in the cache.  Here's
two code snippets that reproduces the case. The first uses the
cfartgallery data source:

&lt;code&gt;
&lt;!--- Demo code to show that ColdFusion's passig query values by reference is crossing boundaries and updating a query stored in cache ---&gt;
&lt;cfquery name="getArtists" datasource="cfartgallery"&gt;
select *
from artists
&lt;/cfquery&gt;

&lt;!--- dump the original query ---&gt;
&lt;cfdump var="#getArtists#"&gt;

&lt;!--- put the query in cache ---&gt;
&lt;cfset cachePut("artistsQuery", getArtists,
'#createTimeSpan(0,0,5,0)#', '#createTimeSpan(0,0,5,0)#')&gt;

&lt;!--- add a column to the query ---&gt;
&lt;cfset queryAddColumn(getArtists,"newColumn",arrayNew(1))&gt;
&lt;cfdump var="#getArtists#"&gt;

&lt;!--- clear the query ---&gt;
&lt;cfset getArtists=""&gt;
&lt;cfdump var="#getArtists#"&gt;

&lt;!--- get the query from cache again - note that the added column is
there! ---&gt;
&lt;cfdump var="#cacheGet("artistsQuery")#"&gt;
&lt;/code&gt;

The second example shows how this can be done with a query of a query,
based on a different bug Ray found previously (see
&lt;a href="http://www.coldfusionjedi.com/index.cfm/2009/8/28/Another-example-of-the-QofQ-Bug"&gt;http://www.coldfusionjedi.com/index.cfm/2009/8/28/Another-example-of-the-QofQ-Bug&lt;/a&gt;).
In this sample, note that the date gets reformatted by the query of a
query and both the original query and the cached version get updated:

&lt;code&gt;
&lt;cfset mydata = queryNew("mydate, rannum")&gt;

  &lt;cfloop index="loop1" from="1" to="5"&gt;
   &lt;cfset newrow = queryaddrow(mydata, 1)&gt;
   &lt;cfset temp = querysetcell(mydata, "mydate", #dateformat(now()-
loop1,"dd-mmm-yy")#, #loop1#)&gt;
   &lt;cfset temp = querysetcell(mydata, "rannum", 55.65, #loop1#)&gt;
  &lt;/cfloop&gt;

&lt;cfdump var="#mydata#"&gt;

&lt;cfset cachePut("myQuery", myData, '#createTimeSpan(0,0,5,0)#',
'#createTimeSpan(0,0,5,0)#')&gt;

&lt;cfdump var="#mydata#"&gt;

&lt;cfquery dbtype="query" name="query4graph"&gt;
  select mydate, rannum from mydata
  &lt;/cfquery&gt;

 &lt;cfdump var="#query4graph#"&gt;

 &lt;cfdump var="#cacheGet("myQuery")#"&gt;
&lt;/code&gt;

The work around for this problem is to use the duplicate()
function to make a clone of the query object before doing the
cachePut(). Although this works, there are other potential
consequences from having two copies of the query around, so be careful.

&lt;strong&gt;Update: &lt;/strong&gt; It looks like this is actually expected behavior in Ehcache.  Unfortunately, it's not documented in the ColdFusion documentation anywhere, but Ehcache actually has two configurable parameters (as of v. 2.10) called copyOnRead and copyOnWrite that determine whether values returned from the cache are by reference or copies of the original values.  By default, items are returned by reference.  Unfortunately we can't take advantage of these parameters right now as CF 9.0.1 implements Ehcache 2.0.  

I can live with this, but it's not what I expected as I've always viewed Ehcache as a "dumb" key-value store and certainly didn't expect this behavior.  Even if ColdFusion was running v 2.10 of Ehcache, it's still not something we could easily configure.  Since ColdFusion currently doesn't have a cacheNew() function for creating new user-defined cache regions, the only way to turn this functionality off would be to hard-code your cache configuration in your ehcache.xml file for each user-defined region where you want to disable copyOnRead and copyOnWrite.&lt;img src="http://feeds.feedburner.com/~r/styggiti/~4/Ws6LzU2J1Zc" height="1" width="1"/&gt;</description>
				
				
				<category>Bug</category>
				
				<category>Caching</category>
				
				<category>ColdFusion 9</category>
				
				<category>Ehcache</category>
				
				<pubDate>Mon, 09 Aug 2010 15:50:00 -0500</pubDate>
				<guid isPermaLink="false">http://rob.brooks-bilson.com/index.cfm/2010/8/9/Bug-with-Ehcache-and-ColdFusion-Query-Objects</guid>
				
				
			<feedburner:origLink>http://rob.brooks-bilson.com/index.cfm/2010/8/9/Bug-with-Ehcache-and-ColdFusion-Query-Objects</feedburner:origLink></item>
			
		 	
			
			
			<item>
				<title>Retrieving a List of Active Ehcache Regions in ColdFusion 9.0.1 and a Potential Gotcha</title>
				<link>http://feedproxy.google.com/~r/styggiti/~3/OD1wpUilzsA/Retrieving-a-List-of-Active-Ehcache-Regions-in-ColdFusion-901-and-a-Potential-Gotcha</link>
				<description>ColdFusion 9.0.1 added a new function called cacheGetSession() that returns the underlying cache object for Ehcache.  What's really cool about this is that it allows you to get at just about all of the features available in Ehcache that aren't directly exposed to ColdFusion through built-in functions.

I was recently working on some example code for an upcoming caching presentation when I ran into a situation where I wanted to get a list of all caches that had been created on the server, including custom caches I had created myself.  One simple line of code is all it took:

&lt;code&gt;
&lt;cfset cacheNames = cacheGetSession('object').getCacheManager().getCacheNames()&gt;

&lt;cfdump var="#cacheNames#"&gt;
&lt;/code&gt;

What you should note here is that even though I'm telling cacheGetSession() to get the cache object for the default object cache, getCacheManager() exposes a method called getCacheNames() which returns an array of cache names for the instance of cache manager.  In the case of ColdFusion's Ehcache implementation, ColdFusion instantiates cacheManager as a singleton such that all caches are managed by the single cache manager.  When you call getCacheNames(), it will return you a list of all caches currently implemented on the instance of ColdFusion.  

While this may not be an issue for many people, if you are on a shared server it may be a concern.  The only way to disable this is to disable the cacheGetSession() function using sandbox security.&lt;img src="http://feeds.feedburner.com/~r/styggiti/~4/OD1wpUilzsA" height="1" width="1"/&gt;</description>
				
				
				<category>Caching</category>
				
				<category>ColdFusion 9</category>
				
				<category>Ehcache</category>
				
				<category>ColdFusion</category>
				
				<pubDate>Thu, 05 Aug 2010 18:31:00 -0500</pubDate>
				<guid isPermaLink="false">http://rob.brooks-bilson.com/index.cfm/2010/8/5/Retrieving-a-List-of-Active-Ehcache-Regions-in-ColdFusion-901-and-a-Potential-Gotcha</guid>
				
				
			<feedburner:origLink>http://rob.brooks-bilson.com/index.cfm/2010/8/5/Retrieving-a-List-of-Active-Ehcache-Regions-in-ColdFusion-901-and-a-Potential-Gotcha</feedburner:origLink></item>
			
		 	
			</channel></rss>

