Well, most of you would know that the onApplicationStart() method in ColdFusion’s Application.cfc is a single-threaded method that’s being executed by ColdFusion after the start of the application. The reason for an application having the necessity to start could for instance be that CF or the underlying machine has been restarted or that the application had run into its timeout.
Recently while migrating a bunch of legacy application code from Application.cfm to Application.cfc, a team member of the team of my client asked me what happened at application start if there was an error (for example a typo in SQL code) in the onApplicationStart method.
The answer is that onApplicationStart will start to execute and (depending on your error handling strategy) just plainly fail with an error message. Your application will not be properly initialised though, i.e. ColdFusion would send the next incoming request to the onApplicationStart method again.
The ColdFusion documentation actually states the following: “If this method throws an uncaught exception or returns False, the application does not start and ColdFusion does not process any pages in the application. In this case, ColdFusion will run the onApplicationStart method the next time a user requests a page in the application.”
That’s actually mostly correct. Basically – if onApplicationStart() does NOT return true (when having specified a returntype) – every follow-up request will be run against onApplicationStart() again. However: from a technical point of view, your application is in some sort of a limbo state because it actually will exist (at least to a fragment) and application-scope variables could be created before the error occurs.
In reality the fact that application-scope variables and an application name will potentially exist even though the application hasn’t been initialized is not of a huge practical concern as the next request will hit onApplicationStart() again anyway, but it’s still an interesting thing to notice.