If you remember back to my previous post, Intro to Ehcache Server and RESTful Web Services, I went into detail regarding how to set up an out-of-process caching server. If you’re lucky enough to be using ColdFusion 9 and have upgraded to the latest 9.0.1 patch, you may have noticed that one of the updates was to update Ehcache 1.6 to version 2.0. This update enables you to tie your ColdFusion instance in with a Terracotta distributed caching server.
Archive for the ColdFusion Category
Distributed Cache with ColdFusion 9.0.1
ColdFusion 9.0.1 Fixes onRequestEnd Bug
Just a friendly heads-up for those of you out there that had exploited the fact that previous versions of ColdFusion wouldn’t execute the onRequestEnd handler following a page with a cfabort or cflocation tag. The ColdFusion 9.0.1 release has fixed this… so if you’re doing anything in the onRequestEnd function and expect it not to execute, beware!
Intro to Ehcache Server and RESTful Web Services
When you think of caching there are basically two types: in-process, and out-of-process (or external caching). In-process caching all happens on the host machine and often within the same JVM container (if you’re using ColdFusion specifically). That is, all caching will always reside locally, making caching operations extremely fast. The obvious downside to this method of caching is that the cache consumes the same resources that would have otherwise be spent on your application server.
In order to allow you to scale out (by adding more servers to a cluster, for example) rather than scaling up (by adding additional ram) you need to provide an out-of-process caching mechanism. Again, the obvious downside to an out-of-process setup is the fact that you must serialize and transmit data to an external JVM, which requires much more overhead and transmission time.
Writing an Effective Gateway Object
Assuming you follow the philosophy of the MVC frameworks out there, you’ve likely come across Beans, Services, DAOs (data access objects), and Gateways. Without getting too much into detail about what each of these types of components do, which I’ll get into in a future blog post, your gateway layer is meant to interact with your database where you need to do more than just create, read, update, or delete objects (which is what a DAO is for).
Making Bad Code Good
After listening to Dan Wilson’s session on Making Bad Code Good at cf.Objective() 2010, it really got me to thinking of some best practices that I wish everyone would follow in order to keep that maintenance period (which consumes a majority of a developer’s time and effort) as short as possible.
