It looks / sounds to me like a misuse of the <cferror> tag...

>From the docs:

The CFERROR tag is normally used to customize the error messages for all the
pages in an application. As a result, you generally embed it in the
Application.cfm file. For more information about the Application.cfm file,
refer to Developing Web Applications with ColdFusion.

So... It sounds like what you want to do is rip out the cferror tags you
have from below and place them once and once only at the top of the document
or in the application.cfm and then where you have them now instead of using
cferror just use <cfthrow> and/or <cfrethrow> to throw the appropriate error
message(s) to be caught by those error templates specified in cferror.

> I've got two replicated databases that I'm doing app-side
> failover for
> in my CFMX app. The gist of my problem is: I've got some
> catch blocks
> which send failure notices to the DB admins. However, when
> I'm testing
> (stopping the DBs), for a single page request in which
> there is a
> caught error, there is some strange loop developing, and
> sending
> endless emails until I kill the cf service.

> I've included the code that I think is pertinent, and have
> snipped out
> the rest (...).

> BTW, the line:
> <cfthrow message="This error is thrown when both DBs
> fail.">
> Is the one currently that's generating the repeated emails
> (via
> <cferror type="exception">)

> Any hints would be greatly appreciated, as I saw the
> problem when I
> posted to production, which was at @ 7PM, and I'm still
> here trying to
> solve it at 5:30AM.

> Thanks,
> Jamie

> [Application.cfm]
> <cfscript>
> if (cgi.server_name contains "dev") {
>   thisServer = "dev";
>   thisApplicationName = "afca_2003_dev";
>   //thisApplicationDSN = "AF-DB1";
> } else if (cgi.server_name contains "stage") {
>   thisServer = "stage";
>   thisApplicationName = "afca_2003_stage";
>   //thisApplicationDSN = "AF-DB2";
> } else {
>   thisServer = "prod";
>   thisApplicationName = "afca_2003";
> }

> request.thisServerName = #cgi.server_name#;

> request.dbtype = 'odbc';
> </cfscript>
> <cfinclude template="_functions.cfm">
> <!--- this conditional spans the rest of the
> application.cfm and sets
> a variable
>      "skipAppAndORE" which controls the same behavior in
> OnRequestEnd.cfm --->
> <cfif cgi.script_name contains 'styles'>
>   <cfset skipAppAndORE = true>
> <cfelse>
>   <cfset skipAppAndORE = false>

> <!--- ############ DATASOURCE-DETERMINATION CODE
> ###############################
>   create an array (DSNAry) of potential data sources
> ##########################################################
> #################
> --->
> <cfscript>
>   request.DSNAry = arrayNew(1);
>   request.DSNAry[1] = "AF-DB1";
>   request.DSNAry[2] = "AF-DB2";
> </cfscript>

> <cfscript>
>   /* initialize some vars */
>   // do we loop over the array again? yes, by default for
>   first loop
>   appIterateAgain = true;
>   // how many array elements?
>   appDSNAryLength = arrayLen(request.DSNAry);
>   // initialize loop count to 1
>   appIndex = 1;
>   // initialize successful db connection var
>   dbConnectSuccess = true;

>   dbSwitched = false;
> </cfscript>

> <cfloop condition="appIterateAgain AND appIndex LTE 2">
>   <cfscript>
>     // don't reiterate over the loop if this stays false
>     appIterateAgain = false;
>     // for use after the loop
>     appDSNAryIndex = appIndex;
>     // get the dsn from the array
>     appDSN = request.DSNAry[appIndex];
>   </cfscript>
>   <cftry>
>     <cfquery name="dbCheck" datasource="#appDSN#"
> dbtype="#request.dbtype#">
>       SELECT "HI" AS Lois
>     </cfquery>
>   <cfcatch>
>     <cfif appIndex IS arrayLen(request.DSNAry)>
>     <!--- end of the line, give up --->
>       <cfset dbConnectSuccess = false>
>     <cfelse>
>     <!--- there are more attempts to be made, keep looping
>     --->
>       <cfset appIterateAgain = true>
>       <cfset dbSwitched = true>
>     </cfif>
>   </cfcatch>
>   </cftry>
>   <!--- increment this loop's index --->
>   <cfset appIndex = appIndex + 1>
> </cfloop>

