Happy Birthday, whose birthday – It’s ColdFusion

Yes, you heard it right. ColdFusion turned twenty today. I see CF veterans and patrons, all around the world.  

Glad to be a part of this community.

ColdFusion 12: It’s your chance to contribute

We recently announced the opening of ColdFusion 12 Pre-release program here. It’s your chance to participate and contribute towards the newer version. It’s time that you help Adobe, build a robust version for Production servers directly, by contributing with your ideas, skills, past experience with ColdFusion, issues you are currently facing. Lastly, contribute to the next version of ColdFusion, and make it a better product in market.

Take the short survey and you may be selected to participate.

 

Do participate and make the difference.

Unable to Start ColdFusion 11, Error at Creation of SecureRandom instance

Ever landed in a situation, where you are unable to start ColdFusion 11. On a windows environment, you may see an alert, like the below screenshot, under Windows Event Viewer.

Event Viewer Error

Now, there could be multiple reasons for the same. On a non-windows environment, when you start the service from Terminal/Command Prompt, you can see the stack trace for service startup. On a windows environment, you can try the following:-

  1. Stop ColdFusion service, if already running.
  2. Launch Command prompt as Administrator.
  3. Browse to cf_root\cfusion\bin and run the following command cfstart.bat
  4. Try to access the CF admin, once the services are started.

In case it gives an error message, then it will help you trace out the root cause and the stage, where ColdFusion is unable to start.

Recently, I got few users, who were facing issues with ColdFusion 11 service start up. When we checked the terminal/command prompt, we found the below stack trace:-

Apr 1, 2015 2:50:17 PM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: D:\CF11\cfusion\lib;D:\CF11\cfusion\jintegra\bin;D:\CF11\cfusion\jintegra\bin\international;D:\CF11\cfusion\lib\oosdk\classes\win
Apr 1, 2015 2:50:18 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8523"]
Apr 1, 2015 2:50:18 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-8015"]
Apr 1, 2015 2:50:19 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Apr 1, 2015 2:50:19 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.54
Apr 1, 2015 2:50:25 PM org.apache.catalina.util.SessionIdGenerator createSecure
Random
INFO: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [185] milliseconds.

It was struck at “Creation of SecureRandom instance for session ID generation using [SHA1PRNG]”. It stayed at the last line of the trace, and didn’t start the service at all.

Resolution

  1. Take a backup of context.xml at cf_root\cfusion\runtime\conf\
  2. Open it with notepad or any text editor.
  3. Uncomment the tag:      <Manager pathname=”” /> and save the file.
  4. Restart ColdFusion 11 Application Service

 Reasoning

You may land into this scenario, only if you have downloaded the Full installer for ColdFusion 11 Update 3 and are at CF11 U3 or above. If you have downloaded the  Refreshed installer released after the former, then, you will not face this issue.

Migration of ColdFusion Website: An Overview

Migration in itself is a very broader area. One has to keep in mind the Technology, Hardware, Operating System, Settings, Application Server, Web Server, Code compatibility and many other things, before starting the Migration process. And yes lastly, how much effort is needed. When you are dealing with Production websites or even the Testing/Development websites, you should have an action plan in place, even before you actually start migrating the website. So, I thought of making that easier and divide the entire process into different segments. IMO, an ideal migration (rather migration+ upgrade) involves the following phases:-

  • Installation of new CF version
  • Migrating the CF Settings
  • Migrating the web repository

And I will briefly discuss this below. Again, if you are simply migrating the site on the same server to a newer version, then you may not need the third step. If you changing the webserver, then first step is not required and likewise. Let us have a glance on these.

Installation of new CF version (say CF9 to CF 10/11)

This section talks about installing the version of CF you are upgrading to. Say you are upgrading from CF9 to CF11. So you will install CF11 first. The new CF installation can be on the same server or on a different server as well. During the installation, do not configure the connector with the same website (if on the same server). There could be a conflict, as there would be two different connectors (one from the older CF server and one from the new CF server) configured to the same website. So, you can configure it with the built-in server of ColdFusion and complete the installation. Once, your installation is complete, you can remove the connector, disable the built-in server and recreate the connector between ColdFusion and the webserver, say IIS, Apache etc.

Migrating the CF Settings

