[Tip of the Week] Using singletonReload for Development

Many of you using models in your ColdBox app are familiar with how easy WireBox makes it to use the Singleton Pattern for components that are only created once in the life of your app.

map(“myService”).to(“path.to.myService”).asSingleton();

or

component name=“MyService” singleton {}

This can also be a bit of a pain when you are working on the code inside your singleton objects. Any changes require you to re-create the singleton object which typically involves a reinit of the framework. ColdBox has a handy setting for you to use on your development environment called singletonReload.

wirebox = {
singletonReload = true
};

This setting causes WireBox to flush your singleton mappings on every request so your changes show up instantly without having to reinit the entire framework. Make sure this setting is always off in production!

Additional tip: Combine this setting with ColdBox’s environement detection to automatically turn singletonReload on for your development environment, but off for production.

More info here: http://wiki.coldbox.org/wiki/ConfigurationCFC.cfm#wirebox

PS: If using Ajax intensive applications beware that concurrency for reloading and flushing the singleton objects is not guaranteed.

Thanks!

~Brad

ColdBox Platform Evangelist
Ortus Solutions, Corp

E-mail: brad@coldbox.org
ColdBox Platform: http://www.coldbox.org
Blog: http://www.codersrevolution.com

Hi,

What is the right/recommended way to update singletons in production using a standalone Wirebox install?

We’re currently reinitializing the application, but I’ve noticed that if someone tries to make a request to the site while the reinit is in progress (something I wouldn’t know how to avoid, if that would even be advisable), random errors occur that ultimately trace back to the injector/config binder not yet having finished its singleton reinitialization work.

I’m having a hard time finding any resources that address this topic…

Thanks,

Jen

Jen
The reinit is a development functionality that forces the framework to abruptly drop and reconstruct. Nothing is guaranteed on errors on is approach. However what we would recommend is to use the ColdFusion function applicationstop(). You can build an interceptor that listens to postprocess and can execute the application stop command.