I think that is correct however the onQueueComplete *should* fire, in my 
opinion, once the queue for the Exception event has finished.  It's quite 
reasonable to put theme/display/utilities in onQueueComplete (that's how I 
use it) and you can't render an exception page if they don't fire.

It did fire in MG2 and my mod above seems to do the trick for MG3.

I'll send my notes in an email...

Brian


On Saturday, October 6, 2012 10:07:29 PM UTC-7, Dan Wilson - 
[email protected] wrote:
>
> We are in process of moving trac hosts. 
>
> It would be best to writer an email with the changes and once the new trac 
> environment is fully working, I'll move them in. 
>
> I'll also take a look at your code Monday when I get back to the office. I 
> swear I remember a note about on queue Complete not intending to fire if 
> the event queue was interrupted. 
>
> I'll look and see. 
> On Oct 6, 2012 2:37 PM, "Brian G" <[email protected] <javascript:>> 
> wrote:
>
>> I believe that ModelGlue/gesture/eventrequest/EventContext.cfc needs a 
>> small addition on line ~208:
>>
>>                 <cfif isObject(getCurrentEventHandler()) and 
>> getCurrentEventHandler().name neq exceptionEventHandler and 
>> variables._modelGlue.hasEventHandler(exceptionEventHandler)>
>>                     <cfset 
>> addEventHandler(variables._modelGlue.getEventHandler(exceptionEventHandler)) 
>> />
>>                     <!--- bdg: insert onQueueComplete here as aborting 
>> the current handler and short-circuiting to exception handler seems to 
>> ignore onqueueComplete? --->
>>                     <cfset 
>> addEventHandler(variables._modelGlue.getEventHandler("modelglue.onQueueComplete"))
>>  
>> />
>>                     <cfset executeEventQueue() />
>>                 <cfelse>
>>                     <cfrethrow />
>>                 </cfif>
>>
>>
>> I'm not sure if this is the correct fix or not but it does seem to 
>> resolve it for me in my initial testing.  I think onQueueComplete should be 
>> queued after the exception handler rather than before but I'm not sure?   
>> This results in the following output when I put an intentional error into 
>> CalendarController.getCurrent():
>>
>> 10/06 11:30:56 Information [jrpp-3] - [Message Listener][1140ms] - 
>> Invoking getCurrent in PUKKA_MAIN_MAP.controller.CalendarController
>> 10/06 11:30:56 Information [jrpp-3] - [Exception][1145ms] - 
>> coldfusion.runtime.UndefinedVariableException: Variable ATTENDEE is 
>> undefined.
>> 10/06 11:30:56 Information [jrpp-3] - [Event Queue][1277ms] - Queueing 
>> event handler: exception
>> 10/06 11:30:56 Information [jrpp-3] - [Event Queue][1331ms] - Queueing 
>> event handler: ModelGlue.onQueueComplete
>> 10/06 11:30:56 Information [jrpp-3] - [Event Handler][1334ms] - Execute 
>> ""exception""
>> 10/06 11:30:56 Information [jrpp-3] - [Message Broadcast][1338ms] - 
>> Broadcasting ""needToSendExceptionEmail""
>> 10/06 11:30:56 Information [jrpp-3] - [Message Listener][1341ms] - 
>> Invoking doSendExceptionEmail in PUKKA_MAIN_MAP.controller.MailController
>> 10/06 11:30:56 Information [jrpp-3] - [Result][1417ms] - Implicit result 
>> queing event ""view.render""
>> 10/06 11:30:56 Information [jrpp-3] - [Event Queue][1466ms] - Queueing 
>> event handler: view.render
>> 10/06 11:30:56 Information [jrpp-3] - [View Queue][1476ms] - View queued: 
>> dsp.exception.cfm
>> 10/06 11:30:56 Information [jrpp-3] - [Event Handler][1479ms] - Execute 
>> ""ModelGlue.onQueueComplete""
>> 10/06 11:30:56 Information [jrpp-3] - [Message Broadcast][1482ms] - 
>> Broadcasting ""onQueueComplete""
>> 10/06 11:30:56 Information [jrpp-3] - [Message Broadcast][1485ms] - 
>> Broadcasting ""OnQueueComplete.shareTheme""
>> 10/06 11:30:56 Information [jrpp-3] - [Message Listener][1488ms] - 
>> Invoking shareTheme in PUKKA_MAIN_MAP.controller.ThemeController
>>
>> OnQueueComplete should trigger ThemeController.shareTheme() which is 
>> required for the site to render.  With the above change, it's now being 
>> called during exceptions.
>>
>> I have yet to figure out why it doesn't work on 404s and in other 
>> occasional scenarios.
>>
>>
>> Brian
>>
>>
>> On Friday, October 5, 2012 9:18:37 PM UTC-7, Brian G wrote:
>>>
>>> I'm upgrading my Unity application to 3.2 RC1... I seem to be finding 
>>> that onQueueComplete does not fire reliably.  I use it to share a utility 
>>> library and a design theme prior to rendering the queued views.  There are 
>>> two instances where it doesn't seem to fire:
>>>
>>> * event not found (~404, fails 100% of the time to fire onqueuecomplete)
>>> * Initial load (of the domain just domain.com/, this one fails about 
>>> 50% of the time)
>>>
>>> My controllers.xml looks like:
>>>
>>> <controller name="ThemeController" type="controller.**ThemeController">
>>>    <message-listener message="onQueueComplete" function="shareTheme" />
>>> </controller>
>>>
>>> ThemeController (which works perfectly fine the rest of the time) looks 
>>> like:
>>>
>>> <cffunction name="shareTheme" access="public" returntype="void" 
>>> output="false">
>>>     <cfargument name="event" type="ModelGlue.Core.Event" required="true" 
>>> />
>>>
>>>     <cflog file="application" text="OnQueueComplete() sharing theme: 
>>> #getSessionService().getTheme(**)#..." />
>>>     <cfset arguments.event.setValue("**theme", 
>>> getThemeService().getTheme(**getSessionService().getTheme()**)) />
>>> </cffunction>
>>>
>>> I don't get the CFLOG output on initial load nor when I try and request 
>>> an event that doesn't exist.  In both cases I wind up getting an error 
>>> indicating that the theme object is not defined because shareTheme is never 
>>> executed.  It works fine the rest of the time.
>>>
>>> I've dug into the code a bit but I can't determine why it wouldn't 
>>> fire... it *seems* to have something to do with when MG internally 
>>> redirects (e.g., from event not found to exception handler, and maybe from 
>>> 'no event' to 'default event' during initial load), it fails to fire 
>>> onQueueComplete.  In Invocation.cfc, the only instance of calling 
>>> executeEventQueue() with the true parameter to trigger the onQueueComplete 
>>> broadcast, the code that throws errors for missing events is just above 
>>> it.  I don't think it can ever get to a place where executeEventQueue is 
>>> called with true as a parameter in that instance.
>>>
>>> Any ideas?
>>>
>>>
>>> Brian
>>>
>>>
>>>  -- 
>> Model-Glue Sites:
>> Home Page: http://www.model-glue.com
>> Documentation: http://docs.model-glue.com
>> Bug Tracker: http://bugs.model-glue.com
>> Blog: http://www.model-glue.com/blog
>>  
>> You received this message because you are subscribed to the Google
>> Groups "model-glue" group.
>> To post to this group, send email to [email protected]<javascript:>
>> To unsubscribe from this group, send email to
>> [email protected] <javascript:>
>> For more options, visit this group at
>> http://groups.google.com/group/model-glue?hl=en
>
>

-- 
Model-Glue Sites:
Home Page: http://www.model-glue.com
Documentation: http://docs.model-glue.com
Bug Tracker: http://bugs.model-glue.com
Blog: http://www.model-glue.com/blog

You received this message because you are subscribed to the Google
Groups "model-glue" 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/model-glue?hl=en

Reply via email to