So I never see this because I use migrations on every app, so the models are touched early all the time ... But if i turn off migrations, it does look like it's not triggered until the first EOF request. The problem is that if you don't have a delegate on EOModelGroup, the creation of the model group happens inside of a:

synchronized (EOModel._EOGlobalModelLock) {..}

However, if you have a delegate, which wonder does, there is no lock. I think ERXExtensions.defaultModelGroup should have a volatile defaultModelGroup and put a synchronized double-null-check in there.

I'm going to put that in unless someone can think of a reason why it shouldn't be there.

ms

On Nov 3, 2009, at 8:01 PM, Paul Hoadley wrote:

On 04/11/2009, at 11:19 AM, Paul Hoadley wrote:

Here's a stack trace from ERXModelGroup.loadModelsFromLoadedBundles ():

java.lang.Exception: Stack trace
        at java.lang.Thread.dumpStack(Thread.java:1230)
at er.extensions.eof.ERXModelGroup.loadModelsFromLoadedBundles (ERXModelGroup.java:125) at er.extensions.ERXExtensions.defaultModelGroup (ERXExtensions.java:135)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
at com.webobjects.foundation.NSSelector._safeInvokeMethod (NSSelector.java:122) at com.webobjects.foundation._NSDelegate._perform(_NSDelegate.java: 223) at com.webobjects.foundation._NSDelegate.perform(_NSDelegate.java: 155) at com.webobjects.eoaccess.EOModelGroup.defaultGroup (EOModelGroup.java:328) at net.logicsquad.pbf.Application.didFinishLaunching (Application.java:29) at er.extensions.appserver.ERXApplication.didFinishLaunching (ERXApplication.java:1144)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
at com.webobjects.foundation.NSSelector._safeInvokeMethod (NSSelector.java:122) at com.webobjects.foundation.NSNotificationCenter $_Entry.invokeMethod(NSNotificationCenter.java:588) at com.webobjects.foundation.NSNotificationCenter.postNotification (NSNotificationCenter.java:532) at com.webobjects.foundation.NSNotificationCenter.postNotification (NSNotificationCenter.java:546) at com.webobjects.appserver.WOApplication.run(WOApplication.java: 1239) at er.extensions.appserver.ERXApplication.run(ERXApplication.java: 1225) at com.webobjects.appserver.WOApplication.main(WOApplication.java: 548) at er.extensions.appserver.ERXApplication.main(ERXApplication.java: 716)
        at net.logicsquad.pbf.Application.main(Application.java:13)

Hang on, that may be a red herring. I was printing out EOModelGroup.defaultGroup() in Application.didFinishLaunching() as one of the first things I tried to debug this. Removing that, it looks more sensible:

java.lang.Exception: Stack trace
        at java.lang.Thread.dumpStack(Thread.java:1230)