In this section, we are referring to the CF settings within the CF Admin, such as Datasources, Scheduled Tasks, Webservices etc. If you are installing the new CF server on the same server (where you already have the older CF server), then, you will be prompted to “Migrate” the settings during the install itself. In case the new CF server installation is on a different server then, you can create CAR file. This feature is only available in Enterprise/Developer version of ColdFusion, till version 10. ColdFusion 11 onward, its available in all editions. In case you missed the migration wizard and now can’t migrate the settings, please refer to this blog.

Migrating the web repository

This is actually the process of migrating your server repository or the website files. If the migration involves, setting up a new Server/webserver, then the easiest way is to copy the web files from the older webroot to the new webroot, under the new website. You can also use any third party utility to migrate the files and the settings (if any at the webserver level), if your webserver supports the utility. In case, the website resides on the same server and the installation only involves, CF server up gradation/migration, then recreate the connector. Remove the connector from the older CF server and create the connector to the new CF server.

Voila!!! Test your website. 🙂

This article is just to give all an overview about the migration process and as mentioned above, may vary from environment to environment. This is a strong recommendation to test your website on the Testing/Development environment, before moving it on Production.

Hope this gives a better picture of the migration process.

Remote server settings lost after restart, now fixed in ColdFusion Builder 3

Recently, I blogged about Setting up ColdFusion Builder 3 with a remote server. One of the comment was related to a bug in ColdFusion Builder 3. CFB3 was not retaining “Remote servers” after the restart. The settings were lost after restarting CFB 3. This bug was fixed in the latest installer available at ColdFusion Builder 3. Yes, the installer was updated with this fix with the release of CF10 Update 15/CF11 Update 3. You can check, whether you are at the current version or not. Check the build number (Help>>Product Details), in your CFB3. If it is not 292483, then, you need the latest installer on your server.

Also, regarding the original post on Adobe ColdFusion Blog, enabling RDS is not recommended on Production servers.

In response to Chris Tierney’s recent article on max_reuse_connections in ColdFusion

This blog is in response to Chris Tierney’s recent article on max_reuse_connections in ColdFusion. Sorry Chris, but your blog truncated the server.xml entry, when I posted back. So, I am responding here.

Chris,

As mentioned on the blog, when Tomcat connector makes a connection with Tomcat server, it does not closes the connection even after it finished serving the request. Instead it keeps the connection active, so that for the next request, the same connection can be re-used. Also, the max value for the re-use connection is determined based on the number of sites configured with same CF server and the load on each site.

If you have connector created with “ALL” then the resources allocated, will be shared across connections. Whereas, the individual connectors would have there own dedicated connections. The reuse connection plays an important role in terms of performance, but the calculation has a little tweak to it. While creating individual connectors, we would prefer to keep the max_reuse_connections not go below 100 or 150 (if it’s a low traffic running site). For moderate traffic, the value may be 200/250. For a site running under high volume, the value may go around 500 or as higher, as needed.

Having said that, lets look at your scenario. You have 6 sites – 1 running under load and 5 with low traffic. When you create individual connectors, theoretically, these values can be set:-

Site with heavy traffic (only one site)

worker.cfusion.max_reuse_connections=500 worker.cfusion.connection_pool_size=800

Site with low traffic (rest five sites each)

worker.cfusion.max_reuse_connections=100 worker.cfusion.connection_pool_size=250

server.xml

<Connector port=”8012″ protocol=”AJP/1.3″ redirectPort=”8445″ tomcatAuthentication=”false” maxThreads=”2100″ connectionTimeout =”60000″> </Connector>

Note: calculation for maxThreads: 800+250*5=2050 (the value should be higher than this)

Similarly, when connector is created with “ALL”, theoretically, these values can be set:- worker.cfusion.max_reuse_connections=350 worker.cfusion.connection_pool_size=2100

server.xml

<Connector port=”8012″ protocol=”AJP/1.3″ redirectPort=”8445″ tomcatAuthentication=”false” maxThreads=”2100″ connectionTimeout =”60000″> </Connector>

Note: calculation for max_reuse_connections=connection_pool_size / {no of site}=2100/6=350.

Thus, in case of connector is created with “ALL”, the max_reuse_connections calculation is straight forward, but in case of “Individual” connector, its a bit tricky :-).