On Wednesday, May 28, 2003, at 13:17 US/Pacific, Justin Balog wrote:
I know this information is in the list archive, but I can't get to the site
right now. What I have done recently is set up a config.cfc that has
several methods that get DSN values, application paths, etc. The config.cfc
reads an XML file to set these values. I really want to avoid having to
read that file for every request, what is a good way to cache that cfc so
that I don't have to make that read every time. Any input would be much
appreciated.

Stick it in application scope. Use code like this in Application.cfm:


        <cfif not structKeyExists(application,"configObject")>
                <cflock name="myAppNameConfiguration" type="exclusive">
                        <cfif not structKeyExists(application,"configObject")>
                                <cfset application.configObject =
                                        createObject("component","config")/>
                                <!--- any other initialization you need --->
                        </cfif>
                </cflock>
        </cfif>

Why the if/lock/if, you might ask? Race conditions. You want to ensure only one request actually initializes it.

Why put the unguarded if around the lock? The vast majority of requests will happen after the object has been initialized so you don't want the overhead of the lock on all requests.

Why put the if inside the lock as well? In case another request hit the outer if at the same time as this request and went ahead and locked and created the object. This way you're guaranteed not to initialize twice.

Sean A Corfield -- http://www.corfield.org/blog/

"If you're not annoying somebody, you're not really alive."
-- Margaret Atwood

----------------------------------------------------------
You are subscribed to cfcdev. To unsubscribe, send an email
to [EMAIL PROTECTED] with the word 'unsubscribe cfcdev' in the message of the email.


CFCDev is run by CFCZone (www.cfczone.org) and supported
by Mindtool, Corporation (www.mindtool.com).

Reply via email to