just to support Joel's argument, why not set it to an applicaiton scoped CFC?

or better still add it to a CFC and decorate an application-scopoed CFC with it?

"I've just read this article
(http://www.adobe.com/devnet/server_archive/articles/cf_locking_best_practices.html)
on locking read/write to application scoop, however the article seems
old, is this still relevant?"

most certainly. Race conditions on singletons can still happen.


from some kludgy code at hand (in an Application.cfm, for CF6.1)

<cfif not structKeyExists(application, "ComponentFactory")><!--- not
created yet? --->
  <cflock timeout="10" scope="Application"><!--- get ready to create
only one --->
    <cfif not structKeyExists(application, "ComponentFactory")><!---
still doesn't exist? --->
        <!--- these timeouts are in minutes --->
        <cfset CacheDataTimeouts = structNew() />
        <cfset CacheDataTimeouts.defaultTime = 60 />
        <cfset CacheDataTimeouts.Template = 120 />
        <cfset CacheDataTimeouts.Staff = 1440 /><!--- timeout each day --->
        <cfset CacheDataTimeouts.TemplateQuestion = 120 />
        <cfset CacheDataTimeouts.Stationery = 120 />
        <cfset CacheDataTimeouts.StationeryType = 120 />
        
        <cfset args = structNew() />
        <cfset args.EvaluationsDSN       =      
trim(application.EvaluationsDSN) />
        <cfset args.QuizToolDSN  =      trim(application.QuizToolDSN) />
        <cfset args.QuizToolDatabaseName = 
trim(application.QuizToolDatabaseName) />
        <cfset args.EvaluationsDatabaseName =
trim(application.EvaluationsDatabaseName) />
        <cfset args.componentPath        =      trim(application.componentPath) 
/>
        <cfset args.ServerVersion        =      
"#server.ColdFusion.ProductVersion#" />
        <cfset args.emailErrorsTo        =      trim(application.emailErrorsTo) 
/>
        <cfset args.emailEvaluationsAddress = 
trim(application.evalEmailAddress) />
        <cfset args.CacheDataTimeouts    =      CacheDataTimeouts />
        <cfset args.Debug        =      true />
        <cfset args.Production =        false />
        <cfset args.designateTemplateTypes = application.ldesignateAccess />
        <cfset args.CacheDataTimeouts = CacheDataTimeouts />
        <!--- wind it up boy-o! --->    
        <cfset objConfig = CreateObject("component"
                , "#application.componentPath#.Config").init(
                        argumentCollection="#args#")
                />

        <cfset application.ComponentFactory = CreateObject("component"
                , "#application.componentPath#.ComponentFactory").init(
                        config="#objConfig#")
                />

    </cfif>
  </cflock>
</cfif>

--~--~---------~--~----~------------~-------~--~----~
 You received this message because you are subscribed to the Google Groups 
"cfaussie" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/cfaussie?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to