at er.extensions.eof.ERXModelGroup.loadModelsFromLoadedBundles (ERXModelGroup.java:125) at er.extensions.ERXExtensions.defaultModelGroup(ERXExtensions.java: 135)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
at com.webobjects.foundation.NSSelector._safeInvokeMethod (NSSelector.java:122) at com.webobjects.foundation._NSDelegate._perform(_NSDelegate.java: 223) at com.webobjects.foundation._NSDelegate.perform(_NSDelegate.java: 155) at com.webobjects.eoaccess.EOModelGroup.defaultGroup (EOModelGroup.java:328) at net.logicsquad.pbf.components.pages.LogIn.allNotices(LogIn.java: 99)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
at com.webobjects.foundation.NSKeyValueCoding$ValueAccessor $1.methodValue(NSKeyValueCoding.java:636) at com.webobjects.foundation.NSKeyValueCoding $_MethodBinding.valueInObject(NSKeyValueCoding.java:1134) at com.webobjects.foundation.NSKeyValueCoding $DefaultImplementation.valueForKey(NSKeyValueCoding.java:1324) at com.webobjects.appserver.WOComponent.valueForKey (WOComponent.java:1736) at com.webobjects.foundation.NSKeyValueCoding$Utility.valueForKey (NSKeyValueCoding.java:447) at com.webobjects.foundation.NSKeyValueCodingAdditions $DefaultImplementation.valueForKeyPath (NSKeyValueCodingAdditions.java:216) at com.webobjects.appserver.WOComponent.valueForKeyPath (WOComponent.java:1804) at net.logicsquad.webobjects.components.LSComponent.valueForKeyPath (LSComponent.java:347) at com.webobjects.appserver ._private.WOKeyValueAssociation.valueInComponent (WOKeyValueAssociation.java:50) at com.webobjects.appserver.WOAssociation.booleanValueInComponent (WOAssociation.java:276) at er.extensions.components.conditionals.ERXWOConditional.conditionInComponent (ERXWOConditional.java:47) at er.extensions.components.conditionals.ERXWOConditional.meetsConditionInComponent (ERXWOConditional.java:52) at er.extensions.components.conditionals.ERXWOConditional.appendToResponse (ERXWOConditional.java:120) at com.webobjects.appserver ._private.WODynamicGroup.appendChildrenToResponse (WODynamicGroup.java:126) at com.webobjects.appserver._private.WODynamicGroup.appendToResponse (WODynamicGroup.java:136) at com.webobjects.appserver._private.WOComponentContent.appendToResponse (WOComponentContent.java:51) at com.webobjects.appserver ._private.WODynamicGroup.appendChildrenToResponse (WODynamicGroup.java:126) at com.webobjects.appserver._private.WODynamicGroup.appendToResponse (WODynamicGroup.java:136) at com.webobjects.appserver.WOComponent.appendToResponse (WOComponent.java:1122) at er.extensions.components.ERXComponent.appendToResponse (ERXComponent.java:107) at net.logicsquad.webobjects.components.LSComponent.appendToResponse (LSComponent.java:465) at com.webobjects.appserver ._private.WOComponentReference.appendToResponse (WOComponentReference.java:135) at com.webobjects.appserver ._private.WODynamicGroup.appendChildrenToResponse (WODynamicGroup.java:126) at com.webobjects.appserver._private.WODynamicGroup.appendToResponse (WODynamicGroup.java:136) at com.webobjects.appserver.WOComponent.appendToResponse (WOComponent.java:1122) at er.extensions.components.ERXComponent.appendToResponse (ERXComponent.java:107) at net.logicsquad.webobjects.components.LSComponent.appendToResponse (LSComponent.java:465) at com.webobjects.appserver ._private.WOComponentReference.appendToResponse (WOComponentReference.java:135) at com.webobjects.appserver ._private.WODynamicGroup.appendChildrenToResponse (WODynamicGroup.java:126) at com.webobjects.appserver._private.WODynamicGroup.appendToResponse (WODynamicGroup.java:136) at com.webobjects.appserver.WOComponent.appendToResponse (WOComponent.java:1122) at er.extensions.components.ERXComponent.appendToResponse (ERXComponent.java:107) at net.logicsquad.webobjects.components.LSComponent.appendToResponse (LSComponent.java:465) at com.webobjects.appserver.WOComponent._appendPageToResponse (WOComponent.java:1574) at com.webobjects.appserver.WOComponent._generateResponseInContext (WOComponent.java:1543) at com.webobjects.appserver.WOComponent.generateResponse (WOComponent.java:1538) at com.webobjects.appserver ._private.WOActionRequestHandler._handleRequest (WOActionRequestHandler.java:278) at com.webobjects.appserver ._private.WOActionRequestHandler.handleRequest (WOActionRequestHandler.java:158) at er.extensions.appserver.ERXDirectActionRequestHandler.handleRequest (ERXDirectActionRequestHandler.java:124) at com.webobjects.appserver.WOApplication.dispatchRequest (WOApplication.java:1687) at er.extensions.appserver.ERXApplication.dispatchRequestImmediately (ERXApplication.java:1904) at er.extensions.appserver.ERXApplication.dispatchRequest (ERXApplication.java:1869) at net.logicsquad.webobjects.app.LSApplication.dispatchRequest (LSApplication.java:381) at com.webobjects.appserver._private.WOWorkerThread.runOnce (WOWorkerThread.java:144) at com.webobjects.appserver._private.WOWorkerThread.run (WOWorkerThread.java:226)
        at java.lang.Thread.run(Thread.java:637)

_And_, all the models are now adjusted before LogIn.allNotices() is called in the default page. I've presumably done something in the meantime to fix it. I'll start working backwards and see if I can find it...


--
Paul.

w  http://logicsquad.net/
h  http://paul.hoadley.name/


_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/webobjects-dev/mschrag%40mdimension.com

This email sent to msch...@mdimension.com

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to