> <cfif dbConnectSuccess>
>   <cfif dbSwitched>
>   <!--- DB1 DIED, AND DB2 HANDLED IT --->
>     <cfapplication name="#thisApplicationName#"
>     setClientCookies="No"
> clientmanagement="Yes" clientstorage="#appDSN#">
>       <cferror type="EXCEPTION" template="_error.cfm"
> mailto="[EMAIL PROTECTED]">
>       <cferror type="REQUEST"
>       template="_RequestError.cfm">
>       <cflog text="The DB switched from
>       '#request.dsnAry[1]#' to
> '#request.DSNAry[appDSNAryIndex]#.'" type="Information"
> file="AFCASurvey2003CustomLog" thread="yes" date="yes"
> time="yes"
> application="yes">
>       <cfif timeToSendEmail("dbSwitched", 30)>
>         <cfmail ...>
>           ...
>         </cfmail>
>      </cfif>
>   </cfif>
> <cfelse>
>   <!--- PRIMARY AND FAILOVER DB DEAD, set simplified
>   <cfapplication>,
> etc. --->
>   <cfapplication name="#thisApplicationName#"
>   setclientcookies="No">
>     <cferror type="EXCEPTION" template="_error.cfm"
> mailto="[EMAIL PROTECTED]">
>     <cferror type="REQUEST" template="_RequestError.cfm">
>     <cflog text="Both DB connections failed." type="Error"
> file="AFCASurvey2003CustomLog" thread="yes" date="yes"
> time="yes"
> application="yes">
>     <cfif timeToSendEmail("dbsFailed", 30)>
>       <cfmail ...>
>         ...
>       </cfmail>
>     </cfif>
>     <cfthrow message="This error is thrown when both DBs
>     fail.">
> </cfif>

> <!--- set the dsn to be used throughout the application
> --->
> <cfset request.dsn = appDSN>
> <!--- ############ END DATASOURCE-DETERMINATION CODE
> ###################### --->

> <!--- ############ TIMEOUT CLIENT VARIABLES
> ############################### --->
> <CF_ClientTimeout TimeOut = 45>


> </cfif>
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> ~~~~~~~~~~~|
> Archives:
> http://www.houseoffusion.com/cf_lists/index.cfm?forumid=4
> Subscription: http://www.houseoffusion.com/cf_lists/index.
> cfm?method=subscribe&forumid=4
> FAQ: http://www.thenetprofits.co.uk/coldfusion/faq
> Signup for the Fusion Authority news alert and keep up
> with the latest news in ColdFusion and related topics.
> http://www.fusionauthority.com/signup.cfm

>                               Unsubscribe: http://www.houseoffusion.com/cf_lists/uns
>                               ubscribe.cfm?user=633.558.4



s. isaac dealey                954-776-0046

new epoch                      http://www.turnkey.to

lead architect, tapestry cms   http://products.turnkey.to

tapestry api is opensource     http://www.turnkey.to/tapi

certified advanced coldfusion 5 developer
http://www.macromedia.com/v1/handlers/index.cfm?ID=21816

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
Archives: http://www.houseoffusion.com/cf_lists/index.cfm?forumid=4
Subscription: 
http://www.houseoffusion.com/cf_lists/index.cfm?method=subscribe&forumid=4
FAQ: http://www.thenetprofits.co.uk/coldfusion/faq
Signup for the Fusion Authority news alert and keep up with the latest news in 
ColdFusion and related topics. http://www.fusionauthority.com/signup.cfm

                                Unsubscribe: 
http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4
                                

Reply via email to