On Mar 18, 2011, at 8:28 AM, Giles Palmer wrote: > Hi > > I have just had an exception thrown on some relatively recent code, that has > worked fine until now.. > > java.lang.IllegalStateException: Cannot obtain globalId for an object which > is registered in its editingContext, > object: <indoc.app.entities.Container pk:"496">, > databaseContext: er.extensions.eof.ERXDatabaseContext@ee260b, > object's editingContext: er.extensions.eof.ERXEC@1fe6055, > databaseContext's active editingContext: null
That last part: > databaseContext's active editingContext: null Indicates the problem. > Context: > > This is part of a background notification system which works roughly like: > > 1) NSNotificationCenter triggers a callback that... > > 2) Creates a new Runnable and globalIds of objects are passed into this > runnable from their original editing context. A ThreadPoolExecutor the > executes the thread. > > 3) The new thread creates a new editing context that uses an > ERXRoundRobinCollection to grab an EOObjectStoreCoordinator. This > EOObjectStoreCoordinator is only used in the notification part of the > application, and the ERXRoundRobinCollection contains just a couple of > instances of a EOObjectStoreCoordinator at a time. > > The ec is created with: > ERXEC notificationtEC = (ERXEC) > ERXEC.newEditingContext(objectStoreCollection.nextObjectStoreCoordinator()); > > and the EOObjectStoreCoordinators with: > ERXObjectStoreCoordinator osc = new ERXObjectStoreCoordinator(true); > > > 4) I then use the newly created notificationtEC to convert the globalIds back > to EOs like.. eo = ERXEOControlUtilities.convertGIDtoEO(notificationtEC, gid); Are you locking the EC that you created? > > 5) I then use the same notificationtEC to fetch various objects etc to build > the notifications and send out an email. > > The full stack trace is below. > > I was under the impression that having a new database stack should be a > pretty safe way to do such a task in a separate thread. Do you have any idea > what I am doing wrong? > > I do not quite understand the meaning of the above > java.lang.IllegalStateException Any ideas much appreciated. > > Thanks > > Giles > > Mar 18 12:32:10 OLWAInDoc[2001] pool-3-thread-1 ERROR > indoc.app.event.IDEventObserverCoordinator$ChannelRunnable - Error in > ChannelRunnable.run() Cannot obtain globalId for an object which is > registered in its editingContext, object: <indoc.app.entities.Container > pk:"496">, databaseContext: er.extensions.eof.ERXDatabaseContext@ee260b, > object's editingContext: er.extensions.eof.ERXEC@1fe6055, databaseContext's > active editingContext: null > java.lang.IllegalStateException: Cannot obtain globalId for an object which > is registered in its editingContext, object: <indoc.app.entities.Container > pk:"496">, databaseContext: er.extensions.eof.ERXDatabaseContext@ee260b, > object's editingContext: er.extensions.eof.ERXEC@1fe6055, databaseContext's > active editingContext: null > at > com.webobjects.eoaccess.EODatabaseContext._globalIDForObject(EODatabaseContext.java:4660) > at > com.webobjects.eoaccess.EODatabaseContext.valuesForKeys(EODatabaseContext.java:6509) > at > com.webobjects.eocontrol.EOObjectStoreCoordinator.valuesForKeys(EOObjectStoreCoordinator.java:326) > at > com.webobjects.eoaccess.EOQualifierSQLGeneration$_KeyValueQualifierSupport.schemaBasedQualifierWithRootEntity(EOQualifierSQLGeneration.java:439) > at > er.extensions.ERXExtensions$KeyValueQualifierSQLGenerationSupport.schemaBasedQualifierWithRootEntity(ERXExtensions.java:355) > at > com.webobjects.eoaccess.EOQualifierSQLGeneration$Support._schemaBasedQualifierWithRootEntity(EOQualifierSQLGeneration.java:179) > at > com.webobjects.eoaccess.EOQualifierSQLGeneration$_AndQualifierSupport.schemaBasedQualifierWithRootEntity(EOQualifierSQLGeneration.java:530) > at > com.webobjects.eoaccess.EOQualifierSQLGeneration$Support._schemaBasedQualifierWithRootEntity(EOQualifierSQLGeneration.java:179) > at > com.webobjects.eoaccess.EOQualifierSQLGeneration$_AndQualifierSupport.schemaBasedQualifierWithRootEntity(EOQualifierSQLGeneration.java:530) > at > com.webobjects.eoaccess.EOQualifierSQLGeneration$Support._schemaBasedQualifierWithRootEntity(EOQualifierSQLGeneration.java:179) > at > com.webobjects.eoaccess.EOQualifierSQLGeneration$_OrQualifierSupport.schemaBasedQualifierWithRootEntity(EOQualifierSQLGeneration.java:567) > at > com.webobjects.eoaccess.EOQualifierSQLGeneration$Support._schemaBasedQualifierWithRootEntity(EOQualifierSQLGeneration.java:179) > at > com.webobjects.eoaccess.EODatabaseChannel.selectObjectsWithFetchSpecification(EODatabaseChannel.java:227) > at > com.webobjects.eoaccess.EODatabaseContext._objectsWithFetchSpecificationEditingContext(EODatabaseContext.java:3055) > at > er.extensions.eof.ERXDatabaseContext._objectsWithFetchSpecificationEditingContext(ERXDatabaseContext.java:66) > at > com.webobjects.eoaccess.EODatabaseContext.objectsWithFetchSpecification(EODatabaseContext.java:3195) > at > com.webobjects.eocontrol.EOObjectStoreCoordinator.objectsWithFetchSpecification(EOObjectStoreCoordinator.java:488) > at > com.webobjects.eocontrol.EOEditingContext.objectsWithFetchSpecification(EOEditingContext.java:4069) > at > er.extensions.eof.ERXEC.objectsWithFetchSpecification(ERXEC.java:1206) > at > com.webobjects.eocontrol.EOEditingContext.objectsWithFetchSpecification(EOEditingContext.java:4444) > at > indoc.app.entities._IDEventRegistration.fetchIDEventRegistrations(_IDEventRegistration.java:351) > at > indoc.app.event.IDEventObserverCoordinator$ChannelRunnable.processEventRegistrations(IDEventObserverCoordinator.java:238) > at > indoc.app.event.IDEventObserverCoordinator$ChannelRunnable.run(IDEventObserverCoordinator.java:143) > at > java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) > at java.lang.Thread.run(Thread.java:619) > > _______________________________________________ > Do not post admin requests to the list. They will be ignored. > Webobjects-dev mailing list ([email protected]) > Help/Unsubscribe/Update your Subscription: > http://lists.apple.com/mailman/options/webobjects-dev/chill%40global-village.net > > This email sent to [email protected] -- Chuck Hill Senior Consultant / VP Development Practical WebObjects - for developers who want to increase their overall knowledge of WebObjects or who are trying to solve specific problems. http://www.global-village.net/products/practical_webobjects
smime.p7s
Description: S/MIME cryptographic signature
_______________________________________________ Do not post admin requests to the list. They will be ignored. Webobjects-dev mailing list ([email protected]) Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com This email sent to [email protected]
